#pragma semicolon 1 #define DEBUG #define PLUGIN_AUTHOR "jenz" #define PLUGIN_VERSION "1.10" #define ZONE_PREFIX_CT "ZONE_PREFIX_CT" #include #include #include #include #include #include //map prefferences KeyValues g_kZoneStats; static char g_sKVPATH[PLATFORM_MAX_PATH]; //token scaler float f_tokenscaler; //sets players health int g_iclientSpawn[MAXPLAYERS+1]; //set score int g_iClientScore[MAXPLAYERS+1]; //damage float i_bDmgScale[MAXPLAYERS+1]; //zonepoints int i_points[MAXPLAYERS+1]; char c_storestats[MAXPLAYERS+1][1024]; float f_2kdmgPoints[MAXPLAYERS+1]; //convars ConVar G_hCvar_Points_Humans = null; bool g_bClientFilter[MAXPLAYERS+1]; bool g_bDmgScale[MAXPLAYERS+1]; bool g_bDmgOutput[MAXPLAYERS+1]; public Plugin myinfo = { name = "end Zones", author = PLUGIN_AUTHOR, description = "end zones in maps", version = PLUGIN_VERSION, url = "https://forums.alliedmods.net/showthread.php?t=224839" }; public void OnPluginStart() { // Events. HookEvent("round_end", Event_RoundEnd); HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); //mysql SQL_StartConnection(); //translations LoadTranslations("common.phrases"); //commands RegConsoleCmd("sm_dmgscale", cmd_dmgScaleOutput, "Enables output for damage"); RegConsoleCmd("sm_store", cmd_shopmenu, "Shop for Unloze Tokens"); RegConsoleCmd("sm_shop", cmd_shopmenu, "Shop for Unloze Tokens"); RegConsoleCmd("sm_transfertoken", cmd_transfertoken, "transfers token from player to player"); RegConsoleCmd("sm_transfertokens", cmd_transfertoken, "transfers token from player to player"); RegAdminCmd("sm_zoneDataDel", Cmd_zoneDataDel, ADMFLAG_ROOT); RegAdminCmd("sm_mysqlpoints", Cmd_mysqltokens, ADMFLAG_ROOT); RegAdminCmd("sm_givetokens", Cmd_givetokens, ADMFLAG_ROOT); //prefference for reconnect g_kZoneStats = new KeyValues("zoneStats"); BuildPath(Path_SM, g_sKVPATH, sizeof(g_sKVPATH), "data/playerprefs.zoneStats.txt"); g_kZoneStats.ImportFromFile(g_sKVPATH); //convars G_hCvar_Points_Humans = CreateConVar("hlx_roundpoints_humans", "250", "The amount of points to reward to humans for winning a round."); } public void OnAllPluginsLoaded() { AdminGroups_CreateAdminGroup("Token-1"); AdminGroups_CreateAdminGroup("Token-1-VIP"); AdminGroups_CreateAdminGroup("Token-2"); AdminGroups_CreateAdminGroup("Token-2-VIP"); AdminGroups_CreateAdminGroup("Token-3"); AdminGroups_CreateAdminGroup("Token-3-VIP"); AdminGroups_CreateAdminGroup("Token-4"); AdminGroups_CreateAdminGroup("Token-4-VIP"); AdminGroups_CreateAdminGroup("Token-5"); AdminGroups_CreateAdminGroup("Token-5-VIP"); AdminGroups_CreateAdminGroup("Token-6"); AdminGroups_CreateAdminGroup("Token-6-VIP"); AdminGroups_CreateAdminGroup("Token-7"); AdminGroups_CreateAdminGroup("Token-7-VIP"); AdminGroups_CreateAdminGroup("Token-8"); AdminGroups_CreateAdminGroup("Token-8-VIP"); AdminGroups_CreateAdminGroup("Token-9"); AdminGroups_CreateAdminGroup("Token-9-VIP"); } //---------------------------------------------------------------------------------------------------- // Purpose: cmds //---------------------------------------------------------------------------------------------------- public Action Cmd_zoneDataDel(int client, int args) { DeleteAll(g_kZoneStats); } public Action Cmd_mysqltokens(int client, int args) { PrintToChat(client, "c_storestats value: %s", c_storestats[client]); return Plugin_Handled; } public Action cmd_transfertoken(int client, int args) { if (args < 2) { ReplyToCommand(client, "[SM] Usage: sm_transfertoken <#userid|name> "); return Plugin_Handled; } char sArgs[65]; char sArgs2[20]; GetCmdArg(1, sArgs, sizeof(sArgs)); GetCmdArg(2, sArgs2, sizeof(sArgs2)); int amount = clamp(StringToInt(sArgs2), 1, 0x7FFFFFFF); if (amount == 1) { PrintToChat(client, "Invalid amount"); return Plugin_Handled; } else if (i_points[client] < amount) { PrintToChat(client, "Not enough Tokens: %i", i_points[client]); return Plugin_Handled; } //PrintToChat(client, "amount value: %i", amount); //PrintToChat(client, "sArgs value: %s", sArgs); int i = FindTarget(client, sArgs, true, false); if (i == -1) { PrintToChat(client, "Invalid target"); return Plugin_Handled; } if (IsValidClient1(i)) { //PrintToChatAll("i %N", i); //PrintToChatAll("Client %N", client); i_points[client] -= amount; sendMYSQL(client); PrintToChat(client, "You send %i Tokens to %N, your total amount: %i", amount, i, i_points[client]); i_points[i] += amount; sendMYSQL(i); PrintToChat(i, "You received %i Tokens from %N, your total amount: %i", amount, client, i_points[i]); } return Plugin_Handled; } public Action Cmd_givetokens(int client, int args) { i_points[client] += 2500; sendMYSQL(client); PrintToChat(client, "You received 2500 Tokens, your total amount: %i", i_points[client]); return Plugin_Handled; } public Action cmd_dmgScaleOutput(int client, int args) { if (!(g_bDmgOutput[client])) { g_bDmgOutput[client] = true; ReplyToCommand(client, "Enabled output for Damage Scaler"); } else { g_bDmgOutput[client] = false; ReplyToCommand(client, "Disabled output for Damage Scaler"); } } public Action cmd_shopmenu(int client, int args) { Menu menu = new Menu(ShopMenu_Handler, MenuAction_Display|MenuAction_Select|MenuAction_Cancel); menu.SetTitle("Unloze Shop | Your Tokens: %i", i_points[client]); menu.AddItem("Playermodels CT", "Playermodels CT"); menu.AddItem("Playermodels ZM", "Playermodels ZM"); menu.AddItem("Paint", "Paint"); menu.AddItem("Tracers", "Tracers"); menu.AddItem("Chat Tags", "Chat Tags"); menu.AddItem("Beams", "Beams"); menu.Display(client, 0); // ?? return Plugin_Handled; } //---------------------------------------------------------------------------------------------------- // Purpose: shop menu handlers //---------------------------------------------------------------------------------------------------- public int ShopMenu_Handler(Menu menu, MenuAction action, int client, int choice) { switch (action) { case MenuAction_Select: { Menu menu1 = new Menu(PlayermodelMenu_Handler, MenuAction_Display|MenuAction_Select|MenuAction_Cancel); menu1.AddItem("Back", "Back"); char info[32]; menu.GetItem(choice, info, sizeof(info)); static char SID[32]; GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID)); if (StrEqual(info, "Playermodels CT", true)) { menu1.SetTitle("Unloze Playermodels CT | Command: !zclass | Your Tokens: %i", i_points[client]); menu1.AddItem("Lightning [120 Tokens]", "Lightning [120 Tokens]"); menu1.AddItem("Batman [500 Tokens]", "Batman [500 Tokens]"); menu1.AddItem("Connor [3000 Tokens]", "Connor [3000 Tokens]"); menu1.AddItem("Samus [3000 Tokens]", "Samus [3000 Tokens]"); menu1.AddItem("Duke Nukem [4000 Tokens]", "Duke Nukem [4000 Tokens]"); menu1.AddItem("Back", "Back"); menu1.AddItem("Trevor [15000 Tokens]", "Trevor [15000 Tokens]"); menu1.Display(client, 0); return -1; } else if (StrEqual(info, "Playermodels ZM", true)) { menu1.SetTitle("Unloze Playermodels ZM | Command: !zclass | Your Tokens: %i", i_points[client]); menu1.AddItem("Stalker [200 Tokens]", "Stalker [200 Tokens]"); menu1.AddItem("Xeno [600 Tokens]", "Xeno [600 Tokens]"); menu1.AddItem("Grunt [3000 Tokens]", "Grunt [3000 Tokens]"); menu1.Display(client, 0); return -1; } else if (StrEqual(info, "Paint", true)) { Menu menu2 = new Menu(PaintMenu_Handler); menu2.SetTitle("UNLOZE Paint | Commands: !paint !paintcolor !paintsize | Your Tokens: %i", i_points[client]); menu2.AddItem("Back", "Back"); menu2.AddItem("Unlock paint [4000 Tokens]", "Unlock paint [4000 Tokens]"); menu2.AddItem("Unlock size [4500 Tokens]", "Unlock size [4500 Tokens]"); menu2.AddItem("Unlock colour [5000 Tokens]", "Unlock colour [5000 Tokens]"); menu2.Display(client, 0); return -1; } else if (StrEqual(info, "Tracers", true)) { Menu menu2 = new Menu(TracersMenu_Handler); menu2.SetTitle("UNLOZE Tracers | Command: !tracers | Your Tokens: %i", i_points[client]); menu2.AddItem("Back", "Back"); menu2.AddItem("ZEUS Tracers [25000 Tokens]", "ZEUS Tracers [25000 Tokens]"); menu2.AddItem("Yellow Tracers [7500 Tokens]", "Yellow Tracers [7500 Tokens]"); menu2.AddItem("Blue Tracers [7500 Tokens]", "Blue Tracers [7500 Tokens]"); menu2.AddItem("Green Tracers [7500 Tokens]", "Green Tracers [7500 Tokens]"); menu2.AddItem("Red Tracers [7500 Tokens]", "Red Tracers [7500 Tokens]"); menu2.AddItem("Gold Tracers [7500 Tokens]", "Gold Tracers [7500 Tokens]"); menu2.AddItem("Cyan Tracers [7500 Tokens]", "Cyan Tracers [7500 Tokens]"); menu2.Display(client, 0); return -1; } else if (StrEqual(info, "Chat Tags", true)) { Menu menu2 = new Menu(ChatTagsMenu_Handler); menu2.SetTitle("UNLOZE ChatTags | Commands: !tokentags !chatcolor | Your Tokens: %i", i_points[client]); menu2.AddItem("Back", "Back"); menu2.AddItem("Rookie [1500 Tokens]", "Rookie [1500 Tokens]"); menu2.AddItem("Member [2400 Tokens]", "Member [2400 Tokens]"); menu2.AddItem("Overweight Vegetarian [3000 Tokens]", "Overweight Vegetarian [3000 Tokens]"); menu2.AddItem("русский [3800 Tokens]", "русский [3800 Tokens]"); menu2.AddItem("SERBIAN [5000 Tokens]", "SERBIAN [5000 Tokens]"); menu2.AddItem("Back", "Back"); menu2.AddItem("WEEB [6000 Tokens]", "WEEB [6000 Tokens]"); menu2.AddItem("BAGUETTE [7000 Tokens]", "BAGUETTE [7000 Tokens]"); menu2.AddItem("NIGGER elites [11377 Tokens]", "NIGGER elites [11377 Tokens]"); menu2.AddItem("DANE [15000 Tokens]", "DANE [15000 Tokens]"); menu2.AddItem("Nosteam Chad [20000 Tokens]", "Nosteam Chad [20000 Tokens]"); menu2.Display(client, 0); return -1; } else if (StrEqual(info, "Beams", true)) { Menu menu2 = new Menu(BeamMenu_Handler); menu2.SetTitle("UNLOZE Beams | Commands: !beams !hidebeam| Your Tokens: %i", i_points[client]); menu2.AddItem("Back", "Back"); menu2.AddItem("Rainbow beam [15500 Tokens]", "Rainbow beam [15500 Tokens]"); menu2.AddItem("Blue beam [1500 Tokens]", "Blue beam [1500 Tokens]"); menu2.AddItem("Green beam [1500 Tokens]", "Green beam [1500 Tokens]"); menu2.AddItem("Red beam [1500 Tokens]", "Red beam [1500 Tokens]"); menu2.AddItem("Gold beam [1500 Tokens]", "Gold beam [1500 Tokens]"); menu2.AddItem("Back", "Back"); menu2.AddItem("Black beam [1500 Tokens]", "Black beam [1500 Tokens]"); menu2.AddItem("Cyan beam [1500 Tokens]", "Cyan beam [1500 Tokens]"); menu2.AddItem("Turquoise beam [1500 Tokens]", "Turquoise beam [1500 Tokens]"); menu2.AddItem("Yellow beam [1500 Tokens]", "Yellow beam [1500 Tokens]"); menu2.AddItem("Pink beam [1500 Tokens]", "Pink beam [1500 Tokens]"); menu2.AddItem("Back", "Back"); menu2.AddItem("Purple beam [1500 Tokens]", "Purple beam [1500 Tokens]"); menu2.AddItem("gray beam [1500 Tokens]", "gray beam [1500 Tokens]"); menu2.Display(client, 0); return -1; } } } return -1; } public int PlayermodelMenu_Handler(Menu menu, MenuAction action, int client, int choice) { if (action == MenuAction_Select) { char purchaseEntry[64]; char info[32]; menu.GetItem(choice, info, sizeof(info)); static char SID[32]; GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID)); if (StrEqual(info, "Lightning [120 Tokens]", true)) { if (i_points[client] >= 120 && (StrContains(c_storestats[client], "1") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-4-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-4"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "1"); i_points[client] -= 120; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Lightning playermodel for 120 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "1") >= 0) { PrintToChat(client, "You already purchased Lightning!"); } else if (i_points[client] <= 120) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Stalker [200 Tokens]", true)) { if (i_points[client] >= 200 && (StrContains(c_storestats[client], "a") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-1-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-1"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "a"); i_points[client] -= 200; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Stalker playermodel for 200 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "a") >= 0) { PrintToChat(client, "You already purchased Stalker!"); } else if (i_points[client] <= 200) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Batman [500 Tokens]", true)) { if (i_points[client] >= 500 && (StrContains(c_storestats[client], "2") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-5-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-5"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "2"); i_points[client] -= 500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Batman playermodel for 500 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "2") >= 0) { PrintToChat(client, "You already purchased Batman!"); } else if (i_points[client] <= 500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Xeno [600 Tokens]", true)) { if (i_points[client] >= 600 && (StrContains(c_storestats[client], "c") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-3-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-3"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "c"); i_points[client] -= 600; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Xeno playermodel for 600 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "c") >= 0) { PrintToChat(client, "You already purchased Xeno!"); } else if (i_points[client] <= 600) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Connor [3000 Tokens]", true)) { if (i_points[client] >= 3000 && (StrContains(c_storestats[client], "f") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-6-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-6"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "f"); i_points[client] -= 3000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Connor playermodel for 3000 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "f") >= 0) { PrintToChat(client, "You already purchased Connor!"); } else if (i_points[client] <= 3000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Duke Nukem [4000 Tokens]", true)) { if (i_points[client] >= 4000 && (StrContains(c_storestats[client], "g") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-7-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-7"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "g"); i_points[client] -= 4000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Duke playermodel for 4000 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "g") >= 0) { PrintToChat(client, "You already purchased Duke!"); } else if (i_points[client] <= 4000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Samus [3000 Tokens]", true)) { if (i_points[client] >= 3000 && (StrContains(c_storestats[client], "h") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-8-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-8"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "h"); i_points[client] -= 3000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Samus playermodel for 3000 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "h") >= 0) { PrintToChat(client, "You already purchased Samus!"); } else if (i_points[client] <= 3000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Trevor [15000 Tokens]", true)) { if (i_points[client] >= 15000 && (StrContains(c_storestats[client], "i") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-9-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-9"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "i"); i_points[client] -= 15000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Trevor playermodel for 15000 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "i") >= 0) { PrintToChat(client, "You already purchased Trevor!"); } else if (i_points[client] <= 15000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Back", true)) { cmd_shopmenu(client, 0); return -1; } else if (StrEqual(info, "Grunt [3000 Tokens]", true)) { if (i_points[client] >= 3000 && (StrContains(c_storestats[client], "j") < 0)) { if (CheckCommandAccess(client, "sm_store_vip", ADMFLAG_CUSTOM1)) { AdminGroups_GrantAdminGroup(client, "Token-2-VIP"); } else { AdminGroups_GrantAdminGroup(client, "Token-2"); } strcopy(purchaseEntry, sizeof(purchaseEntry), "j"); i_points[client] -= 3000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Grunt playermodel for 3000 UNLOZE tokens!"); PrintToChat(client, "Check !zclass for your new playermodel!"); } else if (StrContains(c_storestats[client], "j") >= 0) { PrintToChat(client, "You already purchased Grunt!"); } else if (i_points[client] <= 3000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } } return -1; } public int TracersMenu_Handler(Menu menu, MenuAction action, int client, int choice) { if (action == MenuAction_Select) { char purchaseEntry[64]; char info[32]; menu.GetItem(choice, info, sizeof(info)); static char SID[32]; GetClientAuthId(client, AuthId_Steam2, SID, sizeof(SID)); if (StrEqual(info, "ZEUS Tracers [25000 Tokens]", true)) { if (i_points[client] >= 25000 && (StrContains(c_storestats[client], "k") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "k"); i_points[client] -= 25000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased ZEUS Tracers for 25000 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server to use !tracers to select feature!"); } else if (StrContains(c_storestats[client], "k") >= 0) { PrintToChat(client, "You already purchased ZEUS tracers!"); } else if (i_points[client] <= 25000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Yellow Tracers [7500 Tokens]")) { if (i_points[client] >= 7500 && (StrContains(c_storestats[client], "§") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "§"); i_points[client] -= 7500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Yellow Tracers for 7500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server to use !tracers to select feature!"); } else if (StrContains(c_storestats[client], "§") >= 0) { PrintToChat(client, "You already purchased Yellow tracers!"); } else if (i_points[client] <= 7500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Blue Tracers [7500 Tokens]")) { if (i_points[client] >= 7500 && (StrContains(c_storestats[client], "@") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "@"); i_points[client] -= 7500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Blue Tracers for 7500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server to use !tracers to select feature!"); } else if (StrContains(c_storestats[client], "@") >= 0) { PrintToChat(client, "You already purchased Blue tracers!"); } else if (i_points[client] <= 7500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Green Tracers [7500 Tokens]")) { if (i_points[client] >= 7500 && (StrContains(c_storestats[client], "£") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "£"); i_points[client] -= 7500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Green Tracers for 7500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server to use !tracers to select feature!"); } else if (StrContains(c_storestats[client], "£") >= 0) { PrintToChat(client, "You already purchased Green tracers!"); } else if (i_points[client] <= 7500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Red Tracers [7500 Tokens]")) { if (i_points[client] >= 7500 && (StrContains(c_storestats[client], "$") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "$"); i_points[client] -= 7500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Red Tracers for 7500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server to use !tracers to select feature!"); } else if (StrContains(c_storestats[client], "$") >= 0) { PrintToChat(client, "You already purchased Red tracers!"); } else if (i_points[client] <= 7500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Gold Tracers [7500 Tokens]")) { if (i_points[client] >= 7500 && (StrContains(c_storestats[client], "€") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "€"); i_points[client] -= 7500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Gold Tracers for 7500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server to use !tracers to select feature!"); } else if (StrContains(c_storestats[client], "€") >= 0) { PrintToChat(client, "You already purchased Gold tracers!"); } else if (i_points[client] <= 7500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Cyan Tracers [7500 Tokens]")) { if (i_points[client] >= 7500 && (StrContains(c_storestats[client], "(") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "("); i_points[client] -= 7500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Cyan Tracers for 7500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server to use !tracers to select feature!"); } else if (StrContains(c_storestats[client], "(") >= 0) { PrintToChat(client, "You already purchased Cyan tracers!"); } else if (i_points[client] <= 7500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Back", true)) { cmd_shopmenu(client, 0); } } return -1; } public int BeamMenu_Handler(Menu menu, MenuAction action, int client, int choice) { if (action == MenuAction_Select) { char purchaseEntry[64]; char info[32]; menu.GetItem(choice, info, sizeof(info)); if (StrEqual(info, "Back", true)) { cmd_shopmenu(client, 0); } else if (StrEqual(info, "Blue beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "v") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "v"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Blue beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "v") >= 0) { PrintToChat(client, "You already purchased Blue Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Green beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "x") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "x"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Green beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "x") >= 0) { PrintToChat(client, "You already purchased Green Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Red beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "y") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "y"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Red beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "y") >= 0) { PrintToChat(client, "You already purchased Red Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Gold beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "z") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "z"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Gold beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "z") >= 0) { PrintToChat(client, "You already purchased Gold Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Black beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "3") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "3"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Black beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "3") >= 0) { PrintToChat(client, "You already purchased Black Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Cyan beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "4") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "4"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Cyan beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "4") >= 0) { PrintToChat(client, "You already purchased Cyan Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Turquoise beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "5") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "5"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Turquoise beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "5") >= 0) { PrintToChat(client, "You already purchased Turquoise Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Yellow beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "6") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "6"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Yellow beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "6") >= 0) { PrintToChat(client, "You already purchased Yellow Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Pink beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "7") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "7"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Pink beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "7") >= 0) { PrintToChat(client, "You already purchased Pink Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Purple beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "8") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "8"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Purple beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "8") >= 0) { PrintToChat(client, "You already purchased Purple Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "gray beam [1500 Tokens]")) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "9") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "9"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased gray beamers for 1500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "9") >= 0) { PrintToChat(client, "You already purchased gray Beamers!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Rainbow beam [15500 Tokens]")) { if (i_points[client] >= 15500 && (StrContains(c_storestats[client], "w") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "w"); i_points[client] -= 15500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Rainbow beamers for 15500 UNLOZE tokens!"); PrintToChat(client, "Rejoin the server and use !beams to enable/disable!"); } else if (StrContains(c_storestats[client], "w") >= 0) { PrintToChat(client, "You already purchased Rainbow Beamers!"); } else if (i_points[client] <= 15500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } } } public int ChatTagsMenu_Handler(Menu menu, MenuAction action, int client, int choice) { if (action == MenuAction_Select) { char purchaseEntry[64]; char info[32]; menu.GetItem(choice, info, sizeof(info)); if (StrEqual(info, "Rookie [1500 Tokens]", true)) { if (i_points[client] >= 1500 && (StrContains(c_storestats[client], "l") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "l"); i_points[client] -= 1500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Rookie Tag for 1500 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "l") >= 0) { PrintToChat(client, "You already purchased Rookie Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 1500) { PrintToChat(client, "You only have %i UNLOZE tokens, your legit broke nigga", i_points[client]); } } else if (StrEqual(info, "Member [2400 Tokens]", true)) { if (i_points[client] >= 2400 && (StrContains(c_storestats[client], "m") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "m"); i_points[client] -= 2400; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased MEMBER Tag for 2400 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "m") >= 0) { PrintToChat(client, "You already purchased MEMBER Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 2400) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "SERBIAN [5000 Tokens]", true)) { if (i_points[client] >= 5000 && (StrContains(c_storestats[client], "n") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "n"); i_points[client] -= 5000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased SERBIAN Tag for 5000 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "n") >= 0) { PrintToChat(client, "You already purchased SERBIAN Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 5000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Overweight Vegetarian [3000 Tokens]", true)) { if (i_points[client] >= 3000 && (StrContains(c_storestats[client], "o") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "o"); i_points[client] -= 3000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Overweight Vegetarian Tag for 3000 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "o") >= 0) { PrintToChat(client, "You already purchased Overweight Vegetarian Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 3000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "русский [3800 Tokens]", true)) { if (i_points[client] >= 3800 && (StrContains(c_storestats[client], "p") < 0)) { Format(purchaseEntry, sizeof(purchaseEntry), "p"); i_points[client] -= 3800; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased русский Tag for 3800 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "p") >= 0) { PrintToChat(client, "You already purchased русский Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 3800) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "NIGGER elites [11377 Tokens]", true)) { if (i_points[client] >= 11377 && (StrContains(c_storestats[client], "q") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "q"); i_points[client] -= 11377; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased NIGGER elites Tag for 11377 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "q") >= 0) { PrintToChat(client, "You already purchased NIGGER elites Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 11377) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "BAGUETTE [7000 Tokens]", true)) { if (i_points[client] >= 7000 && (StrContains(c_storestats[client], "r") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "r"); i_points[client] -= 7000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased BAGUETTE Tag for 7000 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "r") >= 0) { PrintToChat(client, "You already purchased BAGUETTE Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 7000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "DANE [15000 Tokens]", true)) { if (i_points[client] >= 15000 && (StrContains(c_storestats[client], "s") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "s"); i_points[client] -= 15000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased DANE Tag for 15000 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "s") >= 0) { PrintToChat(client, "You already purchased DANE Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 15000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "WEEB [6000 Tokens]", true)) { if (i_points[client] >= 6000 && (StrContains(c_storestats[client], "t") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "t"); i_points[client] -= 6000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased WEEB Tag for 6000 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "t") >= 0) { PrintToChat(client, "You already purchased WEEB Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 6000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Nosteam Chad [20000 Tokens]", true)) { if (i_points[client] >= 20000 && (StrContains(c_storestats[client], "u") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "u"); i_points[client] -= 20000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Nosteam Chad Tag for 20000 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server to use !tokentag!"); } else if (StrContains(c_storestats[client], "u") >= 0) { PrintToChat(client, "You already purchased Nosteam Chad Tag! Use !tokentag to select your tag!"); } else if (i_points[client] <= 20000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Back", true)) { cmd_shopmenu(client, 0); } } return -1; } public int PaintMenu_Handler(Menu menu, MenuAction action, int client, int choice) { if (action == MenuAction_Select) { char purchaseEntry [64]; char info[32]; menu.GetItem(choice, info, sizeof(info)); if (StrEqual(info, "Unlock size [4500 Tokens]", true)) { if (i_points[client] >= 4500 && (StrContains(c_storestats[client], "b") < 0)) { //this one does thank god not need an group on sourceban strcopy(purchaseEntry, sizeof(purchaseEntry), "b"); i_points[client] -= 4500; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased Paintsize feature for 4500 UNLOZE tokens!"); PrintToChat(client, "use !paintsize to change paint size!"); } else if (StrContains(c_storestats[client], "b") >= 0) { PrintToChat(client, "You already purchased Paintsize!"); } else if (i_points[client] <= 4500) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Unlock paint [4000 Tokens]", true)) { if (i_points[client] >= 4000 && (StrContains(c_storestats[client], "d") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "d"); i_points[client] -= 4000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased paint feature for 4000 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server and use !paint to enable the feature!"); } else if (StrContains(c_storestats[client], "d") >= 0) { PrintToChat(client, "You already purchased the paint feature!"); } else if (i_points[client] <= 4000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Unlock colour [5000 Tokens]", true)) { if (i_points[client] >= 5000 && (StrContains(c_storestats[client], "e") < 0)) { strcopy(purchaseEntry, sizeof(purchaseEntry), "e"); i_points[client] -= 5000; sendMYSQL(client); storeEntryMYSQL(client, purchaseEntry); PrintToChat(client, "Purchased paintcolour feature for 5000 UNLOZE tokens!"); PrintToChat(client, "Reconnect to the server and use !paintcolour to enable the feature!"); } else if (StrContains(c_storestats[client], "e") >= 0) { PrintToChat(client, "You already purchased the paintcolour feature!"); } else if (i_points[client] <= 5000) { PrintToChat(client, "You only have %i UNLOZE tokens", i_points[client]); } } else if (StrEqual(info, "Back", true)) { cmd_shopmenu(client, 0); } } return -1; } //---------------------------------------------------------------------------------------------------- // Purpose: verifications onmapstart/end/disconnect/connect/auth //---------------------------------------------------------------------------------------------------- public void OnMapStart() { DeleteAll(g_kZoneStats); DeleteAll(g_kZoneStats); } public void OnMapEnd() { DeleteAll(g_kZoneStats); DeleteAll(g_kZoneStats); } public void OnClientDisconnect(int iClient) { f_2kdmgPoints[iClient] = 0.0; if (!IsFakeClient(iClient)) { f_tokenscaler -= 100.0; } Format(c_storestats[iClient], sizeof(c_storestats), ""); i_points[iClient] = 0; g_iclientSpawn[iClient] = 0; g_bClientFilter[iClient] = false; g_bDmgScale[iClient] = false; g_bDmgOutput[iClient] = false; g_iClientScore[iClient] = 0; i_bDmgScale[iClient] = 0.0; } public void OnClientPostAdminCheck(int client) { f_2kdmgPoints[client] = 0.0; if (!IsFakeClient(client) && f_tokenscaler < 2000.0) { f_tokenscaler += 100.0; } i_points[client] = 0; CreateTimer(2.0, points_delay, client, TIMER_FLAG_NO_MAPCHANGE); } public Action points_delay(Handle timer, int client) { receiveMYSQL(client); } public Action roundsettings(Handle timer, any data) { for (int i = 1; i < MaxClients; i++) { if (IsValidClient(i)) { g_kZoneStats.Rewind(); static char SID[32]; GetClientAuthId(i, AuthId_Steam2, SID, sizeof(SID)); if (KvJumpToKey(g_kZoneStats, SID, false)) { int disabled = g_kZoneStats.GetNum("disabled", 0); if (!disabled) { return; } i_bDmgScale[i] = disabled * 1.0; g_iclientSpawn[i] = disabled * 10; g_iClientScore[i] = disabled * 25; g_bDmgScale[i] = true; SetEntityHealth(i, GetClientHealth(i) + g_iclientSpawn[i]); SetEntProp(i, Prop_Data, "m_iFrags", g_iClientScore[i]); } g_bClientFilter[i] = false; } } } public void OnClientPostAdminFilter(int i) { if (StrContains(c_storestats[i], "1") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-4-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-4"); } if (StrContains(c_storestats[i], "a") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-1-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-1"); } if (StrContains(c_storestats[i], "2") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-5-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-5"); } if (StrContains(c_storestats[i], "c") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-3-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-3"); } if (StrContains(c_storestats[i], "f") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-6-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-6"); } if (StrContains(c_storestats[i], "g") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-7-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-7"); } if (StrContains(c_storestats[i], "h") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-8-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-8"); } if (StrContains(c_storestats[i], "i") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-9-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-9"); } if (StrContains(c_storestats[i], "j") >= 0) { if (CheckCommandAccess(i, "sm_store_vip", ADMFLAG_CUSTOM1)) AdminGroups_GrantAdminGroup(i, "Token-2-VIP"); else AdminGroups_GrantAdminGroup(i, "Token-2"); } } public void OnClientAuthorized(int client, const char[] auth) { if (!IsFakeClient(client)) { //does not take time should be do able in postadmincheck CheckFlagsMYSQL(client); g_kZoneStats.Rewind(); if (KvJumpToKey(g_kZoneStats, auth, false)) { int disabled = g_kZoneStats.GetNum("disabled", 0); if (!disabled) { return; } i_bDmgScale[client] = disabled * 1.0; g_iclientSpawn[client] = disabled * 10; g_iClientScore[client] = disabled * 25; g_bDmgScale[client] = true; } } } public OnClientPutInServer(int client) { SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamagePre); } //---------------------------------------------------------------------------------------------------- // Purpose: zones //---------------------------------------------------------------------------------------------------- //Zone_OnClientEntry //void unloze_zoneEntry public void unloze_zoneEntry(int client, char[] zone) { if (IsValidClient(client) && (GetClientTeam(client) == 3)) { if (StrContains(zone, "ZONE_PREFIX_CT", false) >= 0) { //add filter on player //PrintToChatAll("ZoneRewards: zone: %s", zone); g_bClientFilter[client] = true; return; } } } //---------------------------------------------------------------------------------------------------- // Purpose: hooks //---------------------------------------------------------------------------------------------------- public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast) { CreateTimer(5.0, roundsettings, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); //check if under 8 players, if so we assign 4x value f_tokenscaler = 0.0; for (int i = 0; i < MaxClients; i++) { if (i > 0 && i <= MaxClients && IsClientInGame(i) && !IsFakeClient(i)) { f_tokenscaler += 100.0; } } if (f_tokenscaler > 2000.0) { f_tokenscaler = 2000.0; } } public void Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast) { int winner = GetEventInt(event, "winner"); int g_iWinnerAmount = 0; if ((winner == 3)) { for (int i = 0; i < MaxClients; i++) { if(IsValidClient(i) && g_bClientFilter[i]) //put filter here { g_iWinnerAmount += 1; int extrahealth = 10; int extraScore = 25 + ((GetClientFrags(i)) - g_iClientScore[i]); g_iclientSpawn[i] += extrahealth; i_bDmgScale[i] += 1.0; g_bDmgScale[i] = true; //kills + GetClientFrags(iClient) g_iClientScore[i] += extraScore; i_points[i] += 20; sendMYSQL(i); PrintToChat(i, "Won stage. Upgraded Stats!"); PrintToChat(i, "Health: %i", g_iclientSpawn[i]); //PrintToChat(i, "Damage: %f", i_bDmgScale{i} * 7.0); PrintToChat(i, "Clientscore: %i", g_iClientScore[i]); PrintToChat(i, "Earned 20 Unloze Tokens! Your amount: %i", i_points[i]); static char SID[32]; GetClientAuthId(i, AuthId_Steam2, SID, sizeof(SID)); g_kZoneStats.Rewind(); if(g_kZoneStats.JumpToKey(SID, true)) { int disabled = g_kZoneStats.GetNum("disabled", 0); if(!disabled) { g_kZoneStats.SetNum("disabled", 1); } else if (disabled == 1) { g_kZoneStats.SetNum("disabled", 2); } else if (disabled == 2) { g_kZoneStats.SetNum("disabled", 3); } else if (disabled == 3) { g_kZoneStats.SetNum("disabled", 4); } else if (disabled == 4) { g_kZoneStats.SetNum("disabled", 5); } else if (disabled == 5) { g_kZoneStats.SetNum("disabled", 6); } else if (disabled == 6) { g_kZoneStats.SetNum("disabled", 7); } else if (disabled == 7) { g_kZoneStats.SetNum("disabled", 8); } else if (disabled == 8) { g_kZoneStats.SetNum("disabled", 9); } else if (disabled == 9) { g_kZoneStats.SetNum("disabled", 10); } else if (disabled == 10) { g_kZoneStats.SetNum("disabled", 11); } g_kZoneStats.Rewind(); g_kZoneStats.ExportToFile(g_sKVPATH); } } } for (int i = 0; i < MaxClients; i++) { if (IsValidClient(i) && g_bClientFilter[i] && g_iWinnerAmount < 2) { PrintToChatAll("Solo Won stage. Upgraded Stats and extra points added %i", GetConVarInt(G_hCvar_Points_Humans)); //PrintToChatAll("g_iWinnerAmount: %d", g_iWinnerAmount); char sAuthID[64]; i_points[i] += 60; sendMYSQL(i); PrintToChatAll("%N Earned 60 Unloze Tokens for solo win! Their amount: %i", i, i_points[i]); if (!GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID))) { Format(sAuthID, sizeof(sAuthID), "UNKNOWN"); } LogToGame("\"%N<%d><%s><%s>\" triggered \"human_win_%i\"", i, GetClientUserId(i), sAuthID, "CT", GetConVarInt(G_hCvar_Points_Humans)); } else if (IsValidClient(i) && g_bClientFilter[i] && g_iWinnerAmount < 3) { PrintToChatAll("Duo Won stage. Upgraded Stats and extra points added %i", GetConVarInt(G_hCvar_Points_Humans)); //PrintToChatAll("g_iWinnerAmount: %d", g_iWinnerAmount); char sAuthID[64]; i_points[i] += 35; sendMYSQL(i); PrintToChatAll("%N Earned 35 Unloze Tokens for Duo win! Their amount: %i", i, i_points[i]); if (!GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID))) { Format(sAuthID, sizeof(sAuthID), "UNKNOWN"); } LogToGame("\"%N<%d><%s><%s>\" triggered \"human_win_%i\"", i, GetClientUserId(i), sAuthID, "CT", GetConVarInt(G_hCvar_Points_Humans) / 2); } else if (IsValidClient(i) && g_bClientFilter[i] && g_iWinnerAmount < 4) { PrintToChatAll("Trio Won stage. Upgraded Stats and extra points added %i", GetConVarInt(G_hCvar_Points_Humans)); //PrintToChatAll("g_iWinnerAmount: %d", g_iWinnerAmount); char sAuthID[64]; i_points[i] += 20; sendMYSQL(i); PrintToChatAll("%N Earned 20 Unloze Tokens for Duo win! Their amount: %i", i, i_points[i]); if (!GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID))) { Format(sAuthID, sizeof(sAuthID), "UNKNOWN"); } LogToGame("\"%N<%d><%s><%s>\" triggered \"human_win_%i\"", i, GetClientUserId(i), sAuthID, "CT", GetConVarInt(G_hCvar_Points_Humans) / 3); } } g_iWinnerAmount = 0; } } //---------------------------------------------------------------------------------------------------- // Purpose: damageHook //---------------------------------------------------------------------------------------------------- public Action OnTakeDamagePre(victim, &attacker, &inflictor, &Float:damage, &damagetype) { if(IsValidClient(attacker) && IsValidClient(victim)) { if (victim > 0 && attacker <= MAXPLAYERS && GetClientTeam(victim) != GetClientTeam(attacker)) { if (f_2kdmgPoints[attacker] >= f_tokenscaler) { f_2kdmgPoints[attacker] = 0.0; PrintToChat(attacker, "You earned 1 UNLOZE token for %f Damage on Zombies!", f_tokenscaler); i_points[attacker] += 1; sendMYSQL(attacker); } if (g_bDmgScale[attacker]) { if (g_bDmgOutput[attacker]) { PrintToChat(attacker, "Client %N ORIGINAL Damage: %f", attacker, damage); } damage += i_bDmgScale[attacker] * 7.0; f_2kdmgPoints[attacker] += damage; if (g_bDmgOutput[attacker]) { PrintToChat(attacker, "Client %N POST Damage: %f", attacker, damage); PrintToChat(attacker, "Client %N i_bDmgScale: %i", attacker, i_bDmgScale[attacker]); } return Plugin_Changed; } else { f_2kdmgPoints[attacker] += damage; return Plugin_Changed; } } } return Plugin_Continue; } //---------------------------------------------------------------------------------------------------- // Purpose: stock & clean keyvalues just MISC //---------------------------------------------------------------------------------------------------- stock bool IsValidClient(int client) { if (client > 0 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client)) { return true; } return false; } stock bool IsValidClient1(int client) { if (client > 0 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client)) { return true; } return false; } public void DeleteAll (KeyValues kv) { kv.Rewind(); if (kv.GotoFirstSubKey()) { //PrintToChatAll("Reached first subkey"); kv.DeleteThis(); while (KvGotoNextKey(kv)) { kv.DeleteThis(); //PrintToChatAll("Deletes something?"); } kv.DeleteThis(); } kv.Rewind(); kv.ExportToFile(g_sKVPATH); //PrintToChatAll("End?"); } //---------------------------------------------------------------------------------------------------- // Purpose: MYSQL queries //---------------------------------------------------------------------------------------------------- public void SQL_StartConnection() { char error[255]; Database db; if (SQL_CheckConfig("unloze_tracerpref")) { db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error)); } if (db == null) { PrintToChatAll("{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!"); delete db; return; } //create tables char sQuery[255]; Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `unloze_zonepoints` (`steam_id` VARCHAR(254) NOT NULL, `points` VARCHAR(254) NOT NULL, `storestats` VARCHAR(254) NOT NULL, PRIMARY KEY (`steam_id`))"); SQL_TQuery(db, DummyCallbackSimple, sQuery); delete db; } public void receiveMYSQL(int client) { if (IsValidClient1(client)) { char error[255]; Database db; //the points not related to hlstats are stored together with tracer prefferences but have //their own table if (SQL_CheckConfig("unloze_tracerpref")) { db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error)); } if (db == null) { PrintToChat(client, "{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!"); delete db; return; } char sSID[64]; GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID)); char sQuery[512]; Format(sQuery, sizeof(sQuery), "SELECT points FROM `unloze_zonepoints`WHERE `steam_id` = '%s'", sSID); DBResultSet rs; if ((rs = SQL_Query(db, sQuery)) == null) { delete db; delete rs; return; } if (rs.RowCount > 0 && rs.FetchRow()) { char points[512]; SQL_FetchString(rs, 0, points, sizeof(points)); i_points[client] = StringToInt(points); //PrintToChat(client, "Fetched row!"); //PrintToChat(client, "%i", i_points[client]); } delete rs; delete db; } } public void sendMYSQL(int client) { if (IsValidClient1(client)) { char error[255]; Database db; //the points not related to hlstats are stored together with tracer prefferences but have //their own table if (SQL_CheckConfig("unloze_tracerpref")) { db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error)); } if (db == null) { PrintToChat(client, "{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!"); delete db; return; } char sSID[64]; GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID)); char sQuery[512]; Format(sQuery, sizeof(sQuery), "INSERT INTO `unloze_zonepoints` (`steam_id`,`points`) VALUES ('%s','%i') ON DUPLICATE KEY UPDATE `points` = '%i'", sSID, i_points[client], i_points[client]); SQL_TQuery(db, DummyCallbackSimple, sQuery); delete db; } } public Action storeEntryMYSQL(int client, char[] purchaseEntry) { //without delay it seems to cause crashes Handle h_Datapack; CreateDataTimer(1.0, storestats_delay, h_Datapack); WritePackCell(h_Datapack, client); WritePackString(h_Datapack, purchaseEntry); } public Action storestats_delay(Handle timer, Handle h_Datapack) { int client; char purchaseEntry[128]; ResetPack(h_Datapack); client = ReadPackCell(h_Datapack); ReadPackString(h_Datapack, purchaseEntry, sizeof(purchaseEntry)); char error[255]; Database db; //the points not related to hlstats are stored together with tracer prefferences but have //their own table if (SQL_CheckConfig("unloze_tracerpref")) { db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error)); } if (db == null) { PrintToChat(client, "{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!"); delete db; return Plugin_Handled; } char sSID[64]; GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID)); char sQuery[512]; //predefined statements cant be corrupted since players dont know the char of each item Format(sQuery, sizeof(sQuery), "UPDATE unloze_zonepoints SET storestats = CONCAT(storestats, '%s') WHERE `steam_id` = '%s'", purchaseEntry, sSID); DBResultSet rs; if ((rs = SQL_Query(db, sQuery)) == null) { delete db; delete rs; return Plugin_Handled; } SQL_TQuery(db, DummyCallbackSimple, sQuery); delete rs; delete db; StrCat(c_storestats[client], sizeof(c_storestats), purchaseEntry); return Plugin_Handled; } public void CheckFlagsMYSQL(int client) { char error[255]; Database db; //the points not related to hlstats are stored together with tracer prefferences but have //their own table if (SQL_CheckConfig("unloze_tracerpref")) { db = SQL_Connect("unloze_tracerpref", true, error, sizeof(error)); } if (db == null) { PrintToChat(client, "{green}[Unloze] {white}Error! Could not connect to MYSQL-DB!"); delete db; return; } char sSID[64]; GetClientAuthId(client, AuthId_Steam2, sSID, sizeof(sSID)); char sQuery[512]; Format(sQuery, sizeof(sQuery), "SELECT storestats FROM `unloze_zonepoints` WHERE `steam_id` = '%s'", sSID); DBResultSet rs; if ((rs = SQL_Query(db, sQuery)) == null) { delete db; delete rs; return; } if (rs.RowCount > 0 && rs.FetchRow()) { SQL_FetchString(rs, 0, c_storestats[client], sizeof(c_storestats)); } delete rs; delete db; } //---------------------------------------------------------------------------------------------------- // Purpose: stock by zacade, stock by botox & MYSQL callback //---------------------------------------------------------------------------------------------------- stock void ApplyGroupFlags(int client, const char[] group) { AdminId AdmID; GroupId GrpID; if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) { //PrintToChatAll("Creating new user for %L", client); AdmID = CreateAdmin(""); SetUserAdmin(client, AdmID, true); } if ((GrpID = FindAdmGroup(group)) != INVALID_GROUP_ID) { if (AdminInheritGroup(AdmID, GrpID)) { //PrintToChat(client, "%L added to group %s", client, group); } } else { //PrintToChatAll("%L group not found %s", client, group); } } public void DummyCallbackSimple(Handle hOwner, Handle hChild, const char[] err, DataPack pack1) { if (hOwner == null || hChild == null) { LogError("Query error. (%s)", err); } } stock any clamp(any input, any min, any max) { any retval = input < min ? min : input; return retval > max ? max : retval; }