Wymagany AMXX 1.8.3 nie starszego niz z 23 lutego 2016
nie zmieniaj nazwy broni w menu bo nie bedzie dzialac ustawianie broni graczowi
kod zostal tak wlasnie napisany aby byl jak najlawiejszy do zrozumienia przez mniej doswiadczonych uzytkownikow
bezlik ammo ustawilam aby nie wykonywalo nabijania ammo po kazdym strzale, uzyciu celownika, zamiany broni itp. tylko po kazdym przeladowaniu sprawdza czy gracz ma mniej niz maksymalna ilosc ammo i gdy ma mniej to ustawia
menu sa cache'owane czyli nie sa tworzone za kazdym razem tylko raz na mape, zwieksza to optymalnosc i zmniejsza zuzycie danych
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>
new g_hMenuWeapons, g_hMenuPrimaryWeapons, g_hMenuSecondaryWeapons,
g_iMyWeapons[33][2],
g_iMaxAmmo[31] = { 0, 52, 0, 90, 1, 31, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 31, 90, 120, 90, 2, 35, 90, 90, 0, 100 };
public plugin_init()
{
register_plugin("Menu Broni", "1.0", "Asiap");
RegisterHamPlayer(Ham_Spawn, "Odrodzenie", 1);
for(new szWeapon[24], i = 1; i <= 30; i++)
{
if(~(CSW_ALL_GRENADES|1<<CSW_C4|1<<CSW_KNIFE & 1<<i) & 1<<i && get_weaponname(i, szWeapon, 23))
{
RegisterHam(Ham_Weapon_Reload, szWeapon, "WeaponReload", 1);
}
}
g_hMenuWeapons = menu_create("Menu broni", "HandleWeaponsMenu");
menu_additem(g_hMenuWeapons, "Wybierz bronie");
menu_additem(g_hMenuWeapons, "Daj poprzednie bronie");
menu_setprop(g_hMenuWeapons, MPROP_EXITNAME, "Wyjdz");
g_hMenuPrimaryWeapons = menu_create("Wybierz bron", "HandlePrimaryWeapons");
menu_additem(g_hMenuPrimaryWeapons, "M4A1");
menu_additem(g_hMenuPrimaryWeapons, "AK47");
menu_additem(g_hMenuPrimaryWeapons, "AWP");
menu_additem(g_hMenuPrimaryWeapons, "Scout");
menu_additem(g_hMenuPrimaryWeapons, "AUG");
menu_additem(g_hMenuPrimaryWeapons, "SG550");
menu_additem(g_hMenuPrimaryWeapons, "M249");
menu_additem(g_hMenuPrimaryWeapons, "MP5Navy");
menu_additem(g_hMenuPrimaryWeapons, "UMP45");
menu_additem(g_hMenuPrimaryWeapons, "Famas");
menu_additem(g_hMenuPrimaryWeapons, "Galil");
menu_additem(g_hMenuPrimaryWeapons, "M3");
menu_additem(g_hMenuPrimaryWeapons, "XM1014");
menu_additem(g_hMenuPrimaryWeapons, "Mac10");
menu_additem(g_hMenuPrimaryWeapons, "TMP");
menu_additem(g_hMenuPrimaryWeapons, "P90");
menu_additem(g_hMenuPrimaryWeapons, "G3SG1");
menu_additem(g_hMenuPrimaryWeapons, "SG552");
menu_setprop(g_hMenuPrimaryWeapons, MPROP_BACKNAME, "Poprzednia strona");
menu_setprop(g_hMenuPrimaryWeapons, MPROP_NEXTNAME, "Nastepna strona");
menu_setprop(g_hMenuPrimaryWeapons, MPROP_EXITNAME, "Wyjdz");
g_hMenuSecondaryWeapons = menu_create("Wybierz pistolet", "HandleSecondaryWeapons");
menu_additem(g_hMenuSecondaryWeapons, "Deagle");
menu_additem(g_hMenuSecondaryWeapons, "Elite");
menu_additem(g_hMenuSecondaryWeapons, "Usp");
menu_additem(g_hMenuSecondaryWeapons, "Glock18");
menu_additem(g_hMenuSecondaryWeapons, "Fiveseven");
menu_additem(g_hMenuSecondaryWeapons, "P228");
menu_setprop(g_hMenuSecondaryWeapons, MPROP_EXITNAME, "Wyjdz");
}
public client_disconnected(id)
{
g_iMyWeapons[id][0] = g_iMyWeapons[id][1] = 0;
}
public Odrodzenie(id)
{
if(!is_user_alive(id))
{
return;
}
menu_display(id, g_hMenuWeapons);
}
public HandleWeaponsMenu(id, hMenu, iItem)
{
if(!is_user_alive(id))
{
return PLUGIN_CONTINUE;
}
switch(iItem)
{
case MENU_EXIT:
{
return PLUGIN_CONTINUE;
}
case 0:
{
return menu_display(id, g_hMenuPrimaryWeapons);
}
default:
{
static szWeapon[24];
get_weaponname(g_iMyWeapons[id][0], szWeapon, 23);
DropUserWeapons(id, 0);
fm_give_item(id, szWeapon);
get_weaponname(g_iMyWeapons[id][1], szWeapon, 23);
DropUserWeapons(id, 1);
fm_give_item(id, szWeapon);
}
}
return PLUGIN_CONTINUE;
}
public HandlePrimaryWeapons(id, hMenu, iItem)
{
if(!is_user_alive(id) || iItem == MENU_EXIT)
{
return PLUGIN_CONTINUE;
}
static iBitAccess, iCallback, szInfo[2], szWeapon[24];
menu_item_getinfo(hMenu, iItem, iBitAccess, szInfo, 1, szWeapon, 23, iCallback);
strtolower(szWeapon);
g_iMyWeapons[id][0] = get_weaponid(fmt("weapon_%s", szWeapon));
DropUserWeapons(id, 0);
fm_give_item(id, szWeapon);
return menu_display(id, g_hMenuSecondaryWeapons);
}
public HandleSecondaryWeapons(id, hMenu, iItem)
{
if(!is_user_alive(id) || iItem == MENU_EXIT)
{
return;
}
static iBitAccess, iCallback, szInfo[2], szWeapon[24];
menu_item_getinfo(hMenu, iItem, iBitAccess, szInfo, 1, szWeapon, 23, iCallback);
strtolower(szWeapon);
g_iMyWeapons[id][1] = get_weaponid(fmt("weapon_%s", szWeapon));
DropUserWeapons(id, 1);
fm_give_item(id, szWeapon);
}
public WeaponReload(iEnt) {
static id;
if(!is_user_alive((id = get_pdata_cbase(iEnt, 41, 4))) || !pev_valid(iEnt) || !get_pdata_int(iEnt, 54, 4))
{
return;
}
static iWeapon;
if(GetUserAmmo(id) != g_iMaxAmmo[(iWeapon = GetUserWeapon(id))])
{
SetUserAmmo(id, g_iMaxAmmo[iWeapon]);
}
}
stock GetUserWeapon(id, &iWid = 0)
{
return is_user_alive(id) ? pev_valid((iWid = get_pdata_cbase(id, 373))) == 2 ? get_pdata_int(iWid, 43, 4) : PLUGIN_CONTINUE : PLUGIN_CONTINUE;
}
stock SetUserAmmo(id, iBpAmmo)
{
static iWeapon;
if(!is_user_alive(id) || pev_valid((iWeapon = get_pdata_cbase(id, 373))) != 2)
{
return PLUGIN_CONTINUE;
}
static szWeapon[24];
if(iWeapon <= CSW_LAST_WEAPON && get_weaponname(iWeapon, szWeapon, 23))
{
while((iWeapon = engfunc(EngFunc_FindEntityByString, iWeapon, "classname", szWeapon)))
{
if(pev_valid(iWeapon) == 2 && get_pdata_cbase(iWeapon, 41, 4) == id)
{
set_pdata_int(id, 376 + get_pdata_int(iWeapon, 49, 4), iBpAmmo);
set_pdata_int(id, 351, 0);
return PLUGIN_HANDLED;
}
}
}
return PLUGIN_CONTINUE;
}
stock GetUserAmmo(id)
{
static iWeapon;
if(!is_user_alive(id) || pev_valid((iWeapon = get_pdata_cbase(id, 373))) != 2)
{
return PLUGIN_CONTINUE;
}
static szWeapon[24];
if(iWeapon <= CSW_LAST_WEAPON && get_weaponname(iWeapon, szWeapon, 23))
{
while((iWeapon = engfunc(EngFunc_FindEntityByString, iWeapon, "classname", szWeapon)))
{
if(pev_valid(iWeapon) == 2 && get_pdata_cbase(iWeapon, 41, 4) == id)
{
return get_pdata_int(id, 376 + get_pdata_int(iWeapon, 49, 4));
}
}
}
return PLUGIN_CONTINUE;
}
stock DropUserWeapons(id, iType) {
if(!is_user_alive(id))
{
return PLUGIN_CONTINUE;
}
static i, iBitWeapons[32], iNum, szWeapon[24];
get_user_weapons(id, iBitWeapons, iNum);
iType = iType ? CSW_ALL_PISTOLS : (CSW_ALL_SHOTGUNS | CSW_ALL_SMGS | CSW_ALL_RIFLES | CSW_ALL_SNIPERRIFLES | CSW_ALL_MACHINEGUNS);
for(i = 0; i < iNum; i++) {
if(~(iType & 1<<iBitWeapons[i]) || !get_weaponname(iBitWeapons[i], szWeapon, 23))
{
continue;
}
engclient_cmd(id, "drop", szWeapon);
}
return PLUGIN_HANDLED;
}
Użytkownik Asiap edytował ten post 16.06.2016 07:33