You are viewing our Forum Archives. To view or take place in current topics click here.
[Release] Mw2 Tu8 ShootFx Code
Posted:
[Release] Mw2 Tu8 ShootFx CodePosted:
Status: Offline
Joined: Sep 20, 201212Year Member
Posts: 2,136
Reputation Power: 312
Status: Offline
Joined: Sep 20, 201212Year Member
Posts: 2,136
Reputation Power: 312
I have decided to release shoot fx enjoy.
bullettrace (for people that done already have it)
PlayFx code:
ShootFx code:
Or (Thanks Se7ensinsJtag) :
call it like:
Example:
[ Register or Signin to view external links. ]
Credit to james for bullettrace.
Credit to Gol2den for his forge source.
Last edited by Nissan ; edited 4 times in total
bullettrace (for people that done already have it)
VOID (__cdecl *AngleVectors)(PFLOAT Angles, PFLOAT Forward, PFLOAT Right, PFLOAT Up) = (VOID (__cdecl *)(PFLOAT, PFLOAT, PFLOAT, PFLOAT))0x8228EDC0;
enum TraceHitType
{
TRACE_HITTYPE_NONE = 0,
TRACE_HITTYPE_ENTITY = 1,
TRACE_HITTYPE_DYNENT_MODEL = 2,
TRACE_HITTYPE_DYNENT_BRUSH = 3,
};
struct trace_t
{
FLOAT Fraction;
FLOAT Normal[3];
DWORD SurfaceFlags;
DWORD Contents;
PCHAR Material;
TraceHitType HitType;
UINT16 HitId;
UINT16 ModelIndex;
UINT16 PartName;
UINT16 PartGroup;
bool AllSolid;
bool StartSolid;
bool Walkable;
};
struct BulletTrace
{
TraceHitType HitType;
DWORD Entity;
UINT16 EntityIndex;
FLOAT Origin[3];
};
VOID AnglesToForward(PFLOAT Angles, PFLOAT ForwardOut)
{
AngleVectors(Angles, ForwardOut, NULL, NULL);
}
VOID GetBulletTrace(BulletTrace *BT, INT Client, PFLOAT Start, PFLOAT End)
{
trace_t Trace;
G_LocationalTrace(&Trace, Start, End, Client, 0x806831, NULL);
for(INT i = 0; i < 3; i++) { BT->Origin[i] = (((End[i] - Start[i]) * Trace.Fraction) + Start[i]); }
UINT16 EntityIndex = Trace_GetEntityHitId(&Trace) & 0xFFFF;
if(EntityIndex < 0x7FE) { BT->EntityIndex = EntityIndex; }
// Fill BulletTrace struct with some value from the trace_t struct
BT->HitType = Trace.HitType;
BT->Entity = gentity((INT)EntityIndex);
}
PlayFx code:
int (*G_TempEntity)(float*origin,int Event) = (int(_cdecl*)(float*,int))0x8220EE88;
int PlayFX(float* origin,int FxID)
{
int Ent = G_TempEntity(origin,0x53);
*(int*)(Ent + 0xA0) = FxID;
*(float*)(Ent + 0x138) = 0;
*(float*)(Ent + 0x13C) = 0;
*(float*)(Ent + 0x140) = 270;
return Ent;
}
ShootFx code:
VOID ShootFX(INT Client)
{
FLOAT PlayerAngles[3] = { *(FLOAT*)(gentity(Client) + 0x48), *(FLOAT*)(gentity(Client) + 0x4C), *(FLOAT*)(gentity(Client) + 0x50) };
FLOAT Forward[3]; AnglesToForward(PlayerAngles, Forward);
FLOAT Start[3]; G_GetPlayerViewOrigin(playerState(Client), Start);
FLOAT End[3] = { Forward[0] * 100000, Forward[1] * 100000, Forward[2] * 100000 };
BulletTrace Trace;
GetBulletTrace(&Trace,Client,Start,End);
PCHAR MapName = Dvar_GetString("ui_mapname");
if(strstr(MapName, "mp_afghan")) { PlayFX(Trace.Origin,11); }
else if(strstr(MapName, "mp_derail")) { PlayFX(Trace.Origin,98); }
else if(strstr(MapName, "mp_estate")) { PlayFX(Trace.Origin,97); }
else if(strstr(MapName, "mp_favela")) { PlayFX(Trace.Origin,103); }
else if(strstr(MapName, "mp_highrise")) { PlayFX(Trace.Origin,10); }
else if(strstr(MapName, "mp_invasion")) { PlayFX(Trace.Origin,104); }
else if(strstr(MapName, "mp_checkpoint")) { PlayFX(Trace.Origin,90); }
else if(strstr(MapName, "mp_quarry")) { PlayFX(Trace.Origin,71); }
else if(strstr(MapName, "mp_rundown")) { PlayFX(Trace.Origin,99); }
else if(strstr(MapName, "mp_rust")) { PlayFX(Trace.Origin,62); }
else if(strstr(MapName, "mp_boneyard")) { PlayFX(Trace.Origin,105); }
else if(strstr(MapName, "mp_nightshift")) { PlayFX(Trace.Origin,96); }
else if(strstr(MapName, "mp_subbase")) { PlayFX(Trace.Origin,82); }
else if(strstr(MapName, "mp_terminal")) { PlayFX(Trace.Origin,9); }
else if(strstr(MapName, "mp_underpass")) { PlayFX(Trace.Origin,113); }
else if(strstr(MapName, "mp_brecourt")) { PlayFX(Trace.Origin,61); }
}
Or (Thanks Se7ensinsJtag) :
VOID ShootFX(INT Client)
{
FLOAT PlayerAngles[3] = { *(FLOAT*)(gentity(Client) + 0x48), *(FLOAT*)(gentity(Client) + 0x4C), *(FLOAT*)(gentity(Client) + 0x50) };
FLOAT Forward[3]; AnglesToForward(PlayerAngles, Forward);
FLOAT Start[3]; G_GetPlayerViewOrigin(playerState(Client), Start);
FLOAT End[3] = { Forward[0] * 100000, Forward[1] * 100000, Forward[2] * 100000 };
BulletTrace Trace;
GetBulletTrace(&Trace,Client,Start,End);
PlayFX(Trace.Origin, G_EffectIndex("props/barrelexp"));
}
call it like:
ShootFX(Client);
Example:
[ Register or Signin to view external links. ]
Credit to james for bullettrace.
Credit to Gol2den for his forge source.
Last edited by Nissan ; edited 4 times in total
#2. Posted:
Status: Offline
Joined: Oct 17, 201113Year Member
Posts: 2,296
Reputation Power: 198
Status: Offline
Joined: Oct 17, 201113Year Member
Posts: 2,296
Reputation Power: 198
Nice release bro
+ Reppy
Cheers.
+ Reppy
Cheers.
- 1useful
- 0not useful
#3. Posted:
Status: Offline
Joined: Mar 14, 201410Year Member
Posts: 344
Reputation Power: 22
This was released a while ago, but thanks anyway
- 0useful
- 0not useful
#4. Posted:
Status: Offline
Joined: Sep 21, 201311Year Member
Posts: 454
Reputation Power: 26
Nice one remember you telling me this on Skype like ages ago, nice
- 0useful
- 0not useful
#5. Posted:
Status: Offline
Joined: Sep 11, 201410Year Member
Posts: 268
Reputation Power: 14
Status: Offline
Joined: Sep 11, 201410Year Member
Posts: 268
Reputation Power: 14
Lol this is a really bad way of doing it just saying.
- 0useful
- 0not useful
#6. Posted:
Status: Offline
Joined: Jul 10, 201212Year Member
Posts: 154
Reputation Power: 9
Nice release. Thank you for sharing.
- 0useful
- 0not useful
#7. Posted:
Status: Offline
Joined: Sep 20, 201212Year Member
Posts: 2,136
Reputation Power: 312
Status: Offline
Joined: Sep 20, 201212Year Member
Posts: 2,136
Reputation Power: 312
AnimeHypedUp wrote Lol this is a really bad way of doing it just saying.
it might be a bad way of doing it but its still a way / only way that is released that i could find/
- 0useful
- 0not useful
#8. Posted:
Status: Offline
Joined: Sep 11, 201410Year Member
Posts: 268
Reputation Power: 14
Status: Offline
Joined: Sep 11, 201410Year Member
Posts: 268
Reputation Power: 14
Orbs wroteWhy aren't you using G_EffectIndex for the effects rather than using all those if statements?AnimeHypedUp wrote Lol this is a really bad way of doing it just saying.
it might be a bad way of doing it but its still a way / only way that is released that i could find/
- 0useful
- 0not useful
#9. Posted:
Status: Offline
Joined: Sep 20, 201212Year Member
Posts: 2,136
Reputation Power: 312
Status: Offline
Joined: Sep 20, 201212Year Member
Posts: 2,136
Reputation Power: 312
AnimeHypedUp wroteOrbs wroteWhy aren't you using G_EffectIndex for the effects rather than using all those if statements?AnimeHypedUp wrote Lol this is a really bad way of doing it just saying.
it might be a bad way of doing it but its still a way / only way that is released that i could find/
i didn't think about using it :/ its on the post now though
- 0useful
- 0not useful
#10. Posted:
Status: Offline
Joined: Aug 13, 201410Year Member
Posts: 8
Reputation Power: 0
Orbs wroteAnimeHypedUp wroteOrbs wroteWhy aren't you using G_EffectIndex for the effects rather than using all those if statements?AnimeHypedUp wrote Lol this is a really bad way of doing it just saying.
it might be a bad way of doing it but its still a way / only way that is released that i could find/
i didn't think about using it :/ its on the post now though
You should use G_EffectIndex as it is much easier then finding the id's for all of the effects.
I actually wrote a ShootFx function yesterday.
It's pretty short
If you want you can use it.
void shootEffect(int client, char *effect)
{
playFX(effect, GetCursorPosition(client));
}
then for GetCursorPosition:
float *GetCursorPosition(int client)
{
BulletTraceType Type;
bulletTrace(&Type, getTagOrigin(client, "tag_eye"), vector_scale(anglesToForward(getPlayerAngles(client)), 1000000), client, 0);
return Type.position;
}
Im using my own bulletTrace but you can use yours as both should work
if you dont have vector_scale:
float *vector_scale(float *vec, float scale)
{
float out[3];
for(int i = 0;i < 3;i++)
out[i] = (vec[i] * scale);
return out;
}
and anglesToForward
void (*AngleVectors)(const float *angles, float *forward, float *right, float *up) =
(void(*)(const float *, float *, float *, float *))0x8228EDC0;
float *anglesToForward(float *angles)
{
float forward[3];
AngleVectors(angles, forward, 0, 0);
return forward;
}
and if you dont have getPlayerAngles:
float *getPlayerAngles(int client)
{
return (float *)(playerState(client) + 0x10C);
}
Everything worked when i tested it yesterday
So have fun with it
- 2useful
- 0not useful
You are viewing our Forum Archives. To view or take place in current topics click here.