Podnoszenie broni z ziemi
Czaso Umilacz
07.08.2013
Witam,
postanowiłem podzielić się kodem na podnoszenie broni z ziemi gdy już jedną mamy na slocie, przykład:
Klasa posiada dwie bronie, AWP i M4, jak wyrzuci AWP ma w slocie M4 i nie może podnieść AWP, po dodaniu tego będzie mogła.
Zaczynajmy, na początku kodu dodajemy nową zmienna:
new bool:just_droped[MAX+1];
Następnie w plugin_init dodajemy:
register_clcmd("drop", "DropWeapon");
Gdzieś w kodzie dodajemy następujące funkcje:
public DropWeapon(id){ just_droped[id] = true; set_task(0.5, "Unlock", id); } public Unlock(id){ just_droped[id] = false }
Na samym końcu podmieniamy funkcje DotykBroni na:
public DotykBroni(weapon, id){ static model[24]; pev(weapon, pev_model, model, 23); if(containi(model, "w_backpack") != -1) return HAM_IGNORED; if(!just_droped[id] && pev(weapon, pev_owner) == id){ static classname[64], weaponname[32], temp[32], del[4]; pev(weapon, pev_model, classname, 63); replace(classname, 63, "w_", " "); replace(classname, 63, ".mdl", ""); strbreak(classname, del, 3, classname, 63); format(weaponname, 32, "weapon_%s", classname); new weapons[32], weaponsnum, stop; get_user_weapons(id, weapons, weaponsnum); for(new i = 0; i < weaponsnum; i ++){ get_weaponname(weapons[i], temp, 31); if(equal(temp, weaponname)) stop = 1; } if(!stop) fm_give_item(id, weaponname); engfunc(EngFunc_RemoveEntity, weapon); } return HAM_SUPERCEDE; }
Kod sprawdzony i działa, sprawdza czy gracz nie posiada już broni którą chce podnieść, liczę na masę hejtu.
Pozdrawiam
M4n1k``
08.08.2013
A jeżeli mamy zablokowane podnoszenie broni, poprzez cvar z codmoda, to będę mógł podnieść w tym przypadku awp?
d0naciak
08.08.2013
tutaj cvar cod_weaponsblocking nie ma znaczenia, jest on usunięty, więc nie można wyłączyć blokady podnoszenia broni obcych
Czaso Umilacz
09.08.2013
Dla bezpieczeństwa do funkcji DotykBroni, na sam początek można dodać:
if(!is_user_connected(id)) return HAM_SUPERCEDE; if(!is_user_alive(id) || !pev_valid(weapon)) return HAM_SUPERCEDE;
Ma to wyglądać mniej/więcej tak:
public DotykBroni(weapon, id){ if(!is_user_connected(id)) return HAM_SUPERCEDE; if(!is_user_alive(id) || !pev_vaild(weapon)) return HAM_SUPERCEDE; static model[24]; pev(weapon, pev_model, model, 23); if(containi(model, "w_backpack") != -1) return HAM_IGNORED; if(!just_droped[id] && pev(weapon, pev_owner) == id){ static classname[64], weaponname[32], temp[32], del[4]; pev(weapon, pev_model, classname, 63); replace(classname, 63, "w_", " "); replace(classname, 63, ".mdl", ""); strbreak(classname, del, 3, classname, 63); format(weaponname, 32, "weapon_%s", classname); new weapons[32], weaponsnum, stop; get_user_weapons(id, weapons, weaponsnum); for(new i = 0; i < weaponsnum; i ++){ get_weaponname(weapons[i], temp, 31); if(equal(temp, weaponname)) stop = 1; } if(!stop) fm_give_item(id, weaponname); engfunc(EngFunc_RemoveEntity, weapon); } return HAM_SUPERCEDE; }