From 2de1bc86488e5df3334d2010955d00492544f0e9 Mon Sep 17 00:00:00 2001 From: SM9 Date: Mon, 17 Feb 2020 15:03:27 +0000 Subject: [PATCH] Fixed support for workshop, fixed saving to file, fixed 2 warnings, indent code, updated smx. --- addons/sourcemod/plugins/map-decals.smx | Bin 21158 -> 20664 bytes addons/sourcemod/scripting/map-decals.sp | 406 +++++++++++------------ 2 files changed, 203 insertions(+), 203 deletions(-) diff --git a/addons/sourcemod/plugins/map-decals.smx b/addons/sourcemod/plugins/map-decals.smx index 257127d5f54c3750d256a2269a19d5a7cb5cb6cc..2b61738757c8a92982908325aa944ff1351189d2 100644 GIT binary patch literal 20664 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 IKl5x%N&+_!SO5S3 literal 21158 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 diff --git a/addons/sourcemod/scripting/map-decals.sp b/addons/sourcemod/scripting/map-decals.sp index e78ac91..7862f26 100644 --- a/addons/sourcemod/scripting/map-decals.sp +++ b/addons/sourcemod/scripting/map-decals.sp @@ -7,7 +7,7 @@ #undef REQUIRE_PLUGIN #include -#define PLUGIN_VERSION "1.1" +#define PLUGIN_VERSION "1.2" // Admin Level Defines: Level for Allowing Temp.Spray/Temp.Remove of Decals and Level for Saving Decals/getting aim position #define ADMIN_LEVEL_SPRAY ADMFLAG_CUSTOM3 @@ -31,11 +31,11 @@ *****************************************************************/ -public Plugin:myinfo = { - name = "", +public Plugin:myinfo = { + name = "Map Decals", author = "Berni, Stingbyte", - description = "Allows admins to place any decals into the map that are defined in the the config and save them permanently for each map", - version = PLUGIN_VERSION, + description = "Allows admins to place any decals into the map that are defined in the the config and save them permanently for each map", + version = PLUGIN_VERSION, url = "http://forums.alliedmods.net/showthread.php?t=69502" } @@ -50,22 +50,22 @@ public Plugin:myinfo = { *****************************************************************/ // ConVar Handles -new Handle:md_version = INVALID_HANDLE; -new Handle:md_maxdis = INVALID_HANDLE; -new Handle:md_pos = INVALID_HANDLE; -new Handle:md_spraysound = INVALID_HANDLE; +new Handle:md_version = INVALID_HANDLE; +new Handle:md_maxdis = INVALID_HANDLE; +new Handle:md_pos = INVALID_HANDLE; +new Handle:md_spraysound = INVALID_HANDLE; // Misc -new Handle:hAdminMenu = INVALID_HANDLE; +new Handle:hAdminMenu = INVALID_HANDLE; -new Handle:adt_decal_names = INVALID_HANDLE; -new Handle:adt_decal_paths = INVALID_HANDLE; -new Handle:adt_decal_precache = INVALID_HANDLE; +new Handle:adt_decal_names = INVALID_HANDLE; +new Handle:adt_decal_paths = INVALID_HANDLE; +new Handle:adt_decal_precache = INVALID_HANDLE; -new Handle:adt_decal_id = INVALID_HANDLE; -new Handle:adt_decal_position = INVALID_HANDLE; +new Handle:adt_decal_id = INVALID_HANDLE; +new Handle:adt_decal_position = INVALID_HANDLE; -new String:mapName[64]; +new String:mapName[PLATFORM_MAX_PATH]; new String:path_decals[PLATFORM_MAX_PATH]; new String:path_mapdecals[PLATFORM_MAX_PATH]; @@ -82,21 +82,21 @@ new String:path_mapdecals[PLATFORM_MAX_PATH]; public OnPluginStart() { // Commands - RegAdminCmd("sm_paintdecal", Command_PaintDecal, ADMIN_LEVEL_SPRAY, "Sprays a Decal by (names specified in config)"); - RegAdminCmd("sm_removedecal", Command_RemoveDecal, ADMIN_LEVEL_SPRAY, "Removes a Decal whilst aiming at it, [all] removes all Decals (on current Map), [id] removes a Decal by id, [last] removes last painted Decal, [name] removes all Decals by decalname (on current Map)"); - RegAdminCmd("sm_listdecal", Command_ListDecal, ADMIN_LEVEL_SPRAY, "Shows the name of a Decal whilst aiming at it, [all] lists all Decal names available, [id] lists a Decal by id, [last] lists the last painted Decal (on current Map), [map] lists all Decals painted (on current Map), [name] lists all Decals by that Name painted (on current Map), [saved] lists all Decals saved in config File"); - RegAdminCmd("sm_savedecal", Command_SaveDecal, ADMIN_LEVEL_SAVE, "Saves a Decal to the config whilst aiming at it, [all] saves all Decals (on current Map), [id] saves a Decal by id, [last] saves last painted Decal, [name] saves all Decals by decalname (on current Map)"); - RegAdminCmd("sm_aimpos", Command_GetAimPos, ADMIN_LEVEL_SAVE, "Shows the position you are currently aiming at"); - RegAdminCmd("sm_decalmenu", Command_DecalMenu, ADMIN_LEVEL_SPRAY, "Shows the Map Decals Menu"); + RegAdminCmd("sm_paintdecal", Command_PaintDecal, ADMIN_LEVEL_SPRAY, "Sprays a Decal by (names specified in config)"); + RegAdminCmd("sm_removedecal", Command_RemoveDecal, ADMIN_LEVEL_SPRAY, "Removes a Decal whilst aiming at it, [all] removes all Decals (on current Map), [id] removes a Decal by id, [last] removes last painted Decal, [name] removes all Decals by decalname (on current Map)"); + RegAdminCmd("sm_listdecal", Command_ListDecal, ADMIN_LEVEL_SPRAY, "Shows the name of a Decal whilst aiming at it, [all] lists all Decal names available, [id] lists a Decal by id, [last] lists the last painted Decal (on current Map), [map] lists all Decals painted (on current Map), [name] lists all Decals by that Name painted (on current Map), [saved] lists all Decals saved in config File"); + RegAdminCmd("sm_savedecal", Command_SaveDecal, ADMIN_LEVEL_SAVE, "Saves a Decal to the config whilst aiming at it, [all] saves all Decals (on current Map), [id] saves a Decal by id, [last] saves last painted Decal, [name] saves all Decals by decalname (on current Map)"); + RegAdminCmd("sm_aimpos", Command_GetAimPos, ADMIN_LEVEL_SAVE, "Shows the position you are currently aiming at"); + RegAdminCmd("sm_decalmenu", Command_DecalMenu, ADMIN_LEVEL_SPRAY, "Shows the Map Decals Menu"); // ConVars - md_version = CreateConVar("md_version", PLUGIN_VERSION, "Map Decals plugin version", FCVAR_DONTRECORD|FCVAR_PLUGIN|FCVAR_NOTIFY); + md_version = CreateConVar("md_version", PLUGIN_VERSION, "Map Decals plugin version", FCVAR_DONTRECORD | FCVAR_NOTIFY); // Set it to the correct version, in case the plugin gets updated... SetConVarString(md_version, PLUGIN_VERSION); - - md_maxdis = CreateConVar("md_decal_dista", "50.0", "How far away from the Decals position it will be traced to and check distance to prevent painting a Decal over another"); - md_pos = CreateConVar("md_decal_printpos", "1", "Turns on/off printing out of decal positions"); - md_spraysound = CreateConVar("md_decal_spraysound", "player/sprayer.wav", "Path to the spray sound used by map-decals plugin"); + + md_maxdis = CreateConVar("md_decal_dista", "50.0", "How far away from the Decals position it will be traced to and check distance to prevent painting a Decal over another"); + md_pos = CreateConVar("md_decal_printpos", "1", "Turns on/off printing out of decal positions"); + md_spraysound = CreateConVar("md_decal_spraysound", "player/sprayer.wav", "Path to the spray sound used by map-decals plugin"); // Create our dynamic arrays we need for the keyvalues/decal data adt_decal_names = CreateArray(64); @@ -116,19 +116,22 @@ public OnPluginStart() { } public OnLibraryRemoved(const String:name[]) { - + if (StrEqual(name, "adminmenu")) { hAdminMenu = INVALID_HANDLE; } } public OnMapStart() { - + GetCurrentMap(mapName, sizeof(mapName)); - + GetMapDisplayName(mapName, mapName, sizeof(mapName)); + BuildPath(Path_SM, path_decals, sizeof(path_decals), "configs/map-decals/decals.cfg"); BuildPath(Path_SM, path_mapdecals, sizeof(path_mapdecals), "configs/map-decals/maps/%s.cfg", mapName); - + + + ReadDecals(-1, READ); decl String:spraySound[PLATFORM_MAX_PATH]; @@ -137,10 +140,8 @@ public OnMapStart() { AddFileToDownloadsTable(spraySound); // Precache Spray Sound - if (!IsSoundPrecached(spraySound)) { - if (!PrecacheSound(spraySound, false)) { - LogMessage("PrecacheSound failed: %s", spraySound); - } + if (!PrecacheSound(spraySound, false)) { + LogMessage("PrecacheSound failed: %s", spraySound); } } @@ -161,7 +162,7 @@ public OnClientPostAdminCheck(client) { decl id, precache; new size = GetArraySize(adt_decal_id); - for (new i=0; i GetArraySize(adt_decal_names)) { id = FindStringInArrayCase(adt_decal_names, decalName, false); } - else{ + else { id--; GetArrayString(adt_decal_names, id, decalName, sizeof(decalName)); } @@ -238,7 +239,7 @@ public Action:Command_PaintDecal(client, args) { if (GetClientAimTargetEx(client, pos) >= 0) { new size = GetArraySize(adt_decal_id); - for (new i=0; i= 0) { new Float:MaxDis = GetConVarFloat(md_maxdis); - for (new i=0; i 1) - ReplyToCommand(client, "%t", "removedecal_names",COLOR_DEFAULT, COLOR_GREEN, size, COLOR_DEFAULT, COLOR_GREEN, mapName, COLOR_DEFAULT); + ReplyToCommand(client, "%t", "removedecal_names", COLOR_DEFAULT, COLOR_GREEN, size, COLOR_DEFAULT, COLOR_GREEN, mapName, COLOR_DEFAULT); if (cursize > 1) - ReplyToCommand(client, "%t", "removedecal_names",COLOR_DEFAULT, COLOR_GREEN, size-cursize, COLOR_DEFAULT, COLOR_GREEN, mapName, COLOR_DEFAULT); + ReplyToCommand(client, "%t", "removedecal_names", COLOR_DEFAULT, COLOR_GREEN, size - cursize, COLOR_DEFAULT, COLOR_GREEN, mapName, COLOR_DEFAULT); return Plugin_Handled; } ReplyToCommand(client, "%t", "decals_named", COLOR_DEFAULT, COLOR_GREEN, action, COLOR_DEFAULT); @@ -384,11 +385,11 @@ public Action:Command_RemoveDecal(client, args) { GetArrayArray(adt_decal_position, index, _:position); RemoveFromArray(adt_decal_id, index); RemoveFromArray(adt_decal_position, index); - ReplyToCommand(client, "%t", "removedecal", COLOR_DEFAULT, COLOR_GREEN, index+1, COLOR_DEFAULT, COLOR_GREEN, decalName, COLOR_DEFAULT, COLOR_GREEN, mapName, COLOR_DEFAULT); + ReplyToCommand(client, "%t", "removedecal", COLOR_DEFAULT, COLOR_GREEN, index + 1, COLOR_DEFAULT, COLOR_GREEN, decalName, COLOR_DEFAULT, COLOR_GREEN, mapName, COLOR_DEFAULT); LogAction(client, -1, "\"%L\" removed Decal \"%s\" from Map \"%s\" (Position: %f, %f, %f)", client, decalName, mapName, position[0], position[1], position[2]); new DecalPos = GetConVarInt(md_pos); if (DecalPos) - ReplyToCommand(client, "%t", "decal_position",COLOR_DEFAULT, COLOR_GREEN, position[0], position[1], position[2]); + ReplyToCommand(client, "%t", "decal_position", COLOR_DEFAULT, COLOR_GREEN, position[0], position[1], position[2]); return Plugin_Handled; } ReplyToCommand(client, "%t", "usage_removedecal", COLOR_DEFAULT, COLOR_GREEN, COLOR_DEFAULT); @@ -405,18 +406,18 @@ public Action:Command_ListDecal(client, args) { decl Float:pos[3]; if (GetClientAimTargetEx(client, pos) >= 0) { new Float:MaxDis = GetConVarFloat(md_maxdis); - for (new i=0; i0) + if (nsize > 0) ReplyToCommand(client, "%t", "available_decals", COLOR_DEFAULT, COLOR_GREEN); else ReplyToCommand(client, "%t", "no_decals_available", COLOR_DEFAULT, COLOR_GREEN); - for (new i=0; i -1) { new status = 0; ReplyToCommand(client, "%t", "decals_name_on_map", COLOR_DEFAULT, COLOR_GREEN, action, COLOR_DEFAULT, COLOR_GREEN, mapName, COLOR_DEFAULT); - for (new i=0; i= 0) { new Float:MaxDis = GetConVarFloat(md_maxdis); - for (new i=0; i -1) { - GetArrayString(adt_decal_names,found, action, sizeof(action)); + GetArrayString(adt_decal_names, found, action, sizeof(action)); new count = 0; - ReplyToCommand(client, "%t", "savedecals_file", COLOR_DEFAULT, COLOR_GREEN, file, COLOR_DEFAULT); - FileToKeyValues(kv, file); - for (new i=0; i= 0) { - ReplyToCommand(client, "%t", "aimpos",COLOR_DEFAULT, COLOR_GREEN, pos[0], pos[1], pos[2]); + ReplyToCommand(client, "%t", "aimpos", COLOR_DEFAULT, COLOR_GREEN, pos[0], pos[1], pos[2]); } else { ReplyToCommand(client, "%t", "error_entity", COLOR_DEFAULT, COLOR_GREEN, COLOR_DEFAULT); - } + } return Plugin_Handled; } @@ -825,7 +825,7 @@ public Action:Command_DecalMenu(client, args) { } public DecalMenuHandler(Handle:menu, MenuAction:action, param1, param2) { - + /* If an option was selected, tell the client about the item. */ if (action == MenuAction_Select) { decl String:info[64]; @@ -846,42 +846,42 @@ public DecalMenuHandler(Handle:menu, MenuAction:action, param1, param2) { } /* If the menu was cancelled, check for param and redisplay AdminMenu. */ else if (action == MenuAction_Cancel) { - + if (param2 == MenuCancel_ExitBack) { RedisplayAdminMenu(hAdminMenu, param1); } } /* If the menu has ended, destroy it */ else if (action == MenuAction_End) { - + CloseHandle(menu); } } public bool:TraceEntityFilterPlayer(entity, contentsMask) { - return entity > MAXPLAYERS; + return entity > MAXPLAYERS; } // Menu Option public AdminMenu_MapDecals(Handle:topmenu, TopMenuAction:action, TopMenuObject:object_id, param, String:buffer[], maxlength) { - + if (action == TopMenuAction_DisplayOption) { - + Format(buffer, maxlength, "%T", "admin_menu_title", param); } else if (action == TopMenuAction_SelectOption) { - + FakeClientCommand(param, "sm_decalmenu admin"); } } public SubMenuHandler(Handle:submenu, MenuAction:action, param1, param2) { - + decl String:info[64]; /* If an option was selected, tell the client about the item. */ if (action == MenuAction_Select) { - + new bool:found = GetMenuItem(submenu, param2, info, sizeof(info)); if (found) { if (StrContains(info, "savedecal_all", false) > -1) { @@ -968,9 +968,9 @@ public SubMenuHandler(Handle:submenu, MenuAction:action, param1, param2) { /* If the menu was cancelled, check for info and redisplay previous menu. */ else if (action == MenuAction_Cancel) { - + if (param2 == MenuCancel_ExitBack) { - + GetMenuItem(submenu, 0, info, sizeof(info)); if (StrContains(info, "admin", false) > -1) { FakeClientCommand(param1, "sm_decalmenu admin"); @@ -982,7 +982,7 @@ public SubMenuHandler(Handle:submenu, MenuAction:action, param1, param2) { } /* If the menu has ended, destroy it */ else if (action == MenuAction_End) { - + CloseHandle(submenu); } } @@ -1012,9 +1012,9 @@ Command_SubMenu(client, String:info[]) { new Handle:submenu = CreateMenu(SubMenuHandler); new DecalPos = GetConVarInt(md_pos); decl String:buffer[128]; - + if (strcmp(info, "savedecal") == 0) { - + Format(buffer, sizeof(buffer), "%T", "save_decal_title", client); SetMenuTitle(submenu, buffer); Format(buffer, sizeof(buffer), "%T", "all", client); @@ -1029,7 +1029,7 @@ Command_SubMenu(client, String:info[]) { AddMenuItem(submenu, "savedecal_last", buffer); } else if (strcmp(info, "savedecal_admin") == 0) { - + Format(buffer, sizeof(buffer), "%T", "save_decal_title", client); SetMenuTitle(submenu, buffer); Format(buffer, sizeof(buffer), "%T", "all", client); @@ -1044,7 +1044,7 @@ Command_SubMenu(client, String:info[]) { AddMenuItem(submenu, "savedecal_last_admin", buffer); } else if (strcmp(info, "removedecal") == 0) { - + Format(buffer, sizeof(buffer), "%T", "remove_decal_title", client); SetMenuTitle(submenu, buffer); Format(buffer, sizeof(buffer), "%T", "all", client); @@ -1059,7 +1059,7 @@ Command_SubMenu(client, String:info[]) { AddMenuItem(submenu, "removedecal_last", buffer); } else if (strcmp(info, "removedecal_admin") == 0) { - + Format(buffer, sizeof(buffer), "%T", "remove_decal_title", client); SetMenuTitle(submenu, buffer); Format(buffer, sizeof(buffer), "%T", "all", client); @@ -1074,7 +1074,7 @@ Command_SubMenu(client, String:info[]) { AddMenuItem(submenu, "removedecal_last_admin", buffer); } else if (strcmp(info, "listdecal") == 0) { - + Format(buffer, sizeof(buffer), "%T", "list_decal_title", client); SetMenuTitle(submenu, buffer); Format(buffer, sizeof(buffer), "%T", "all_list", client); @@ -1095,7 +1095,7 @@ Command_SubMenu(client, String:info[]) { AddMenuItem(submenu, "listdecal_saved", buffer); } else if (strcmp(info, "listdecal_admin") == 0) { - + Format(buffer, sizeof(buffer), "%T", "list_decal_title", client); SetMenuTitle(submenu, buffer); Format(buffer, sizeof(buffer), "%T", "all_list", client); @@ -1115,7 +1115,7 @@ Command_SubMenu(client, String:info[]) { Format(buffer, sizeof(buffer), "%T", "saved", client); AddMenuItem(submenu, "listdecal_saved_admin", buffer); } - + SetMenuExitBackButton(submenu, true); SetMenuExitButton(submenu, true); DisplayMenu(submenu, client, MENU_TIME_FOREVER); @@ -1132,11 +1132,11 @@ public Command_OptionsMenu(client, String:info[]) { SetMenuTitle(optionsmenu, buffer); if (StrContains(info, "id", false) > -1) { size = GetArraySize(adt_decal_id); - for (new i=0; i7) { - IntToString(i+1, id, sizeof(id)); + if (size > 7) { + IntToString(i + 1, id, sizeof(id)); StrCat(decalName, sizeof(decalName), " ("); StrCat(decalName, sizeof(decalName), id); StrCat(decalName, sizeof(decalName), ")"); @@ -1146,10 +1146,10 @@ public Command_OptionsMenu(client, String:info[]) { } else { size = GetArraySize(adt_decal_names); - for (new i=0; i7) { - IntToString(i+1, id, sizeof(id)); + if (size > 7) { + IntToString(i + 1, id, sizeof(id)); StrCat(decalName, sizeof(decalName), " ("); StrCat(decalName, sizeof(decalName), id); StrCat(decalName, sizeof(decalName), ")"); @@ -1172,14 +1172,14 @@ public Command_OptionsMenu(client, String:info[]) { } public OptionsMenuHandler(Handle:optionsmenu, MenuAction:action, param1, param2) { - + decl String:info[64]; decl String:name[64]; decl flag; - + /* If an option was selected, tell the client about the item. */ if (action == MenuAction_Select) { - + new bool:found = GetMenuItem(optionsmenu, param2, info, sizeof(info), flag, name, sizeof(name)); if (found) { if (StrContains(info, "paintdecal") > -1) { @@ -1190,7 +1190,7 @@ public OptionsMenuHandler(Handle:optionsmenu, MenuAction:action, param1, param2) Command_OptionsMenu(param1, "paintdecal"); } else if (StrContains(info, "savedecal_id") > -1) { - FakeClientCommand(param1, "say /savedecal %d", param2+1); + FakeClientCommand(param1, "say /savedecal %d", param2 + 1); if (StrContains(info, "admin", false) > -1) Command_OptionsMenu(param1, "savedecal_id_admin"); else @@ -1204,7 +1204,7 @@ public OptionsMenuHandler(Handle:optionsmenu, MenuAction:action, param1, param2) Command_OptionsMenu(param1, "savedecal_name"); } else if (StrContains(info, "removedecal_id") > -1) { - FakeClientCommand(param1, "say /removedecal %d", param2+1); + FakeClientCommand(param1, "say /removedecal %d", param2 + 1); if (StrContains(info, "admin", false) > -1) Command_OptionsMenu(param1, "removedecal_id_admin"); else @@ -1218,7 +1218,7 @@ public OptionsMenuHandler(Handle:optionsmenu, MenuAction:action, param1, param2) Command_OptionsMenu(param1, "removedecal_name"); } else if (StrContains(info, "listdecal_id") > -1) { - FakeClientCommand(param1, "say /listdecal %d", param2+1); + FakeClientCommand(param1, "say /listdecal %d", param2 + 1); if (StrContains(info, "admin", false) > -1) Command_OptionsMenu(param1, "listdecal_id_admin"); else @@ -1236,9 +1236,9 @@ public OptionsMenuHandler(Handle:optionsmenu, MenuAction:action, param1, param2) /* If the menu was cancelled, check for info and redisplay previous menu. */ else if (action == MenuAction_Cancel) { - + if (param2 == MenuCancel_ExitBack) { - + GetMenuItem(optionsmenu, 0, info, sizeof(info)); if (StrContains(info, "paintdecal", false) > -1 && StrContains(info, "admin", false) > -1) { FakeClientCommand(param1, "sm_decalmenu admin"); @@ -1246,21 +1246,21 @@ public OptionsMenuHandler(Handle:optionsmenu, MenuAction:action, param1, param2) else if (StrContains(info, "paintdecal", false) > -1) { Command_DecalMenu(param1, -1); } - + if (StrContains(info, "savedecal", false) > -1 && StrContains(info, "admin", false) > -1) { Command_SubMenu(param1, "savedecal_admin"); } else if (StrContains(info, "savedecal", false) > -1) { Command_SubMenu(param1, "savedecal"); } - + if (StrContains(info, "removedecal", false) > -1 && StrContains(info, "admin", false) > -1) { Command_SubMenu(param1, "removedecal_admin"); } else if (StrContains(info, "removedecal", false) > -1) { Command_SubMenu(param1, "removedecal"); } - + if (StrContains(info, "listdecal", false) > -1 && StrContains(info, "admin", false) > -1) { Command_SubMenu(param1, "listdecal_admin"); } @@ -1286,18 +1286,18 @@ public bool:ReadDecals(client, mode) { // Read Decal config File if (mode == READ) { - + kv = CreateKeyValues("Decals"); FileToKeyValues(kv, path_decals); - + if (!KvGotoFirstSubKey(kv)) { - + LogMessage("CFG File not found: %s", file); CloseHandle(kv); return false; } do { - + KvGetSectionName(kv, buffer, sizeof(buffer)); PushArrayString(adt_decal_names, buffer); KvGetString(kv, "path", buffer, sizeof(buffer)); @@ -1320,16 +1320,16 @@ public bool:ReadDecals(client, mode) { // Read Map config File kv = CreateKeyValues("Positions"); FileToKeyValues(kv, path_mapdecals); - + if (!KvGotoFirstSubKey(kv)) { - + if (mode == READ) { LogMessage("CFG File for Map %s not found", mapName); } else { ReplyToCommand(client, "%t", "cfg_file_not_found", COLOR_DEFAULT, COLOR_GREEN, COLOR_DEFAULT, COLOR_GREEN, mapName, COLOR_DEFAULT); } - + CloseHandle(kv); return false; } @@ -1337,14 +1337,14 @@ public bool:ReadDecals(client, mode) { KvGetSectionName(kv, buffer, sizeof(buffer)); new id = FindStringInArray(adt_decal_names, buffer); if (id != -1) { - + if (mode == LIST) { ReplyToCommand(client, "%t", "list_decal", COLOR_DEFAULT, COLOR_GREEN, buffer); } - + new Float:position[3]; decl String:strpos[8]; - new n=1; + new n = 1; Format(strpos, sizeof(strpos), "pos%d", n); KvGetVector(kv, strpos, position); while (position[0] != 0 && position[1] != 0 && position[2] != 0) { @@ -1357,12 +1357,12 @@ public bool:ReadDecals(client, mode) { ReplyToCommand(client, "%t", "list_decal_id", COLOR_DEFAULT, COLOR_GREEN, n); new DecalPos = GetConVarInt(md_pos); if (DecalPos) - ReplyToCommand(client, "%t", "decal_position",COLOR_DEFAULT, COLOR_GREEN, position[0], position[1], position[2]); + ReplyToCommand(client, "%t", "decal_position", COLOR_DEFAULT, COLOR_GREEN, position[0], position[1], position[2]); } n++; Format(strpos, sizeof(strpos), "pos%d", n); KvGetVector(kv, strpos, position); - } + } } } while (KvGotoNextKey(kv)); CloseHandle(kv); @@ -1372,17 +1372,17 @@ public bool:ReadDecals(client, mode) { TE_SetupBSPDecal(const Float:vecOrigin[3], entity, index) { TE_Start("BSP Decal"); - TE_WriteVector("m_vecOrigin",vecOrigin); - TE_WriteNum("m_nEntity",entity); - TE_WriteNum("m_nIndex",index); + TE_WriteVector("m_vecOrigin", vecOrigin); + TE_WriteNum("m_nEntity", entity); + TE_WriteNum("m_nIndex", index); } -FindStringInArrayCase(Handle:array, const String:item[], bool:caseSensitive=true) { +FindStringInArrayCase(Handle:array, const String:item[], bool:caseSensitive = true) { decl String:str[256]; new size = GetArraySize(array); - for (new i=0; i