PHP Code:
#include <amxmodx>
#include <nvault>
#include <unixtime>
#define TAG "^4[VIP]"
#define VIP_FLAG ADMIN_KICK
#define is_vip(%0) (get_user_flags(%0) & VIP_FLAG)
#if !defined MAX_PLAYERS
#define MAX_PLAYERS 32
#endif
#if !defined MAX_AUTHID_LENGTH
#define MAX_AUTHID_LENGTH 64
#endif
const DAY_IN_SECONDS = 86400
enum _:VIP_INFO
{
szMenuName[64],
iTime,
iPrice
}
new const g_eVIPINFO[][VIP_INFO] =
{
//MENU NAME DAYS PRICE
{"Buy VIP for 1 day", 1, 150},
{"Buy VIP for 3 days", 3, 450},
{"Buy VIP for 7 days", 7, 1050},
}
native jb_get_user_coins(id);
native jb_set_user_coins(id, amount);
new g_nVault;
new const g_sznVaultName[] = "vip_jb";
new g_iVIPTime[MAX_PLAYERS + 1];
new const g_szAuthID[MAX_PLAYERS + 1][MAX_AUTHID_LENGTH];
public plugin_init()
{
register_plugin("Buy VIP", "0.1", "AMXX Community");
register_clcmd("say /buyvip", "buyCmd");
register_clcmd("say_team /buyvip", "buyCmd");
g_nVault = nvault_open(g_sznVaultName);
if(g_nVault == INVALID_HANDLE)
{
set_fail_state("Couldn't open ^"%s^" nvault file", g_sznVaultName);
}
}
public plugin_end()
{
nvault_close(g_nVault);
}
public client_authorized(id)
{
g_iVIPTime[id] = -1;
get_user_authid(id, g_szAuthID[id], charsmax(g_szAuthID[]))
check_vip(id);
}
check_vip(const id)
{
new iTs, szData[12];
if(nvault_lookup(g_nVault, g_szAuthID[id], szData, charsmax(szData), iTs))
{
g_iVIPTime[id] = str_to_num(szData);
if(g_iVIPTime[id] >= get_systime())
set_user_flags(id, VIP_FLAG);
else g_iVIPTime[id] = -1;
}
}
public buyCmd(id)
{
new iMenu = menu_create("\r[VIP]\w Buy temporar\y VIP", "menu_handler");
for(new i; i < sizeof(g_eVIPINFO); i++)
{
menu_additem(iMenu, g_eVIPINFO[i][szMenuName]);
}
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
if(is_user_connected(id))
menu_display(id, iMenu, 0, -1);
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
if(is_vip(id))
{
client_print_color(id, print_team_default, "^4%s^1 You already have^4 VIP^1!", TAG);
return PLUGIN_HANDLED;
}
if(is_vip(id) && g_iVIPTime[id] != -1)
{
new iYear, iMonth, iDay, iHour, iMinute, iSecond;
UnixToTime(g_iVIPTime[id], iYear, iMonth, iDay, iHour, iMinute, iSecond);
client_print_color(id, print_team_default, "^4%s^1 You already have^4 VIP^1 until^3 %i/%i/%i^1 at^3 %i:%i:%i",
TAG, iDay, iMonth, iYear, iHour, iMinute, iSecond);
buyCmd(id);
return PLUGIN_HANDLED;
}
give_user_vip(id, item);
return PLUGIN_CONTINUE;
}
give_user_vip(const id, const level)
{
new iCoins = jb_get_user_coins(id);
if(iCoins - g_eVIPINFO[level][iPrice] < 0)
{
client_print_color(id, print_team_default, "%s^1 You don't have enough^4 coins^1! You need^3 %i^1 more^4 coins^1.", TAG, g_eVIPINFO[level][iPrice] - iCoins);
return PLUGIN_HANDLED;
}
jb_set_user_coins(id, iCoins - g_eVIPINFO[level][iPrice]);
set_user_flags(id, VIP_FLAG);
new szData[12];
g_iVIPTime[id] = get_systime(g_eVIPINFO[level][iTime] * DAY_IN_SECONDS);
num_to_str(g_iVIPTime[id], szData, charsmax(szData));
nvault_set(g_nVault, g_szAuthID[id], szData);
new iYear, iMonth, iDay, iHour, iMinute, iSecond;
UnixToTime(g_iVIPTime[id], iYear, iMonth, iDay, iHour, iMinute, iSecond);
client_print_color(id, print_team_default, "%s^1 You bought^4 VIP^1 for^3 %i day%s^1. Expire time:^3 %i/%i/%i^1 at^3 %i:%i:%i^1.",
TAG, g_eVIPINFO[level][iTime], g_eVIPINFO[level][iTime] > 1 ? "s" : "", iDay, iMonth, iYear, iHour, iMinute, iSecond);
client_print_color(id, print_team_default, "%s^1 Price:^3 %i^1. Balance:^3 %i^1", TAG, g_eVIPINFO[level][iPrice], jb_get_user_coins(id));
return PLUGIN_CONTINUE;
}
}