←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Rzut entem, efekt franatu

  • +
  • -
NiczegoWinien - zdjęcie NiczegoWinien 18.09.2019

Wita. Jak w temacie. Potrzebuję kodu który zachowa parabole lotu taka jak ma granat. Czyli z miejsca gdzie stoimy, leci tam gdzie celujemy.
Pozdrawiam
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 18.09.2019

public spawn_crowbar(const id)
{
	new iEntity;
	new Float:where[3];

	iEntity = create_entity("info_target");
	set_pev(iEntity, pev_classname, g_szClassNameCrowbar);
	set_pev(iEntity, pev_solid, SOLID_TRIGGER);
	set_pev(iEntity, pev_movetype, MOVETYPE_BOUNCE);
	entity_set_model(iEntity, CrowbarModels[2]);
	pev(id, pev_origin, where);
	where[2] += 50.0;
	where[0] += random_float(-20.0, 20.0);
	where[1] += random_float(-20.0, 20.0);
	entity_set_origin(iEntity, where);
	where[0] = 0.0;
	where[2] = 0.0;
	where[1] = random_float(0.0, 180.0);
	entity_set_vector(iEntity, EV_VEC_angles, where);
	velocity_by_aim(id, 200, where);
	entity_set_vector(iEntity, EV_VEC_velocity, where);
}
 
register_touch(g_szClassNameCrowbar, "worldspawn", "CrowbarTouch");

public CrowbarTouch(const id, const world)
{
	new Float:velocity[3];
	new Float:volume;
	entity_get_vector(id, EV_VEC_velocity, velocity);

	velocity[0] = (velocity[0] * 0.45);
	velocity[1] = (velocity[1] * 0.45);
	velocity[2] = (velocity[2] * 0.45);
	entity_set_vector(id, EV_VEC_velocity, velocity);
	volume = get_speed(id) * 0.005;
	if (volume > 1.0) volume = 1.0;
	if (volume > 0.1) emit_sound(id, CHAN_AUTO, "debris/metal2.wav", volume, ATTN_NORM, 0, PITCH_NORM);
}
 

Może Ci sie przyda


Rivit (18.09.2019 10:32):
Hmm, musisz jeszcze zobaczyć czy trzeba ustawić pev_owner, pamiętam, że miałem problem z tym, bo byt jakby zawieszał się na mojej głowie (nie pamiętam dokładnie)

Użytkownik TibacK edytował ten post 18.09.2019 10:24
Odpowiedz

  • +
  • -
NiczegoWinien - zdjęcie NiczegoWinien 18.09.2019

Ok dzięki. Będę w domu to zobaczę co da się zrobić.
Odpowiedz

  • +
  • -
NiczegoWinien - zdjęcie NiczegoWinien 19.09.2019

Chodzi o to ? 


Chodzi mi na przykładzie.
Aby rakieta w cod mod nie leciała prosto tylko taką parabole żeby miała jak granat.
Tam gdzie celuje celownikiem to tam leci zachowując efekt rzuconego granatu.
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 19.09.2019

To może coś takiego?

https://forums.allie...ead.php?t=98032

 

pev_friction i pev_gravity chyba trzeba ustawić.

 

 

A sprawdzałeś nadawanie entowi MOVETYPE_TOSS?

Odpowiedz

  • +
  • -
wonsz żeczny - zdjęcie wonsz żeczny 19.09.2019

Ja używam takiego kodu, dzięki któremu ent leci jak granat:

public granat(id)
{
	if(!is_user_alive(id))
		return PLUGIN_HANDLED;
	
	new Float:origin[3],Float:velocity[3],Float:angles[3];

	engfunc(EngFunc_GetAttachment, id, 0, origin,angles)
	pev(id,pev_angles,angles)

	new ent = create_entity("info_target") 

	set_pev(ent, pev_classname, "granat")
	set_pev(ent, pev_solid, SOLID_BBOX)
	set_pev(ent, pev_movetype, MOVETYPE_TOSS)
	set_pev(ent, pev_mins, { -0.1, -0.1, -0.1 })
	set_pev(ent, pev_maxs, { 0.1, 0.1, 0.1 })
	entity_set_model(ent, "models/grenade.mdl")
	set_pev(ent, pev_origin, origin)
	set_pev(ent, pev_angles, angles)
	set_pev(ent, pev_owner, id)
	velocity_by_aim(id, 1000, velocity)
	set_pev(ent, pev_velocity, velocity)
/* (tutaj ten pasek za lecącym entem xd)
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW) // Temporary entity ID
	write_short(ent) // Entity
	write_short(sTrail) // Sprite index 
	write_byte(10) // Life
	write_byte(2) // Line width
	write_byte(255) // Red
	write_byte(255) // Green
	write_byte(255) // Blue
	write_byte(255) // Alpha
	message_end();
*/

	return PLUGIN_CONTINUE;
}

A i jeszcze w sumie zapomniałem dodać, że on po zetknięciu z ziemią nie poturla się po niej, zgaduję, że chcesz to wykorzystać do rzutu pokeballem do pokemoda więc w sumie to może być wystarczające.

 

TibacK (wczoraj, 11:32):
Hmm, musisz jeszcze zobaczyć czy trzeba ustawić pev_owner, pamiętam, że miałem problem z tym, bo byt jakby zawieszał się na mojej głowie (nie pamiętam dokładnie)

 

Zawieszał się zapewne na głowie przez to:

register_touch(g_szClassNameCrowbar, "worldspawn", "CrowbarTouch");

Lepszym rozwiązaniem byłoby:

register_touch(g_szClassNameCrowbar, "*", "CrowbarTouch");

A dobra, przeczytałem na początku, że na czyjejś głowie a to na twojej :/


Użytkownik wonsz żeczny edytował ten post 19.09.2019 20:42
Odpowiedz