I made a buy menu for my server so it can look more like in CS GO but the molotov/napalm grenade crashes the server somehow. No error shows up so i don't know from where the error is. Plugin is not exactly finished so don't look at it much :s. I'll resume it after i fix the molotov/napalm issue.
PHP Code:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <fun>
#define m_rpgPlayerItems_Slot0 367
#define m_pNext 42
#define m_iId 43
#define SLOT_PRIMARY 1
#define SLOT_SECONDARY 2
#define TASK_CHECK 3243242
#define TASK_DECOY 32432423
#define TASK_DESTROY_DECOY 23423423
#define MOLOTOV_TASKID_SOUND 34534
#define MOLOTOV_TASKID_STOP 325235
#define MOLOTOV_TASKID_DAMAGE 346343
enum
{
HANDGUN,
SHOTGUN,
SUBMACHINEGUN,
RIFLE,
MACHINEGUN,
GRENADES,
EQUIPMENT,
MAX_MAIN_ITEMS
}
new const g_MainMenuItemNames[MAX_MAIN_ITEMS][32] =
{
"Handgun",
"Shotgun",
"Sub-Machine Gun",
"Rifle",
"Machine Gun^n",
"Grenades",
"Equipment"
}
enum
{
I_HE,
I_FLASH,
I_SMOKE,
I_NAPALM,
I_DECOY,
I_MAX_NADES
}
new const g_SubMenuItemNamesT[MAX_MAIN_ITEMS][9][32] =
{
{ "9×19mm Sidearm", "KM .45 Tactical", "228 Compact", "Night Hawk .50c", ".40 Dual Elites", "", "", "", "" },
{ "Leone 12 Gauge Super", "Leone YG1265 Auto Shotgun", "", "", "", "", "", "", "" },
{ "Ingram Mac-10", "KM Sub-Machine Gun", "KM UMP45", "ES C90", "", "", "", "", "" },
{ "IDF Defender", "CV-47", "Schmidt Scout", "Krieg 552", "Magnum Sniper Rifle", "D3/AU-1", "", "", "" },
{ "M249", "", "", "", "", "", "", "", "" },
{ "He Grenade", "Flashbang", "Smoke Grenade", "Molotov", "Decoy", "", "", "", "" },
{ "Kevlar Vest", "Kevlar Vest + Helmet", "NightVision Goggles", "", "", "", "", "", "" }
};
new const g_SubMenuItemCSWT[MAX_MAIN_ITEMS][9] =
{
{ CSW_GLOCK18, CSW_USP, CSW_P228, CSW_DEAGLE, CSW_ELITE, 0, 0, 0, 0 },
{ CSW_M3, CSW_XM1014, 0, 0, 0, 0, 0, 0, 0 },
{ CSW_MAC10, CSW_MP5NAVY, CSW_UMP45, CSW_P90, 0, 0, 0, 0, 0 },
{ CSW_GALIL, CSW_AK47, CSW_SCOUT, CSW_SG552, CSW_AWP, CSW_G3SG1, 0, 0, 0 },
{ CSW_M249, 0, 0, 0, 0, 0, 0, 0, 0 },
{ CSW_HEGRENADE, CSW_FLASHBANG, CSW_SMOKEGRENADE, 0, 0, 0, 0, 0, 0 },
{ CSW_VEST, CSW_VESTHELM, 0, 0, 0, 0, 0, 0, 0 }
};
new const g_SubMenuItemPriceT[MAX_MAIN_ITEMS][9] =
{
{ 400, 500, 600, 650, 800, 0, 0, 0, 0 },
{ 1700, 3000, 0, 0, 0, 0, 0, 0, 0 },
{ 1400, 1500, 1700, 2350, 0, 0, 0, 0, 0 },
{ 2000, 2500, 2750, 3500, 4750, 5000, 0, 0, 0 },
{ 5750, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 300, 200, 300, 1, 1, 0, 0, 0, 0 },
{ 650, 1000, 1250, 0, 0, 0, 0, 0, 0 }
};
new const g_SubMenuItemNamesCT[MAX_MAIN_ITEMS][9][32] =
{
{ "9×19mm Sidearm", "KM .45 Tactical", "228 Compact", "Night Hawk .50c", "ES Five-seven", "", "", "", "" },
{ "Leone 12 Gauge Super", "Leone YG1265 Auto Shotgun", "", "", "", "", "", "", "" },
{ "Schmidt Machine Pistol", "KM Sub-Machine Gun", "KM UMP45", "ES C90", "", "", "", "", "" },
{ "Clarion 5.56", "Schmidt Scout", "Maverick M4A1 Carbine", "Bullpup", "Krieg 550 Commando", "Magnum Sniper Rifle", "", "", "" },
{ "M249", "", "", "", "", "", "", "", "" },
{ "He Grenade", "Flashbang", "Smoke Grenade", "Napalm", "Decoy", "", "", "", "" },
{ "Kevlar Vest", "Kevlar Vest + Helmet", "NightVision Goggles", "Defuse Kit", "Tactical Shield", "", "", "", "" }
};
new const g_SubMenuItemCSWCT[MAX_MAIN_ITEMS][9] =
{
{ CSW_GLOCK18, CSW_USP, CSW_P228, CSW_DEAGLE, CSW_FIVESEVEN, 0, 0, 0, 0 },
{ CSW_M3, CSW_XM1014, 0, 0, 0, 0, 0, 0, 0 },
{ CSW_TMP, CSW_MP5NAVY, CSW_UMP45, CSW_P90, 0, 0, 0, 0, 0 },
{ CSW_FAMAS, CSW_SCOUT, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_AWP, 0, 0, 0 },
{ CSW_M249, 0, 0, 0, 0, 0, 0, 0, 0 },
{ CSW_HEGRENADE, CSW_FLASHBANG, CSW_SMOKEGRENADE, 0, 0, 0, 0, 0, 0 },
{ CSW_VEST, CSW_VESTHELM, 0, 0, 0, 0, 0, 0, 0 }
};
new const g_SubMenuItemPriceCT[MAX_MAIN_ITEMS][9] =
{
{ 400, 500, 600, 650, 750, 0, 0, 0, 0 },
{ 1700, 3000, 0, 0, 0, 0, 0, 0, 0 },
{ 1250, 1500, 1700, 2350, 0, 0, 0, 0, 0 },
{ 2250, 2750, 2100, 3500, 4200, 4750, 0, 0, 0 },
{ 5750, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 300, 200, 300, 1, 1, 0, 0, 0, 0 },
{ 650, 1000, 1250, 200, 2200, 0, 0, 0, 0 }
};
new const g_iWeaponSlot[] =
{
0, // none
2, // P228
1, // SHIELD
1, // SCOUT
4, // HEGRENADE
1, // XM1014
5, // C4
1, // MAC10
1, // AUG
4, // SMOKEGRENADE
2, // ELITE
2, // FIVESEVEN
1, // UMP45
1, // SG550
1, // GALIL
1, // FAMAS
2, // USP
2, // GLOCK18
1, // AWP
1, // MP5NAVY
1, // M249
1, // M3
1, // M4A1
1, // TMP
1, // G3SG1
4, // FLASHBANG
2, // DEAGLE
1, // SG552
1, // AK47
3, // KNIFE (not used)
1, // P90
0, // Kevlar
0, // Kevlar + Helm
0 // NVG
}
new const szWeaponSounds[][32] =
{
"weapons/ak47-1.wav",
"weapons/aug-1.wav",
"weapons/awp1.wav",
"weapons/deagle-1.wav",
"weapons/famas-1.wav",
"weapons/g3sg1-1.wav",
"weapons/galil-1.wav",
"weapons/glock18-2.wav"
}
new g_WeaponBPAmmo[] = {0, 52, 0, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, 0, 100};
new const sz_vNormalHE[] = "models/v_hegrenade.mdl";
new const sz_pNormalHE[] = "models/p_hegrenade.mdl";
new const sz_vNormalSmoke[] = "models/v_smokegrenade.mdl";
new const sz_pNormalSmoke[] = "models/p_smokegrenade.mdl";
new const sz_vNormalShieldSmoke[] = "models/shield/v_smokegrenade.mdl";
new const sz_pNormalShieldSmoke[] = "models/shield/p_smokegrenade.mdl";
new const sz_pMolotov[] = "models/molotov/p_molotov.mdl";
new const sz_vMolotov[] = "models/molotov/v_molotov.mdl";
new const sz_wMolotov[] = "models/molotov/w_molotov.mdl";
new const sz_wBrokeMolotov[] = "models/molotov/w_broke_molotov.mdl";
new const sz_wNapalm[] = "models/napalm/w_napalm.mdl";
new const sz_vNapalm[] = "models/napalm/v_napalm.mdl";
new const sz_pDecoy[] = "models/decoy/p_decoy.mdl";
new const sz_vDecoy[] = "models/decoy/v_decoy.mdl";
new const sz_wDecoy[] = "models/decoy/w_decoy.mdl";
new const sz_vShieldDecoy[] = "models/decoy/v_shield_decoy.mdl";
new const sz_pShieldDecoy[] = "models/decoy/p_shield_decoy.mdl";
new const szFireSound[] = "molotov/molotov_fire.wav";
new const g_MainMenu[] = "Main Menu"
new const g_SecondMenu[] = "Second Menu"
new g_msgBuyClose, gmsgDeathMsg, gmsgScoreInfo, g_iMaxPlayers;
new i_menu_type[33], g_iAutobuy[33][2][64], bool:bHasNade[33][I_MAX_NADES], bool:bGivingNapalm[33], bool:bGivingDecoy[33], bool:bSwitchNapalm[33];
new bool:bSwitchDecoy[33], bool:bBoughtNapalm[33], bool:bBoughtDecoy[33];
new iMenuIDs[2], Float:fNewRoundTime, last_Molotov_ent, g_g, g_SmokeSpr[2], g_FireSpr;
public plugin_init()
{
register_plugin("New Buy Menu", "1.0", "Wicked-");
register_event("HLTV", "round_new", "a", "1=0", "2=0");
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1");
register_forward(FM_EmitSound, "fw_EmitSound");
register_forward(FM_CmdStart, "fw_CmdStart");
RegisterHam(Ham_Spawn, "player", "player_spawn", 1);
RegisterHam(Ham_Killed, "player", "player_killed", 1);
RegisterHam(Ham_AddPlayerItem, "player", "player_additem", 0);
gmsgScoreInfo = get_user_msgid("ScoreInfo");
gmsgDeathMsg = get_user_msgid("DeathMsg");
g_msgBuyClose = get_user_msgid("BuyClose");
register_clcmd("client_buy_open", "clcmd_client_buy_open");
register_clcmd("buy", "player_cmd_buy_main");
register_clcmd("buyammo1", "player_fillAmmo");
register_clcmd("buyammo2", "player_fillAmmo");
register_clcmd("primammo", "player_fillAmmo");
register_clcmd("secammo", "player_fillAmmo");
register_clcmd("autobuy", "player_cmd_autobuy");
register_clcmd("cl_autobuy", "player_cmd_autobuy");
register_clcmd("cl_setautobuy", "player_cmd_setAutobuy");
register_clcmd("rebuy", "player_cmd_rebuy");
register_clcmd("cl_rebuy", "player_cmd_rebuy");
register_clcmd("cl_setrebuy", "player_cmd_setRebuy");
register_menucmd(iMenuIDs[0] = register_menuid(g_MainMenu), 1023, "MainMenuHandler");
register_menucmd(iMenuIDs[1] = register_menuid(g_SecondMenu), 1023, "SecondMenuHandler");
g_iMaxPlayers = get_maxplayers();
return PLUGIN_HANDLED;
}
public plugin_precache()
{
g_FireSpr = precache_model("sprites/flame.spr");
g_SmokeSpr[0] = precache_model("sprites/black_smoke3.spr");
g_SmokeSpr[1] = precache_model("sprites/steam1.spr");
precache_sound(szFireSound);
precache_model(sz_pMolotov);
precache_model(sz_vMolotov);
precache_model(sz_wMolotov);
precache_model(sz_wBrokeMolotov);
precache_model(sz_wNapalm);
precache_model(sz_vNapalm);
precache_model(sz_pDecoy);
precache_model(sz_vDecoy);
precache_model(sz_wDecoy);
precache_model(sz_pShieldDecoy);
precache_model(sz_vShieldDecoy);
}
public client_putinserver(id)
{
for(new i=0;i<I_MAX_NADES;i++)
bHasNade[id][i] = false;
bGivingNapalm[id] = false;
bGivingDecoy[id] = false;
}
public round_new()
{
fNewRoundTime = get_gametime();
new ent;
while((ent = engfunc(EngFunc_FindEntityByString, ent, "model", sz_wMolotov)))
{
if(pev_valid(ent))
engfunc(EngFunc_RemoveEntity, ent);
}
while((ent = engfunc(EngFunc_FindEntityByString, ent, "model", sz_wDecoy)))
{
if(pev_valid(ent))
engfunc(EngFunc_RemoveEntity, ent);
}
}
public fw_CmdStart(id)
{
static i;
if(i++ < 10)
return FMRES_IGNORED;
i = 0;
if(!is_user_alive(id))
return FMRES_IGNORED;
if(pev(id, pev_button) & IN_ATTACK2)
{
static iWeaponID;
iWeaponID = get_user_weapon(id);
if(iWeaponID == CSW_HEGRENADE)
{
if(bHasNade[id][I_NAPALM] && !bHasNade[id][I_HE])
{
bSwitchNapalm[id] = true;
return FMRES_IGNORED;
}
if(!bHasNade[id][I_NAPALM] && bHasNade[id][I_HE])
{
bSwitchNapalm[id] = false;
return FMRES_IGNORED;
}
if(bSwitchNapalm[id])
{
set_pev(id, pev_viewmodel2, sz_vNormalHE);
set_pev(id, pev_weaponmodel2, sz_pNormalHE);
bSwitchNapalm[id] = false;
client_print(id, print_center, "Switched to GRENADE mode");
}
else
{
if(cs_get_user_team(id) == CS_TEAM_T)
{
set_pev(id, pev_viewmodel2, sz_vMolotov);
set_pev(id, pev_weaponmodel2, sz_pMolotov);
set_pev(id, pev_weaponanim, 9);
}
else
set_pev(id, pev_viewmodel2, sz_vNapalm);
bSwitchNapalm[id] = true;
client_print(id, print_center, "Switched to %s mode", cs_get_user_team(id) == CS_TEAM_T ? "MOLOTOV" : "NAPALM");
}
}
else if(iWeaponID == CSW_SMOKEGRENADE && bHasNade[id][I_DECOY])
{
if(bHasNade[id][I_DECOY] && !bHasNade[id][I_SMOKE])
{
bSwitchDecoy[id] = true;
return FMRES_IGNORED;
}
if(!bHasNade[id][I_DECOY] && bHasNade[id][I_SMOKE])
{
bSwitchDecoy[id] = false;
return FMRES_IGNORED;
}
if(bSwitchDecoy[id])
{
if(cs_get_user_shield(id))
{
set_pev(id, pev_viewmodel2, sz_vShieldDecoy);
set_pev(id, pev_weaponmodel2, sz_pShieldDecoy);
}
else
{
set_pev(id, pev_viewmodel2, sz_vDecoy);
set_pev(id, pev_weaponmodel2, sz_pDecoy);
}
bSwitchDecoy[id] = true;
client_print(id, print_center, "Switched to DECOY mode");
}
else
{
if(cs_get_user_shield(id))
{
set_pev(id, pev_viewmodel2, sz_vNormalShieldSmoke);
set_pev(id, pev_weaponmodel2, sz_pNormalShieldSmoke);
}
else
{
set_pev(id, pev_viewmodel2, sz_vNormalSmoke);
set_pev(id, pev_weaponmodel2, sz_pNormalSmoke);
}
bSwitchDecoy[id] = false;
client_print(id, print_center, "Switched to SMOKE mode");
}
}
}
return FMRES_IGNORED;
}
public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE;
new iWeaponID = get_user_weapon(id, iWeaponID, iWeaponID);
if(!cs_get_user_shield(id) && iWeaponID == CSW_HEGRENADE && bHasNade[id][I_NAPALM])
{
if(!bHasNade[id][I_HE])
bSwitchNapalm[id] = true;
if(bSwitchNapalm[id])
{
if(cs_get_user_team(id) == CS_TEAM_T)
{
set_pev(id, pev_viewmodel2, sz_vMolotov);
set_pev(id, pev_weaponmodel2, sz_pMolotov);
}
else
set_pev(id, pev_viewmodel2, sz_vNapalm);
}
}
else if(iWeaponID == CSW_SMOKEGRENADE && bHasNade[id][I_DECOY])
{
if(!bHasNade[id][I_SMOKE])
bSwitchDecoy[id] = true;
if(bSwitchDecoy[id])
{
if(cs_get_user_shield(id))
{
set_pev(id, pev_viewmodel2, sz_vShieldDecoy);
set_pev(id, pev_weaponmodel2, sz_pShieldDecoy);
}
else
{
set_pev(id, pev_viewmodel2, sz_vDecoy);
set_pev(id, pev_weaponmodel2, sz_pDecoy);
}
}
}
return PLUGIN_CONTINUE;
}
public grenade_throw(id, ent, wid)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE;
new info[2];
if(wid == CSW_HEGRENADE)
{
if(bHasNade[id][I_NAPALM] && bSwitchNapalm[id])
{
engfunc(EngFunc_SetModel, ent, cs_get_user_team(id) == CS_TEAM_T ? sz_wMolotov : sz_wNapalm);
bSwitchNapalm[id] = false;
bHasNade[id][I_NAPALM] = false;
set_pev(ent, pev_nextthink, 99999.0);
if(bHasNade[id][I_HE])
{
info[0] = 1;
info[1] = id;
set_task(0.1, "taskGiveNade", _, info);
}
}
else
{
bHasNade[id][I_HE] = false;
if(bHasNade[id][I_NAPALM])
{
info[0] = 1;
info[1] = id;
bGivingNapalm[id] = true;
set_task(0.1, "taskGiveNade", _, info);
}
}
}
else if(wid == CSW_FLASHBANG)
{
if(!user_has_weapon(id, CSW_FLASHBANG))
bHasNade[id][I_FLASH] = false;
}
else if(wid == CSW_SMOKEGRENADE)
{
if(bHasNade[id][I_DECOY] && bSwitchDecoy[id])
{
engfunc(EngFunc_SetModel, ent, sz_wDecoy);
bSwitchDecoy[id] = false;
bHasNade[id][I_DECOY] = false;
set_pev(ent, pev_nextthink, 99999.0);
if(bHasNade[id][I_SMOKE])
{
info[0] = 0;
info[1] = id;
set_task(0.1, "taskGiveNade", _, info);
}
}
else
{
bHasNade[id][I_SMOKE] = false;
if(bHasNade[id][I_DECOY])
{
info[0] = 0;
info[1] = id;
bGivingDecoy[id] = true;
set_task(0.1, "taskGiveNade", _, info);
}
}
}
return PLUGIN_CONTINUE;
}
public taskGiveNade(info[])
{
if(is_user_alive(info[1]))
{
if(info[0])
give_item(info[1], "weapon_hegrenade");
else
give_item(info[1], "weapon_smokegrenade");
}
}
public fw_EmitSound(ent, channel, sample[]) {
static szModel[32];
if(equal(sample[8], "he_bounce", 9))
{
new i;
pev(ent, pev_model, szModel, charsmax(szModel));
if(equal(szModel[9], "lotov/w_molotov.mdl"))
i = 1;
else if(equal(szModel[9], "palm/w_napalm.mdl"))
i = 2;
if(i)
{
if(last_Molotov_ent != ent)
{
new Float:fFriction, Float:fVelocity[3];
pev(ent, pev_friction, fFriction);
pev(ent, pev_velocity, fVelocity);
fFriction *= 1.3;
set_pev(ent, pev_friction, fFriction);
last_Molotov_ent = ent;
grenade_explode(ent, i);
return FMRES_SUPERCEDE;
}
}
}
else if(equal(sample[8], "grenade_hit", 11))
{
pev(ent, pev_model, szModel, charsmax(szModel));
if(equal(szModel[9], "coy/w_decoy.mdl"))
{
activate_decoy(ent);
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
public activate_decoy(ent)
{
set_pev(ent, pev_euser1, random(sizeof(szWeaponSounds)));
set_task(1.0, "decoy_sound", ent+TASK_DECOY);
set_task(random_float(100.0, 200.0), "destroy_decoy", ent+TASK_DESTROY_DECOY);
}
public destroy_decoy(ent)
{
ent -= TASK_DESTROY_DECOY;
if(pev_valid(ent))
engfunc(EngFunc_RemoveEntity, ent);
}
public decoy_sound(ent)
{
ent -= TASK_DECOY
if(pev_valid(ent))
{
emit_sound(ent, CHAN_AUTO, szWeaponSounds[pev(ent, pev_euser1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
set_task(random_float(0.5, 2.0), "decoy_sound", ent+TASK_DECOY);
}
}
public grenade_explode(ent, i_num)
{
new param[6], iOrigin[3];
new Float:fOrigin[3];
new owner = pev(ent, pev_owner);
new ent2 = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
pev(ent, pev_origin, fOrigin);
param[0] = ent;
param[1] = ent2;
param[2] = owner;
param[3] = iOrigin[0] = floatround(fOrigin[0]);
param[4] = iOrigin[1] = floatround(fOrigin[1]);
param[5] = iOrigin[2] = floatround(fOrigin[2]);
emit_sound(ent, CHAN_AUTO, "molotov/molotov_fire.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
if(i_num == 1)
engfunc(EngFunc_SetModel, ent, sz_wBrokeMolotov);
else
engfunc(EngFunc_RemoveEntity, ent);
random_fire(iOrigin, ent2);
radius_damage(owner, fOrigin, 50.0, 150.0, DMG_BLAST);
new Float:FireTime = 10.0;
set_task(0.2, "fire_damage", MOLOTOV_TASKID_DAMAGE + ent, param, 6, "a", floatround(FireTime / 0.2, floatround_floor));
set_task(1.0, "fire_sound", MOLOTOV_TASKID_SOUND + ent, param, 6, "a", floatround(FireTime) - 1);
set_task(FireTime, "fire_stop", MOLOTOV_TASKID_STOP + ent, param, 6);
return PLUGIN_CONTINUE;
}
public fire_sound(param[]) emit_sound(param[1], CHAN_AUTO, szFireSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
public fire_stop(param[])
{
g_g = 0;
if(pev_valid(param[0])) engfunc(EngFunc_RemoveEntity, param[0]);
if(pev_valid(param[1])) engfunc(EngFunc_RemoveEntity, param[1]);
if((last_Molotov_ent = (param[0])))
last_Molotov_ent = 0;
}
public fire_damage(param[])
{
new iOrigin[3], Float:fOrigin[3];
iOrigin[0] = param[3];
iOrigin[1] = param[4];
iOrigin[2] = param[5];
random_fire(iOrigin, param[1]);
IVecFVec(iOrigin, fOrigin);
radius_damage(param[2], fOrigin, 3.0, 150.0, DMG_BURN, 0);
}
stock radius_damage(attacker, Float:origin[3], Float:damage, Float:range, dmgtype, calc = 1)
{
new Float:pOrigin[3], Float:dist, Float:tmpdmg, i, CsTeams:iTeam = cs_get_user_team(attacker);
while(i++ < g_iMaxPlayers)
{
if(!is_user_alive(i))
continue;
if(iTeam == cs_get_user_team(i))
continue;
pev(i, pev_origin, pOrigin);
dist = get_distance_f(origin, pOrigin);
if(dist > range)
continue;
if(calc)
tmpdmg = damage - (damage / range) * dist;
else
tmpdmg = damage;
if(pev(i, pev_health) < tmpdmg)
kill(attacker, i);
else
fm_fakedamage(i, "molotov", tmpdmg, dmgtype);
set_task(0.1, "burning_flame", i);
}
while((i = engfunc(EngFunc_FindEntityInSphere, i, origin, range)))
{
if(pev(i, pev_takedamage))
{
if(calc)
{
pev(i, pev_origin, pOrigin);
tmpdmg = damage - (damage / range) * get_distance_f(origin, pOrigin);
}
else
tmpdmg = damage;
fm_fakedamage(i, "molotov", tmpdmg, dmgtype);
}
}
}
public burning_flame(burn_id)
{
if(!is_user_alive(burn_id))
return;
static Float:originF[3], flags;
pev(burn_id, pev_origin, originF);
flags = pev(burn_id, pev_flags);
if((flags & FL_INWATER))
{
// Smoke sprite
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_SMOKE); // TE id
engfunc(EngFunc_WriteCoord, originF[0]); // x
engfunc(EngFunc_WriteCoord, originF[1]); // y
engfunc(EngFunc_WriteCoord, originF[2]-50.0); // z
write_short(g_SmokeSpr[random_num(0, 1)]); // sprite
write_byte(random_num(10, 30)); // scale
write_byte(random_num(10, 20)); // framerate
message_end();
return;
}
if (0.5 > 0.0 && (flags & FL_ONGROUND))
{
static Float:velocity[3];
pev(burn_id, pev_velocity, velocity);
xs_vec_mul_scalar(velocity, 0.5, velocity);
set_pev(burn_id, pev_velocity, velocity);
}
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_SPRITE); // TE id
engfunc(EngFunc_WriteCoord, originF[0]+random_float(-5.0, 5.0)); // x
engfunc(EngFunc_WriteCoord, originF[1]+random_float(-5.0, 5.0)); // y
engfunc(EngFunc_WriteCoord, originF[2]+random_float(-10.0, 10.0)); // z
write_short(g_FireSpr); // sprite
write_byte(random_num(5, 15)); // scale
write_byte(100); // brightness
message_end();
}
stock random_fire(Origin[3], ent)
{
new iOrigin[3];
for(new i=1;i<=5;i++)
{
g_g = 1;
iOrigin[0] = Origin[0] + random_num(-150, 150);
iOrigin[1] = Origin[1] + random_num(-150, 150);
iOrigin[2] = Origin[2];
iOrigin[2] = ground_z(iOrigin, ent);
while(get_distance(iOrigin, Origin) > 150.0)
{
g_g++;
iOrigin[0] = Origin[0] + random_num(-150, 150);
iOrigin[1] = Origin[1] + random_num(-150, 150);
iOrigin[2] = Origin[2];
if(g_g >= 7.0)
iOrigin[2] = ground_z(iOrigin, ent, 1);
else
iOrigin[2] = ground_z(iOrigin, ent);
}
new rand = random_num(5, 15);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_SPRITE);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2] + rand * 5);
write_short(g_FireSpr);
write_byte(rand);
write_byte(100);
message_end();
if(!(i % 4))
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_SMOKE);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2] + 120);
write_short(g_SmokeSpr[random_num(0, 1)]);
write_byte(random_num(10, 30));
write_byte(random_num(10, 20));
message_end();
}
}
}
stock kill(killer, victim)
{
new kTeam = get_user_team(killer);
new vTeam = get_user_team(victim);
user_silentkill(victim);
message_begin(MSG_ALL, gmsgScoreInfo);
write_byte(killer);
write_short(get_user_frags(killer) + ((kTeam == vTeam) ? -1 : 1));
write_short(get_user_deaths(killer));
write_short(0);
write_short(kTeam);
message_end();
message_begin(MSG_ALL, gmsgScoreInfo);
write_byte(victim);
write_short(get_user_frags(victim) + 1);
write_short(get_user_deaths(victim));
write_short(0);
write_short(vTeam);
message_end();
message_begin(MSG_ALL, gmsgDeathMsg, {0,0,0}, 0);
write_byte(killer);
write_byte(victim);
write_byte(0);
write_string("molotov");
message_end();
set_user_frags(killer, get_user_frags(killer) + 1);
if(kTeam != vTeam)
cs_set_user_money(killer, cs_get_user_money(killer) + 300);
else
cs_set_user_money(killer, cs_get_user_money(killer) - 300);
}
stock ground_z(iOrigin[3], ent, skip = 0, iRecursion = 0)
{
iOrigin[2] += random_num(5, 80);
if(!pev_valid(ent))
return iOrigin[2];
new Float:fOrigin[3];
IVecFVec(iOrigin, fOrigin);
set_pev(ent, pev_origin, fOrigin);
engfunc(EngFunc_DropToFloor, ent);
if(!skip && !engfunc(EngFunc_EntIsOnFloor, ent))
{
if(iRecursion >= 7.0)
skip = 1;
return ground_z(iOrigin, ent, skip, ++iRecursion);
}
pev(ent, pev_origin, fOrigin);
return floatround(fOrigin[2]);
}
public player_spawn(id)
{
if(is_user_alive(id))
{
bBoughtNapalm[id] = false;
bBoughtDecoy[id] = false;
new Array:aWeaponIDs = ArrayCreate(1), iCount = GetWeaponsFromSlot(id, SLOT_PRIMARY, _, aWeaponIDs), iWeaponID;
for(new i=0;i<iCount;i++)
{
iWeaponID = ArrayGetCell(aWeaponIDs, i);
cs_set_user_bpammo(id, iWeaponID, g_WeaponBPAmmo[iWeaponID]);
}
ArrayDestroy(aWeaponIDs);
aWeaponIDs = ArrayCreate(1);
iCount = GetWeaponsFromSlot(id, SLOT_SECONDARY, _, aWeaponIDs);
for(new i=0;i<iCount;i++)
{
iWeaponID = ArrayGetCell(aWeaponIDs, i);
cs_set_user_bpammo(id, iWeaponID, g_WeaponBPAmmo[iWeaponID]);
}
ArrayDestroy(aWeaponIDs);
}
}
public player_killed(victim, killer, shouldgib)
{
if(killer && killer <= g_iMaxPlayers)
{
for(new i=0;i<I_MAX_NADES;i++)
bHasNade[victim][i] = false;
}
}
public player_additem(id, iEnt)
{
static iWeaponID;
iWeaponID = get_pdata_int(iEnt, m_iId, 4);
if(iWeaponID == CSW_HEGRENADE)
{
if(bGivingNapalm[id])
bGivingNapalm[id] = false;
else
bHasNade[id][I_HE] = true;
}
else if(iWeaponID == CSW_FLASHBANG)
bHasNade[id][I_FLASH] = true;
else if(iWeaponID == CSW_SMOKEGRENADE)
{
if(bGivingDecoy[id])
bGivingDecoy[id] = false;
else
bHasNade[id][I_SMOKE] = true;
}
}
public player_fillAmmo(id)
return PLUGIN_HANDLED;
public player_cmd_setRebuy(id)
{
//
}
public player_cmd_rebuy(id)
{
//
}
public player_cmd_setAutobuy(id)
{
if(!is_user_alive(id))
return PLUGIN_HANDLED;
new iIndex, szWeapon[24], szArgs[1024], bool:bFound, CsTeams:iTeam;
iTeam = cs_get_user_team(id);
read_args(szArgs, charsmax(szArgs));
remove_quotes(szArgs);
trim(szArgs);
while(contain(szArgs, " ") != -1)
{
strbreak(szArgs, szWeapon, charsmax(szWeapon), szArgs, charsmax(szArgs));
bFound = false;
if(iTeam == CS_TEAM_T)
{
for(new i=0;i<sizeof(g_SubMenuItemNamesT);i++)
{
if(!bFound)
{
for(new a=0;a<9;a++)
{
if(!bFound && equali(g_SubMenuItemNamesT[i][a], szWeapon))
{
bFound = true;
g_iAutobuy[id][0][iIndex++] = i;
g_iAutobuy[id][1][iIndex++] = a;
}
}
}
}
}
else
{
for(new i=0;i<MAX_MAIN_ITEMS;i++)
{
if(!bFound)
{
for(new a=0;a<9;a++)
{
if(!bFound && equali(g_SubMenuItemNamesCT[i][a], szWeapon))
{
bFound = true;
g_iAutobuy[id][0][iIndex++] = i;
g_iAutobuy[id][1][iIndex++] = a;
}
}
}
}
}
}
g_iAutobuy[id][0][iIndex++] = -1;
player_cmd_autobuy(id);
return PLUGIN_HANDLED;
}
public player_cmd_autobuy(id)
{
if(!is_user_alive(id))
return PLUGIN_HANDLED;
if(!cs_get_user_buyzone(id))
{
client_print(id, print_center, "You have left the buy zone.");
return PLUGIN_HANDLED;
}
new iMoney = cs_get_user_money(id), bool:bBought[6], iWeapon, CsTeams:iTeam, iPrice, szWeaponName[32];
iTeam = cs_get_user_team(id);
if(iTeam == CS_TEAM_T)
{
for(new i=0;i<sizeof(g_iAutobuy[]);i++)
{
if(g_iAutobuy[id][0][i] == -1)
return PLUGIN_HANDLED;
iWeapon = g_SubMenuItemCSWT[g_iAutobuy[id][i][0]][g_iAutobuy[id][i][1]];
if(bBought[g_iWeaponSlot[iWeapon]])
continue;
iPrice = g_SubMenuItemPriceT[g_iAutobuy[id][i][0]][g_iAutobuy[id][i][1]];
if(iPrice > 0 && iPrice > iMoney)
continue;
ForceDropWeapon(id, SLOT_SECONDARY);
get_weaponname(g_SubMenuItemCSWT[g_iAutobuy[id][i][0]][g_iAutobuy[id][i][1]], szWeaponName, charsmax(szWeaponName));
give_item(id, szWeaponName);
bBought[g_iWeaponSlot[iWeapon]] = true;
}
}
else if(iTeam == CS_TEAM_CT)
{
for(new i=0;i<sizeof(g_iAutobuy[]);i++)
{
if(g_iAutobuy[id][0][i] == -1)
return PLUGIN_HANDLED;
iWeapon = g_SubMenuItemCSWCT[g_iAutobuy[id][i][0]][g_iAutobuy[id][i][1]];
if(bBought[g_iWeaponSlot[iWeapon]])
continue;
iPrice = g_SubMenuItemPriceCT[g_iAutobuy[id][i][0]][g_iAutobuy[id][i][1]];
if(iPrice > 0 && iPrice > iMoney)
continue;
ForceDropWeapon(id, SLOT_SECONDARY);
get_weaponname(g_SubMenuItemCSWCT[g_iAutobuy[id][i][0]][g_iAutobuy[id][i][1]], szWeaponName, charsmax(szWeaponName));
give_item(id, szWeaponName);
bBought[g_iWeaponSlot[iWeapon]] = true;
}
}
return PLUGIN_HANDLED;
}
public clcmd_client_buy_open(id)
{
message_begin(MSG_ONE, g_msgBuyClose, _, id);
message_end();
ShowNewBuyMenu(id);
if(!task_exists(id+TASK_CHECK))
set_task(0.5, "taskCheckBuyZone", id+TASK_CHECK);
return PLUGIN_HANDLED;
}
public player_cmd_buy_main(id)
{
ShowNewBuyMenu(id);
if(!task_exists(id+TASK_CHECK))
set_task(0.5, "taskCheckBuyZone", id+TASK_CHECK);
return PLUGIN_HANDLED;
}
public taskCheckBuyZone(id)
{
id -= TASK_CHECK;
static oldMenuId, newMenuId;
player_menu_info(id, oldMenuId, newMenuId);
if(newMenuId > -1 || (oldMenuId && oldMenuId != iMenuIDs[0] && oldMenuId != iMenuIDs[1]))
return;
if(!cs_get_user_buyzone(id))
{
client_print(id, print_center, "You have left the buy zone.");
show_menu(id, 1, " ", -1);
}
else
set_task(0.5, "taskCheckBuyZone", id+TASK_CHECK);
}
public player_cmd_buy_equipament(id)
{
i_menu_type[id] = EQUIPMENT;
ShowSecondMenu(id);
return PLUGIN_HANDLED;
}
ShowNewBuyMenu(id)
{
if(!is_user_alive(id))
return;
if(cs_get_user_vip(id))
{
client_print(id, print_center, "VIP can't buy items.");
return;
}
if(BuyTimeExpired())
{
client_print(id, print_center, "Buy time has expired.");
if(task_exists(id+TASK_CHECK))
remove_task(id+TASK_CHECK);
return;
}
client_print(id, print_center, "You have %i seconds to buy something.", floatround(get_cvar_float("mp_buytime") - (get_gametime() - fNewRoundTime)));
static szMenu[512], iLen, CsTeams:iTeam, keys, iMoney;
iTeam = cs_get_user_team(id);
if(iTeam != CS_TEAM_CT && iTeam != CS_TEAM_T)
return;
keys = MENU_KEY_0;
iMoney = cs_get_user_money(id);
iLen = formatex(szMenu, charsmax(szMenu), "\rNEW \wBuy Menu\d - by Wicked-^n\dYour money: \w%i$^n^n", iMoney);
for(new i=0;i<MAX_MAIN_ITEMS;i++)
{
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "%s%i. %s^n", CanBuyAnItemInCategory(id, i, iMoney) ? "\w" : "\r", i+1, g_MainMenuItemNames[i]);
keys |= (1<<i);
}
format(szMenu[iLen], charsmax(szMenu)-iLen, "^n\w0.\w Exit");
show_menu(id, keys, szMenu, -1, g_MainMenu);
}
public MainMenuHandler(id, key)
{
if(key != 9)
{
i_menu_type[id] = key;
ShowSecondMenu(id);
}
}
ShowSecondMenu(id)
{
if(!cs_get_user_buyzone(id))
{
client_print(id, print_center, "You have left the buy zone.");
return;
}
if(BuyTimeExpired())
{
client_print(id, print_center, "Buy time has expired.");
if(task_exists(id+TASK_CHECK))
remove_task(id+TASK_CHECK);
return;
}
static szMenu[512], iLen, CsTeams:iTeam, keys, iMoney;
iTeam = cs_get_user_team(id);
if(iTeam != CS_TEAM_CT && iTeam != CS_TEAM_T)
return;
keys = MENU_KEY_0;
iMoney = cs_get_user_money(id);
iLen = formatex(szMenu, charsmax(szMenu), "\rNEW \wBuy Menu\d - by Wicked-^n\wBuy %s^n\dYour money: \w%i$^n^n", g_MainMenuItemNames[i_menu_type[id]], iMoney);
if(iTeam == CS_TEAM_T)
{
for(new i=0;i<9;i++)
{
if(!g_SubMenuItemNamesT[i_menu_type[id]][i][0])
break;
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "%s%i. %s - \y%i$^n", CanBuyItem(id, i_menu_type[id], i, iMoney) ? "\w" : "\r", i+1, g_SubMenuItemNamesT[i_menu_type[id]][i], g_SubMenuItemPriceT[i_menu_type[id]][i]);
keys |= (1<<i);
}
}
else
{
for(new i=0;i<9;i++)
{
if(!g_SubMenuItemNamesCT[i_menu_type[id]][i][0])
break;
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "%s%i. %s - \y%i$^n", CanBuyItem(id, i_menu_type[id], i, iMoney) ? "\w" : "\r", i+1, g_SubMenuItemNamesCT[i_menu_type[id]][i], g_SubMenuItemPriceCT[i_menu_type[id]][i]);
keys |= (1<<i);
}
}
format(szMenu[iLen], charsmax(szMenu)-iLen, "^n\w0.\w Back");
show_menu(id, keys, szMenu, -1, g_SecondMenu);
}
public SecondMenuHandler(id, key)
{
if(!cs_get_user_buyzone(id))
{
client_print(id, print_center, "You have left the buy zone.");
return;
}
if(BuyTimeExpired())
{
client_print(id, print_center, "Buy time has expired.");
if(task_exists(id+TASK_CHECK))
remove_task(id+TASK_CHECK);
return;
}
if(key == 9)
{
ShowNewBuyMenu(id);
return;
}
static CsTeams:iTeam, iMoney, szWeaponName[32];
iTeam = cs_get_user_team(id);
if(iTeam != CS_TEAM_CT && iTeam != CS_TEAM_T)
return;
iMoney = cs_get_user_money(id);
if(iTeam == CS_TEAM_T)
{
if(iMoney < g_SubMenuItemPriceT[i_menu_type[id]][key])
{
client_print(id, print_center, "You don't have enough money to buy this item.");
return;
}
switch(i_menu_type[id])
{
case HANDGUN:
{
ForceDropWeapon(id, SLOT_SECONDARY);
get_weaponname(g_SubMenuItemCSWT[i_menu_type[id]][key], szWeaponName, charsmax(szWeaponName));
give_item(id, szWeaponName);
cs_set_user_bpammo(id, g_SubMenuItemCSWT[i_menu_type[id]][key], g_WeaponBPAmmo[g_SubMenuItemCSWT[i_menu_type[id]][key]]);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
case SHOTGUN, SUBMACHINEGUN, RIFLE, MACHINEGUN:
{
ForceDropWeapon(id, SLOT_PRIMARY);
get_weaponname(g_SubMenuItemCSWT[i_menu_type[id]][key], szWeaponName, charsmax(szWeaponName));
give_item(id, szWeaponName);
cs_set_user_bpammo(id, g_SubMenuItemCSWT[i_menu_type[id]][key], g_WeaponBPAmmo[g_SubMenuItemCSWT[i_menu_type[id]][key]]);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
case GRENADES:
{
if(key == I_HE)
{
if(bHasNade[id][key])
client_print(id, print_center, "You can't carry any more of those.");
else
{
bHasNade[id][key] = true;
give_item(id, "weapon_hegrenade");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
}
else if(key == I_FLASH)
{
if(bHasNade[id][key])
{
if(cs_get_user_bpammo(id, CSW_FLASHBANG) > 1)
client_print(id, print_center, "You can't carry any more of those.");
else
{
cs_set_user_bpammo(id, CSW_FLASHBANG, 2);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
}
else
{
bHasNade[id][key] = true;
give_item(id, "weapon_flashbang");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
}
else if(key == I_SMOKE)
{
if(bHasNade[id][key])
client_print(id, print_center, "You can't carry any more of those.");
else
{
bHasNade[id][key] = true;
give_item(id, "weapon_smokegrenade");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
}
else if(key == I_NAPALM)
{
if(bBoughtNapalm[id])
client_print(id, print_center, "You can buy this item only once per spawn.");
else if(bHasNade[id][key])
client_print(id, print_center, "You can't carry any more of those.");
else
{
bHasNade[id][key] = true;
bGivingNapalm[id] = true;
bBoughtNapalm[id] = true;
give_item(id, "weapon_hegrenade");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
}
else if(key == I_DECOY)
{
if(bBoughtDecoy[id])
client_print(id, print_center, "You can buy this item only once per spawn.");
else if(bHasNade[id][key])
client_print(id, print_center, "You can't carry any more of those.");
else
{
bHasNade[id][key] = true;
bGivingDecoy[id] = true;
bBoughtDecoy[id] = true;
give_item(id, "weapon_smokegrenade");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
}
}
case EQUIPMENT:
{
if(0 <= key <= 1)
{
if(CanBuyArmor(id, key))
{
if(key == 0)
cs_set_user_armor(id, 100, CS_ARMOR_KEVLAR);
else
cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
}
else if(key == 2)
{
if(cs_get_user_nvg(id))
client_print(id, print_center, "You can't carry any more of those.");
else
{
cs_set_user_nvg(id, 1);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceT[i_menu_type[id]][key]);
}
}
}
}
}
else
{
if(iMoney < g_SubMenuItemPriceCT[i_menu_type[id]][key])
{
client_print(id, print_center, "You don't have enough money to buy this item.");
return;
}
switch(i_menu_type[id])
{
case HANDGUN:
{
ForceDropWeapon(id, SLOT_SECONDARY);
get_weaponname(g_SubMenuItemCSWCT[i_menu_type[id]][key], szWeaponName, charsmax(szWeaponName));
give_item(id, szWeaponName);
cs_set_user_bpammo(id, g_SubMenuItemCSWCT[i_menu_type[id]][key], g_WeaponBPAmmo[g_SubMenuItemCSWCT[i_menu_type[id]][key]]);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
case SHOTGUN, SUBMACHINEGUN, RIFLE, MACHINEGUN:
{
ForceDropWeapon(id, SLOT_PRIMARY);
get_weaponname(g_SubMenuItemCSWCT[i_menu_type[id]][key], szWeaponName, charsmax(szWeaponName));
give_item(id, szWeaponName);
cs_set_user_bpammo(id, g_SubMenuItemCSWCT[i_menu_type[id]][key], g_WeaponBPAmmo[g_SubMenuItemCSWCT[i_menu_type[id]][key]]);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
case GRENADES:
{
if(key == I_HE)
{
if(bHasNade[id][I_HE])
client_print(id, print_center, "You can't carry any more of those.");
else
{
bHasNade[id][I_HE] = true;
give_item(id, "weapon_hegrenade");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
else if(key == I_FLASH)
{
if(bHasNade[id][I_FLASH])
{
if(cs_get_user_bpammo(id, CSW_FLASHBANG) > 1)
client_print(id, print_center, "You can't carry any more of those.");
else
{
cs_set_user_bpammo(id, CSW_FLASHBANG, 2);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
else
{
bHasNade[id][I_FLASH] = true;
give_item(id, "weapon_flashbang");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
else if(key == I_SMOKE)
{
if(bHasNade[id][I_SMOKE])
client_print(id, print_center, "You can't carry any more of those.");
else
{
bHasNade[id][I_SMOKE] = true;
give_item(id, "weapon_smokegrenade");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
else if(key == I_NAPALM)
{
if(bBoughtNapalm[id])
client_print(id, print_center, "You can buy this item only once per spawn.");
if(bHasNade[id][I_NAPALM])
client_print(id, print_center, "You can't carry any more of those.");
else
{
bHasNade[id][I_NAPALM] = true;
bGivingNapalm[id] = true;
bBoughtNapalm[id] = true;
give_item(id, "weapon_hegrenade");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
else if(key == I_DECOY)
{
if(bBoughtDecoy[id])
client_print(id, print_center, "You can buy this item only once per spawn.");
if(bHasNade[id][I_DECOY])
client_print(id, print_center, "You can't carry any more of those.");
else
{
bHasNade[id][I_DECOY] = true;
bGivingDecoy[id] = true;
bBoughtDecoy[id] = true;
give_item(id, "weapon_smokegrenade");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
}
case EQUIPMENT:
{
if(0 <= key <= 1)
{
if(CanBuyArmor(id, key))
{
if(key == 0)
cs_set_user_armor(id, 100, CS_ARMOR_KEVLAR);
else
cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
else if(key == 2)
{
if(cs_get_user_nvg(id))
client_print(id, print_center, "You can't carry any more of those.");
else
{
cs_set_user_nvg(id, 1);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
else if(key == 3)
{
if(cs_get_user_defuse(id))
client_print(id, print_center, "You can't carry any more of those.");
else
{
cs_set_user_defuse(id, 1);
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
else if(key == 4)
{
if(cs_get_user_shield(id))
client_print(id, print_center, "You can't carry any more of those.");
else
{
give_item(id, "weapon_shield");
cs_set_user_money(id, iMoney - g_SubMenuItemPriceCT[i_menu_type[id]][key]);
}
}
}
}
}
ShowSecondMenu(id);
}
bool:BuyTimeExpired() return (get_cvar_float("mp_buytime") < (get_gametime() - fNewRoundTime)) ? true : false;
bool:CanBuyAnItemInCategory(id, i, money)
{
for(new b=0;b<9;b++)
{
if(CanBuyItem(id, i, b, money))
return true;
}
return false;
}
bool:CanBuyItem(id, i, b, money)
{
static CsTeams:iTeam;
iTeam = cs_get_user_team(id);
if(iTeam == CS_TEAM_CT)
{
if(i == EQUIPMENT)
{
if(0 <= b <= 1)
return (CanBuyArmor(id, b) && money >= g_SubMenuItemPriceCT[i][b]) ? true : false;
if(b == 2)
return (!cs_get_user_nvg(id) && money >= g_SubMenuItemPriceCT[i][b]) ? true : false;
if(b == 3)
return (!cs_get_user_defuse(id) && money >= g_SubMenuItemPriceCT[i][b]) ? true : false;
if(b == 4)
return (!cs_get_user_shield(id) && money >= g_SubMenuItemPriceCT[i][b]) ? true : false;
}
if(g_SubMenuItemPriceCT[i][b] && money >= g_SubMenuItemPriceCT[i][b])
return true;
}
else if(iTeam == CS_TEAM_T)
{
if(i == EQUIPMENT)
{
if(0 <= b <= 1)
return (CanBuyArmor(id, b) && money >= g_SubMenuItemPriceT[i][b]) ? true : false;
if(b == 2)
return (!cs_get_user_nvg(id) && money >= g_SubMenuItemPriceT[i][b]) ? true : false;
}
if(g_SubMenuItemPriceT[i][b] && money >= g_SubMenuItemPriceT[i][b])
return true;
}
return false;
}
bool:CanBuyArmor(id, item)
{
new CsArmorType:ArmorType;
new iArmor = cs_get_user_armor(id, ArmorType);
if(!item)
{
if(iArmor < 100)
return true;
}
else
{
if(ArmorType != CS_ARMOR_VESTHELM)
return true;
}
return false;
}
ForceDropWeapon(id, iSlot)
{
new Array:aWeaponIDs = ArrayCreate(1);
new iCount = GetWeaponsFromSlot(id, iSlot, _, aWeaponIDs);
new iWeaponID, szWeaponName[32];
for( new i = 0; i < iCount; i++ )
{
iWeaponID = ArrayGetCell(aWeaponIDs, i);
get_weaponname(iWeaponID, szWeaponName, charsmax(szWeaponName));
engclient_cmd(id, "drop", szWeaponName);
}
ArrayDestroy(aWeaponIDs);
}
stock GetWeaponsFromSlot(id, iSlot, Array:aWeaponEntities=Invalid_Array, Array:aWeaponIDs=Invalid_Array)
{
new iWeaponCount = 0;
if(1 <= iSlot <= 5)
{
new iEntity = get_pdata_cbase(id, m_rpgPlayerItems_Slot0 + iSlot, 5);
if(iEntity > 0)
{
do
{
if(aWeaponEntities != Invalid_Array)
{
ArrayPushCell( aWeaponEntities, iEntity);
}
if(aWeaponIDs != Invalid_Array)
{
ArrayPushCell(aWeaponIDs, get_pdata_int(iEntity, m_iId, 4));
}
iWeaponCount++;
}
while((iEntity = get_pdata_cbase(iEntity, m_pNext, 4)) > 0);
}
}
return iWeaponCount;
}