Updated jump module, removed no longer needed offset.

This commit is contained in:
Greyscale 2009-06-22 16:37:26 -07:00
parent 79bf4230c1
commit 268ab778cf
6 changed files with 97 additions and 112 deletions

View File

@ -42,8 +42,8 @@
// kill_bonus number How many points to give per kill. Humans only. // kill_bonus number How many points to give per kill. Humans only.
// speed decimal The player speed. // speed decimal The player speed.
// knockback decimal Force of the knockback when shot at. Zombies only. // knockback decimal Force of the knockback when shot at. Zombies only.
// jump_height decimal Extra upwards jump boost in units. 0.0 for no extra boost. // jump_height decimal Multiplier of the players jump height. 0.0 means no jump, 1.0 is normal.
// jump_distance decimal Extra forwards jump boost multiplier. 0.2 is normal distance. // jump_distance decimal Multiplier of the players jump distance. 0.0 means no forward jump, 1.0 is normal.
"classes" "classes"
{ {
@ -91,8 +91,8 @@
"speed" "350" "speed" "350"
"knockback" "4" "knockback" "4"
"jump_height" "10.0" "jump_height" "1.1"
"jump_distance" "0.3" "jump_distance" "1.2"
} }
"fast" "fast"
@ -134,8 +134,8 @@
"speed" "380" "speed" "380"
"knockback" "4.5" "knockback" "4.5"
"jump_height" "30.0" "jump_height" "1.3"
"jump_distance" "0.4" "jump_distance" "1.2"
} }
"mutated" "mutated"
@ -177,8 +177,8 @@
"speed" "275" "speed" "275"
"knockback" "3.5" "knockback" "3.5"
"jump_height" "20.0" "jump_height" "1.3"
"jump_distance" "0.4" "jump_distance" "1.3"
} }
"heavy" "heavy"
@ -220,8 +220,8 @@
"speed" "280" "speed" "280"
"knockback" "2.5" "knockback" "2.5"
"jump_height" "0.0" "jump_height" "0.9"
"jump_distance" "0.2" "jump_distance" "0.9"
} }
// ------------------------------------------ // ------------------------------------------
@ -269,8 +269,8 @@
"speed" "300" "speed" "300"
"knockback" "0" "knockback" "0"
"jump_height" "0.0" "jump_height" "1.0"
"jump_distance" "0.2" "jump_distance" "1.0"
} }
"human_speedy" "human_speedy"
@ -312,8 +312,8 @@
"speed" "380" "speed" "380"
"knockback" "0" "knockback" "0"
"jump_height" "0.0" "jump_height" "1.0"
"jump_distance" "0.2" "jump_distance" "1.0"
} }
"human_light" "human_light"
@ -355,7 +355,7 @@
"speed" "300" "speed" "300"
"knockback" "0" "knockback" "0"
"jump_height" "30.0" "jump_height" "1.3"
"jump_distance" "0.4" "jump_distance" "1.3"
} }
} }

View File

@ -554,7 +554,7 @@ zr_respawn_team_zombie_world "1"
// Napalm (module) // Napalm (module)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Ignite grenade in mid-air after player throws it. [Dependency: Human Attribute 'napalm'] // Ignite grenade in mid-air after player throws it. [Dependency: Human Attribute 'has_napalm']
// Default: "1" // Default: "1"
zr_napalm_ignite "1" zr_napalm_ignite "1"
@ -565,15 +565,15 @@ zr_napalm_ignite "1"
// Prevent players from using forward jump boost multipliers to bunny hop. // Prevent players from using forward jump boost multipliers to bunny hop.
// Default: "1" // Default: "1"
zr_jumpboost_bunnyhop_protect "1" zr_jumpboost_bhop_protect "1"
// The maximum horizontal velocity a player can have for any additional push to be applied, when bunny hop prevention is enabled. // The maximum horizontal velocity a player can achieve before bunnyhop protection kicks in. [Dependency: zr_jumpboost_bhop_protect]
// Default: "275" // Default: "300"
zr_jumpboost_bunnyhop_max "275" zr_jumpboost_bhop_max "300"
// Specifies whether the speed should be reset, or limited to maximum when the limit is reached. // This is the horizontal jump multiplier for when the max limit is exceeded. ['0.9' = 90% of the jumps original magnitude | '>1.0' = Redundant | Dependency: zr_jumpboost_bhop_protect&zr_jumpboost_bhop_max]
// Default: "1" // Default: "0.9"
zr_jumpboost_bunnyhop_reset "1" zr_jumpboost_bhop_reset "0.9"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -135,9 +135,9 @@ enum CvarsList
Handle:CVAR_RESPAWN_TEAM_ZOMBIE, Handle:CVAR_RESPAWN_TEAM_ZOMBIE,
Handle:CVAR_RESPAWN_TEAM_ZOMBIE_WORLD, Handle:CVAR_RESPAWN_TEAM_ZOMBIE_WORLD,
Handle:CVAR_NAPALM_IGNITE, Handle:CVAR_NAPALM_IGNITE,
Handle:CVAR_JUMPBOOST_BUNNYHOP_PROTECT, Handle:CVAR_JUMPBOOST_BHOP_PROTECT,
Handle:CVAR_JUMPBOOST_BUNNYHOP_MAX, Handle:CVAR_JUMPBOOST_BHOP_MAX,
Handle:CVAR_JUMPBOOST_BUNNYHOP_RESET, Handle:CVAR_JUMPBOOST_BHOP_RESET,
Handle:CVAR_VOL, Handle:CVAR_VOL,
Handle:CVAR_VOL_UPDATE_INTERVAL, Handle:CVAR_VOL_UPDATE_INTERVAL,
Handle:CVAR_VOL_TRIGGER_INTERVAL, Handle:CVAR_VOL_TRIGGER_INTERVAL,
@ -406,14 +406,14 @@ CvarsCreate()
// Napalm (module) // Napalm (module)
// =========================== // ===========================
g_hCvarsList[CVAR_NAPALM_IGNITE] = CreateConVar("zr_napalm_ignite", "1", "Ignite grenade in mid-air after player throws it. [Dependency: Human Attribute 'hasnapalm']"); g_hCvarsList[CVAR_NAPALM_IGNITE] = CreateConVar("zr_napalm_ignite", "1", "Ignite grenade in mid-air after player throws it. [Dependency: Human Attribute 'has_napalm']");
// =========================== // ===========================
// Jump Boost (module) // Jump Boost (module)
// =========================== // ===========================
g_hCvarsList[CVAR_JUMPBOOST_BUNNYHOP_PROTECT] = CreateConVar("zr_jumpboost_bunnyhop_protect", "1", "Prevent players from using forward jump boost multipliers to bunny hop."); g_hCvarsList[CVAR_JUMPBOOST_BHOP_PROTECT] = CreateConVar("zr_jumpboost_bhop_protect", "1", "Prevent players from using forward jump boost multipliers to bunny hop.");
g_hCvarsList[CVAR_JUMPBOOST_BUNNYHOP_MAX] = CreateConVar("zr_jumpboost_bunnyhop_max", "275", "The maximum horizontal velocity a player can have for any additional push to be applied. [Dependency: zr_jumpboost_bunnyhop_protect]"); g_hCvarsList[CVAR_JUMPBOOST_BHOP_MAX] = CreateConVar("zr_jumpboost_bhop_max", "300", "The maximum horizontal velocity a player can achieve before bunnyhop protection kicks in. [Dependency: zr_jumpboost_bhop_protect]");
g_hCvarsList[CVAR_JUMPBOOST_BUNNYHOP_RESET] = CreateConVar("zr_jumpboost_bunnyhop_reset", "1", "Specifies whether the speed should be reset, or limited to maximum when the limit is reached. [Dependency: zr_jumpboost_bunnyhop_protect&zr_jumpboost_bunnyhop_max]"); g_hCvarsList[CVAR_JUMPBOOST_BHOP_RESET] = CreateConVar("zr_jumpboost_bhop_reset", "0.9", "This is the horizontal jump multiplier for when the max limit is exceeded. ['0.9' = 90% of the jumps original magnitude | '>1.0' = Redundant | Dependency: zr_jumpboost_bhop_protect&zr_jumpboost_bhop_max]");
// =========================== // ===========================

View File

@ -103,7 +103,7 @@ public Action:EventRoundStart(Handle:event, const String:name[], bool:dontBroadc
* @param name Name of the event. * @param name Name of the event.
* @dontBroadcast If true, event is broadcasted to all clients, false if not. * @dontBroadcast If true, event is broadcasted to all clients, false if not.
*/ */
public Action:EventRoundStartPost(Handle:timer, any:index) public Action:EventRoundStartPost(Handle:timer)
{ {
// Forward event to modules. // Forward event to modules.
} }
@ -213,18 +213,18 @@ public Action:EventPlayerSpawn(Handle:event, const String:name[], bool:dontBroad
* @param name Name of the event. * @param name Name of the event.
* @dontBroadcast If true, event is broadcasted to all clients, false if not. * @dontBroadcast If true, event is broadcasted to all clients, false if not.
*/ */
public Action:EventPlayerSpawnPost(Handle:timer, any:index) public Action:EventPlayerSpawnPost(Handle:timer, any:client)
{ {
// If client isn't in-game, then stop. // If client isn't in-game, then stop.
if (!IsClientInGame(index)) if (!IsClientInGame(client))
{ {
return; return;
} }
// Forward event to modules. // Forward event to modules.
WeaponsOnClientSpawnPost(index); WeaponsOnClientSpawnPost(client);
SEffectsOnClientSpawnPost(index); SEffectsOnClientSpawnPost(client);
SpawnProtectOnClientSpawnPost(index); SpawnProtectOnClientSpawnPost(client);
} }
/** /**
@ -307,8 +307,28 @@ public Action:EventPlayerJump(Handle:event, const String:name[], bool:dontBroadc
// Get all required event info. // Get all required event info.
new index = GetClientOfUserId(GetEventInt(event, "userid")); new index = GetClientOfUserId(GetEventInt(event, "userid"));
// Fire post player_jump event.
CreateTimer(0.0, EventPlayerJumpPost, index);
}
/**
* Event callback (player_jump)
* Client is jumping. *Post
*
* @param event The event handle.
* @param name Name of the event.
* @dontBroadcast If true, event is broadcasted to all clients, false if not.
*/
public Action:EventPlayerJumpPost(Handle:timer, any:client)
{
// If client isn't in-game, then stop.
if (!IsClientInGame(client))
{
return;
}
// Forward event to modules. // Forward event to modules.
JumpBoostOnClientJump(index); JumpBoostOnClientJumpPost(client);
} }
/** /**

View File

@ -30,85 +30,58 @@
* *
* @param client The client index. * @param client The client index.
*/ */
JumpBoostOnClientJump(client) JumpBoostOnClientJumpPost(client)
{ {
new Float:vecVelocity[3];
new Float:vecBuffer[3];
new Float:magnitude;
// Get class jump multipliers. // Get class jump multipliers.
new Float:distance = ClassGetJumpDistance(client); new Float:distancemultiplier = ClassGetJumpDistance(client);
new Float:height = ClassGetJumpHeight(client); new Float:heightmultiplier = ClassGetJumpHeight(client);
// Do not apply jump boost if settings indicate no boost. new Float:vecVelocity[3];
if (height == 0.0 && distance == 0.2)
{
return;
}
// Get client's current velocity. // Get client's current velocity.
ToolsClientVelocity(client, vecVelocity, false); ToolsClientVelocity(client, vecVelocity, false);
// Get bunny hop setting. // Protect against bunnyhop.
new bool:bunnyhopprotect = GetConVarBool(g_hCvarsList[CVAR_JUMPBOOST_BUNNYHOP_PROTECT]); JumpBoostBHopProtect(vecVelocity, distancemultiplier);
// Check if bunny hop protection is enabled. // Apply multipliers to jump vector.
if (bunnyhopprotect) vecVelocity[0] *= distancemultiplier;
{ vecVelocity[1] *= distancemultiplier;
// Get jump boost settings. vecVelocity[2] *= heightmultiplier;
new bool:bunnyhopreset = GetConVarBool(g_hCvarsList[CVAR_JUMPBOOST_BUNNYHOP_RESET]);
new Float:bunnyhopmax = GetConVarFloat(g_hCvarsList[CVAR_JUMPBOOST_BUNNYHOP_MAX]);
// Get movement distance.
magnitude = SquareRoot(Pow(vecVelocity[0], 2.0) + Pow(vecVelocity[1], 2.0));
// Check if maximum speed is reached and reset setting is set.
if ((magnitude > bunnyhopmax) && bunnyhopreset)
{
// Reset horizontal velocity.
distance = 0.0;
}
// Check if maximum speed is reached and reset setting is disabled.
else if ((magnitude > bunnyhopmax) && !bunnyhopreset)
{
// Set horizontal velocity to maximum allowed.
// Copy to buffer.
vecBuffer[0] = vecVelocity[0];
vecBuffer[1] = vecVelocity[1];
vecBuffer[2] = 1.0; // Dummy value.
// Normalize buffer vector to make it a unit vector.
NormalizeVector(vecBuffer, vecBuffer);
// Restore horizontal axis in buffer to velocity vector.
vecVelocity[0] = vecBuffer[0];
vecVelocity[1] = vecBuffer[1];
// Set distance to maximum speed.
distance = bunnyhopmax;
}
}
// Apply forward jump boost. ToolsClientVelocity(client, vecVelocity, true, false);
vecVelocity[0] *= distance;
vecVelocity[1] *= distance;
// Apply vertical jump boost.
vecVelocity[2] += height;
// Apply velocity.
JumpBoostSetClientVelocity(client, vecVelocity);
} }
/** /**
* Set new velocity on client. (Special method separate from ToolsClientVelocity) * This function protects against excessive bunnyhopping.
* Note: This ONLY stops bunnyhopping from being worse than CS:S already allows.
* *
* @param client The client index. * @param vecVelocity The velocity of the client jumping.
* @param vecVelocity Velocity to set on client. * @param distancemultiplier The distance multiplier used on this jump.
*/ */
JumpBoostSetClientVelocity(client, const Float:vecVelocity[3]) stock JumpBoostBHopProtect(Float:vecVelocity[], Float:distancemultiplier)
{ {
SetEntDataVector(client, g_iToolsBaseVelocity, vecVelocity, true); // If bunnyhop protection is disabled, then stop.
new bool:bunnyhopprotect = GetConVarBool(g_hCvarsList[CVAR_JUMPBOOST_BHOP_PROTECT]);
if (!bunnyhopprotect)
{
return;
}
// Calculate the magnitude of jump on the xy plane.
new Float:magnitude = SquareRoot(Pow(vecVelocity[0], 2.0) + Pow(vecVelocity[1], 2.0));
// If the magnitude doesn't exceed the limit, then stop.
new Float:bunnyhopmax = GetConVarFloat(g_hCvarsList[CVAR_JUMPBOOST_BHOP_MAX]);
if (magnitude <= bunnyhopmax)
{
return;
}
// If we are resetting the velocity, then set to 1.0 (normal jump)
new Float:bunnyhopreset = GetConVarFloat(g_hCvarsList[CVAR_JUMPBOOST_BHOP_RESET]);
// Scale with cvar value.
vecVelocity[0] /= (distancemultiplier / bunnyhopreset);
vecVelocity[1] /= (distancemultiplier / bunnyhopreset);
} }

View File

@ -29,7 +29,6 @@
* Initialize global offset variables. * Initialize global offset variables.
*/ */
new g_iToolsVelocity; new g_iToolsVelocity;
new g_iToolsBaseVelocity;
new g_iToolsLMV; new g_iToolsLMV;
new g_iToolsHasNightVision; new g_iToolsHasNightVision;
new g_iToolsNightVisionOn; new g_iToolsNightVisionOn;
@ -77,13 +76,6 @@ ToolsFindOffsets()
LogEvent(false, LogType_Fatal, LOG_CORE_EVENTS, LogModule_Tools, "Offsets", "Offset \"CBasePlayer::m_vecVelocity[0]\" was not found."); LogEvent(false, LogType_Fatal, LOG_CORE_EVENTS, LogModule_Tools, "Offsets", "Offset \"CBasePlayer::m_vecVelocity[0]\" was not found.");
} }
// If offset "m_vecBaseVelocity" can't be found, then stop the plugin.
g_iToolsBaseVelocity = FindSendPropInfo("CBasePlayer", "m_vecBaseVelocity");
if (g_iToolsBaseVelocity == -1)
{
LogEvent(false, LogType_Fatal, LOG_CORE_EVENTS, LogModule_Tools, "Offsets", "Offset \"CBasePlayer::m_vecBaseVelocity\" was not found.");
}
// If offset "m_flLaggedMovementValue" can't be found, then stop the plugin. // If offset "m_flLaggedMovementValue" can't be found, then stop the plugin.
g_iToolsLMV = FindSendPropInfo("CCSPlayer", "m_flLaggedMovementValue"); g_iToolsLMV = FindSendPropInfo("CCSPlayer", "m_flLaggedMovementValue");
if (g_iToolsLMV == -1) if (g_iToolsLMV == -1)