From 4285178c24c647c48b8f97e15b5296aa7bc67fe8 Mon Sep 17 00:00:00 2001 From: Jackz Date: Thu, 14 Nov 2024 08:55:05 -0600 Subject: [PATCH] Add state checks --- scripting/include/randomizer/rbuild.sp | 16 +++++++++++++--- scripting/l4d2_randomizer.sp | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/scripting/include/randomizer/rbuild.sp b/scripting/include/randomizer/rbuild.sp index 2970678..082ac36 100644 --- a/scripting/include/randomizer/rbuild.sp +++ b/scripting/include/randomizer/rbuild.sp @@ -37,7 +37,14 @@ void OpenVariantsMenu(int client) { char id[8], display[32]; menu.AddItem("new", "New Variant"); menu.AddItem("-1", "Global Scene Variant"); - + if(!g_builder.selectedSceneData) { + ReplyToCommand(client, "Error: Missing scene data for %s", g_builder.selectedSceneId); + PrintToServer("[Randomizer] Warn: Scene %s has no data", g_builder.selectedSceneId); + } else if(!g_builder.selectedSceneData.HasKey("variants")) { + ReplyToCommand(client, "Error: Missing variants for %d", g_builder.selectedSceneId); + PrintToServer("[Randomizer] Warn: Selected scene %s has no variants", g_builder.selectedSceneId); + return; + } JSONArray variants = view_as(g_builder.selectedSceneData.Get("variants")); JSONObject varObj; JSONArray entities; @@ -102,8 +109,11 @@ int BuilderHandler_ScenesMenu(Menu menu, MenuAction action, int client, int para FakeClientCommand(client, "sm_rbuild scenes new"); OpenScenesMenu(client); } else { - FakeClientCommand(client, "sm_rbuild scenes select %s", info); - OpenVariantsMenu(client); + if(g_builder.SelectScene(info)) { + OpenVariantsMenu(client); + } else { + PrintToChat(client, "Error: Scene not found"); + } } } else if(action == MenuAction_Cancel) { if(param2 == MenuCancel_ExitBack) { diff --git a/scripting/l4d2_randomizer.sp b/scripting/l4d2_randomizer.sp index b7b6ac6..26038fc 100644 --- a/scripting/l4d2_randomizer.sp +++ b/scripting/l4d2_randomizer.sp @@ -226,6 +226,10 @@ public Action Command_CycleRandom(int client, int args) { if(client > 0) PrintCenterText(client, "Cycled flags=%d", flags); } else { + if(g_MapData.activeScenes == null) { + ReplyToCommand(client, "No map data"); + return Plugin_Handled; + } ReplyToCommand(client, "Active Scenes (%d/%d):", g_MapData.activeScenes.Length, g_MapData.scenes.Length); ActiveSceneData scene; for(int i = 0; i < g_MapData.activeScenes.Length; i++) { @@ -389,6 +393,18 @@ Action Command_RandomizerBuild(int client, int args) { obj.SetString("model", "decals/checkpointarrow01_black.vmt"); g_builder.AddEntityData(obj); ReplyToCommand(client, "Added sprite to variant #%d", g_builder.selectedVariantIndex); + } else if(StrEqual(arg, "fire")) { + if(g_builder.selectedVariantData == null) { + ReplyToCommand(client, "Please load map data, select a scene and a variant."); + return Plugin_Handled; + } + float pos[3]; + GetLookingPosition(client, Filter_IgnorePlayer, pos); + JSONObject obj = new JSONObject(); + obj.SetString("type", "env_fire"); + obj.Set("origin", VecToArray(pos)); + g_builder.AddEntityData(obj); + ReplyToCommand(client, "Added fire to variant #%d", g_builder.selectedVariantIndex); } else { ReplyToCommand(client, "Unknown arg. Try: new, load, save, scenes, cursor"); }