Advertisement
Guest User

Untitled

a guest
Jul 12th, 2014
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.76 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <sdktools>
  3. #include <clientprefs>
  4. #pragma semicolon 1
  5.  
  6. #define PLUGIN_VERSION "1.7"
  7.  
  8. new Handle:g_cookieKnife;
  9. new Handle:g_hEnabled = INVALID_HANDLE;
  10. new Handle:g_hSpawnMessage = INVALID_HANDLE;
  11. new Handle:g_hSpawnMenu = INVALID_HANDLE;
  12. new Handle:g_hWelcomeMessage = INVALID_HANDLE;
  13. new Handle:g_hWelcomeMenu = INVALID_HANDLE;
  14. new Handle:g_hWelcomeMessageTimer = INVALID_HANDLE;
  15. new Handle:g_hWelcomeMenuTimer = INVALID_HANDLE;
  16. new Handle:g_hKnifeChosenMessage = INVALID_HANDLE;
  17. new Handle:g_hDonorFlag = INVALID_HANDLE;
  18.  
  19.  
  20. new knife_choice[MAXPLAYERS+1];
  21.  
  22. public Plugin:myinfo =
  23. {
  24.     name = "Knife Upgrade",
  25.     author = "Klexen",
  26.     description = "Choose and a save custom knife skin for this server.",
  27.     version = PLUGIN_VERSION
  28. }
  29.  
  30. public OnPluginStart()
  31. {
  32.     HookEvent("player_spawn", PlayerSpawn);
  33.    
  34.     CreateConVar("sm_knifeupgrade_version", PLUGIN_VERSION, "Knife Upgrade Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
  35.    
  36.     g_hEnabled = CreateConVar("sm_knifeupgrade_on", "1", "Enable / Disable Plugin", FCVAR_NONE, true, 0.0, true, 1.0);
  37.     g_hSpawnMessage = CreateConVar("sm_knifeupgrade_spawn_message", "0", "Show Plugin Message on Spawn", FCVAR_NONE, true, 0.0, true, 1.0);
  38.     g_hSpawnMenu = CreateConVar("sm_knifeupgrade_spawn_menu", "0", "Show Knife Menu on Spawn", FCVAR_NONE, true, 0.0, true, 1.0);
  39.     g_hWelcomeMessage = CreateConVar("sm_knifeupgrade_welcome_message", "1", "Show Plugin Message on player connect.", FCVAR_NONE, true, 0.0, true, 1.0);
  40.     g_hWelcomeMessageTimer = CreateConVar("sm_knifeupgrade_welcome_message_timer", "12.0", "When (in seconds) the message should be displayed after the player joins the server.", FCVAR_NONE, true, 12.0, true, 90.0);
  41.     g_hWelcomeMenuTimer = CreateConVar("sm_knifeupgrade_welcome_menu_timer", "15.0", "When (in seconds) the knife menu should be displayed after the player joins the server.", FCVAR_NONE, true, 12.0, true, 90.0);
  42.     g_hWelcomeMenu = CreateConVar("sm_knifeupgrade_welcome_menu", "0", "Show Knife Menu on player connect.", FCVAR_NONE, true, 0.0, true, 1.0);
  43.     g_hKnifeChosenMessage = CreateConVar("sm_knifeupgrade_chosen_message", "1", "Show message to player when player chooses a knife.", FCVAR_NONE, true, 0.0, true, 1.0);
  44.     g_hDonorFlag = CreateConVar("sm_knifeupgrade_donor_flag", "", "Admin flag required to use plugin. (Blank for everyone to have access)");
  45.    
  46.     g_cookieKnife = RegClientCookie("knife_choice", "", CookieAccess_Private);
  47.    
  48.     AddCommandListener(Event_Say, "say");
  49.     AddCommandListener(Event_Say, "say_team");
  50.    
  51.     AutoExecConfig(true, "sm_knifeupgrade");
  52.    
  53.     for(new i = 1; i <= MaxClients; i++) {
  54.         if(IsClientInGame(i) && !IsFakeClient(i) && AreClientCookiesCached(i)) {
  55.             OnClientCookiesCached(i);
  56.         }
  57.     }
  58. }
  59.  
  60. public OnClientCookiesCached(client)
  61. {
  62.     decl String:value[12];
  63.     GetClientCookie(client, g_cookieKnife, value, sizeof(value));
  64.    
  65.     knife_choice[client] = StringToInt(value);
  66. }
  67.  
  68. public Action:Event_Say(clientIndex, const String:command[], arg)
  69. {
  70.    
  71.     decl String:strFlag[32];
  72.     GetConVarString(g_hDonorFlag, strFlag, sizeof(strFlag));
  73.     new flag = ReadFlagString(strFlag);
  74.  
  75.     if (clientIndex != 0 && GetConVarBool(g_hEnabled) && CheckCommandAccess(clientIndex, "sm_admin", flag, true) == true)
  76.     {
  77.         decl String:text[24];
  78.         GetCmdArgString(text, sizeof(text));
  79.         StripQuotes(text);
  80.         TrimString(text);
  81.    
  82.         if (StrEqual(text, "!knife", false))
  83.         {
  84.             KnifeMenu(clientIndex);
  85.             return Plugin_Handled;
  86.         }
  87.         else if (StrEqual(text, "!knief", false))
  88.         {
  89.             KnifeMenu(clientIndex);
  90.             return Plugin_Handled;     
  91.         }
  92.         else if (StrEqual(text, "!knifes", false))
  93.         {
  94.             KnifeMenu(clientIndex);
  95.             return Plugin_Handled;     
  96.         }
  97.         else if (StrEqual(text, "!knfie", false))
  98.         {
  99.             KnifeMenu(clientIndex);
  100.             return Plugin_Handled;     
  101.         }
  102.         else if (StrEqual(text, "!knifw", false))
  103.         {
  104.             KnifeMenu(clientIndex);
  105.             return Plugin_Handled;     
  106.         }
  107.         else if (StrEqual(text, "!knives", false))
  108.         {
  109.             KnifeMenu(clientIndex);
  110.             return Plugin_Handled;     
  111.         }
  112.         else if (StrEqual(text, "!knif", false))
  113.         {
  114.             KnifeMenu(clientIndex);
  115.             return Plugin_Handled;     
  116.         }
  117.        
  118.         //Knife Shortcut Triggers
  119.        
  120.         if (StrEqual(text, "!bayonet", false))
  121.         {
  122.             SetBayonet(clientIndex);
  123.             return Plugin_Handled;
  124.         }
  125.        
  126.         if (StrEqual(text, "!gut", false))
  127.         {
  128.             SetGut(clientIndex);
  129.             return Plugin_Handled;
  130.         }
  131.        
  132.         if (StrEqual(text, "!flip", false))
  133.         {
  134.             SetFlip(clientIndex);
  135.             return Plugin_Handled;
  136.         }
  137.        
  138.         if (StrEqual(text, "!m9", false))
  139.         {
  140.             SetM9(clientIndex);
  141.             return Plugin_Handled;
  142.         }
  143.        
  144.         if (StrEqual(text, "!karambit", false))
  145.         {
  146.             SetKarambit(clientIndex);
  147.             return Plugin_Handled;
  148.         }
  149.        
  150.         if (StrEqual(text, "!huntsman", false))
  151.         {
  152.             SetHuntsman(clientIndex);
  153.             return Plugin_Handled;
  154.         }
  155.        
  156.         if (StrEqual(text, "!butterfly", false))
  157.         {
  158.             SetButterfly(clientIndex);
  159.             return Plugin_Handled;
  160.         }
  161.         if (StrEqual(text, "!default", false))
  162.         {
  163.             SetDefault(clientIndex);
  164.             return Plugin_Handled;
  165.         }
  166.        
  167.     }
  168.     return Plugin_Continue;
  169. }
  170.  
  171. public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
  172. {
  173.     new client = GetClientOfUserId(GetEventInt(event, "userid"));
  174.  
  175.     if(!IsValidClient(client, true)) return;
  176.    
  177.     CreateTimer(0.3, OnSpawn, client);
  178. }
  179.  
  180. public Action:OnSpawn(Handle:timer, any:client)
  181. {
  182.     Equipknife(client);
  183.    
  184.     if (GetConVarBool(g_hSpawnMessage))
  185.     {
  186.         PrintToChat(client, "Type \x04!knife \x01or chat triggers to select a new knife skin.");
  187.         PrintToChat(client, "Triggers: \x07!bayonet !gut !flip !m9 !karambit !huntsman !butterfly");
  188.     }
  189.    
  190.     if (GetConVarBool(g_hSpawnMenu)) KnifeMenu(client);
  191. }
  192.  
  193. public OnClientPostAdminCheck(client)
  194. {
  195.     if (GetConVarBool(g_hWelcomeMessage)) CreateTimer(GetConVarFloat(g_hWelcomeMessageTimer), Timer_Welcome, client);
  196.     if (GetConVarBool(g_hWelcomeMenu)) CreateTimer(GetConVarFloat(g_hWelcomeMenuTimer), Timer_Welcome, client);
  197. }
  198.  
  199. public Action:Timer_Welcome(Handle:timer, any:client)
  200. {
  201.    
  202.     if (GetConVarBool(g_hWelcomeMessage))
  203.     {
  204.         PrintToChat(client, "Type \x04!knife \x01or chat triggers to select a new knife skin.");
  205.         PrintToChat(client, "Triggers: \x07!bayonet !gut !flip !m9 !karambit !huntsman !butterfly");   
  206.     }  
  207.    
  208.     if (GetConVarBool(g_hWelcomeMenu)) KnifeMenu(client);
  209.    
  210. }
  211.  
  212. Equipknife(client)
  213. {  
  214.     decl String:strFlag[32];
  215.     GetConVarString(g_hDonorFlag, strFlag, sizeof(strFlag));
  216.     new flag = ReadFlagString(strFlag);
  217.    
  218.     if(!IsValidClient(client, true) || !GetConVarBool(g_hEnabled) || !CheckCommandAccess(client, "sm_admin", flag, true) == true) return;
  219.    
  220.     new iWeapon = GetPlayerWeaponSlot(client, 2);
  221.  
  222.     if(iWeapon != INVALID_ENT_REFERENCE)
  223.     {
  224.         RemovePlayerItem(client, iWeapon);
  225.         AcceptEntityInput(iWeapon, "Kill");
  226.     }
  227.    
  228.     new iItem;
  229.     switch(knife_choice[client]) {
  230.         case 1:
  231.         {
  232.             iItem = GivePlayerItem(client, "weapon_bayonet");
  233.         }
  234.         case 2:
  235.         {
  236.             iItem = GivePlayerItem(client, "weapon_knife_gut");
  237.         }
  238.         case 3:
  239.         {
  240.             iItem = GivePlayerItem(client, "weapon_knife_flip");
  241.         }
  242.         case 4:  
  243.         {
  244.             iItem = GivePlayerItem(client, "weapon_knife_m9_bayonet");
  245.         }
  246.         case 5:
  247.         {
  248.             iItem = GivePlayerItem(client, "weapon_knife_karambit");}
  249.         case 6:
  250.         {
  251.             iItem = GivePlayerItem(client, "weapon_knife_tactical");
  252.         }
  253.         case 7:
  254.         {
  255.             iItem = GivePlayerItem(client, "weapon_knife_butterfly");
  256.         }
  257.         case 8:
  258.         {
  259.             iItem = GivePlayerItem(client, "weapon_knife");
  260.         }
  261.         default: {return;}
  262.     }
  263.  
  264.     if(IsValidClient(client, true) && iItem != 0) EquipPlayerWeapon(client, iItem);
  265.     else {return;}
  266. }
  267.  
  268. KnifeMenu(client)
  269. {
  270.     DID(client);
  271.     PrintToConsole(client, "Knife Menu is open");
  272. }
  273.  
  274. SetBayonet(client)
  275. {
  276.     knife_choice[client] = 1;
  277.     new String:knifeValue[] = "1";             
  278.     SetClientCookie(client, g_cookieKnife, knifeValue);
  279.     OnClientCookiesCached(client);
  280.     Equipknife(client);
  281.     if (GetConVarBool(g_hKnifeChosenMessage)) PrintToChat(client, " \x04 You have chosen the Bayonet!");
  282. }
  283.  
  284. SetGut(client)
  285. {
  286.     knife_choice[client] = 2;
  287.     new String:knifeValue[] = "2";             
  288.     SetClientCookie(client, g_cookieKnife, knifeValue);
  289.     OnClientCookiesCached(client);
  290.     Equipknife(client);
  291.     if (GetConVarBool(g_hKnifeChosenMessage)) PrintToChat(client, " \x04 You have chosen the Gut knife!");
  292. }
  293.  
  294. SetFlip(client)
  295. {
  296.     knife_choice[client] = 3;
  297.     new String:knifeValue[] = "3";             
  298.     SetClientCookie(client, g_cookieKnife, knifeValue);
  299.     OnClientCookiesCached(client);         
  300.     Equipknife(client);
  301.     if (GetConVarBool(g_hKnifeChosenMessage)) PrintToChat(client, " \x04 You have chosen the Flip knife!");
  302. }
  303.  
  304. SetM9(client)
  305. {
  306.     knife_choice[client] = 4;
  307.     new String:knifeValue[] = "4";             
  308.     SetClientCookie(client, g_cookieKnife, knifeValue);
  309.     OnClientCookiesCached(client);
  310.     Equipknife(client);
  311.     if (GetConVarBool(g_hKnifeChosenMessage)) PrintToChat(client, " \x04 You have chosen the M9-Bayonet!");
  312. }
  313.  
  314. SetKarambit(client)
  315. {
  316.     knife_choice[client] = 5;
  317.     new String:knifeValue[] = "5";             
  318.     SetClientCookie(client, g_cookieKnife, knifeValue);
  319.     OnClientCookiesCached(client);
  320.     Equipknife(client);
  321.     if (GetConVarBool(g_hKnifeChosenMessage)) PrintToChat(client, " \x04 You have chosen the Karambit!");
  322. }
  323.  
  324. SetHuntsman(client)
  325. {
  326.     knife_choice[client] = 6;
  327.     new String:knifeValue[] = "6";             
  328.     SetClientCookie(client, g_cookieKnife, knifeValue);
  329.     OnClientCookiesCached(client); 
  330.     Equipknife(client);
  331.     if (GetConVarBool(g_hKnifeChosenMessage)) PrintToChat(client, " \x04 You have chosen the Huntsman knife!");
  332. }
  333.  
  334. SetButterfly(client)
  335. {
  336.     knife_choice[client] = 7;
  337.     new String:knifeValue[] = "7";             
  338.     SetClientCookie(client, g_cookieKnife, knifeValue);
  339.     OnClientCookiesCached(client);
  340.     Equipknife(client);
  341.     if (GetConVarBool(g_hKnifeChosenMessage)) PrintToChat(client, " \x04 You have chosen the Butterfly knife!");
  342. }
  343.  
  344. SetDefault(client)
  345. {
  346.     knife_choice[client] = 8;
  347.     new String:knifeValue[] = "8";             
  348.     SetClientCookie(client, g_cookieKnife, knifeValue);
  349.     OnClientCookiesCached(client);
  350.     Equipknife(client);
  351.     if (GetConVarBool(g_hKnifeChosenMessage)) PrintToChat(client, " \x04 You have chosen the Default knife!");
  352. }
  353.  
  354. public Action:DID(clientId)
  355. {
  356.     new Handle:menu = CreateMenu(DIDMenuHandler);
  357.     SetMenuTitle(menu, "Choose your knife");
  358.     AddMenuItem(menu, "option2", "!Bayonet");
  359.     AddMenuItem(menu, "option3", "!Gut");
  360.     AddMenuItem(menu, "option4", "!Flip");
  361.     AddMenuItem(menu, "option5", "!M9");
  362.     AddMenuItem(menu, "option6", "!Karambit");
  363.     AddMenuItem(menu, "option7", "!Huntsman");
  364.     AddMenuItem(menu, "option8", "!Butterfly");
  365.     AddMenuItem(menu, "option9", "!Default");
  366.     SetMenuExitButton(menu, true);
  367.     DisplayMenu(menu, clientId, 0);
  368.    
  369.     return Plugin_Handled;
  370. }
  371.  
  372. public DIDMenuHandler(Handle:menu, MenuAction:action, client, itemNum)
  373. {
  374.     if ( action == MenuAction_Select )
  375.     {
  376.         new String:info[32];
  377.        
  378.         GetMenuItem(menu, itemNum, info, sizeof(info));
  379.        
  380.         //Bayonet
  381.         if ( strcmp(info,"option2") == 0 )
  382.         {    
  383.             SetBayonet(client);
  384.         }
  385.         //Gut
  386.         else if ( strcmp(info,"option3") == 0 )
  387.         {      
  388.             SetGut(client);
  389.         }  
  390.         //Flip
  391.         else if ( strcmp(info,"option4") == 0 )
  392.         {
  393.             SetFlip(client);
  394.         }
  395.         //M9-Bayonet
  396.         else if ( strcmp(info,"option5") == 0 )
  397.         {
  398.             SetM9(client);
  399.         }
  400.         //Karambit
  401.         else if ( strcmp(info,"option6") == 0 )
  402.         {
  403.             SetKarambit(client);
  404.         }
  405.         //Huntsman
  406.         else if ( strcmp(info,"option7") == 0 )
  407.         {
  408.             SetHuntsman(client);
  409.         }
  410.         //Butterfly
  411.         else if ( strcmp(info,"option8") == 0 )
  412.         {
  413.             SetButterfly(client);
  414.         }
  415.         //Default
  416.         else if ( strcmp(info,"option9") == 0 )
  417.         {
  418.             SetDefault(client);
  419.         }
  420.     }
  421.     else if (action == MenuAction_End)
  422.     {
  423.         CloseHandle(menu);
  424.     }
  425. }
  426.  
  427. stock bool:IsValidClient(client, bool:alive = false)
  428. {
  429.     return (client >= 1 && client <= MaxClients && IsClientConnected(client) && GetClientTeam(client) > 1 && IsClientInGame(client) && (alive == false || IsPlayerAlive(client)));
  430. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement