Siema,
wiele tematów ostatnimi czasy pojawia się z pytaniem: "Jak zablokować broń?"
Ludzie podają dobre sposoby, jednak są one dziurawe
Przykładem jest ten sposób (nie najlepszy): http://amxx.pl/topic...ka/#entry591014
Ja tutaj pokażę jak lepiej zablokować otrzymywanie danej broni - sposób nie ma dziur
Okej, lecimy!
Otwieramy *.sma klasy, jeżeli to całkiem nowa klasa, należy dodać pod
#include <codmod>
to
new bool:ma_klase[33];
oraz gdzieś niżej dodać jeszcze to:
public cod_class_enabled(id) ma_klase[id] = true; public cod_class_disabled(id) ma_klase[id] = false;
Mamy już podstawę klasy, więc rejestrujemy moduł hamsandwich oraz fakemeta, poprzez dodanie pod:
#include <codmod>
tego
#include <hamsandwich> #include <fakemeta>
Moduł ten pozwoli nam na wychwycenie otrzymania danej broni Więc w plugin_init należałoby zarejestrować odpowiedniego forwarda. Czyli do plugin_init dodajemy:
RegisterHam(Ham_Item_AddToPlayer, "XYZ", "fw_AddItem");
Tam gdzie XYZ wpisujemy nazwę naszej broni (fachowe nazwy można wziąć stąd: http://amxx.pl/topic...ive-item-speed/ , nazwa to weapon_*).
Czyli dla AK47 wpisuje coś takiego
RegisterHam(Ham_Item_AddToPlayer, "weapon_ak47", "fw_AddItem");
Dla zablokowania kilku broni, wystarczy dodać kilka takich linijek z innymi nazwami
Ok, teraz funkcja blokowania, gdzieś niżej dodajemy:
public fw_AddItem(iEnt, id) { if(!pev_valid(iEnt) || !is_user_alive(id) || !ma_klase[id]) return HAM_IGNORED; return HAM_SUPERCEDE; }
I tyle nam starczy Po skompilowaniu klasy, ta nie będzie mogła otrzymać broni zarejestrowanych w plugin_init().
Broni nie dostaniemy nawet w środku rundy, z jakiegoś perku czy podobnych
Poradnik potem jeszcze dopracuję, na razie to tyle