#include #include #include #include //#define SQLX #define ADMIN_LEVEL_TO_RESET ADMIN_BAN new const PLUGIN_VERSION[] = "1.1.5" #if defined SQLX new SQL_HOST[] = "127.0.0.1" new SQL_USER[] = "root" new SQL_PASS[] = "yoursqlpasswordhere" new SQL_DB[] = "amx" new Handle:g_SqlTuple new g_Error[512] #else new g_hVault #endif const SIZE = 1536 new CvarAutoSave, CvarAutoLoad, CvarBankLimit, CvarBankBlockStart, CvarBankAdvertiseInterval new g_iSteamID[33][32], g_iBank[33], g_iAmmoPacks[33], bool:IsManual[33], bool:IsAll[33] #if defined SQLX #include #else #include #endif public plugin_init() { register_plugin("[ZP 5.0] Ammo Packs Bank", PLUGIN_VERSION, "Excalibur.007") register_dictionary("zp50_bank.txt") register_clcmd("say", "OnClientChat") register_clcmd("say_team", "OnClientChat") register_concmd("zp_bank_reset", "OnAdminReset", ADMIN_LEVEL_TO_RESET, "- resets bank in terms of days. 0 to clean all.") CvarAutoSave = register_cvar("zp_bank_auto_save", "1") CvarAutoLoad = register_cvar("zp_bank_auto_load", "1") CvarBankLimit = register_cvar("zp_bank_limit", "1000") CvarBankBlockStart = register_cvar("zp_bank_block_start", "1") CvarBankAdvertiseInterval = register_cvar("zp_bank_advertise_interval", "60.0") #if defined SQLX set_task(0.5, "MySQL_Init") #else g_hVault = nvault_open("zp50_ammo_packs_bank") if(g_hVault == INVALID_HANDLE) set_fail_state("Unable to create/load vault 'zp50_ammo_packs_bank'") #endif } public plugin_cfg() { set_task(get_pcvar_float(CvarBankAdvertiseInterval), "AdvertiseBankInfo", 0) } public AdvertiseBankInfo() { new iPlayers[32], iNum get_players(iPlayers, iNum, "ch") new player for(new i = 0; i < iNum; i++) { player = iPlayers[i] zp_colored_print(player, "%L", player, "BANK_ADVERTISE") } } public client_putinserver(player) { if(get_pcvar_num(CvarBankBlockStart)) zp_ammopacks_set(player, 0) } public client_disconnect(player) { if(get_pcvar_num(CvarAutoSave)) { #if defined SQLX Save_MySQL(player) #else Save_nVault(player) #endif } g_iSteamID[player][0] = 0 g_iBank[player] = 0 g_iAmmoPacks[player] = 0 IsManual[player] = false IsAll[player] = false } public client_authorized(player) { get_user_authid(player, g_iSteamID[player], 31) if(get_pcvar_num(CvarAutoLoad)) { #if defined SQLX Load_MySQL(player) #else Load_nVault(player) #endif } } public OnClientChat(player) { static szArgs[32] read_args(szArgs, 31) remove_quotes(szArgs) static szArg1[32], szArg2[32], szArg3[32] szArg1[0] = '^0' szArg2[0] = '^0' szArg3[0] = '^0' parse(szArgs, szArg1, 31, szArg2, 31, szArg3, 32) new iValue = str_to_num(szArg2) g_iAmmoPacks[player] = zp_ammopacks_get(player) new iBankLimit = get_pcvar_num(CvarBankLimit) if(equali(szArg1, "/deposit", 8) || equali(szArg1, "deposit", 7)) { if(iValue > g_iAmmoPacks[player]) { iValue = g_iAmmoPacks[player] } else if(equali(szArg2, "all", 3)) { iValue = g_iAmmoPacks[player] IsAll[player] = true } if(iValue <= 0 && !IsAll[player]) { zp_colored_print(player, "%L", player, "BANK_INVALID_AMOUNT") return PLUGIN_HANDLED } IsAll[player] = false IsManual[player] = true new iTemp = g_iBank[player] g_iBank[player] += iValue if(g_iBank[player] > iBankLimit) { zp_ammopacks_set(player, g_iAmmoPacks[player] + g_iBank[player] - iBankLimit) iValue = iBankLimit - iTemp g_iBank[player] = iBankLimit } else { zp_ammopacks_set(player, g_iAmmoPacks[player] - iValue) } g_iAmmoPacks[player] -= iValue if(get_pcvar_num(CvarAutoSave)) { #if defined SQLX Save_MySQL(player) #else Save_nVault(player) #endif } zp_colored_print(player, "%L", player, "BANK_DEPOSIT", iValue) return PLUGIN_HANDLED } else if(equali(szArg1, "/withdraw", 9) || equali(szArg1, "withdraw", 8)) { if(iValue > g_iBank[player]) { iValue = g_iBank[player] } else if(equali(szArg2, "all", 3)) { iValue = g_iBank[player] IsAll[player] = true } if(iValue <= 0 && !IsAll[player]) { zp_colored_print(player, "%L", player, "BANK_INVALID_AMOUNT") return PLUGIN_HANDLED } IsAll[player] = false IsManual[player] = true zp_ammopacks_set(player, g_iAmmoPacks[player] + iValue) g_iBank[player] -= iValue g_iAmmoPacks[player] += iValue if(get_pcvar_num(CvarAutoSave)) { #if defined SQLX Save_MySQL(player) #else Save_nVault(player) #endif } zp_colored_print(player, "%L", player, "BANK_WITHDRAW", iValue) return PLUGIN_HANDLED } else if(equali(szArg1, "/bank", 5) || equali(szArg1, "bank", 4)) { zp_colored_print(player, "%L", player, "BANK_BALANCE", g_iBank[player]) return PLUGIN_HANDLED } else if(equali(szArg1, "/donate", 7) || equali(szArg1, "donate", 6)) { new iValue = str_to_num(szArg3) if(iValue > g_iBank[player]) { zp_colored_print(player, "%L", player, "BANK_DONATE_HIGHER_AMOUNT") return PLUGIN_HANDLED } if(iValue <= 0) { zp_colored_print(player, "%L", player, "BANK_INVALID_AMOUNT") return PLUGIN_HANDLED } new target = cmd_target(player, szArg2, CMDTARGET_NO_BOTS) if(!target) { zp_colored_print(player, "%L", player, "BANK_INVALID_TARGET") return PLUGIN_HANDLED } new iTemp = g_iBank[player] new szNamePlayer[32], szNameTarget[32] get_user_name(player, szNamePlayer, 31) get_user_name(target, szNameTarget, 31) g_iBank[player] -= iValue g_iBank[target] += iValue if(g_iBank[target] > iBankLimit) { g_iBank[player] += (g_iBank[target] - iBankLimit) g_iBank[target] = iBankLimit iValue = iBankLimit - iTemp } if(get_pcvar_num(CvarAutoSave)) { #if defined SQLX Save_MySQL(player) Save_MySQL(target) #else Save_nVault(player) Save_nVault(target) #endif } zp_colored_print(player, "%L", player, "BANK_DONATE_CHAT_TO_PLAYER", iValue, szNameTarget) zp_colored_print(target, "%L", target, "BANK_DONATE_CHAT_TO_TARGET", szNamePlayer, iValue) return PLUGIN_HANDLED } else if(equali(szArg1, "/bankhelp", 9) || equali(szArg1, "bankhelp", 8)) { new msg[SIZE + 1], len = 0 len += format(msg[len], SIZE - len, "") len += format(msg[len], SIZE - len, "

[BANK COMMANDS]
") len += format(msg[len], SIZE - len, "------------------------------------------------------------------------

") len += format(msg[len], SIZE - len, "/wyplac or /wyplac all
") len += format(msg[len], SIZE - len, "- Withdraws an amount of ammo packs from the bank storage

") len += format(msg[len], SIZE - len, "------------------------------------------------------------------------

") len += format(msg[len], SIZE - len, "/wplac or /wplac all

") len += format(msg[len], SIZE - len, "------------------------------------------------------------------------

") len += format(msg[len], SIZE - len, "- Deposits an amount of ammo packs to the bank storage

") len += format(msg[len], SIZE - len, "- Checks your bank status

") len += format(msg[len], SIZE - len, "------------------------------------------------------------------------

") len += format(msg[len], SIZE - len, "/daj

") len += format(msg[len], SIZE - len, "- Donates an amount of ammo packs to the specified player

") len += format(msg[len], SIZE - len, "------------------------------------------------------------------------

") len += format(msg[len], SIZE - len, "Note: Commands can be entered without ^"/^" infront.

") len += format(msg[len], SIZE - len, "") show_motd(player, msg, "Bank Help") return PLUGIN_CONTINUE } else if(equali(szArg1, "/banksave", 9) || equali(szArg1, "banksave", 8)) { #if defined SQLX Save_MySQL(player) #else Save_nVault(player) #endif } else if(equali(szArg1, "/bankload", 9) || equali(szArg1, "bankload", 8)) { #if defined SQLX Load_MySQL(player) #else Load_nVault(player) #endif } else { return PLUGIN_CONTINUE } return PLUGIN_CONTINUE } public OnAdminReset(player, level, cid) { if(!cmd_access(player, level, cid, 1)) { console_print(player, "You have no access to that command") return } new szArgc = read_argc() if(szArgc >= 3) { console_print(player, "Too many arguments supplied.") return } else if(szArgc == 1) return new szArgv[10], szTemp[512] read_argv(1, szArgv, 9) new iTime = str_to_num(szArgv) if(iTime == 0) { #if defined SQLX formatex(szTemp, 511, "TRUNCATE TABLE `bank`") SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp) #else nvault_prune(g_hVault, 0, 0) #endif new iPlayers[32], iNum get_players(iPlayers, iNum) new player2 for(new i = 0; i < iNum; i++) { player2 = iPlayers[i] g_iBank[player2] = 0 } } else { #if defined SQLX formatex(szTemp, 511, "DELETE FROM `bank` WHERE last_played<(SYSDATE() - INTERVAL '%d' DAY)", iTime) SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", szTemp) #else nvault_prune(g_hVault, 0, get_systime() - (iTime * 86400)) #endif } }