Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Kod zabija zamiast zadawania obrażeń


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
23 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 11.03.2015 14:50

public Death()
{
	new id = read_data(2);

	if(!is_user_connected(id) || !ma_klase[id])
		return PLUGIN_CONTINUE;
	
	new Float:fOrigin[3];
	entity_get_vector(id, EV_VEC_origin, fOrigin);

	new iOrigin[3];
	for(new i=0;i<=2;i++)
		iOrigin[i] = floatround(fOrigin[i]);

	message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
	write_byte(TE_EXPLOSION);
	write_coord(iOrigin[0]);
	write_coord(iOrigin[1]);
	write_coord(iOrigin[2]);
	write_short(sprite_blast);
	write_byte(32);
	write_byte(20);
	write_byte(0);
	message_end();
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY, iOrigin );
	write_byte( TE_BEAMCYLINDER );
	write_coord( iOrigin[0] );
	write_coord( iOrigin[1] );
	write_coord( iOrigin[2] );
	write_coord( iOrigin[0] );
	write_coord( iOrigin[1] + 200 );
	write_coord( iOrigin[2] + 200 );
	write_short( sprite_white );
	write_byte( 0 );
	write_byte( 0 );
	write_byte( 10 );
	write_byte( 10 );
	write_byte( 255 );
	write_byte( 255 );
	write_byte( 100 );
	write_byte( 100 );
	write_byte( 128 );
	write_byte( 0 );
	message_end();

	new entlist[33];
	new numfound = find_sphere_class(id, "player", 200.0 , entlist, 32);

	for (new i=0; i<=numfound; i++)
	{	
		new pid = entlist[i];

		if (is_user_alive(pid) && get_user_team(id) != get_user_team(pid))
			ExecuteHam(Ham_TakeDamage, pid, id, id, float(60+cod_get_user_intelligence(id,1,1,1)), 1<<1)
	}
	
	return PLUGIN_CONTINUE;
}

Dlaczego ten kod zabija na raz?

 

 

Uprzedzam głupie komentarze - gracz obrywający nie ma mniej niż 60+int hp....


  • +
  • -
  • 0

#2 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 11.03.2015 15:03

Dlaczego nie obrazenia nie sa zadawane poprawnie nie wiem ale domyslam sie jak to naprawic.

 

Zamien:

ExecuteHam(Ham_TakeDamage, pid, id, id, float(60+cod_get_user_intelligence(id,1,1,1)), 1<<1)

Na:

ExecuteHam(Ham_TakeDamage, pid, id, id, 60+cod_get_user_intelligence(id,1,1,1), 1<<1)

A jak nadal nie dziala to na:

ExecuteHam(Ham_TakeDamage, pid, 0, id, 60+cod_get_user_intelligence(id,1,1,1), 1<<1)

@ UP

 

Jezeli dziala to juz wiem dlaczego obrazenia nie dzialaly poprawnie. Obrazenia nie moga byc ustawiane przez float (czyli po przecinku bo zycie jest liczba stala). Jak chcesz by inteligencja byla po przecinku to zrob 60+float(cod_get_user_intelligence(id,1,1,1))


  • +
  • -
  • 1

b35020692_qesnxqa.png


#3 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 11.03.2015 15:18

Dlaczego nie obrazenia nie sa zadawane poprawnie nie wiem ale domyslam sie jak to naprawic.
 
Zamien:

ExecuteHam(Ham_TakeDamage, pid, id, id, float(60+cod_get_user_intelligence(id,1,1,1)), 1<<1)
Na:
ExecuteHam(Ham_TakeDamage, pid, id, id, 60+cod_get_user_intelligence(id,1,1,1), 1<<1)
A jak nadal nie dziala to na:
ExecuteHam(Ham_TakeDamage, pid, 0, id, 60+cod_get_user_intelligence(id,1,1,1), 1<<1)
@ UP
 
Jezeli dziala to juz wiem dlaczego obrazenia nie dzialaly poprawnie. Obrazenia nie moga byc ustawiane przez float (czyli po przecinku bo zycie jest liczba stala). Jak chcesz by inteligencja byla po przecinku to zrob 60+float(cod_get_user_intelligence(id,1,1,1))

Spójrz sobie w dokumentację i tam zobaczysz, że obrażenia należy podawać w float.
  • +
  • -
  • 2

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#4 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 11.03.2015 15:21

@sebul

 

 

Ale skompilowało.. Chyba że wywali podczas wykonywania.

 

 

Sprawdzę i dam znać...


  • +
  • -
  • 0

#5 he1st

    Diablo Mody i te sprawy ;3

  • Użytkownik

Reputacja: 132
Zaawansowany

  • Postów:357
  • GG:
  • Imię:Michał
  • Lokalizacja:Legionowo
Offline

Napisano 11.03.2015 15:44

Float jest liczbą rzeczywistą, więc wstaw "60.0" zamiast "60". A tak poza tym to błędu nie znalazłem, więc kod powinien działać poprawnie <.<


Użytkownik MS.Zer0. edytował ten post 11.03.2015 15:47

  • +
  • -
  • 1

b_350_20_000000_000000_FFFFFF_DA0707.png
b_350_20_000000_000000_FFFFFF_DA0707.png


#6 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 11.03.2015 15:54

http://pl.wikipedia....zby_rzeczywiste

 

 

60 też jest liczbą rzeczywistą więc nie wiem o co chodzi :X


  • +
  • -
  • 0

#7 he1st

    Diablo Mody i te sprawy ;3

  • Użytkownik

Reputacja: 132
Zaawansowany

  • Postów:357
  • GG:
  • Imię:Michał
  • Lokalizacja:Legionowo
Offline

Napisano 11.03.2015 16:09

Bardziej chodziło o to, że jest ona liczbą zmiennoprzecinkową, więc w swoim wyrażeniu potrzebuje *.0 np. zamiast 150 to 150.0. U mnie dzięki mojej głupocie (nie dostawiłem tej kropki) zbugowałem sobie noże do rzucania i nie zadawały dmg wcale. 


  • +
  • -
  • 0

b_350_20_000000_000000_FFFFFF_DA0707.png
b_350_20_000000_000000_FFFFFF_DA0707.png


#8 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 11.03.2015 18:40

http://pl.wikipedia....zby_rzeczywiste
 
 
60 też jest liczbą rzeczywistą więc nie wiem o co chodzi :X

Funkcja oczekuje liczby zmiennoprzecinkowej (nie rzeczywistej, bo to bardziej matematyczne określenie), czyli nie można tam dawać inta. Na takie sprawy bardziej patrzy się od strony programistycznej pawna, a nie matematycznej.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#9 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 11.03.2015 19:00

 

http://pl.wikipedia....zby_rzeczywiste
 
 
60 też jest liczbą rzeczywistą więc nie wiem o co chodzi :X

Funkcja oczekuje liczby zmiennoprzecinkowej (nie rzeczywistej, bo to bardziej matematyczne określenie), czyli nie można tam dawać inta. Na takie sprawy bardziej patrzy się od strony programistycznej pawna, a nie matematycznej.

 

 

 

Smiem sie z tym nie zgodzic, ze nie moze tam byc inta. Sam mam na swoim serwerze takie same obrazenia zalezne od inteligencji.

 

MS.Zer0 dobrze mowi, sam na to uwagi nie zwrocilem ale u mnie w kodzie tez jest ilosc zdrowia z przecinkiem +inteligencja i wszystko gra.


GwynBleidD (12.03.2015 00:11):
Czyli jednak nie jest intem?

  • +
  • -
  • 1

b35020692_qesnxqa.png


#10 he1st

    Diablo Mody i te sprawy ;3

  • Użytkownik

Reputacja: 132
Zaawansowany

  • Postów:357
  • GG:
  • Imię:Michał
  • Lokalizacja:Legionowo
Offline

Napisano 11.03.2015 20:11

 

http://pl.wikipedia....zby_rzeczywiste
 
 
60 też jest liczbą rzeczywistą więc nie wiem o co chodzi :X

Funkcja oczekuje liczby zmiennoprzecinkowej (nie rzeczywistej, bo to bardziej matematyczne określenie), czyli nie można tam dawać inta. Na takie sprawy bardziej patrzy się od strony programistycznej pawna, a nie matematycznej.

 

 

 

Dokładnie tak, ale dziwi mnie fakt, że kompilator go nie poinformował. Powinien wyskoczyć "Warning 213 : Tag mismatch" 


  • +
  • -
  • 0

b_350_20_000000_000000_FFFFFF_DA0707.png
b_350_20_000000_000000_FFFFFF_DA0707.png


#11 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 11.03.2015 22:42

http://pl.wikipedia....zby_rzeczywiste
 
 
60 też jest liczbą rzeczywistą więc nie wiem o co chodzi :X

Funkcja oczekuje liczby zmiennoprzecinkowej (nie rzeczywistej, bo to bardziej matematyczne określenie), czyli nie można tam dawać inta. Na takie sprawy bardziej patrzy się od strony programistycznej pawna, a nie matematycznej.

 
 
Smiem sie z tym nie zgodzic, ze nie moze tam byc inta. Sam mam na swoim serwerze takie same obrazenia zalezne od inteligencji.
 
MS.Zer0 dobrze mowi, sam na to uwagi nie zwrocilem ale u mnie w kodzie tez jest ilosc zdrowia z przecinkiem +inteligencja i wszystko gra.

	/**
	 * Description:		Usually called whenever an entity takes any kind of damage.
	 *					Inflictor is the entity that caused the damage (such as a gun).
	 *					Attacker is the entity that tirggered the damage (such as the gun's owner).
	 * Forward params:	function(this, idinflictor, idattacker, Float:damage, damagebits);
	 * Return type:		Integer.
	 * Execute params:	ExecuteHam(Ham_TakeDamage, this, idinflictor, idattacker, Float:damage, damagebits);
	 */
	Ham_TakeDamage,
Jest flota, więc tu nie chodzi o to, kto sobie myśli/twierdzi, dokumentacja zawsze ma pierwszeństwo, a jeśli twierdzisz, że masz w takim przypadku gdzieś inta, to prawdopodobnie ten int zmienia się w zmienną float w jakichś obliczeniach co tam masz, bo musisz pamiętać, że chociażby coś takiego "6 + 1 * 2.1" w języku pawna jest floatem.
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#12 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 12.03.2015 16:39

ExecuteHam(Ham_TakeDamage, pid, id, id, float(60+cod_get_user_intelligence(id,1,1,1)), 1<<1)

Powinno działać? Już nie mam pomysłu...

 

w końcu tam jest float, ale dlaczego to zabija na raz?


  • +
  • -
  • 0

#13 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 12.03.2015 16:49

ExecuteHam(Ham_TakeDamage, pid, id, id, float(60+cod_get_user_intelligence(id,1,1,1)), 1<<1)

Powinno działać? Już nie mam pomysłu...

 

w końcu tam jest float, ale dlaczego to zabija na raz?

 

 

Sprawdz czy dziala.

ExecuteHam(Ham_TakeDamage, pid, id, id, 60.0+cod_get_user_intelligence(id,1,1,1), 1<<1);

  • +
  • -
  • 0

b35020692_qesnxqa.png


#14 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 13.03.2015 13:17

Mógłby ktoś sprawdzić czy to działa?

Z moich testów wynika że tak, ale ziomek mówi że nie :X

 

 

Spoiler

  • +
  • -
  • 0

#15 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.03.2015 12:46

    new entlist[33];
    new numfound = find_sphere_class(id, "player", 200.0 , entlist, 32);

    for (new i=0; i<=numfound; i++)

Tu powinno być "<=" czy "<" ?


  • +
  • -
  • 0

#16 he1st

    Diablo Mody i te sprawy ;3

  • Użytkownik

Reputacja: 132
Zaawansowany

  • Postów:357
  • GG:
  • Imię:Michał
  • Lokalizacja:Legionowo
Offline

Napisano 14.03.2015 16:08

    new entlist[33];
    new numfound = find_sphere_class(id, "player", 200.0 , entlist, 32);

    for (new i=0; i<=numfound; i++)

Tu powinno być "<=" czy "<" ?

 

 

 

new entlist[33];
    new numfound = find_sphere_class(id, "player", 200.0 , entlist, 32);

    for (new i=0; i<numfound; i++)

  • +
  • -
  • 0

b_350_20_000000_000000_FFFFFF_DA0707.png
b_350_20_000000_000000_FFFFFF_DA0707.png


#17 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.03.2015 16:39

Dobra, a co z tym kodem klasy? Testował ktoś? Bo ja już nie mam pomysłu
  • +
  • -
  • 0

#18 GeDox

    Wszechpomocny

  • Użytkownik

Reputacja: 125
Zaawansowany

  • Postów:315
  • Steam:steam
  • Imię:Przemysław
  • Lokalizacja:Kielce
Offline

Napisano 16.03.2015 23:39

Dobra, a co z tym kodem klasy? Testował ktoś? Bo ja już nie mam pomysłu

Sprawdź wogóle. ile zwraca:
float(60+cod_get_user_intelligence(id,1,1,1))
I podaj + podaj ilość HP gracza ;)
  • +
  • -
  • 0

#19 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 17.03.2015 06:26

Zwraca 64.9, napisałem w pierwszym poście że gracz ma więcej hp.


Czemu mi to działa a u ziomka zabija od razu? :c
  • +
  • -
  • 0

#20 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 17.03.2015 08:51

Zwraca 64.9, napisałem w pierwszym poście że gracz ma więcej hp.


Czemu mi to działa a u ziomka zabija od razu? :c


Kod ktory ci podeslalem sam mam na serwerze od lat i zawsze dziala poprawnie. Zabijac musi cos innego.
  • +
  • -
  • 0

b35020692_qesnxqa.png





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych