#include <amxmodx>
#include <amxmisc>
#include <zp50_ammopacks>
#include <zp50_colorchat>
//#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 <zp50_bank_sqlx>
#else
#include <zp50_bank_nvault>
#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, "<html><body>")
len += format(msg[len], SIZE - len, "<p>[BANK COMMANDS]<br/>")
len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
len += format(msg[len], SIZE - len, "/wyplac <ilosc> or /wyplac all<br/>")
len += format(msg[len], SIZE - len, "- Withdraws an amount of ammo packs from the bank storage</p>")
len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
len += format(msg[len], SIZE - len, "/wplac <ilosc> or /wplac all</p>")
len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
len += format(msg[len], SIZE - len, "- Deposits an amount of ammo packs to the bank storage</p>")
len += format(msg[len], SIZE - len, "- Checks your bank status</p>")
len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
len += format(msg[len], SIZE - len, "/daj <ilosc> <nick gracza> </p>")
len += format(msg[len], SIZE - len, "- Donates an amount of ammo packs to the specified player</p>")
len += format(msg[len], SIZE - len, "------------------------------------------------------------------------</p>")
len += format(msg[len], SIZE - len, "Note: Commands can be entered without ^"/^" infront.</p>")
len += format(msg[len], SIZE - len, "</body></html>")
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
}
}