←  Prośby o modyfikacje silników/klas/perków

AMXX.pl: Support AMX Mod X i SourceMod

»

Klasa
Jak zmienić "pole rażenia" rakiety...

  • +
  • -
Pytajnik? - zdjęcie Pytajnik? 01.02.2018

Witam,

 

 

może mi ktoś wytłumaczyć którą wartość muszę zmienić aby zwiększyć zasięg pola rażenia "rakiety"? (piszę w " ponieważ to nie są rakiety z generatora i mają inną budowę)

public nazwapluginu(id)
{
	// Get origin, angle, and velocity
	new Float:fOrigin[3], Float:fAngle[3], Float:fVelocity[3]
	pev(id, pev_origin, fOrigin)
	pev(id, pev_v_angle, fAngle)
	
	// New ent
	new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
	
	// Not ent
	if (!ent) return PLUGIN_HANDLED
	
	// Set plugin model
	entity_set_model(ent, MODELS[1])
	
	//Set entity name
	entity_set_string(ent, EV_SZ_classname, "nazwapluginu")
	
	// Origin
	entity_set_origin(ent, fOrigin)
	
	// Angles
	entity_set_vector(ent, EV_VEC_angles, fAngle)
	
	// Size
	new Float:MinBox[3] = {-1.0, -1.0, -1.0}
	new Float:MaxBox[3] = {1.0, 1.0, 1.0}
	entity_set_vector(ent, EV_VEC_mins, MinBox)
	entity_set_vector(ent, EV_VEC_maxs, MaxBox)
	
	// Interaction
	entity_set_int(ent, EV_INT_solid, SOLID_SLIDEBOX)
	
	// Movetype
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_FLY)
	
	// Owner
	entity_set_edict(ent, EV_ENT_owner, id)
	
	// Velocity
	VelocityByAim(id, get_pcvar_num(g_plugSpeed), fVelocity)
	entity_set_vector(ent, EV_VEC_velocity, fVelocity)
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) 
	write_byte(TE_BEAMFOLLOW) 
	write_short(ent) //entity 
	write_short(explode2) //model 
	write_byte(10) //10)//life 
	write_byte(4) //5)//width 
	write_byte(224) //r 
	write_byte(224) //g 
	write_byte(255) //b 
	write_byte(100) //brightness 
	message_end()  
	
	return PLUGIN_CONTINUE;
} 

Obecnie działa to w taki sposób, że DMG zostaje zadany kiedy umiejętność trafi DOKŁADNIE w cel.

 

 

I w jaki sposób mogę pobrać DMG z tego ? Bullet DMG nie pokazuje zadanych obrażeń przez ten plugin.

Jeśli brakuje linijek kodu - przepraszam i proszę dać znać wstawię jak najszybciej, niestety nie wiem jeszcze co za co odpowiada ale wydaje mi się że ten kod jest prawidłowy.

 

Pozdrawiam!

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 01.02.2018

Podany kod odpowiada za stworzenie i nadanie ruchu rakiecie.

Samo zdarzenie wybuchu jest wywoływane przez interakcję (dotyk) rakiety z odpowiednim obiektem w jej otoczeniu.

 

Musisz podać kod funkcji odpowiedzialnej za obsługę zdarzenia dotyku rakiety (najczęściej ze słowem "touch" lub "dotyk" w nazwie). Jeżeli masz trudności w zlokalizowaniu owej funkcji, wrzuć na wklejkę kod pluginu i udostępnij w poście link.


Użytkownik _McHappy edytował ten post 01.02.2018 16:23
Odpowiedz

  • +
  • -
Pytajnik? - zdjęcie Pytajnik? 02.02.2018

Podany kod odpowiada za stworzenie i nadanie ruchu rakiecie.

Samo zdarzenie wybuchu jest wywoływane przez interakcję (dotyk) rakiety z odpowiednim obiektem w jej otoczeniu.

 

Musisz podać kod funkcji odpowiedzialnej za obsługę zdarzenia dotyku rakiety (najczęściej ze słowem "touch" lub "dotyk" w nazwie). Jeżeli masz trudności w zlokalizowaniu owej funkcji, wrzuć na wklejkę kod pluginu i udostępnij w poście link.

 

 

Dzięki za odpowiedź!
Tak więc znalazłem coś takiego :

public fwd_Touch(ent, victim)
{ 
	if (!pev_valid(ent))
	{
		return
	}
	
	new szClassname[33] 
	entity_get_string(ent, EV_SZ_classname, szClassname, sizeof szClassname) 
	
	if (equal(szClassname, "nazwapluginu"))
	{ 
		new killer = pev(ent, pev_owner);
		
		new szNameOwner[33]
		new szNameVictim[33]
		new szOwnerTeam[33]
		new szVictimTeam[33]
		
		get_user_name(killer, szNameOwner, 32)
		get_user_name(victim, szNameVictim, 32)
		get_user_team(killer, szOwnerTeam, 32)
		get_user_team(victim, szVictimTeam,32)
		
		new iMoney, iFrags, iGain, iGainMoney, iLose, iLoseMoney
		iMoney = cs_get_user_money(killer)
		iFrags = get_user_frags(killer)
		iGain = iFrags + get_pcvar_num(g_KillFrags)
		iGainMoney = iMoney + get_pcvar_num(g_Money)
		iLose = iFrags - get_pcvar_num(g_LoseFrags)
		iLoseMoney = iMoney - get_pcvar_num(g_Money)
		
		// Alive...
		if (is_user_alive(victim) == 1 && get_user_godmode(victim) == 0)
		{
			
			// Get origin and distance
			new Float:VictimOrigin[3]
			pev(victim, pev_origin, VictimOrigin)
			
			//fakedamage him
			fakedamage(victim, "nazwapluginu", 0.0, DMG_PARALYZE)
			
			new Dam = get_pcvar_num(g_Damage)
			
			new health = get_user_health(victim)
			
			if (health - Dam >= 1 && !g_HasShield[victim])
			{
				set_user_health(victim, health - Dam)
			}
			else
			{	
				ExecuteHam(Ham_Killed, victim, killer, 2)//v1.1
				
				if (equal(szOwnerTeam, szVictimTeam))
				{
					set_user_frags(killer, iLose)
					if (iMoney > get_pcvar_num(g_Money))
						cs_set_user_money(killer, iLoseMoney, 1)
					
					else
						cs_set_user_money(killer ,0,1)
				}
				else
				{
					set_user_frags(killer, iGain)
					cs_set_user_money(killer, iGainMoney, 1)
				}
				
				set_hudmessage(0, 0, 0, 0.29, 0.49, 0, 6.0, 3.0)
				show_hudmessage(victim, "%s zabil Cie z ^nnazwapluginu",szNameOwner)
				show_hudmessage(killer, "Zabiles %s z ^nnazwapluginu",szNameVictim)
			}
		}
	}
	explode_nazwa(ent)
}

Co powinienem zrobić ?

Odpowiedz

  • +
  • -
Pytajnik? - zdjęcie Pytajnik? 02.02.2018

Nie mogę edytować posta wyżej ale mam jeszcze to:

stock explode_nazwa(const ent_index) 
{
	new Float:iOrigin[3], fOrigin[3]
	entity_get_vector(ent_index, EV_VEC_origin, iOrigin) 
	FVecIVec(iOrigin, fOrigin)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY, fOrigin) 
	write_byte(TE_EXPLOSION) 
	write_coord(fOrigin[0]) 
	write_coord(fOrigin[1]) 
	write_coord(fOrigin[2]) 
	write_short(explode2) 
	write_byte(30) 
	write_byte(15) 
	write_byte(0) 
	message_end() 
	remove_entity(ent_index)
}
Odpowiedz

  • +
  • -
glut - zdjęcie glut 02.02.2018

Bodajże ta linia ;)
write_byte(15)
Odpowiedz

  • +
  • -
Pytajnik? - zdjęcie Pytajnik? 02.02.2018

Bodajże ta linia ;)

write_byte(15)

 

 

Tą linię już zmieniałem wcześniej, zamiast 30 miałem 300 a zamiast 15 miałem 200 (tak na oko wszystko dawałem - metoda prób i błędów) i nic się nie zmieniało. 

 

Z tego kodu wynika, że w tym miejscu powinno się zmieniać "pole rażenia" ?

 

Ps.

2 sprawa dlaczego BulletDMG nie pokazuje zadanego DMG z tej umiejętności?

Odpowiedz

  • +
  • -
Pytajnik? - zdjęcie Pytajnik? 03.02.2018

Ktoś może mi w tym pomóc ?
Odpowiedz

  • +
  • -
AwIlL^^ - zdjęcie AwIlL^^ 05.02.2018

W kodzie nie da się zmienić zasięgu rakiety bo tego nie ma.
Przechwycić obrażeń się nie da bo nie jest wywołane zadawanie obrażeń, jest zmienianie hp lub wywołane zabicie, dodatkowo ExecuteHam nie da się przechwycić używając RegisterHam
Explode_nazwa tylko rysuje wybuch...
Odpowiedz

  • +
  • -
Pytajnik? - zdjęcie Pytajnik? 06.02.2018

W kodzie nie da się zmienić zasięgu rakiety bo tego nie ma.
Przechwycić obrażeń się nie da bo nie jest wywołane zadawanie obrażeń, jest zmienianie hp lub wywołane zabicie, dodatkowo ExecuteHam nie da się przechwycić używając RegisterHam
Explode_nazwa tylko rysuje wybuch...

 

Więc można powiedzieć że to działa tak jak strzał w Hitboxa ? Dlatego DMG zadany obok modelu nie zadaje obrażeń ?

Czyli czeka mnie przeróbka kodu pod "rakiety"  i jedyne co mogę zostawić to wygląd (rysowanie) tej rakiety tak ?

Odpowiedz

  • +
  • -
AwIlL^^ - zdjęcie AwIlL^^ 06.02.2018

Dokładnie tak się dzieje jak opisałeś,
I jeszcze aby pobierać obrażenia i nimi manipulować w innych pluginach użyj ExecuteHamB(Ham_TakeDamage, id_ofiary, byt_atakujący, id_atakującego, Float:obrażenia, suma_bitowa_typów_obrażeń)
ten float napisałem żebyś wiedział że to ma być liczba rzeczywista, a ta suma bitowa obrażeń to dla wybuchu będzie 1<<24
Byt atakujący to id rakietu, atakujący to id właściciela rakiety
Odpowiedz