←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Wyrzucanie broni

  • +
  • -
Seerq.'s Photo Seerq. 06.03.2013

Witam. Mam pytanko. Co dodać do pluginu aby broń gracza się wyrzuciła? Coś w stylu "give_item(id, "weapon_p90");" tylko, że na odwrót. np: drop_item(id, "weapon_p90");?
Quote

  • +
  • -
O'Zone's Photo O'Zone 06.03.2013

Wybrana broń:
engclient_cmd(id, "drop", "weapon_nazwa");
Ta, którą trzyma aktualnie:
client_cmd(id, "drop");
Edited by O'Zone, 06.03.2013 17:31.
Quote

  • +
  • -
Seerq.'s Photo Seerq. 06.03.2013

Coś nie działa ;/ Rozpiszę może mój problem. Dokładniej chodzi o to, że mam VIP'a który daje jakąś broń, lecz jest to serwer PaintBall mod i na start od razu dostaję broń normalną, czyli gracz z vip'em ma w tym momencie dwie bronie a chciałbym tego uniknąć. Chyba, że wpisuje złą nazwę dla mp5, lepiej niech ktoś napiszę jaka nazwa powinna znajdować się w pluginie. Wie ktoś co zrobić?
Edited by SEERQ666, 06.03.2013 17:36.
Quote

Gość_21977_* 06.03.2013

Wybacz, że zadam to pytanie, ale XY Problem dość często występuje na naszym forum.
Czy chcesz tylko wyrzucić graczowi broń, czy zabrać mu tę broń?
Quote

  • +
  • -
Seerq.'s Photo Seerq. 06.03.2013

Zabrać czy wyrzucić to bez różnicy :) Ale lepiej zabrać :>
Quote

  • +
  • -
O'Zone's Photo O'Zone 06.03.2013

Jeśli zabrać, to możesz wykorzystać ten stock:
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")
Quote

  • +
  • -
Seerq.'s Photo Seerq. 06.03.2013

@Up. Dodaję to pierwsze co wkleiłeś na końcu pluginu i taki error przy kompilacji:

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"

Co może być nie tak?
Quote

Gość_21977_* 06.03.2013

Opisałem to w dokumentacji, bo dość często się przewija.
Użyj funkcji StripWeapons
Quote

  • +
  • -
Seerq.'s Photo Seerq. 06.03.2013

Możesz jaśniej. Jestem trochę zielony w tych kwestiach :<
@Edit: Zrobiłem z wyrzucaniem broni :> Do zamknięcia, dzięki za pomoc :)
Edited by SEERQ666, 06.03.2013 18:20.
Quote

Gość_21977_* 06.03.2013

Jeśli chcesz odebrać broń trzymaną, przed dodaniem broni, wywołaj
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
Quote

  • +
  • -
Eustachy8's Photo Eustachy8 31.05.2013

sorry, że odświeżam, ale jak zrobić by wyrzucał z danego slota?

Quote

  • +
  • -
d0naciak's Photo d0naciak 31.05.2013

Nie bez powodu bez powodu Benio101 dodał link do dokumentacji: http://amxx.pl/dokum...44/stripweapons

Quote

  • +
  • -
Eustachy8's Photo Eustachy8 31.05.2013

usuwa nie wyrzuca, tak to rozumiem. Czy się mylę?

Quote

Gość_21977_* 31.05.2013

Usuwa całkowicie.

Ale od razu ostrzegam - zwróć uwagę na offsety w pliku hamdata.ini

Quote

  • +
  • -
Eustachy8's Photo Eustachy8 31.05.2013

no ja właśnie bym chciał, aby ta broń była wyrzucana, a nie usuwana. Jak to osiągnąć?

Quote

  • +
  • -
DarkGL's Photo DarkGL 31.05.2013

Ham_Item_Drop ;)

Quote

  • +
  • -
Eustachy8's Photo Eustachy8 31.05.2013

sorry, ale nawet w najmniejszym stopniu nie zrozumiałem co do mnie napisałeś Dark :D

 

@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.
Quote

  • +
  • -
K!113r's Photo 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

Quote

  • +
  • -
Eustachy8's Photo 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.
Quote

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.

Quote