←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Jak wyrzucić broń graczowi?


Najlepsza odpowiedź sebul 22.08.2014 10:22

Ale skoro wiadomość na czacie się pokazuje poprawnie to czemu nie wyrzuca?
 
W innym pluginie mam dropanie broni, ale tak:

engclient_cmd(this, "drop", weapon); //weapon nazwa bronie weapon_*
I to działa.

Bo tak właśnie trzeba robić, musisz podawać nazwę broni w trzecim parametrze. Przejdź do postu

  • +
  • -
Rivit - zdjęcie Rivit 18.08.2014

Witam.

Jak wyrzucić broń graczowi, ale nie przez (eng)client_cmd.

Odpowiedz

  • +
  • -
sNH. - zdjęcie sNH. 18.08.2014

Pamiętam, że coś takiego było i bawiłem się z tym. Niestety nie miałem długo do czynienia z dokumentacją, ale mogę ci powiedzieć, że to było bardzo słabe rozwiązanie, w moim przypadku crashowało serwer. Poprzeglądaj dokumentację i forum. Znajdziesz coś, ale wg mnie to jest najlepsza i najprostsza opcja.

Odpowiedz

  • +
  • -
Puchate - zdjęcie Puchate 18.08.2014

 

 

ale nie przez (eng)client_cmd.

Czemu? Użycie engclient_cmd to jedyna słuszna droga.


Użytkownik Puchate edytował ten post 18.08.2014 14:26
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 18.08.2014

a ham item drop?
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 18.08.2014

To spróbuj coś z tym zrobić, bo ja nie mam pojęcia co tam trzeba wpisać ;) Próbowałem i ID entu nie działa, CSW_* nie działa, weapon_* też nie działa xD

Odpowiedz

  • +
  • -
Puchate - zdjęcie Puchate 18.08.2014

Powiedz lepiej w jakim celu tak bezsensownie kombinujesz.

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 18.08.2014

Chce wiedziec.
Albo mam wadliwy kod albo to nie dziala na niektorych klientach. Paru gosci jest "odpornych" na wyrzucenie.

Co z Ham_Item_Drop ?
Odpowiedz

  • +
  • -
Puchate - zdjęcie Puchate 19.08.2014

 

 

Paru gosci jest "odpornych" na wyrzucenie.

Drop to jest komenda engine gry, nie DLL'ki klienta więc ciężko mi uwierzyć w tą odporność.

 

O ile przez client_cmd komende "drop" można łatwo zablokować dodatkami, o tyle engclient_cmd powinno działać zawsze bez problemu BO NIE WYKONUJE SIE ONA U GRACZA.


Użytkownik Puchate edytował ten post 19.08.2014 12:07
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 19.08.2014

Dobra. Moze jakis warunek jest zly. Sprawdze i dam znac.

A co z Ham_item_drop?
Jak tego uzyc?
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 22.08.2014

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
            return HAM_IGNORED;

	if(!ma_klase[idattacker])
            return HAM_IGNORED;
            
      if(!random(6))
      {
            client_print(0, 3, "powinno dropac")
		engclient_cmd(this, "drop");
      }
	
	if(get_user_weapon(idattacker) == CSW_USP && damagebits & DMG_BULLET)
	{
            SetHamParamFloat(4, damage+0.2*cod_get_user_intelligence(idattacker, 1, 1, 1))
            return HAM_HANDLED
      }

	return HAM_IGNORED;
}

To dlaczego nie działa ten kod? Dlatego że jest pre? Wiadomość na czacie się pokazuje, ale broni nie wyrzuca.

Odpowiedz

  • +
  • -
dasiek - zdjęcie dasiek 22.08.2014

a testowo sprawdzałeś czy samo 


            client_print(0, 3, "powinno dropac")
		engclient_cmd(this, "drop");

bez randoma działa? Random jest zły i przebiegły , potrafi 7 lat losować liczbę nie taką jaką byśmy chcieli. 

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 22.08.2014

Ale skoro wiadomość na czacie się pokazuje poprawnie to czemu nie wyrzuca?

 

W innym pluginie mam dropanie broni, ale tak:

engclient_cmd(this, "drop", weapon); //weapon nazwa bronie weapon_*

I to działa.

Odpowiedz

  • +
  • -
Najlepsza odpowiedź sebul - zdjęcie sebul 22.08.2014

Ale skoro wiadomość na czacie się pokazuje poprawnie to czemu nie wyrzuca?
 
W innym pluginie mam dropanie broni, ale tak:

engclient_cmd(this, "drop", weapon); //weapon nazwa bronie weapon_*
I to działa.

Bo tak właśnie trzeba robić, musisz podawać nazwę broni w trzecim parametrze.
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 22.08.2014

No to skoro tam działa to zrób to samo tutaj :P

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 22.08.2014

Ale jak miałem daaawno CoDa to działał ten sposób chyba.

Pobiore przez get_weaponname i sprawdze.

A co z client_cmd i Ham_Item_Drop?
Odpowiedz

  • +
  • -
Puchate - zdjęcie Puchate 22.08.2014

 

 

A co z client_cmd

Czego jeszcze nie wiesz o tym?

 

 

 

 Ham_Item_Drop? 

Podejrzewam ze nie jest to odpowiednio zaimplementowane w module aby moc wywolywac to, ale moge gadac w tej chwili glupoty bo nie mam kodu zrodlowego modulu / HL przed oczami.

 

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 22.08.2014

Czy client_cmd działa zawsze? Czy gracz moze blokowac tą komende.
Odpowiedz

  • +
  • -
Puchate - zdjęcie Puchate 22.08.2014

Mam wrazenie ze nie wiesz o co pytasz :) client_cmd sluzy do wykonywania komend klienta gry, wiec moze byc bez problemu blokowane po stronie gracza. engclient_cmd wykonuje komendy silnika gry, czyli tak naprawdę to co jest zaimplementowane w netcode i nie wykonuje sie tak naprawdę u gracza (jak np. komenda rebuy).

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 23.08.2014

Ahooooo.
Juz czaje.
A czy jest jakiś sposób żeby np. ustawić interp? Używam client_cmd, ale skoro to nie dla wszystkich działa to czy można inaczej? Gdzieś widziałem jakieś message, ale to chyba na innym forum i nwm jak się to wabi.
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 23.08.2014

client_cmd wysyła komendę do gracza, aby ją wykonał. To jest wszystko, co serwer robi. Następnie klient po prostu tą komendę wykonuje, a serwer łapie jej wykonanie i robi to, co do niego należy.

engclient_cmd wykonuje to, co by normalnie wykonał, gdyby gracz wywołał komendę. Pomijamy więc wysyłanie komendy do gracza i oczekiwanie aż ją wykona, co może nie nastąpić jeśli gracz ją zablokuje. Nie ma więc gracz możliwości zablokowania tego. Zablokować może jedynie animację wyrzucania po swojej stronie, dzięki czemu dalej broń będzie trzymał... Ale nic mu to nie da, bo nie ma jak jej użyć, serwer uważa, że gracz już jej nie posiada...
Odpowiedz