Improved knockback, renamed ZTele function, changed ZStuck to reset velocity, modified velocity changing function, removed unneeded offset (basevelocity)
This commit is contained in:
parent
965de0e697
commit
1dc1f5cefe
@ -26,6 +26,7 @@ enum ZRSettings
|
||||
Handle:CVAR_ZOMBIE_JUMP_DISTANCE,
|
||||
Handle:CVAR_ZOMBIE_JUMP_HEIGHT,
|
||||
Handle:CVAR_ZOMBIE_KNOCKBACK,
|
||||
Handle:CVAR_ZOMBIE_KNOCKBACK_GRENADE,
|
||||
Handle:CVAR_ZOMBIE_NVGS,
|
||||
Handle:CVAR_ZOMBIE_FOV,
|
||||
Handle:CVAR_ZOMBIE_REGEN,
|
||||
@ -111,6 +112,7 @@ CreateCvars()
|
||||
gCvars[CVAR_ZOMBIE_JUMP_DISTANCE] = CreateConVar("zr_zombie_jump_distance", "0.1", "How far the zombie jumps, (0: Regular jump distance)");
|
||||
gCvars[CVAR_ZOMBIE_JUMP_HEIGHT] = CreateConVar("zr_zombie_jump_height", "10.0", "How high a zombie jumps (0: Regular jump height)");
|
||||
gCvars[CVAR_ZOMBIE_KNOCKBACK] = CreateConVar("zr_zombie_knockback", "1", "How far zombies are pushed back when shot. If classes are enabled: This one is a multiplier for class knockback values (1: Default)");
|
||||
gCvars[CVAR_ZOMBIE_KNOCKBACK_GRENADE] = CreateConVar("zr_zombie_knockback_grenade", "4.0", "Knockback multiplier when a grenade inflicts damage on a zombie. (4.0: Default)");
|
||||
gCvars[CVAR_ZOMBIE_NVGS] = CreateConVar("zr_zombie_nvgs", "-1", "Zombies will be equipped with nightvision. Also used to override class nvgs if non-negative. (-1: No override, uses class setting, 0: No nvgs, 1: Nvgs on)");
|
||||
gCvars[CVAR_ZOMBIE_FOV] = CreateConVar("zr_zombie_fov", "110", "The field of vision of zombies (90: Default vision)");
|
||||
gCvars[CVAR_ZOMBIE_REGEN] = CreateConVar("zr_zombie_regen", "0", "Zombies will regenerate health");
|
||||
|
@ -304,18 +304,21 @@ public Action:PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
|
||||
|
||||
if (!StrEqual(weapon, "hegrenade"))
|
||||
{
|
||||
GetClientAbsOrigin(attacker, attackerloc);
|
||||
GetPlayerEyePosition(attacker, attackerloc);
|
||||
|
||||
new bool:shotgun = (StrEqual(weapon, "m3") || StrEqual(weapon, "xm1014"));
|
||||
new Float:attackerang[3];
|
||||
GetPlayerEyeAngles(attacker, attackerang);
|
||||
|
||||
KnockBack(index, clientloc, attackerloc, knockback, dmg, shotgun);
|
||||
TR_TraceRayFilter(attackerloc, attackerang, MASK_ALL, RayType_Infinite, TraceRayFilter);
|
||||
TR_GetEndPosition(clientloc);
|
||||
|
||||
KnockBack(index, clientloc, attackerloc, knockback, dmg, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
new Float:heLoc[3];
|
||||
FindExplodingGrenade(heLoc);
|
||||
FindExplodingGrenade(attackerloc);
|
||||
|
||||
KnockBack(index, clientloc, heLoc, knockback, dmg, true);
|
||||
KnockBack(index, clientloc, attackerloc, knockback, dmg, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -360,6 +363,16 @@ public Action:PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
|
||||
UpdateAlphaDamaged(index);
|
||||
}
|
||||
|
||||
public bool:TraceRayFilter(entity, contentsMask)
|
||||
{
|
||||
if (entity > 0 && entity < MAXPLAYERS)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
FindExplodingGrenade(Float:heLoc[3])
|
||||
{
|
||||
decl String:classname[64];
|
||||
|
@ -6,7 +6,6 @@
|
||||
* ====================
|
||||
*/
|
||||
|
||||
new offsBaseVelocity;
|
||||
new offsGetVelocity0;
|
||||
new offsGetVelocity1;
|
||||
new offsGetVelocity2;
|
||||
@ -23,15 +22,11 @@ new offsRender;
|
||||
new Handle:g_hGameConf = INVALID_HANDLE;
|
||||
new Handle:g_hRemoveAllItems = INVALID_HANDLE;
|
||||
new Handle:g_hTerminateRound = INVALID_HANDLE;
|
||||
new Handle:g_hEyePosition = INVALID_HANDLE;
|
||||
new Handle:g_hEyeAngles = INVALID_HANDLE;
|
||||
|
||||
FindOffsets()
|
||||
{
|
||||
offsBaseVelocity = FindSendPropInfo("CBasePlayer", "m_vecBaseVelocity");
|
||||
if (offsBaseVelocity == -1)
|
||||
{
|
||||
SetFailState("Couldn't find \"m_vecBaseVelocity\"!");
|
||||
}
|
||||
|
||||
offsGetVelocity0 = FindSendPropInfo("CBasePlayer", "m_vecVelocity[0]");
|
||||
if (offsGetVelocity0 == -1)
|
||||
{
|
||||
@ -111,6 +106,16 @@ SetupGameData()
|
||||
PrepSDKCall_SetFromConf(g_hGameConf, SDKConf_Virtual, "RemoveAllItems");
|
||||
g_hRemoveAllItems = EndPrepSDKCall();
|
||||
|
||||
StartPrepSDKCall(SDKCall_Player);
|
||||
PrepSDKCall_SetFromConf(g_hGameConf, SDKConf_Virtual, "EyePosition");
|
||||
PrepSDKCall_SetReturnInfo(SDKType_QAngle, SDKPass_ByValue);
|
||||
g_hEyePosition = EndPrepSDKCall();
|
||||
|
||||
StartPrepSDKCall(SDKCall_Player);
|
||||
PrepSDKCall_SetFromConf(g_hGameConf, SDKConf_Virtual, "EyeAngles");
|
||||
PrepSDKCall_SetReturnInfo(SDKType_QAngle, SDKPass_ByValue);
|
||||
g_hEyeAngles = EndPrepSDKCall();
|
||||
|
||||
StartPrepSDKCall(SDKCall_GameRules);
|
||||
PrepSDKCall_SetFromConf(g_hGameConf, SDKConf_Signature, "TerminateRound");
|
||||
PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain);
|
||||
@ -118,9 +123,21 @@ SetupGameData()
|
||||
g_hTerminateRound = EndPrepSDKCall();
|
||||
}
|
||||
|
||||
SetPlayerVelocity(client, const Float:vec[3])
|
||||
SetPlayerVelocity(client, const Float:vec[3], bool:reset)
|
||||
{
|
||||
SetEntDataVector(client, offsBaseVelocity, vec, true);
|
||||
if (reset)
|
||||
{
|
||||
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, vec);
|
||||
}
|
||||
else
|
||||
{
|
||||
new Float:fVelocity[3];
|
||||
GetPlayerVelocity(client, fVelocity);
|
||||
|
||||
AddVectors(vec, fVelocity, fVelocity);
|
||||
|
||||
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fVelocity);
|
||||
}
|
||||
}
|
||||
|
||||
GetPlayerVelocity(client, Float:vel[3])
|
||||
@ -190,6 +207,16 @@ RemoveAllPlayersWeapons(client)
|
||||
SDKCall(g_hRemoveAllItems, client);
|
||||
}
|
||||
|
||||
GetPlayerEyePosition(client, Float:vec[3])
|
||||
{
|
||||
SDKCall(g_hEyePosition, client, vec);
|
||||
}
|
||||
|
||||
GetPlayerEyeAngles(client, Float:ang[3])
|
||||
{
|
||||
SDKCall(g_hEyeAngles, client, ang);
|
||||
}
|
||||
|
||||
TerminateRound(Float:delay, reason)
|
||||
{
|
||||
if (g_hTerminateRound == INVALID_HANDLE) return;
|
||||
|
@ -30,6 +30,11 @@ public Action:SayCommand(client, argc)
|
||||
MainMenu(client);
|
||||
}
|
||||
|
||||
if (StrEqual(args, "!zadmin", false))
|
||||
{
|
||||
ZRAdminMenu(client);
|
||||
}
|
||||
|
||||
else if (StrEqual(args, "!zclass", false))
|
||||
{
|
||||
ZClass(client);
|
||||
@ -50,7 +55,7 @@ public Action:SayCommand(client, argc)
|
||||
StrEqual(args, "!tele", false) ||
|
||||
StrEqual(args, "!teleport", false))
|
||||
{
|
||||
ZTeleClientCheck(client);
|
||||
ZTele(client);
|
||||
}
|
||||
|
||||
else if (StrEqual(args, "!teleabort", false))
|
||||
@ -268,7 +273,7 @@ ZStuck(client)
|
||||
nudge[0] = x;
|
||||
nudge[1] = y;
|
||||
|
||||
SetPlayerVelocity(client, nudge);
|
||||
SetPlayerVelocity(client, nudge, true);
|
||||
}
|
||||
|
||||
public Action:CollisionOn(Handle:timer, any:index)
|
||||
|
@ -333,7 +333,7 @@ public Action:Command_TeleportAbort(client, argc)
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
bool:ZTeleClientCheck(client)
|
||||
bool:ZTele(client)
|
||||
{
|
||||
// Check if the teleporter is disabled.
|
||||
new bool:tele = GetConVarBool(gCvars[CVAR_ZTELE]);
|
||||
|
@ -428,7 +428,7 @@ ApplyZombieAlpha(client)
|
||||
SetPlayerAlpha(client, alpha);
|
||||
}
|
||||
|
||||
KnockBack(client, const Float:clientloc[3], const Float:attackerloc[3], Float:power, dmg, bool:boost)
|
||||
KnockBack(client, const Float:clientloc[3], const Float:attackerloc[3], Float:power, dmg, bool:grenade)
|
||||
{
|
||||
if (!IsPlayerZombie(client))
|
||||
{
|
||||
@ -438,18 +438,20 @@ KnockBack(client, const Float:clientloc[3], const Float:attackerloc[3], Float:po
|
||||
new Float:vector[3];
|
||||
|
||||
MakeVectorFromPoints(attackerloc, clientloc, vector);
|
||||
|
||||
NormalizeVector(vector, vector);
|
||||
|
||||
vector[0] *= power * (float(dmg) * 1.5);
|
||||
vector[1] *= power * (float(dmg) * 1.5);
|
||||
vector[2] *= power * (float(dmg) * 1.5);
|
||||
|
||||
if (boost)
|
||||
if (grenade)
|
||||
{
|
||||
ScaleVector(vector, 4.0);
|
||||
new Float:knockback_grenade = GetConVarFloat(gCvars[CVAR_ZOMBIE_KNOCKBACK_GRENADE]);
|
||||
ScaleVector(vector, knockback_grenade);
|
||||
}
|
||||
|
||||
SetPlayerVelocity(client, vector);
|
||||
SetPlayerVelocity(client, vector, false);
|
||||
}
|
||||
|
||||
JumpBoost(client, Float:distance, Float:height)
|
||||
@ -462,7 +464,7 @@ JumpBoost(client, Float:distance, Float:height)
|
||||
vel[1] *= distance;
|
||||
vel[2] = height;
|
||||
|
||||
SetPlayerVelocity(client, vel);
|
||||
SetPlayerVelocity(client, vel, false);
|
||||
}
|
||||
|
||||
PlayerLeft(client)
|
||||
|
Loading…
Reference in New Issue
Block a user