#include <zombie_escape>
#include <ze_vip>
// Const.
static const g_szLocalFile[] = "addons/amxmodx/configs/ze_vips.ini"
// CVARs
new g_pCvarOneWeekPrice,
g_pCvarTwoWeekPrice,
g_pCvarVIPFlags,
g_pCvarAutoUpdatePW
// Variables
new g_iOneOrTwo, Array:g_aBought;
public plugin_natives()
{
register_native("ze_open_buy_vip_menu", "native_ze_open_buy_vip_menu", 1)
}
public plugin_init()
{
register_plugin("Buy VIP", "1.0", "Raheem")
// Commands
register_clcmd("say /buy_vip", "ShowBuyVIPMenu")
register_clcmd("say_team /buy_vip", "ShowBuyVIPMenu")
register_clcmd("Enter_Password", "cmdEnterPassword")
// CVARs
g_pCvarOneWeekPrice = register_cvar("one_week_vip_price", "25000")
g_pCvarTwoWeekPrice = register_cvar("two_week_vip_price", "40000")
g_pCvarVIPFlags = register_cvar("buy_vip_flags", "abcde")
g_pCvarAutoUpdatePW = register_cvar("auto_update_setinfo", "1")
// Create dynamic arrays
g_aBought = ArrayCreate(34)
}
public native_ze_open_buy_vip_menu(id)
{
ShowBuyVIPMenu(id)
}
public ze_game_started()
{
ArrayClear(g_aBought)
}
public ShowBuyVIPMenu(id)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE
if (IsPlayerInArray(g_aBought, id))
{
client_print_color(id, print_team_default, "^3You will be VIP next round^1, ^3please be patient^1!")
return PLUGIN_HANDLED
}
if (ze_is_user_vip(id))
{
client_print_color(id, print_team_default, "^3You are already VIP^1!")
return PLUGIN_HANDLED
}
new iMenu = menu_create("\rChoose V.I.P Plan\w:", "BuyVIP_Menu_Handler")
new iPlayerEC
iPlayerEC = ze_get_escape_coins(id)
new szItemText[128]
if (iPlayerEC >= get_pcvar_num(g_pCvarOneWeekPrice))
{
formatex(szItemText, charsmax(szItemText), "\yOne Week \w- \r%i", get_pcvar_num(g_pCvarOneWeekPrice))
menu_additem(iMenu, szItemText, "", 0)
}
else
{
formatex(szItemText, charsmax(szItemText), "\dOne Week - \r%i", get_pcvar_num(g_pCvarOneWeekPrice))
menu_additem(iMenu, szItemText, "", 0)
}
if (iPlayerEC >= get_pcvar_num(g_pCvarTwoWeekPrice))
{
formatex(szItemText, charsmax(szItemText), "\yTwo Weeks \w- \r%i^n^n\rNOTE: Your VIP will be saved with SteamID.", get_pcvar_num(g_pCvarTwoWeekPrice))
menu_additem(iMenu, szItemText, "", 0)
}
else
{
formatex(szItemText, charsmax(szItemText), "\dTwo Weeks - \r%i^n^n\rNOTE: Your VIP will be saved with SteamID.", get_pcvar_num(g_pCvarTwoWeekPrice))
menu_additem(iMenu, szItemText, "", 0)
}
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, iMenu, 0)
return PLUGIN_CONTINUE
}
public BuyVIP_Menu_Handler(id, iMenu, iItem)
{
if(!is_user_connected(id) || ze_is_user_vip(id))
return PLUGIN_HANDLED
new iPlayerEC
iPlayerEC = ze_get_escape_coins(id)
switch(iItem)
{
case 0:
{
if (iPlayerEC >= get_pcvar_num(g_pCvarOneWeekPrice))
{
client_cmd(id, "messagemode Enter_Password")
g_iOneOrTwo = 1;
}
else
{
client_print_color(id, print_team_red, "^3WARNING^1: ^4Insufficient Funds^1!")
PlaySound(id, "vox/warning.wav")
}
}
case 1:
{
if (iPlayerEC >= get_pcvar_num(g_pCvarTwoWeekPrice))
{
client_cmd(id, "messagemode Enter_Password")
g_iOneOrTwo = 2;
}
else
{
client_print_color(id, print_team_red, "^3WARNING^1: ^4Insufficient Funds^1!")
PlaySound(id, "vox/warning.wav")
}
}
}
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
public cmdEnterPassword(id)
{
new szPassword[32]
read_args(szPassword, charsmax(szPassword))
remove_quotes(szPassword)
if (strlen(szPassword) <= 0)
{
client_print_color(id, print_team_red, "^3ERROR^1: ^4You can't use empty password^1!")
return
}
new szAuthId[34], szName[32]
get_user_authid(id, szAuthId, charsmax(szAuthId))
get_user_name(id, szName, charsmax(szName))
new szFlags[30]
get_pcvar_string(g_pCvarVIPFlags, szFlags, charsmax(szFlags))
new szExpireDate[16]
if (g_iOneOrTwo == 1)
{
get_date(7, szExpireDate, charsmax(szExpireDate))
}
else if (g_iOneOrTwo == 2)
{
get_date(14, szExpireDate, charsmax(szExpireDate))
}
// Format line to be added to ze_vips.ini
new szAddLine[128], iFileHandler
formatex(szAddLine, charsmax(szAddLine), "^n^"%s^" ^"%s^" ^"%s^" ^"%s^" ;%s", szAuthId, szPassword, szFlags, szExpireDate, szName)
iFileHandler = fopen(g_szLocalFile, "at")
fputs(iFileHandler, szAddLine)
fclose(iFileHandler)
if (get_pcvar_num(g_pCvarAutoUpdatePW) == 1)
{
new szFormatPW[64]
formatex(szFormatPW, charsmax(szFormatPW), "setinfo _pw ^"%s^"", szPassword)
Send_Cmd(id, szFormatPW)
}
client_print_color(id, print_team_default, "^3Successfully bought^1, ^3your VIP will expire in^1: ^4%s^1!", szExpireDate)
if (g_iOneOrTwo == 1)
{
ze_set_escape_coins(id, ze_get_escape_coins(id) - get_pcvar_num(g_pCvarOneWeekPrice))
}
else if (g_iOneOrTwo == 2)
{
ze_set_escape_coins(id, ze_get_escape_coins(id) - get_pcvar_num(g_pCvarTwoWeekPrice))
}
ArrayPushString(g_aBought, szAuthId)
}
// Not written by me
stock get_date(days, string[], chars)
{
new y, m, d
date(y, m ,d)
d+=days
new go = true
while(go) {
switch(m) {
case 1,3, 5, 7, 8, 10: {
if(d>31) { d=d-31; m++; }
else go = false
}
case 2: {
if(d>28) { d=d-28; m++; }
else go = false
}
case 4, 6, 9, 11: {
if(d>30) { d=d-30; m++; }
else go = false
}
case 12: {
if(d>31) { d=d-31; y++; m=1; }
else go = false
}
}
}
formatex(string, chars, "%d-%d-%d", d, m, y)
}
// Useful slow hacking to auto set pw for users
stock Send_Cmd(id, szCmd[])
{
message_begin(MSG_ONE, 51, _, id)
write_byte(strlen(szCmd) + 2)
write_byte(10)
write_string(szCmd)
message_end()
}
// Check if player steamid in given array or not
stock IsPlayerInArray(Array:aSteamArray, id)
{
new szAuthId[34], szSavedAuthId[34];
get_user_authid(id, szAuthId, charsmax(szAuthId))
for(new i = 0; i < ArraySize(aSteamArray); i++)
{
ArrayGetString(aSteamArray, i, szSavedAuthId, charsmax(szSavedAuthId))
if (equal(szSavedAuthId, szAuthId))
{
return true
}
}
return false
}