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
CoD Nowy

Problem z "cod_inflict_damage", nie działa DMG+INT w klasie, wybuch zabija od razu!

cod nowy

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

#1 LulzSec.

    Nie, nie wiem, ani on nie wie, nie pomoge !

  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:242
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Wrocław
Offline

Napisano 23.06.2016 12:31

Mam problem z klasą a mianowicie:

Klasa ma wybuch po śmierci dmg+int, niestety ale wybuch zabija od razu i nie działa to dmg+int.

 

W klasie jest:

cod_inflict_damage(id, pid, 80.0, 0.1);

Dodam, że klasa nie ma nic dodane w inta i zabija mając 0 w statystyke

 

.sma klasy:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <codmod>
#include <engine>
#include <fun>

new ma_klase[33];
new sprite_blast, sprite_white;

new const nazwa[] = "Kamikadze";
new const opis[] = "Wybucha po smierci zadajac 80(+intelgencja) obrazen";
new const bronie    = (1<<CSW_GALIL);
new const zdrowie = 35;
new const kondycja = 0;
new const inteligencja = 30;
new const wytrzymalosc = 0;

public plugin_init() 
{
	register_plugin(nazwa, "1.0", "`izcoN");
	
	cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
	
	register_event("DeathMsg", "DeathMsg", "a");
}

public cod_class_enabled(id)
{
	ma_klase[id] = true;
}

public cod_class_disabled(id)
{
	ma_klase[id] = false;
}

public plugin_precache()
{
	sprite_white = precache_model("sprites/white.spr");
	sprite_blast = precache_model("sprites/dexplo.spr");
}

public DeathMsg()
{
	new id = read_data(2);
	if(!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))
			cod_inflict_damage(id, pid, 80.0, 0.1);
	}
	
	return PLUGIN_CONTINUE;
};
		
		if (!is_user_alive(pid) || get_user_team(id) == get_user_team(pid))
			continue;
		cod_inflict_damage(id, pid, 80.0, 0.1);
	}
	return PLUGIN_CONTINUE;
}

Jakieś propozycje jak to naprawic? Z góry dziękuje :)


  • +
  • -
  • 0

- Only DD2 | Asysty ! b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png

- 4 Maps | Skiny | Asysty ! b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png

- Cod Mod 401 LvL ! b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png

 

Zapraszam na CSowicze.pl


#2 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 24.06.2016 22:37

Spoiler

 

oto kod funkcji cod_inflict_damage

public ZadajObrazenia(atakujacy, ofiara, Float:obrazenia, Float:czynnik_inteligencji, byt_uszkadzajacy, dodatkowe_flagi)
	ExecuteHam(Ham_TakeDamage, ofiara, byt_uszkadzajacy, atakujacy, obrazenia+PobierzInteligencje(atakujacy, 1, 1, 1)*czynnik_inteligencji, /*1<<31 |*/ dodatkowe_flagi);

Widzimy, że do obrażeń dodawane są punkty Inteligencji.

Tj. funkcja PobierzInteligencje pobiera wszystkie rodzaje inteligencji ( nie tylko int klasy ).

 

"ciało" funkcji PobierzInteligencje:

public PobierzInteligencje(id, inteligencja_zdobyta, inteligencja_klasy, inteligencja_bonusowa)
{
	new inteligencja;
	
	if(inteligencja_zdobyta)
		inteligencja += inteligencja_gracza[id];
	if(inteligencja_bonusowa)
		inteligencja += bonusowa_inteligencja_gracza[id];
	if(inteligencja_klasy)
		inteligencja += inteligencja_klas[klasa_gracza[id]];
	
	return inteligencja;
}

Zmień 4 parametr funkcji cod_inflict_damage na 0 by zignorować dodatkowe obrażenia pochodzące z pkt'ów inteligencji.

 


Dodam, że klasa nie ma nic dodane w inta i zabija mając 0 w statystyke

 

Czyżby ?

new const inteligencja = 30;

  • +
  • -
  • 1

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png


#3 LulzSec.

    Nie, nie wiem, ani on nie wie, nie pomoge !

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:242
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Wrocław
Offline

Napisano 27.06.2016 17:18

cod_inflict_damage na 0 by zignorować dodatkowe obrażenia pochodzące z pkt'ów inteligencji.

 

Jeżeli dam na 0 to wtedy dmg z punktow inteligencji nie bedzie wliczane do obrazen wybuchu, bardziej mnie interesuje by się wliczało bo teraz jest tak, że zacytuje powyższe zdanie "niestety ale wybuch zabija od razu i nie działa to dmg+int."

 

Czyżby ?

 

Tutaj akurat jest ale testowałem na innym serwerze bez punktów.


Użytkownik LulzSec. edytował ten post 27.06.2016 17:19

  • +
  • -
  • 0

- Only DD2 | Asysty ! b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png

- 4 Maps | Skiny | Asysty ! b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png

- Cod Mod 401 LvL ! b_350_20_F7FBFC_F7FBFC_000000_F7FBFC.png

 

Zapraszam na CSowicze.pl


#4 Master Yoga

    Support Team | Mocarz

  • Support Team

Reputacja: 136
Zaawansowany

  • Postów:275
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 28.06.2016 15:01

Spoiler

register_event("DeathMsg", "DeathMsg", "a");

Z tego co widzę event jest globalny.
Idąc tym tropem:

Flagi do eventow:
	
        "a" - Global Event - wysylany do all graczy (mozliwy jest brak mozliwosci podpiecia id do eventu np. DeathMsg)
	"b" - Event sent to a single target - do konkretnego gracza (zwiazany z pojedynczym graczem - demage)
	"c" - Send only once when repeated to other players - tylko raz gdy jest powtarzany u innych graczy.
	"d" - Only if sent to a dead player - tylko u martwych graczy
	"e" - Only if sent to an alive player - tylko u zywych graczy ( przed wersja 1.80 jest bug, wiec i tak wypada sprawdzac is_user_alive(id) )

Funkcja DeathMsg() wywoływana jest jest więcej niż raz. Skoro testowałeś plugin musiało być minimum 2 graczy, więc funkcja została wywołana 2 razy.
2 * 80 dmg = ? I masz odpowiedź na swoje pytanie.
 
Rozwiązaniem twojego problemu może być zmiana DeathMsg na wydarzenie Hamsandwich.

RegisterHam(Ham_Killed, "player", "twoja_funkcja", 1);

*Funkcja przenosi ze sobą parametr ID.

public twoja_funkcja(id)
{
      // kod

}

  • +
  • -
  • 3

HTML ★ CSS ★ JAVASCRIPT ★ AJAX ★ JQUERY ★ PHP ★ C++ ★ PAWN ★ SQL ★ Objective-C++


MKW0tb8.pngMKW0tb8.pngMKW0tb8.png






Również z jednym lub większą ilością słów kluczowych: cod nowy

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

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