Wyrzucanie broni
Seerq.
06.03.2013
O'Zone
06.03.2013
engclient_cmd(id, "drop", "weapon_nazwa");
Ta, którą trzyma aktualnie:
client_cmd(id, "drop");
Edited by O'Zone, 06.03.2013 17:31.
Seerq.
06.03.2013
Edited by SEERQ666, 06.03.2013 17:36.
Gość_21977_* 06.03.2013
Czy chcesz tylko wyrzucić graczowi broń, czy zabrać mu tę broń?
O'Zone
06.03.2013
stock ham_strip_weapon(id, weapon[])
{
if(!equal(weapon, "weapon_", 7))
return 0;
new wId = get_weaponid(weapon);
if(!wId)
return 0;
new wEnt;
while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname", weapon)) && pev(wEnt, pev_owner) != id) {}
if(!wEnt)
return 0;
if(get_user_weapon(id) == wId)
ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt);
if(!ExecuteHamB(Ham_RemovePlayerItem, id, wEnt))
return 0;
ExecuteHamB(Ham_Item_Kill, wEnt);
set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId));
return 1;
}
Przykładowe użycie:
ham_strip_weapon(id,"weapon_knife")
Seerq.
06.03.2013
Co może być nie tak?vippbtest5.sma(233) : error 017: undefined symbol "engfunc"
vippbtest5.sma(244) : error 017: undefined symbol "set_pev"
vippbtest5.sma(244) : error 017: undefined symbol "pev"
Gość_21977_* 06.03.2013
Użyj funkcji StripWeapons

Seerq.
06.03.2013
@Edit: Zrobiłem z wyrzucaniem broni


Edited by SEERQ666, 06.03.2013 18:20.
Gość_21977_* 06.03.2013
StripWeapons(id, Primary);
Jeśli zaś chcesz zachować broń trzymaną, dodaj warunek przed dodaniem broni
if(get_pdata_cbase(id, 368)==-1)
Podobnie uczyń dla pozostałych slotów.
- Primary - 368
- Secondary - 369
- Knife - 370
- Grenades - 371
- C4 - 372
d0naciak
31.05.2013
Nie bez powodu bez powodu Benio101 dodał link do dokumentacji: http://amxx.pl/dokum...44/stripweapons
Gość_21977_* 31.05.2013
Usuwa całkowicie.
Ale od razu ostrzegam - zwróć uwagę na offsety w pliku hamdata.ini
Eustachy8
31.05.2013
no ja właśnie bym chciał, aby ta broń była wyrzucana, a nie usuwana. Jak to osiągnąć?
Eustachy8
31.05.2013
sorry, ale nawet w najmniejszym stopniu nie zrozumiałem co do mnie napisałeś Dark
@Edit: Dobra nabyłem trochę pojęcia, coś na alliedmodders znalazlem, ale nie wiem jak to ugryźć na razie
Edited by Eustachy8, 31.05.2013 21:02.
K!113r
31.05.2013
http://amxx.pl/dokum...a/i73/ham-const
ctrl+f i wpisz Ham_Item_Drop, masz tam też wywołanie tego
Eustachy8
01.06.2013
a czy nie można by było ruszyć to w sposób łatwiejszy?
client_cmd(id,"slot 1") // tu sprawdzanie, czy slot 1 jest zapełniony client_cmd(id,"drop")
ale jak sprawdzić, czy slot 1 się włączył, czy jest zapełniony?
Edited by Eustachy8, 01.06.2013 14:10.
Gość_21977_* 01.06.2013
Jest to chyba najmniej optymalna i najbardziej zawodny pomysł, na jaki można wpaść.
AMXModX, poprzez metamoda:P, a następnie silnik gry, wysyła do gracza polecenie zmiany slotu na 1.
Następnie, znów wysyłasz, znów najbardziej drogocenną drogą, od AMXX, poprzez Metamoda:P i sam silnik gry aż do gracza polecenie, które trafia od gracza ponownie do silnika gry, by ostatecznie wyrzucić aktywną broń.
Pomijając długą i zupełnie zbędną wymianę pakietów informacji, nie wiesz, jaką broń wyrzucisz, z którego slota (gracz może nie mieć broni w pierwszym slocie, lub w międzyczasie slot zmienić), ani czy w ogóle komenda zostanie "odbita" ponownie do silnika gry (serwer przyjmuje ograniczoną ilość pakietów poleceń od graczy).
To tak, jakbyś zamiast nastawić sobie budzik na 6. rano, wysłał maila do kumpla, by ten wysłał smsa do innego kumpla, by ten zadzwonił do Ciebie, jak będzie wstawał rano, by Cię także obudzić.
Tutaj także, niepotrzebnie angażujesz kilka osób, a nie masz pewności, że ostatecznie każdy wykona swoje zadanie i informacja do Ciebie dotrze, co więcej, nie wiesz, o której wstaje inny kumpel,
a tym samym, o której zostaniesz obudzony, oraz czy w ogóle zostaniesz. Podsumowując, rozwiązanie beznadziejne, zwłaszcza przy tak bogatym wyborze różnorodnych bibliotek do realizacji tego zadania.