Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

[ROZWIĄZANE] Problem z crashem gdzieś w tym thinku


Najlepsza odpowiedź GT Team , 08.05.2013 19:15

A JEDNAK :) Działa! Rozłożyłem TakeDamage, bo sądziłem, że wykonuje się za dużo w 1 i oto co zrobiłem:

public TakeDamage(ent, idinflictor, attacker, Float:damage, damagebits)
{
	static classname[32];
	entity_get_string(ent, EV_SZ_classname, classname, 31);
		
	if(equal(classname, "monster")) 
	{	
		new hp = floatround(entity_get_float(ent, EV_FL_health))
		/* Pokazuje zadane obrazenia */
		new id = 0
		if(is_turret(attacker))
		{
			id = SentryOwner(attacker)
			
			if(gPlayerDamage[id])
				damage+=float(gPlayerNewDamage[id])
		}
			
		if(is_turret(attacker))
		{
			new sentryid = SentryId(ent)
			if(damagebits & DMG_SLASH && sentryid == 0)
			{
				set_hudmessage(100, 255, 0, 0.81, 0.27, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync9, "W 1: %d", floatround(damage))
			}
			if(damagebits & DMG_BLAST && sentryid == 1)
			{
				set_hudmessage(100, 255, 0, 0.81, 0.32, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync10, "W 2: %d", floatround(damage))
			}
			if(damagebits & DMG_BURN && sentryid == 2)
			{
				set_hudmessage(100, 255, 0, 0.81, 0.37, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync11, "W 3: %d", floatround(damage))
			}
			if(damagebits & DMG_DROWN && sentryid == 3)
			{
				set_hudmessage(100, 255, 0, 0.81, 0.42, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync12, "W 4: %d", floatround(damage))
			}
			if(MAX_SENTRY > 4 && sentryid >= 4)
			{
				set_hudmessage(100, 0, 255, 0.81, 0.47, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync13, "O: %d", floatround(damage))
			}

		}
		else
		{
			ghave[attacker]++
			if(ghave[attacker] == 1)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.465, 0, 0.0, 1.0, 0.0, 0.2, 1)
				ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
			}
			if(ghave[attacker] == 2)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.5, 0, 0.0, 1.0, 0.0, 0.2, 2)
				ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
			}
			if(ghave[attacker] == 3)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.535, 0, 0.0, 1.0, 0.0, 0.2, 3)
				ShowSyncHudMsg(attacker, gSync5,  "%d", floatround(damage))
			}
			if(ghave[attacker] == 4)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.57, 0, 0.0, 1.0, 0.0, 0.2, 4)
				ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
			}
			if(ghave[attacker] == 5)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.605, 0, 0.0, 1.0, 0.0, 0.2, 1)
				ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
				ghave[attacker] = 0
			}
		}
		/* -- */
		static Float:fOrigin[3]
		static Origin[3]
		pev(ent, pev_origin, fOrigin)
		
		FVecIVec(Origin, fOrigin)
		
		static Color[33][3] ;
		Color[id?id:attacker][0] = gPlayerAttackColorValue[id?id:attacker][0]
		Color[id?id:attacker][1] = gPlayerAttackColorValue[id?id:attacker][1]
		Color[id?id:attacker][2] = gPlayerAttackColorValue[id?id:attacker][2]
		
		msg_dlight(Origin, 10, Color[id?id:attacker], 3, 1)	
		
		if(hp <= floatround(damage))
		{
			new data[1]
			data[0] = id?id:attacker
			set_task(0.1, "TakeDamage2", ent, data, 1)
			if(is_valid_ent(pev(ent, pev_ent_health)))
				remove_entity(pev(ent, pev_ent_health))
		}
		
	}
	if(!is_valid_ent(ent))
	{
		client_print(0, 3, "take damage !pev vaild")
		gMonsterAlive--;
		if(gMonsterAlive < 0)
			gMonsterAlive=0
				
		if(gMonsterAlive <= 0 && gWave && gStart && gGame)
			EndRound()
			
		return HAM_IGNORED
	}
	SetHamParamFloat(4, damage)
	return HAM_IGNORED
}
public TakeDamage2(Params[], ent)
{
	new id = Params[0]
		
	gMonsterAlive--;
	if(gMonsterAlive < 0)
		gMonsterAlive=0
			
	if(gMonsterAlive <= 0 && gWave && gStart && gGame)
		EndRound()
		
	if(is_user_connected(id))
	{
		set_hudmessage(255, 255, 255, -1.0, 0.6, 0, 0.0, 1.0, 0.0, 0.3)
		ShowSyncHudMsg(id, gSync3, "KILL!")
		
		gPlayerPoints[id]+=get_pcvar_num(cvar_points_kill)
			
		cs_set_user_money(id, cs_get_user_money(id)+450)
		
		if(is_user_alive(id))
			GiveAmmo(id, 20)
			
		set_user_frags(id, get_user_frags(id)+1)
		refreshFrags(id)
			
	}
}
Do zamknięcia! Przejdź do postu


  • Zamknięty Temat jest zamknięty
23 odpowiedzi w tym temacie

#21 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

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

Napisano 07.05.2013 14:52

if(pev_valid(ent) && pev_valid(pev(ent, pev_ent_health)))
remove_entity(pev(ent, pev_ent_health))

A najlepiej sprawdzanie enta wywalić gdzieś na początek funkcji.
  • +
  • -
  • 1
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu

#22 GT Team

    Ten lepszy xD

  • Autor tematu
  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 08.05.2013 16:21

Na nic... Może ten kod pomoże ?
#define pev_ent_health		pev_iuser3 // HP potwora

                .........
                new bar = create_entity("env_sprite")
		entity_set_string(bar, EV_SZ_classname, "monster_healthbar");
		entity_set_vector(bar, EV_VEC_origin, Origin)
		entity_set_model(bar, gEntityBar[0]);
		entity_set_int(bar, EV_INT_solid, SOLID_NOT);
		entity_set_int(bar, EV_INT_movetype, MOVETYPE_FLY) 
		
		set_pev(ent, pev_ent_health, bar)
		set_pev(ent, pev_max_health, health)
		set_pev(bar, pev_scale, 0.30);
		
		entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.03);
		client_print(0, 3, "send monsters| ent %d bar %d", ent, bar)

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#23 GT Team

    Ten lepszy xD

  • Autor tematu
  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 08.05.2013 19:15   Najlepsza odpowiedź

A JEDNAK :) Działa! Rozłożyłem TakeDamage, bo sądziłem, że wykonuje się za dużo w 1 i oto co zrobiłem:
public TakeDamage(ent, idinflictor, attacker, Float:damage, damagebits)
{
	static classname[32];
	entity_get_string(ent, EV_SZ_classname, classname, 31);
		
	if(equal(classname, "monster")) 
	{	
		new hp = floatround(entity_get_float(ent, EV_FL_health))
		/* Pokazuje zadane obrazenia */
		new id = 0
		if(is_turret(attacker))
		{
			id = SentryOwner(attacker)
			
			if(gPlayerDamage[id])
				damage+=float(gPlayerNewDamage[id])
		}
			
		if(is_turret(attacker))
		{
			new sentryid = SentryId(ent)
			if(damagebits & DMG_SLASH && sentryid == 0)
			{
				set_hudmessage(100, 255, 0, 0.81, 0.27, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync9, "W 1: %d", floatround(damage))
			}
			if(damagebits & DMG_BLAST && sentryid == 1)
			{
				set_hudmessage(100, 255, 0, 0.81, 0.32, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync10, "W 2: %d", floatround(damage))
			}
			if(damagebits & DMG_BURN && sentryid == 2)
			{
				set_hudmessage(100, 255, 0, 0.81, 0.37, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync11, "W 3: %d", floatround(damage))
			}
			if(damagebits & DMG_DROWN && sentryid == 3)
			{
				set_hudmessage(100, 255, 0, 0.81, 0.42, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync12, "W 4: %d", floatround(damage))
			}
			if(MAX_SENTRY > 4 && sentryid >= 4)
			{
				set_hudmessage(100, 0, 255, 0.81, 0.47, 0, 6.0, 1.0)
				ShowSyncHudMsg(id, gSync13, "O: %d", floatround(damage))
			}

		}
		else
		{
			ghave[attacker]++
			if(ghave[attacker] == 1)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.465, 0, 0.0, 1.0, 0.0, 0.2, 1)
				ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
			}
			if(ghave[attacker] == 2)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.5, 0, 0.0, 1.0, 0.0, 0.2, 2)
				ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
			}
			if(ghave[attacker] == 3)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.535, 0, 0.0, 1.0, 0.0, 0.2, 3)
				ShowSyncHudMsg(attacker, gSync5,  "%d", floatround(damage))
			}
			if(ghave[attacker] == 4)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.57, 0, 0.0, 1.0, 0.0, 0.2, 4)
				ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
			}
			if(ghave[attacker] == 5)
			{
				set_hudmessage(0, 255, 0, 0.55, 0.605, 0, 0.0, 1.0, 0.0, 0.2, 1)
				ShowSyncHudMsg(attacker, gSync5, "%d", floatround(damage))
				ghave[attacker] = 0
			}
		}
		/* -- */
		static Float:fOrigin[3]
		static Origin[3]
		pev(ent, pev_origin, fOrigin)
		
		FVecIVec(Origin, fOrigin)
		
		static Color[33][3] ;
		Color[id?id:attacker][0] = gPlayerAttackColorValue[id?id:attacker][0]
		Color[id?id:attacker][1] = gPlayerAttackColorValue[id?id:attacker][1]
		Color[id?id:attacker][2] = gPlayerAttackColorValue[id?id:attacker][2]
		
		msg_dlight(Origin, 10, Color[id?id:attacker], 3, 1)	
		
		if(hp <= floatround(damage))
		{
			new data[1]
			data[0] = id?id:attacker
			set_task(0.1, "TakeDamage2", ent, data, 1)
			if(is_valid_ent(pev(ent, pev_ent_health)))
				remove_entity(pev(ent, pev_ent_health))
		}
		
	}
	if(!is_valid_ent(ent))
	{
		client_print(0, 3, "take damage !pev vaild")
		gMonsterAlive--;
		if(gMonsterAlive < 0)
			gMonsterAlive=0
				
		if(gMonsterAlive <= 0 && gWave && gStart && gGame)
			EndRound()
			
		return HAM_IGNORED
	}
	SetHamParamFloat(4, damage)
	return HAM_IGNORED
}
public TakeDamage2(Params[], ent)
{
	new id = Params[0]
		
	gMonsterAlive--;
	if(gMonsterAlive < 0)
		gMonsterAlive=0
			
	if(gMonsterAlive <= 0 && gWave && gStart && gGame)
		EndRound()
		
	if(is_user_connected(id))
	{
		set_hudmessage(255, 255, 255, -1.0, 0.6, 0, 0.0, 1.0, 0.0, 0.3)
		ShowSyncHudMsg(id, gSync3, "KILL!")
		
		gPlayerPoints[id]+=get_pcvar_num(cvar_points_kill)
			
		cs_set_user_money(id, cs_get_user_money(id)+450)
		
		if(is_user_alive(id))
			GiveAmmo(id, 20)
			
		set_user_frags(id, get_user_frags(id)+1)
		refreshFrags(id)
			
	}
}
Do zamknięcia!

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#24 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

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

Napisano 08.05.2013 19:57

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu




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

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