hi all can someone make these changes to this vip plugin i would greatly appreciate it
make the vip menu to close when player leaves the buy zone.. its very unfair that player can open vip menu anytime and anywhere on map ...
menu_buyzone_only 1/0 - the vip menu will work only while player is in buyzone
also another cvar like this to control how much time the vip menu will be active [making this based on mp_buytime would be great]
menu_buytime_lock 1/0 - close and lock the VIP menu when mp_buytime ends [to make it more clear if mp_buytime is "0.25" the vip menu should close and lock 15 secs after players spawns which is the same amount of time he has to buy weapons]
also the vipmenu should not close when selecting the unavailable weapons, for example if i press 4 for AWP while it's still not unavailable the menu will close ...
Code:
#include <amxmodx>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <fakemeta_util>
#define PLUGIN "[SWE] VipSystem"
#define VERSION "1.0"
#define AUTHOR "IIPU3PAK"
static const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
static const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
new gRoundNumber, gBufCount
new gUseRound[33], ITEM[33], gBufName[32][32], gBufNameDeactivate[32][32], gBufWeapon[32][32], gBufRound[32], who[33] = 0 //0 - Игрок, 1 - VIP
new bool:BlockMaps = false
enum _:cvars
{
TAB, USE_ROUND, FLAGS, AUTO_OPEN, MAX_HP, KILL, HEAD, KNIFE, M_KILL, M_HEAD, M_KNIFE, CONNECT, DROP_OR_STRIP, OPEN_ROUND
}
new g_Cvars[cvars]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /vipmenu", "VipMenu")
register_clcmd("say_team /vipmenu", "VipMenu")
register_clcmd("vipmenu", "VipMenu")
RegisterHam(Ham_Spawn, "player", "HamSpawn", 1)
register_event("HLTV", "StartRound", "a", "1=0", "2=0")
register_event("TextMsg", "RestartRound", "a", "2=#Game_will_restart_in","2=#Game_Commencing")
register_event("ResetHUD", "event_ResetHUD", "be")
register_event("DeathMsg", "death", "a", "1>0")
register_dictionary("swe_vipSystem.txt")
}
public client_putinserver(id)
{
if(get_user_flags(id) & g_Cvars[FLAGS])
who[id] = 1
else
who[id] = 0
if(g_Cvars[CONNECT] == 1)
{
if(who[id] >= 1)
{
new iName[32]
get_user_name(id, iName, 31)
ChatColor(0, "%L %L",LANG_PLAYER, "VIP_TAG", LANG_PLAYER, "VIP_CONNECT", iName)
}
}
}
public client_disconnect(id)
who[id] = 0
public plugin_cfg()
{
new block = 0
new Buffer[64], BufCvar[33], BufValue[33]
new const iniPatch[] = "addons/amxmodx/configs/swe_vipSystem.ini"
new FileID = fopen(iniPatch, "rt")
new getMap[33]; get_mapname(getMap, charsmax(getMap))
if(!file_exists(iniPatch))
set_fail_state("^"addons/amxmodx/configs/swe_vipSystem.ini^" Not Found!")
while(!feof(FileID))
{
fgets(FileID, Buffer, charsmax(Buffer))
trim(Buffer)
if(!Buffer[0] || Buffer[0] == ';' || Buffer[0] == '#' || Buffer[0] == '/' && Buffer[1] == '/')
continue
if(equal(Buffer, "[main]"))
{
block = 1
continue
}
else if(equal(Buffer, "[menu]"))
{
block = 2
continue
}
else if(equal(Buffer, "[block]"))
{
block = 3
continue
}
switch(block)
{
case 1:
{
parse(Buffer, BufCvar, charsmax(BufCvar), BufValue, charsmax(BufValue))
if(equal("flags", BufCvar)) g_Cvars[FLAGS] = read_flags(BufValue)
else if(equal("item", BufCvar)) ITEM = BufValue
else if(equal("tab", BufCvar)) g_Cvars[TAB] = str_to_num(BufValue)
else if(equal("connect", BufCvar)) g_Cvars[CONNECT] = str_to_num(BufValue)
else if(equal("drop_or_strip", BufCvar)) g_Cvars[DROP_OR_STRIP] = str_to_num(BufValue)
else if(equal("menu_open", BufCvar)) g_Cvars[AUTO_OPEN] = str_to_num(BufValue)
else if(equal("menu_use_round", BufCvar)) g_Cvars[USE_ROUND] = str_to_num(BufValue)
else if(equal("menu_open_round", BufCvar)) g_Cvars[OPEN_ROUND] = str_to_num(BufValue)
else if(equal("vampire_max_hp", BufCvar)) g_Cvars[MAX_HP] = str_to_num(BufValue)
else if(equal("vampire_kill", BufCvar)) g_Cvars[KILL] = str_to_num(BufValue)
else if(equal("vampire_kill_head", BufCvar)) g_Cvars[HEAD] = str_to_num(BufValue)
else if(equal("vampire_kill_knife", BufCvar)) g_Cvars[KNIFE] = str_to_num(BufValue)
else if(equal("money_kill", BufCvar)) g_Cvars[M_KILL] = str_to_num(BufValue)
else if(equal("money_kill_head", BufCvar)) g_Cvars[M_HEAD] = str_to_num(BufValue)
else if(equal("money_kill_knife", BufCvar)) g_Cvars[M_KNIFE] = str_to_num(BufValue)
}
case 2:
{
new first[32], second[32], third[32], four[32]
parse(Buffer, first, charsmax(first), second, charsmax(second), third, charsmax(third), four, charsmax(four))
copy(gBufName[gBufCount], charsmax(gBufName[]), first)
copy(gBufNameDeactivate[gBufCount], charsmax(gBufNameDeactivate[]), second)
copy(gBufWeapon[gBufCount], charsmax(gBufWeapon[]), third)
gBufRound[gBufCount] = str_to_num(four)
gBufCount++
}
case 3:
{
if(equal(getMap, Buffer))
{
BlockMaps = true
break
}
}
}
}
fclose(FileID)
}
public StartRound()
gRoundNumber++
public RestartRound()
gRoundNumber = -1
public VipMenu(id)
{
if(who[id] == 0)
{
ChatColor(id, "%L %L", LANG_PLAYER, "VIP_TAG", LANG_PLAYER, "VIP_NO_ACCESS")
return PLUGIN_HANDLED
}
if(BlockMaps)
{
ChatColor(id, "%L %L", LANG_PLAYER, "VIP_TAG", LANG_PLAYER, "VIP_BLOCK")
return PLUGIN_HANDLED
}
if(!is_user_alive(id))
{
ChatColor(id, "%L %L", LANG_PLAYER, "VIP_TAG", LANG_PLAYER, "VIP_DEAD")
return PLUGIN_HANDLED
}
if(gRoundNumber < g_Cvars[OPEN_ROUND] - 1)
{
ChatColor(id, "%L %L", LANG_PLAYER, "VIP_TAG", LANG_PLAYER, "VIP_OPEN", g_Cvars[OPEN_ROUND] - 1)
return PLUGIN_HANDLED
}
if(gUseRound[id] >= g_Cvars[USE_ROUND])
{
ChatColor(id, "%L %L", LANG_PLAYER, "VIP_TAG", LANG_PLAYER, "VIP_USED")
return PLUGIN_HANDLED
}
new menu = menu_create("\r[SWE] \yVip System", "menu_handler")
new info[128]
for(new i = 0; i < gBufCount; i++)
{
if(gRoundNumber < gBufRound[i] - 1)
{
format(info, charsmax(info), "\d%s %L", gBufNameDeactivate[i], LANG_PLAYER, "VIP_DEACTIVATE", gBufRound[i] - 1)
menu_additem(menu, info, "0")
}
else
menu_additem(menu, gBufName[i], "1")
}
menu_setprop(menu, MPROP_BACKNAME, "Back")
menu_setprop(menu, MPROP_NEXTNAME, "Next")
menu_setprop(menu, MPROP_EXITNAME, "Exit")
menu_display(id, menu, 0)
return PLUGIN_HANDLED
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64], access, callback
menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)
new key = str_to_num(data)
switch(key)
{
case 0:
{
ChatColor(id, "%L %L", LANG_PLAYER, "VIP_TAG", LANG_PLAYER, "VIP_WEAPON", gBufRound[item] - 1)
}
case 1:
{
if(!is_user_alive(id))
{
ChatColor(id, "%L %L", LANG_PLAYER, "VIP_TAG", LANG_PLAYER, "VIP_DEAD")
return PLUGIN_HANDLED
}
gUseRound[id] ++
drop_weapons(id, 1)
give_weapon(id, gBufWeapon[item])
}
}
return PLUGIN_HANDLED
}
public HamSpawn(id)
{
if(who[id] == 1)
{
if(BlockMaps)
return
if(!is_user_alive(id))
return
gUseRound[id] = 0
if(g_Cvars[AUTO_OPEN] == 1)
{
if(!cs_get_user_hasprim(id) && gRoundNumber >= g_Cvars[OPEN_ROUND] - 1)
VipMenu(id)
}
if(containi(ITEM, "s") != -1)
{
drop_weapons(id, 2)
give_item(id, "weapon_deagle")
cs_set_user_bpammo(id, CSW_DEAGLE, 36)
}
if(containi(ITEM, "g") != -1)
{
give_item(id, "weapon_hegrenade")
give_item(id, "weapon_smokegrenade")
give_item(id, "weapon_flashbang")
give_item(id, "weapon_flashbang")
}
if(containi(ITEM, "d") != -1)
{
if(get_user_team(id) == 2)
cs_set_user_defuse(id, 1, 0, 160, 0, _, 0)
}
if(containi(ITEM, "a") != -1)
give_item(id, "item_assaultsuit")
}
}
////////////////////////// Kill Bonus
public death()
{
if(BlockMaps)
return
new Killer = read_data(1)
new HeadShot = read_data(3)
if(who[Killer] == 0)
return
if(g_Cvars[MAX_HP] > 0)
{
/////HP
if(g_Cvars[KNIFE] > 0 && get_user_weapon(Killer) == CSW_KNIFE)
set_user_health(Killer, get_user_health(Killer) + g_Cvars[KNIFE])
if(g_Cvars[HEAD] > 0 && HeadShot)
set_user_health(Killer, get_user_health(Killer) + g_Cvars[HEAD])
else{
if(g_Cvars[KILL] > 0)
set_user_health(Killer, get_user_health(Killer) + g_Cvars[KILL])
}
if(get_user_health(Killer) > g_Cvars[MAX_HP])
set_user_health(Killer, g_Cvars[MAX_HP])
}
if(g_Cvars[M_KILL] > 0)
{
/////Money
if(g_Cvars[M_KNIFE] > 0 && get_user_weapon(Killer) == CSW_KNIFE)
set_user_health(Killer, get_user_health(Killer) + g_Cvars[M_KNIFE])
if(g_Cvars[M_HEAD] > 0 && HeadShot)
cs_set_user_money(Killer, cs_get_user_money(Killer) + g_Cvars[M_HEAD])
else
if(g_Cvars[M_KILL] > 0)
cs_set_user_money(Killer, cs_get_user_money(Killer) + g_Cvars[M_KILL])
}
}
public event_ResetHUD(id)
{
if(g_Cvars[TAB] == 1)
set_task(0.5, "VIP", id + 6910)
}
public VIP(TaskID)
{
new id = TaskID - 6910
if(who[id] >= 1)
{
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()
}
return PLUGIN_HANDLED
}
stock give_weapon(const id, const wpName[32])
{
static const weaponList[18][16] = {"weapon_scout", "weapon_xm1014", "weapon_mac10",
"weapon_aug", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_awp",
"weapon_mp5navy", "weapon_m249", "weapon_m3",
"weapon_m4a1", "weapon_tmp", "weapon_g3sg1",
"weapon_sg552", "weapon_ak47", "weapon_p90"}
static const weaponListCSW[18] = {CSW_SCOUT, CSW_XM1014, CSW_MAC10, CSW_AUG, CSW_UMP45,
CSW_SG550, CSW_GALIL, CSW_FAMAS, CSW_AWP, CSW_MP5NAVY,
CSW_M249, CSW_M3, CSW_M4A1, CSW_TMP, CSW_G3SG1, CSW_SG552,
CSW_AK47, CSW_P90}
static const brammoList[18] = {90, 32, 100, 90, 100, 90, 90, 90, 30, 120, 200, 32, 90, 120, 90, 90, 90, 100}
new i
while(i <= charsmax(weaponList))
{
if(equal(weaponList[i], wpName))
{
break
}
i++
}
give_item(id, weaponList[i])
cs_set_user_bpammo(id, weaponListCSW[i], brammoList[i])
return weaponList[i]
}
stock drop_weapons(id, dropwhat)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)
for (i = 0; i < num; i++)
{
weaponid = weapons[i]
if((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
{
static wname[32]
get_weaponname(weaponid, wname, charsmax(wname))
if(g_Cvars[DROP_OR_STRIP] == 0)
fm_strip_user_gun(id, weapons[i])
else
engclient_cmd(id, "drop", wname)
}
}
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32], i
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!n", "^1") // Default Color
replace_all(msg, 190, "!t", "^3") // Team Color
if(id)players[0] = id; else get_players(players, count, "ch")
{
for(i = 0; i < count; i++)
{
if(is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
}