THIS IS UPDATED AFTER SHARKS POST
void Scr_ClearOutParams(){
VariableValue* Top;
uint Params = *(int*)(0x13C3140 + 0x1;
*(int*)(0x13C3140 + 0x1 = 0;
for(Top -= Params; Params; --Params){
((void(*)(int, VariableUnion))&ParseAddr(0x2DA724))(Top->type, Top->u); // RemoveRefToObject
--Top;
}
return;
}
void GScr_Earthquake(float scale, float duration, float* source, float radius){
Scr_AddFloat(radius);
Scr_AddVector(source);
Scr_AddFloat(duration);
Scr_AddFloat(scale);
Scr_SetParameters(4); //See how I set the parameter number after I finish calling the Scr_Adds?
((void(*)())&ParseAddr(0x268B60))(); //Call the actual function
//((void(*)(int))&ParseAddr(0x268B60))(ClientID << 16); //Only call this one if the one above doesn't work.
Scr_ClearOutParams();
}
void Scr_PlayFX(const char* EffectId, float* Position, float* Forward = 0, float* Up = 0){
Scr_AddVector(Up);
Scr_AddVector(Forward);
Scr_AddVector(Position);
Scr_AddInt(((int(*)(const char*))&ParseAddr(0x324D0))(EffectId));
Scr_SetParameters(4);
((void(*)())&ParseAddr(0x2732D4))();
Scr_ClearOutParams();
}
void Scr_MagicBullet(int ClientID, const char* Bullet, float* Start, float* End){
Scr_AddEntity(GetEntity(ClientID));
Scr_AddVector(End);
Scr_AddVector(Start);
Scr_AddString(Bullet);
Scr_SetParameters(4);
((void(*)())&ParseAddr(0x264800))();
Scr_ClearOutParams();
}
void Scr_PhysicsExplosionCylinder(float* Origin, float OuterRadius, float InnerRadius, float Magnitude){
Scr_AddFloat(Magnitude);
Scr_AddFloat(InnerRadius);
Scr_AddFloat(OuterRadius);
Scr_AddVector(Origin);
Scr_SetParameters(4);
((void(*)())&ParseAddr(0x273770))();
//If it doesn't work, try ((void(*)(int))&ParseAddr(0x273770))(ClientID << 16);
Scr_ClearOutParams();
}
void GScr_SetMiniMap(const char* Material, UpperLeftX, UpperLeftY, LowerRightX, LowerRightY){
Scr_AddFloat(LowerRightY);
Scr_AddFloat(LowerRightX);
Scr_AddFloat(UpperLeftY);
Scr_AddFloat(UpperLeftX);
Scr_AddString(Material);
Scr_SetParameters(5);
Scr_ClearOutParams();
}
float* VectorScale(float* Angle, int Scale){
float Result[] = { Angle[0]* Scale, Angle[1]* Scale, Angle[2]* Scale };
return Result;
}
#define AngleVectors(Angle, Forward, Right, Up) ((void(*)(const float*, float*, float*, float*))&ParseAddr(0x38020)(Angle, Forward, Right, Up)
float* AnglesToForward(const float* Angle){
float Forward[3];
AngleVectors(Angle, Forward, 0, 0);
return Forward;//If this doesn't work, return Angle;
}
#define G_GetPlayerViewOrigin(PS, Origin) ((void(*)(int, float*))&ParseAddr(0x231884))(PS, Origin)
float* GetEye(unsigned int ClientID){
float Org[3];
G_GetPlayerViewOrigin(G_Client(ClientID), Org);
return Org;
}
#define G_LocationalTrace(Trace, Start, End, PassEnt, ContentMask, PriorityMap) ((void(*)(trace_t*, const float*, const float*, int, int, char*))&ParseAddr(0x250FA4))(Trace, Start, End, PassEnt, ContentMask, PriorityMap)
#define Trace_GetEntityHitId(Trace) ((ushort(*)(trace_t*))&ParseAddr(0x2A9750))(Trace)
struct BulletTraceType{
short entnum;
float Pos[3];
};
struct trace_t{//Xx jAmes t xX
float fraction;
byte Buffer[0x28];
};
void BulletTrace(BulletTraceType* Type, float* Start, float* End, unsigned int ClientID){//Xx jAmes t xX
trace_t trace;
G_LocationalTrace(&trace, Start, End, ClientID, 0x80A831, 0);
for(unsigned char i = 0; i < 3; i++) Type->Pos[i] = (((End[i]-Start[i]) * trace.fraction) + Start[i]);
short Entity = Trace_GetEntityHitId(&trace) & 0xFFFF;
if(Entity < 0x7FE) Type->entnum= Entity;
}
float* GetCursorPos(unsigned int ClientID){
BulletTraceType Type;
BulletTrace(&Type, GetEye(), VectorScale(AnglesToForward((float*)(G_Client(ClientID) + 0x184), 100000), ClientID);
return Type.Pos;
}
int VM_ExecuteStub(){
__asm("li %r3, 0x4");
}
int VM_Execute(){
//Do stuff here
return VM_ExecuteStub();
}
What you can use this for: A loop? Calling Scr_Adds?
int Scr_NotifyStub(){
__asm("li %r3, 0x5");
}
#define SL_ConvertToString(StringValue) ((const char*(*)(unsigned short))&ParseAddr(0x2D894C))(StringValue)
#define iClient *(short*)Entity
void Scr_Notify(int Entity, short StringValue, unsigned int Paramcount){
/*
if(!strcmp(SL_ConvertToString(StringValue), "weapon_fired")) MagicBullet(iClient, GetEye(), GetCursorPos());
*/
return Scr_NotifyStub(Entity, StringValue, Paramcount);
}
What you can use this for: Calling Scr_Adds | Waitill. Only use this if you're having crashing problems with VM_Notify
Copyright © 2024, NextGenUpdate.
All Rights Reserved.