diff --git a/addons/sourcemod/scripting/VIP_Tracers.sp b/addons/sourcemod/scripting/VIP_Tracers.sp index 1bb7eca..0dfde41 100644 --- a/addons/sourcemod/scripting/VIP_Tracers.sp +++ b/addons/sourcemod/scripting/VIP_Tracers.sp @@ -5,64 +5,66 @@ #include #include -public Plugin:myinfo = +#pragma newdecls required + +public Plugin myinfo = { name = "[VIP] Tracers", author = "R1KO & inGame & maxime1907", description = "Display the trajectory of bullets when firing with a weapon", - version = "1.1.1", + version = "1.2.0", url = "" }; -new bool:g_bHasAccess[MAXPLAYERS+1]; -new bool:g_bEnabled[MAXPLAYERS+1]; +bool g_bHasAccess[MAXPLAYERS+1]; +bool g_bEnabled[MAXPLAYERS+1]; -new bool:g_bVisible[MAXPLAYERS+1]; -new Handle:g_hCookie_VIPTracers_Visible; +bool g_bVisible[MAXPLAYERS+1]; +Cookie g_hCookie_VIPTracers_Visible; -new g_iClientColor[MAXPLAYERS+1][4]; -new g_iClientItem[MAXPLAYERS+1]; -new Float:g_fClientAmplitude[MAXPLAYERS+1]; +int g_iClientColor[MAXPLAYERS+1][4]; +int g_iClientItem[MAXPLAYERS+1]; +float g_fClientAmplitude[MAXPLAYERS+1]; -new g_iBeamSprite, - Float:g_fLife, - Float:g_fStartWidth, - Float:g_fEndWidth, - Float:g_fAmplitudeMin, - Float:g_fAmplitudeMax, - bool:g_bHide; +int g_iBeamSprite; +float g_fLife, + g_fStartWidth, + g_fEndWidth, + g_fAmplitudeMin, + g_fAmplitudeMax; +bool g_bHide; -new Handle:g_hMainMenu, - Handle:g_hColorsMenu, - Handle:g_hCookie[3]; +Menu g_hMainMenu, + g_hColorsMenu; +Cookie g_hCookie[3]; -public OnPluginStart() +public void OnPluginStart() { LoadTranslations("vip_tracers.phrases"); HookEvent("bullet_impact", Event_BulletImpact); - g_hCookie[0] = RegClientCookie("Tracers_Enable", "Tracers_Enable", CookieAccess_Private); - g_hCookie[1] = RegClientCookie("Tracers_Color", "Tracers_Color", CookieAccess_Private); - g_hCookie[2] = RegClientCookie("Tracers_Amplitude", "Tracers_Amplitude", CookieAccess_Private); + g_hCookie[0] = new Cookie("Tracers_Enable", "Tracers_Enable", CookieAccess_Private); + g_hCookie[1] = new Cookie("Tracers_Color", "Tracers_Color", CookieAccess_Private); + g_hCookie[2] = new Cookie("Tracers_Amplitude", "Tracers_Amplitude", CookieAccess_Private); - g_hCookie_VIPTracers_Visible = RegClientCookie("Tracers_Visible", "Tracers_Visible", CookieAccess_Private); + g_hCookie_VIPTracers_Visible = new Cookie("Tracers_Visible", "Tracers_Visible", CookieAccess_Private); - g_hMainMenu = CreateMenu(Handler_MainMenu, MenuAction_Select|MenuAction_Cancel|MenuAction_DisplayItem); - SetMenuExitBackButton(g_hMainMenu, false); - SetMenuExitButton(g_hMainMenu, true); - SetMenuTitle(g_hMainMenu, "VIP Tracers settings:\n \n"); - AddMenuItem(g_hMainMenu, "", "on/off"); - AddMenuItem(g_hMainMenu, "", "Choose Color"); - AddMenuItem(g_hMainMenu, "", "Amplitude", ITEMDRAW_DISABLED); - AddMenuItem(g_hMainMenu, "", "a+"); - AddMenuItem(g_hMainMenu, "", "a-"); + g_hMainMenu = new Menu(Handler_MainMenu, MenuAction_Select|MenuAction_Cancel|MenuAction_DisplayItem); + g_hMainMenu.ExitBackButton = false; + g_hMainMenu.ExitButton = true; + g_hMainMenu.SetTitle("VIP Tracers settings:\n \n"); + g_hMainMenu.AddItem("", "on/off"); + g_hMainMenu.AddItem("", "Choose Color"); + g_hMainMenu.AddItem("", "Amplitude", ITEMDRAW_DISABLED); + g_hMainMenu.AddItem("", "a+"); + g_hMainMenu.AddItem("", "a-"); - g_hColorsMenu = CreateMenu(Handler_ColorsMenu, MenuAction_Select|MenuAction_Cancel|MenuAction_DisplayItem); - SetMenuExitBackButton(g_hColorsMenu, true); - SetMenuExitButton(g_hColorsMenu, true); - SetMenuTitle(g_hColorsMenu, "Tracers colors:\n \n"); + g_hColorsMenu = new Menu(Handler_ColorsMenu, MenuAction_Select|MenuAction_Cancel|MenuAction_DisplayItem); + g_hColorsMenu.ExitBackButton = true; + g_hColorsMenu.ExitButton = true; + g_hColorsMenu.SetTitle("Tracers colors:\n \n"); RegConsoleCmd("tracers", Command_Tracers); RegConsoleCmd("tracer", Command_Tracers); @@ -72,13 +74,13 @@ public OnPluginStart() SetCookieMenuItem(MenuHandler_CookieMenu, 0, "VIP Tracers"); } -public Action Command_Tracers(iClient, iArgs) +public Action Command_Tracers(int iClient, int iArgs) { if(iClient) { if(g_bHasAccess[iClient]) { - DisplayMenu(g_hMainMenu, iClient, MENU_TIME_FOREVER); + g_hMainMenu.Display(iClient, MENU_TIME_FOREVER); } else { @@ -88,26 +90,20 @@ public Action Command_Tracers(iClient, iArgs) return Plugin_Handled; } -public Action Command_TracersVisibility(client, args) +public Action Command_TracersVisibility(int client, int args) { if(client) { - g_bVisible[client] = !g_bVisible[client]; - SetClientCookie(client, g_hCookie_VIPTracers_Visible, g_bVisible[client] ? "1" : "0"); - PrintToChat(client, "\x0799CCFF[VIP Tracers] \x01VIP Tracers %s\x01.", g_bVisible[client] ? "\x04enabled":"\x07FF4040disabled"); + TracersVisibility(client); } return Plugin_Handled; } -public Action TracersVisibility(client) +void TracersVisibility(int client) { - if(client) - { - g_bVisible[client] = !g_bVisible[client]; - SetClientCookie(client, g_hCookie_VIPTracers_Visible, g_bVisible[client] ? "1" : "0"); - PrintToChat(client, "\x0799CCFF[VIP Tracers] \x01VIP Tracers %s\x01.", g_bVisible[client] ? "\x04enabled":"\x07FF4040disabled"); - } - return Plugin_Handled; + g_bVisible[client] = !g_bVisible[client]; + g_hCookie_VIPTracers_Visible.Set(client, g_bVisible[client] ? "1" : "0"); + PrintToChat(client, "\x0799CCFF[VIP Tracers] \x01VIP Tracers %s\x01.", g_bVisible[client] ? "\x04enabled":"\x07FF4040disabled"); } void AddMenuItemTranslated(Menu menu, const char[] info, const char[] display, any ...) @@ -118,7 +114,7 @@ void AddMenuItemTranslated(Menu menu, const char[] info, const char[] display, a menu.AddItem(info, buffer); } -public void ShowSettingsMenu(int client) +void ShowSettingsMenu(int client) { Menu menu = new Menu(MenuHandler_SettingsMenu); @@ -171,57 +167,56 @@ public int MenuHandler_SettingsMenu(Menu menu, MenuAction action, int client, in return 0; } -public OnMapStart() +public void OnMapStart() { - RemoveAllMenuItems(g_hColorsMenu); + g_hColorsMenu.RemoveAllItems(); - decl String:sBuffer[256], Handle:hKeyValues; + char sBuffer[256]; - hKeyValues = CreateKeyValues("Tracers"); - BuildPath(Path_SM, sBuffer, 256, "configs/tracers.cfg"); + KeyValues hKeyValues = new KeyValues("Tracers"); + BuildPath(Path_SM, sBuffer, sizeof(sBuffer), "configs/tracers.cfg"); - if (FileToKeyValues(hKeyValues, sBuffer) == false) + if (!hKeyValues.ImportFromFile(sBuffer)) { - CloseHandle(hKeyValues); + delete hKeyValues; SetFailState("Не удалось открыть файл \"%s\"", sBuffer); } - g_bHide = bool:KvGetNum(hKeyValues, "Hide_Opposite_Team"); - g_fLife = KvGetFloat(hKeyValues, "Life", 0.2); - g_fStartWidth = KvGetFloat(hKeyValues, "StartWidth", 2.0); - g_fEndWidth = KvGetFloat(hKeyValues, "EndWidth", 2.0); - g_fAmplitudeMax = KvGetFloat(hKeyValues, "AmplitudeMax", 1.0); - g_fAmplitudeMin = KvGetFloat(hKeyValues, "AmplitudeMin", 0.1); + g_bHide = hKeyValues.GetNum("Hide_Opposite_Team") != 0; + g_fLife = hKeyValues.GetFloat("Life", 0.2); + g_fStartWidth = hKeyValues.GetFloat("StartWidth", 2.0); + g_fEndWidth = hKeyValues.GetFloat("EndWidth", 2.0); + g_fAmplitudeMax = hKeyValues.GetFloat("AmplitudeMax", 1.0); + g_fAmplitudeMin = hKeyValues.GetFloat("AmplitudeMin", 0.1); - KvGetString(hKeyValues, "Material", sBuffer, sizeof(sBuffer), "materials/sprites/laserbeam.vmt"); + hKeyValues.GetString("Material", sBuffer, sizeof(sBuffer), "materials/sprites/laserbeam.vmt"); g_iBeamSprite = PrecacheModel(sBuffer); - KvRewind(hKeyValues); + hKeyValues.Rewind(); sBuffer[0] = 0; - if(KvJumpToKey(hKeyValues, "Colors", true) && KvGotoFirstSubKey(hKeyValues, false)) + if(hKeyValues.JumpToKey("Colors", true) && hKeyValues.GotoFirstSubKey(false)) { - decl String:sColor[64]; + char sColor[64]; do { - KvGetSectionName(hKeyValues, sBuffer, sizeof(sBuffer)); - KvGetString(hKeyValues, NULL_STRING, sColor, sizeof(sColor)); - AddMenuItem(g_hColorsMenu, sColor, sBuffer); + hKeyValues.GetSectionName(sBuffer, sizeof(sBuffer)); + hKeyValues.GetString(NULL_STRING, sColor, sizeof(sColor)); + g_hColorsMenu.AddItem(sColor, sBuffer); } - while (KvGotoNextKey(hKeyValues, false)); + while (hKeyValues.GotoNextKey(false)); } if(sBuffer[0] == 0) - { - // FormatEx(sName, sizeof(sName), "%T", "NO_COLORS_AVAILABLE", iClient); - AddMenuItem(g_hColorsMenu, "", "No Colors", ITEMDRAW_DISABLED); - } + { + g_hColorsMenu.AddItem("", "No Colors", ITEMDRAW_DISABLED); + } - CloseHandle(hKeyValues); + delete hKeyValues; } -public Handler_MainMenu(Handle:hMenu, MenuAction:action, iClient, Item) +public int Handler_MainMenu(Menu hMenu, MenuAction action, int iClient, int Item) { switch(action) { @@ -232,13 +227,11 @@ public Handler_MainMenu(Handle:hMenu, MenuAction:action, iClient, Item) case 0: { g_bEnabled[iClient] = !g_bEnabled[iClient]; - decl String:sInfo[8]; - IntToString(g_bEnabled[iClient], sInfo, sizeof(sInfo)); - SetClientCookie(iClient, g_hCookie[0], sInfo); + g_hCookie[0].Set(iClient, g_bEnabled[iClient] ? "1" : "0"); } case 1: { - DisplayMenu(g_hColorsMenu, iClient, MENU_TIME_FOREVER); + g_hColorsMenu.Display(iClient, MENU_TIME_FOREVER); return 0; } case 3: @@ -246,9 +239,9 @@ public Handler_MainMenu(Handle:hMenu, MenuAction:action, iClient, Item) if(g_fClientAmplitude[iClient] < g_fAmplitudeMax) { g_fClientAmplitude[iClient] += 0.1; - decl String:sInfo[8]; + char sInfo[8]; FloatToString(g_fClientAmplitude[iClient], sInfo, sizeof(sInfo)); - SetClientCookie(iClient, g_hCookie[2], sInfo); + g_hCookie[2].Set(iClient, sInfo); } } case 4: @@ -256,17 +249,17 @@ public Handler_MainMenu(Handle:hMenu, MenuAction:action, iClient, Item) if(g_fClientAmplitude[iClient] > g_fAmplitudeMin) { g_fClientAmplitude[iClient] -= 0.1; - decl String:sInfo[8]; + char sInfo[8]; FloatToString(g_fClientAmplitude[iClient], sInfo, sizeof(sInfo)); - SetClientCookie(iClient, g_hCookie[2], sInfo); + g_hCookie[2].Set(iClient, sInfo); } } } - DisplayMenu(g_hMainMenu, iClient, MENU_TIME_FOREVER); + g_hMainMenu.Display(iClient, MENU_TIME_FOREVER); } case MenuAction_DisplayItem: { - decl String:sBuffer[128]; + char sBuffer[128]; switch(Item) { case 0: @@ -275,8 +268,8 @@ public Handler_MainMenu(Handle:hMenu, MenuAction:action, iClient, Item) } case 1: { - decl String:sColorName[64]; - GetMenuItem(g_hColorsMenu, g_iClientItem[iClient], "", 0, _, sColorName, sizeof(sColorName)); + char sInfo[64], sColorName[64]; + g_hColorsMenu.GetItem(g_iClientItem[iClient], sInfo, sizeof(sInfo), _, sColorName, sizeof(sColorName)); FormatEx(sBuffer, sizeof(sBuffer), "Color [%s]", sColorName); } case 2: @@ -300,7 +293,7 @@ public Handler_MainMenu(Handle:hMenu, MenuAction:action, iClient, Item) return 0; } -public Handler_ColorsMenu(Handle:hMenu, MenuAction:action, iClient, Item) +public int Handler_ColorsMenu(Menu hMenu, MenuAction action, int iClient, int Item) { switch(action) { @@ -308,29 +301,28 @@ public Handler_ColorsMenu(Handle:hMenu, MenuAction:action, iClient, Item) { if(Item == MenuCancel_ExitBack) { - DisplayMenu(g_hMainMenu, iClient, MENU_TIME_FOREVER); + g_hMainMenu.Display(iClient, MENU_TIME_FOREVER); } } case MenuAction_Select: { - decl String:sInfo[64], String:sColorName[128]; - GetMenuItem(hMenu, Item, sInfo, sizeof(sInfo), _, sColorName, sizeof(sColorName)); + char sInfo[64], sColorName[128]; + hMenu.GetItem(Item, sInfo, sizeof(sInfo), _, sColorName, sizeof(sColorName)); UTIL_LoadColor(iClient, sInfo); - SetClientCookie(iClient, g_hCookie[1], sInfo); - // LogMessage("SaveColor: %N (%i): %s (%i)", iClient, iClient, sInfo, Item); + g_hCookie[1].Set(iClient, sInfo); g_iClientItem[iClient] = Item; PrintToChat(iClient, "\x0799CCFF[VIP Tracers] \x07FFFF00You changed your tracers color to \x04%s", sColorName); - DisplayMenuAtItem(g_hColorsMenu, iClient, GetMenuSelectionPosition(), MENU_TIME_FOREVER); + g_hColorsMenu.DisplayAt(iClient, hMenu.Selection, MENU_TIME_FOREVER); } case MenuAction_DisplayItem: { if(g_iClientItem[iClient] == Item) { - decl String:sColorName[128]; - GetMenuItem(hMenu, Item, "", 0, _, sColorName, sizeof(sColorName)); + char sInfo[64], sColorName[128]; + hMenu.GetItem(Item, sInfo, sizeof(sInfo), _, sColorName, sizeof(sColorName)); Format(sColorName, sizeof(sColorName), "%s [X]", sColorName); @@ -342,7 +334,7 @@ public Handler_ColorsMenu(Handle:hMenu, MenuAction:action, iClient, Item) return 0; } -public OnClientDisconnect(iClient) +public void OnClientDisconnect(int iClient) { g_bHasAccess[iClient] = false; g_bEnabled[iClient] = false; @@ -369,32 +361,32 @@ public Action Timer_LoadDelay(Handle hTimer, any userID) return Plugin_Continue; } -public OnClientCookiesCached(iClient) +public void OnClientCookiesCached(int iClient) { - decl String:sInfo[64]; - GetClientCookie(iClient, g_hCookie[0], sInfo, 4); + char sInfo[64]; + g_hCookie[0].Get(iClient, sInfo, 4); if(!sInfo[0]) { g_bEnabled[iClient] = true; - SetClientCookie(iClient, g_hCookie[0], "1"); + g_hCookie[0].Set(iClient, "1"); } else { - g_bEnabled[iClient] = bool:StringToInt(sInfo); + g_bEnabled[iClient] = StringToInt(sInfo) != 0; } - GetClientCookie(iClient, g_hCookie[2], sInfo, 8); + g_hCookie[2].Get(iClient, sInfo, 8); if(!sInfo[0]) { g_fClientAmplitude[iClient] = 0.1; - SetClientCookie(iClient, g_hCookie[2], "0.1"); + g_hCookie[2].Set(iClient, "0.1"); } else { - g_fClientAmplitude[iClient] = Float:StringToFloat(sInfo); + g_fClientAmplitude[iClient] = StringToFloat(sInfo); } - GetClientCookie(iClient, g_hCookie[1], sInfo, sizeof(sInfo)); + g_hCookie[1].Get(iClient, sInfo, sizeof(sInfo)); if(!sInfo[0]) { g_iClientItem[iClient] = 0; @@ -404,26 +396,26 @@ public OnClientCookiesCached(iClient) g_iClientItem[iClient] = 0; } - GetMenuItem(g_hColorsMenu, g_iClientItem[iClient], sInfo, sizeof(sInfo)); - SetClientCookie(iClient, g_hCookie[1], sInfo); + g_hColorsMenu.GetItem(g_iClientItem[iClient], sInfo, sizeof(sInfo)); + g_hCookie[1].Set(iClient, sInfo); UTIL_LoadColor(iClient, sInfo); - GetClientCookie(iClient, g_hCookie_VIPTracers_Visible, sInfo, sizeof(sInfo)); + g_hCookie_VIPTracers_Visible.Get(iClient, sInfo, sizeof(sInfo)); if (!sInfo[0]) { g_bVisible[iClient] = true; - SetClientCookie(iClient, g_hCookie_VIPTracers_Visible, "1"); + g_hCookie_VIPTracers_Visible.Set(iClient, "1"); } else - g_bVisible[iClient] = bool:StringToInt(sInfo); + g_bVisible[iClient] = StringToInt(sInfo) != 0; } -UTIL_LoadColor(iClient, const String:sInfo[]) +void UTIL_LoadColor(int iClient, const char[] sInfo) { if(StrEqual(sInfo, "randomcolor")) { - for(new i=0; i < 4; ++i) + for(int i = 0; i < 4; ++i) { g_iClientColor[iClient][i] = -1; } @@ -431,7 +423,7 @@ UTIL_LoadColor(iClient, const String:sInfo[]) } if(StrEqual(sInfo, "teamcolor")) { - for(new i=0; i < 4; ++i) + for(int i = 0; i < 4; ++i) { g_iClientColor[iClient][i] = -2; } @@ -441,25 +433,23 @@ UTIL_LoadColor(iClient, const String:sInfo[]) UTIL_GetRGBAFromString(sInfo, g_iClientColor[iClient]); } -UTIL_GetRGBAFromString(const String:sBuffer[], iColor[4]) +void UTIL_GetRGBAFromString(const char[] sBuffer, int iColor[4]) { - decl String:sBuffers[4][4], i; + char sBuffers[4][4]; ExplodeString(sBuffer, " ", sBuffers, sizeof(sBuffers), sizeof(sBuffers[])); - for(i=0; i < 4; ++i) + for(int i = 0; i < 4; ++i) { StringToIntEx(sBuffers[i], iColor[i]); } } -UTIL_GetItemIndex(const String:sItemInfo[]) +int UTIL_GetItemIndex(const char[] sItemInfo) { -// LogMessage("UTIL_GetItemIndex: ClientItem: %s", sItemInfo); - decl String:sInfo[64], i, iSize; - iSize = GetMenuItemCount(g_hColorsMenu); - for(i = 0; i < iSize; ++i) + char sInfo[64]; + int iSize = g_hColorsMenu.ItemCount; + for(int i = 0; i < iSize; ++i) { - GetMenuItem(g_hColorsMenu, i, sInfo, sizeof(sInfo)); -// LogMessage("UTIL_GetItemIndex: %i. MenuItem: %s", i, sInfo); + g_hColorsMenu.GetItem(i, sInfo, sizeof(sInfo)); if(strcmp(sInfo, sItemInfo) == 0) { return i; @@ -469,18 +459,20 @@ UTIL_GetItemIndex(const String:sItemInfo[]) return -1; } -public Event_BulletImpact(Handle:hEvent, const String:sEvName[], bool:dontBroadcast) +public void Event_BulletImpact(Event hEvent, const char[] sEvName, bool dontBroadcast) { - new iClient = GetClientOfUserId(GetEventInt(hEvent, "userid")); + int iClient = GetClientOfUserId(hEvent.GetInt("userid")); if(iClient && g_bHasAccess[iClient] && g_bEnabled[iClient]) { - decl iClients[MaxClients], Float:fClientOrigin[3], Float:fEndPos[3], Float:fStartPos[3], Float:fPercentage, i, iTotalClients, iTeam, iColor[4]; + int[] iClients = new int[MaxClients]; + float fClientOrigin[3], fEndPos[3], fStartPos[3], fPercentage; + int i, iTotalClients, iTeam, iColor[4]; GetClientEyePosition(iClient, fClientOrigin); - fEndPos[0] = GetEventFloat(hEvent, "x"); - fEndPos[1] = GetEventFloat(hEvent, "y"); - fEndPos[2] = GetEventFloat(hEvent, "z"); + fEndPos[0] = hEvent.GetFloat("x"); + fEndPos[1] = hEvent.GetFloat("y"); + fEndPos[2] = hEvent.GetFloat("z"); fPercentage = 0.4/(GetVectorDistance(fClientOrigin, fEndPos)/100.0);