Z tego co czytalem to pobierane sa jakos obrazenia i na tej podstawie jest obliczany kierunek i sila odrzutu
We flashach nie wiem jak to mozna by bylo zrealizowac stad moja prosba.
Jesli ktos ma jakies pomysly albo potrafi samodzielnie go przerobic będę bardzo wdzieczny.
#include <amxmodx> #include <amxmisc> #include <engine> #define SPEED 800.0 public plugin_init() { register_plugin("HE Knockback", "1.0", "ThantiK") register_event("Damage", "hedamage_event", "b", "2!0", "4!0", "5!0", "6!0") register_cvar("he_push","20.0") } stock get_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3] ) { new Float:fEntOrigin[3]; entity_get_vector( ent, EV_VEC_origin, fEntOrigin ); // Velocity = Distance / Time new Float:fDistance[3]; fDistance[0] = fEntOrigin[0] - fOrigin[0]; fDistance[1] = fEntOrigin[1] - fOrigin[1]; fDistance[2] = fEntOrigin[2] - fOrigin[2]; new Float:fTime = ( vector_distance( fEntOrigin,fOrigin ) / fSpeed ); fVelocity[0] = fDistance[0] / fTime; fVelocity[1] = fDistance[1] / fTime; fVelocity[2] = fDistance[2] / fTime; return ( fVelocity[0] && fVelocity[1] && fVelocity[2] ); } // Sets velocity of an entity (ent) away from origin with speed (speed) stock set_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed ) { new Float:fVelocity[3]; get_velocity_from_origin( ent, fOrigin, fSpeed, fVelocity ) entity_set_vector( ent, EV_VEC_velocity, fVelocity ); return ( 1 ); } public hedamage_event(id) { new MAXPLAYERS MAXPLAYERS = get_maxplayers() new inflictor = entity_get_edict(id, EV_ENT_dmg_inflictor) if (inflictor <= MAXPLAYERS) return PLUGIN_CONTINUE new classname2[8] entity_get_string(inflictor, EV_SZ_classname, classname2, 7) if (!equal(classname2, "grenade")) return PLUGIN_CONTINUE new Float:upVector[3] upVector[0] = float(read_data(4)) upVector[1] = float(read_data(5)) upVector[2] = float(read_data(6)) new damagerept = read_data(2) set_velocity_from_origin(id, upVector, get_cvar_float("he_push")*damagerept) return PLUGIN_CONTINUE }
Odswiezam, znalazlem odpowiedni plugin w z ktorego moge wykorzystac dane, jest to virussmokenade, teraz potrzebuje znalezc takie cos jak odleglosc gracza od wybuchajacego flasha, smoke-a.
W oryginalnym kodzie virussmokenade mamy:
public fw_emitsound(Ent,Channel,const Sound[],Float:Volume,Float:Attenuation,Flags,Pitch) { if(p_toggle != 1) return FMRES_IGNORED; if(!equali(Sound,"weapons/sg_explode.wav")) return FMRES_IGNORED; new Float:origin[3],i,name[32]; pev(Ent, pev_origin, origin); new owner = pev(Ent,pev_owner); Light(origin); Render(Ent,kRenderFxNone,255,255,255,15); while((i = fm_find_ent_in_sphere(i,origin,radius)) != 0) {gdzie znajduje mi graczy (i) w promieniu o wartosci radius, czy da sie jakos odkryc prawdziwa odleglosc gracza od mojego granatu bo od tego bedzie zalezala sila odpychajaca ?
Ok, jakos sobie poradzilem, na razie nie jest to jeszcze dokladnie to co chcialem ale powiedzmy, ze dziala w 50 % dziekuje za zainteresowanie tym ktorzy nad tym mysleli i temacik chyba mozna zamknac.
Ostatecznie to wyszlo w ten sposob:
http://www.youtube.com/watch?v=VhkCnRUGXpw
Użytkownik ZiuTeK edytował ten post 25.09.2010 23:55