PHP Code:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
new iMaxAmmo[33] = { -2, 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, -1, -1 };
new bool:weapons_menu[33][2];
new weapons_bitsum[33][2];
new player_weapons[33][2];
new bool:time_weapons;
new maxPlayers;
public plugin_init() {
register_plugin("Menu Weapons", "1.0", "OnePL");
register_clcmd("say /guns", "MenuWeapon");
register_cvar("amx_time_choose", "60"); //time for a choice of weapons
RegisterHam(Ham_Spawn, "player", "Spawned", 1);
register_logevent("RoundEnd", 2, "1=Round_End");
register_logevent("RoundStart", 2, "1=Round_Start");
maxPlayers = get_maxplayers();
}
public RoundStart() set_task(get_cvar_float("amx_time_choose"), "end_time", 444);
public end_time() time_weapons = true;
public RoundEnd() {
remove_task(444);
time_weapons = false;
for(new i = 1; i <= maxPlayers; i++) {
weapons_menu[i][0] = false;
weapons_menu[i][1] = false;
}
}
public MenuWeapon(id) {
if(!is_user_alive(id) || time_weapons) return 1;
SetMenuWeapon(id, true, true, 0, 0);
return 1;
}
public Spawned(id) {
if(!is_user_alive(id)) return;
if(player_weapons[id][0] && player_weapons[id][1]) {
for(new i = 0; i < 2; i++) {
new weaponname[24];
get_weaponname(player_weapons[id][i], weaponname, 23);
give_item(id, weaponname);
cs_set_user_bpammo(id, player_weapons[id][i], iMaxAmmo[player_weapons[id][i]]);
}
}
else if(!time_weapons) SetMenuWeapon(id, true, true, 0, 0);
}
public SetMenuWeapon(id, bool:weapons, bool:guns, bitsum_weapons, bitsum_guns) {
if(!weapons && !guns) return;
weapons_menu[id][0] = weapons;
weapons_menu[id][1] = guns;
weapons_bitsum[id][0] = bitsum_weapons;
weapons_bitsum[id][1] = bitsum_guns;
MenuWeapons(id);
}
public MenuWeapons(id) {
if(!weapons_menu[id][0] && weapons_menu[id][1]) {
MenuGuns(id);
return;
}
if(!weapons_menu[id][0]) return;
new menu = menu_create("\rChoose a\w Primary Weapon", "HandleWeapons");
if(!(weapons_bitsum[id][0] & (1<<28))) menu_additem(menu, "AK47", "28");
if(!(weapons_bitsum[id][0] & (1<<22))) menu_additem(menu, "M4A1", "22");
if(!(weapons_bitsum[id][0] & (1<<14))) menu_additem(menu, "Galil", "14");
if(!(weapons_bitsum[id][0] & (1<<15))) menu_additem(menu, "Famas", "15");
if(!(weapons_bitsum[id][0] & (1<<18))) menu_additem(menu, "AWP", "18");
menu_setprop(menu, 4, "Exit");
menu_display(id, menu);
}
public HandleWeapons(id, menu, item) {
if(item == -3 || !is_user_alive(id) || !weapons_menu[id][0]) return;
new weaponname[24], data[3], weapon, callback;
menu_item_getinfo(menu, item, weapon, data, 2, _, _, callback);
if((callback = WhatGun(id)) > 0) ham_strip_weapon(id, callback);
weapon = str_to_num(data);
get_weaponname(weapon, weaponname, 23);
give_item(id, weaponname);
cs_set_user_bpammo(id, weapon, iMaxAmmo[weapon]);
player_weapons[id][0] = weapon;
if(weapons_menu[id][1]) MenuGuns(id);
}
public MenuGuns(id) {
if(!weapons_menu[id][1]) return;
new menu = menu_create("\rChoose a\w Secondary Weapon", "HandleGuns");
if(!(weapons_bitsum[id][1] & (1<<26))) menu_additem(menu, "Deagle", "26");
if(!(weapons_bitsum[id][1] & (1<<16))) menu_additem(menu, "USP", "16");
if(!(weapons_bitsum[id][1] & (1<<17))) menu_additem(menu, "Glock", "17");
if(!(weapons_bitsum[id][1] & (1<<10))) menu_additem(menu, "Elites", "10");
menu_setprop(menu, 4, "Exit");
menu_display(id, menu);
}
public HandleGuns(id, menu, item) {
if(item == -3 || !is_user_alive(id) || !weapons_menu[id][1]) return;
new weaponname[24], data[3], weapon, callback;
menu_item_getinfo(menu, item, weapon, data, 2, _, _, callback);
weapon = str_to_num(data);
get_weaponname(weapon, weaponname, 23);
give_item(id, weaponname);
cs_set_user_bpammo(id, weapon, iMaxAmmo[weapon]);
player_weapons[id][1] = weapon;
}
public client_disconnect(id) {
player_weapons[id][0] = 0;
player_weapons[id][1] = 0;
}
stock WhatGun(id) {
if(!is_user_alive(id)) return 0;
new weapons[32], numweapons;
get_user_weapons(id, weapons, numweapons);
for(new i = 0; i < numweapons; i++)
if((1<<weapons[i]) & 0x50FCF1A8) return weapons[i];
return 0;
}
stock ham_strip_weapon(id, wid) {
if(!wid) return 0;
new szName[24]; get_weaponname(wid, szName, 23);
new ent;
while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", szName)) && pev(ent, pev_owner) != id) {}
if(!ent) return 0;
if(get_user_weapon(id) == wid) ExecuteHam(Ham_Weapon_RetireWeapon, ent);
if(ExecuteHam(Ham_RemovePlayerItem, id, ent)) {
ExecuteHam(Ham_Item_Kill, ent);
set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wid));
}
return 1;
}