Facebook
From Hobbit, 6 Years ago, written in JavaScript.
Embed
Download Paste or View Raw
Hits: 239
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <zp50_ammopacks>
  4. #include <zp50_colorchat>
  5.  
  6. //#define SQLX
  7. #define ADMIN_LEVEL_TO_RESET    ADMIN_BAN
  8.  
  9. new const PLUGIN_VERSION[] = "1.1.5"
  10.  
  11. #if defined SQLX
  12.         new SQL_HOST[] = "127.0.0.1"
  13.         new SQL_USER[] = "root"
  14.         new SQL_PASS[] = "yoursqlpasswordhere"
  15.         new SQL_DB[] = "amx"
  16.        
  17.         new Handle:g_SqlTuple
  18.         new g_Error[512]
  19. #else
  20.         new g_hVault
  21. #endif
  22.  
  23. const SIZE = 1536
  24.  
  25. new CvarAutoSave, CvarAutoLoad, CvarBankLimit, CvarBankBlockStart, CvarBankAdvertiseInterval
  26.  
  27. new g_iSteamID[33][32], g_iBank[33], g_iAmmoPacks[33], bool:IsManual[33], bool:IsAll[33]
  28.  
  29. #if defined SQLX
  30.         #include <zp50_bank_sqlx>
  31. #else
  32.         #include <zp50_bank_nvault>
  33. #endif
  34.  
  35. public plugin_init()
  36. {
  37.         register_plugin("[ZP 5.0] Ammo Packs Bank", PLUGIN_VERSION, "Excalibur.007")
  38.         register_dictionary("zp50_bank.txt")
  39.        
  40.         register_clcmd("say", "OnClientChat")
  41.         register_clcmd("say_team", "OnClientChat")
  42.         register_concmd("zp_bank_reset", "OnAdminReset", ADMIN_LEVEL_TO_RESET, "- resets bank in terms of days. 0 to clean all.")
  43.        
  44.         CvarAutoSave = register_cvar("zp_bank_auto_save", "1")
  45.         CvarAutoLoad = register_cvar("zp_bank_auto_load", "1")
  46.         CvarBankLimit = register_cvar("zp_bank_limit", "1000")
  47.         CvarBankBlockStart = register_cvar("zp_bank_block_start", "1")
  48.         CvarBankAdvertiseInterval = register_cvar("zp_bank_advertise_interval", "60.0")
  49.        
  50.         #if defined SQLX
  51.                 set_task(0.5, "MySQL_Init")
  52.         #else
  53.                 g_hVault = nvault_open("zp50_ammo_packs_bank")
  54.                
  55.                 if(g_hVault == INVALID_HANDLE)
  56.                         set_fail_state("Unable to create/load vault 'zp50_ammo_packs_bank'")
  57.         #endif
  58. }
  59.  
  60. public plugin_cfg()
  61. {
  62.         set_task(get_pcvar_float(CvarBankAdvertiseInterval), "AdvertiseBankInfo", 0)
  63. }
  64.  
  65. public AdvertiseBankInfo()
  66. {
  67.         new iPlayers[32], iNum
  68.         get_players(iPlayers, iNum, "ch")
  69.        
  70.         new player
  71.         for(new i = 0; i < iNum; i++)
  72.         {
  73.                 player = iPlayers[i]
  74.                
  75.                 zp_colored_print(player, "%L", player, "BANK_ADVERTISE")
  76.         }
  77. }
  78.  
  79. public client_putinserver(player)
  80. {
  81.         if(get_pcvar_num(CvarBankBlockStart))
  82.                 zp_ammopacks_set(player, 0)
  83. }
  84.  
  85. public client_disconnect(player)
  86. {
  87.         if(get_pcvar_num(CvarAutoSave))
  88.         {
  89.                 #if defined SQLX
  90.                         Save_MySQL(player)
  91.                 #else
  92.                         Save_nVault(player)
  93.                 #endif
  94.         }
  95.        
  96.         g_iSteamID[player][0] = 0
  97.         g_iBank[player] = 0
  98.         g_iAmmoPacks[player] = 0
  99.         IsManual[player] = false
  100.         IsAll[player] = false
  101. }
  102.  
  103. public client_authorized(player)
  104. {
  105.         get_user_authid(player, g_iSteamID[player], 31)
  106.        
  107.         if(get_pcvar_num(CvarAutoLoad))
  108.         {
  109.                 #if defined SQLX
  110.                         Load_MySQL(player)
  111.                 #else
  112.                         Load_nVault(player)
  113.                 #endif
  114.         }
  115. }
  116.  
  117. public OnClientChat(player)
  118. {
  119.         static szArgs[32]
  120.         read_args(szArgs, 31)
  121.         remove_quotes(szArgs)
  122.        
  123.         static szArg1[32], szArg2[32], szArg3[32]
  124.        
  125.         szArg1[0] = '^0'
  126.         szArg2[0] = '^0'
  127.         szArg3[0] = '^0'
  128.        
  129.         parse(szArgs, szArg1, 31, szArg2, 31, szArg3, 32)
  130.        
  131.         new iValue = str_to_num(szArg2)
  132.        
  133.         g_iAmmoPacks[player] = zp_ammopacks_get(player)
  134.        
  135.         new iBankLimit = get_pcvar_num(CvarBankLimit)
  136.        
  137.         if(equali(szArg1, "/deposit", 8) || equali(szArg1, "deposit", 7))
  138.         {
  139.                 if(iValue > g_iAmmoPacks[player])
  140.                 {
  141.                         iValue = g_iAmmoPacks[player]
  142.                 }
  143.                 else if(equali(szArg2, "all", 3))
  144.                 {
  145.                         iValue = g_iAmmoPacks[player]
  146.                         IsAll[player] = true
  147.                 }
  148.                
  149.                 if(iValue <= 0 && !IsAll[player])
  150.                 {
  151.                         zp_colored_print(player, "%L", player, "BANK_INVALID_AMOUNT")
  152.                         return PLUGIN_HANDLED
  153.                 }
  154.                
  155.                 IsAll[player] = false
  156.                 IsManual[player] = true
  157.                
  158.                 new iTemp = g_iBank[player]
  159.                
  160.                 g_iBank[player] += iValue
  161.                
  162.                 if(g_iBank[player] > iBankLimit)
  163.                 {
  164.                         zp_ammopacks_set(player, g_iAmmoPacks[player] + g_iBank[player] - iBankLimit)
  165.                        
  166.                         iValue = iBankLimit - iTemp
  167.                        
  168.                         g_iBank[player] = iBankLimit
  169.                 }
  170.                 else
  171.                 {
  172.                         zp_ammopacks_set(player, g_iAmmoPacks[player] - iValue)
  173.                 }
  174.                
  175.                 g_iAmmoPacks[player] -= iValue
  176.                
  177.                 if(get_pcvar_num(CvarAutoSave))
  178.                 {
  179.                         #if defined SQLX
  180.                                 Save_MySQL(player)
  181.                         #else
  182.                                 Save_nVault(player)
  183.                         #endif
  184.                 }
  185.                
  186.                 zp_colored_print(player, "%L", player, "BANK_DEPOSIT", iValue)
  187.                
  188.                 return PLUGIN_HANDLED
  189.         }
  190.         else if(equali(szArg1, "/withdraw", 9) || equali(szArg1, "withdraw", 8))
  191.         {
  192.                 if(iValue > g_iBank[player])
  193.                 {
  194.                         iValue = g_iBank[player]
  195.                 }
  196.                 else if(equali(szArg2, "all", 3))
  197.                 {
  198.                         iValue = g_iBank[player]
  199.                         IsAll[player] = true
  200.                 }
  201.                
  202.                 if(iValue <= 0 && !IsAll[player])
  203.                 {
  204.                         zp_colored_print(player, "%L", player, "BANK_INVALID_AMOUNT")
  205.                         return PLUGIN_HANDLED
  206.                 }
  207.                
  208.                 IsAll[player] = false
  209.                 IsManual[player] = true
  210.                
  211.                 zp_ammopacks_set(player, g_iAmmoPacks[player] + iValue)
  212.                
  213.                 g_iBank[player] -= iValue
  214.                 g_iAmmoPacks[player] += iValue
  215.                
  216.                 if(get_pcvar_num(CvarAutoSave))
  217.                 {
  218.                         #if defined SQLX
  219.                                 Save_MySQL(player)
  220.                         #else
  221.                                 Save_nVault(player)
  222.                         #endif
  223.                 }
  224.                
  225.                 zp_colored_print(player, "%L", player, "BANK_WITHDRAW", iValue)
  226.                
  227.                 return PLUGIN_HANDLED
  228.         }
  229.         else if(equali(szArg1, "/bank", 5) || equali(szArg1, "bank", 4))
  230.         {
  231.                 zp_colored_print(player, "%L", player, "BANK_BALANCE", g_iBank[player])
  232.                
  233.                 return PLUGIN_HANDLED
  234.         }
  235.         else if(equali(szArg1, "/donate", 7) || equali(szArg1, "donate", 6))
  236.         {
  237.                 new iValue = str_to_num(szArg3)
  238.                
  239.                 if(iValue > g_iBank[player])
  240.                 {
  241.                         zp_colored_print(player, "%L", player, "BANK_DONATE_HIGHER_AMOUNT")
  242.                         return PLUGIN_HANDLED
  243.                 }
  244.                
  245.                 if(iValue <= 0)
  246.                 {
  247.                         zp_colored_print(player, "%L", player, "BANK_INVALID_AMOUNT")
  248.                         return PLUGIN_HANDLED
  249.                 }
  250.                
  251.                 new target = cmd_target(player, szArg2, CMDTARGET_NO_BOTS)
  252.                
  253.                 if(!target)
  254.                 {
  255.                         zp_colored_print(player, "%L", player, "BANK_INVALID_TARGET")
  256.                         return PLUGIN_HANDLED
  257.                 }
  258.                
  259.                 new iTemp = g_iBank[player]
  260.                
  261.                 new szNamePlayer[32], szNameTarget[32]
  262.                
  263.                 get_user_name(player, szNamePlayer, 31)
  264.                 get_user_name(target, szNameTarget, 31)
  265.                
  266.                 g_iBank[player] -= iValue
  267.                 g_iBank[target] += iValue
  268.                
  269.                 if(g_iBank[target] > iBankLimit)
  270.                 {
  271.                         g_iBank[player] += (g_iBank[target] - iBankLimit)
  272.                         g_iBank[target] = iBankLimit
  273.                        
  274.                         iValue = iBankLimit - iTemp
  275.                 }
  276.                
  277.                 if(get_pcvar_num(CvarAutoSave))
  278.                 {
  279.                         #if defined SQLX
  280.                                 Save_MySQL(player)
  281.                                 Save_MySQL(target)
  282.                         #else
  283.                                 Save_nVault(player)
  284.                                 Save_nVault(target)
  285.                         #endif
  286.                 }
  287.                
  288.                 zp_colored_print(player, "%L", player, "BANK_DONATE_CHAT_TO_PLAYER", iValue, szNameTarget)
  289.                 zp_colored_print(target, "%L", target, "BANK_DONATE_CHAT_TO_TARGET", szNamePlayer, iValue)
  290.                
  291.                 return PLUGIN_HANDLED
  292.         }
  293.         else if(equali(szArg1, "/bankhelp", 9) || equali(szArg1, "bankhelp", 8))
  294.         {
  295.                 new msg[SIZE + 1], len = 0
  296.  
  297.                 len += format(msg[len], SIZE - len, "<html><body>")
  298.                 len += format(msg[len], SIZE - len, "<p>[BANK COMMANDS]<br/>")
  299.                 len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
  300.                 len += format(msg[len], SIZE - len, "/wyplac <ilosc> or /wyplac all<br/>")
  301.                 len += format(msg[len], SIZE - len, "- Withdraws an amount of ammo packs from the bank storage</p>")
  302.                 len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
  303.                 len += format(msg[len], SIZE - len, "/wplac <ilosc> or /wplac all</p>")
  304.                 len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
  305.                 len += format(msg[len], SIZE - len, "- Deposits an amount of ammo packs to the bank storage</p>")
  306.                 len += format(msg[len], SIZE - len, "- Checks your bank status</p>")
  307.                 len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
  308.                 len += format(msg[len], SIZE - len, "/daj <ilosc> <nick gracza> </p>")
  309.                 len += format(msg[len], SIZE - len, "- Donates an amount of ammo packs to the specified player</p>")
  310.                 len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
  311.                 len += format(msg[len], SIZE - len, "Note: Commands can be entered without ^"/^" infront.</p>")
  312.                 len += format(msg[len], SIZE - len, "</body></html>")
  313.                 show_motd(player, msg, "Bank Help")
  314.                
  315.                 return PLUGIN_CONTINUE
  316.         }
  317.         else if(equali(szArg1, "/banksave", 9) || equali(szArg1, "banksave", 8))
  318.         {
  319.                 #if defined SQLX
  320.                         Save_MySQL(player)
  321.                 #else
  322.                         Save_nVault(player)
  323.                 #endif
  324.         }
  325.         else if(equali(szArg1, "/bankload", 9) || equali(szArg1, "bankload", 8))
  326.         {
  327.                 #if defined SQLX
  328.                         Load_MySQL(player)
  329.                 #else
  330.                         Load_nVault(player)
  331.                 #endif
  332.         }
  333.         else
  334.         {
  335.                 return PLUGIN_CONTINUE
  336.         }
  337.        
  338.         return PLUGIN_CONTINUE
  339. }
  340.  
  341. public OnAdminReset(player, level, cid)
  342. {
  343.         if(!cmd_access(player, level, cid, 1))
  344.         {
  345.                 console_print(player, "You have no access to that command")
  346.                 return
  347.         }
  348.         new szArgc = read_argc()
  349.        
  350.         if(szArgc >= 3)
  351.         {
  352.                 console_print(player, "Too many arguments supplied.")
  353.                 return
  354.         }
  355.         else if(szArgc == 1)
  356.                 return
  357.                
  358.         new szArgv[10], szTemp[512]
  359.         read_argv(1, szArgv, 9)
  360.        
  361.         new iTime = str_to_num(szArgv)
  362.        
  363.         if(iTime == 0)
  364.         {
  365.                 #if defined SQLX
  366.                         formatex(szTemp, 511, "TRUNCATE TABLE `bank`")
  367.                        
  368.                         SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp)
  369.                 #else
  370.                         nvault_prune(g_hVault, 0, 0)
  371.                 #endif
  372.                
  373.                 new iPlayers[32], iNum
  374.                 get_players(iPlayers, iNum)
  375.                
  376.                 new player2
  377.                 for(new i = 0; i < iNum; i++)
  378.                 {
  379.                         player2 = iPlayers[i]
  380.                        
  381.                         g_iBank[player2] = 0
  382.                 }
  383.         }
  384.         else
  385.         {
  386.                 #if defined SQLX
  387.                
  388.                         formatex(szTemp, 511, "DELETE FROM `bank` WHERE last_played<(SYSDATE() - INTERVAL '%d' DAY)", iTime)
  389.                        
  390.                         SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp)
  391.                 #else
  392.                         nvault_prune(g_hVault, 0, get_systime() - (iTime * 86400))
  393.                 #endif
  394.         }
  395. }
  396.