diff --git a/cstrike/addons/sourcemod/configs/zr/playerclasses.txt b/cstrike/addons/sourcemod/configs/zr/playerclasses.txt index 7bb150d..e353721 100644 --- a/cstrike/addons/sourcemod/configs/zr/playerclasses.txt +++ b/cstrike/addons/sourcemod/configs/zr/playerclasses.txt @@ -42,8 +42,8 @@ // kill_bonus number How many points to give per kill. Humans only. // speed decimal The player speed. // 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_distance decimal Extra forwards jump boost multiplier. 0.2 is normal distance. +// jump_height decimal Multiplier of the players jump height. 0.0 means no jump, 1.0 is normal. +// jump_distance decimal Multiplier of the players jump distance. 0.0 means no forward jump, 1.0 is normal. "classes" { @@ -91,8 +91,8 @@ "speed" "350" "knockback" "4" - "jump_height" "10.0" - "jump_distance" "0.3" + "jump_height" "1.1" + "jump_distance" "1.2" } "fast" @@ -134,8 +134,8 @@ "speed" "380" "knockback" "4.5" - "jump_height" "30.0" - "jump_distance" "0.4" + "jump_height" "1.3" + "jump_distance" "1.2" } "mutated" @@ -177,8 +177,8 @@ "speed" "275" "knockback" "3.5" - "jump_height" "20.0" - "jump_distance" "0.4" + "jump_height" "1.3" + "jump_distance" "1.3" } "heavy" @@ -220,8 +220,8 @@ "speed" "280" "knockback" "2.5" - "jump_height" "0.0" - "jump_distance" "0.2" + "jump_height" "0.9" + "jump_distance" "0.9" } // ------------------------------------------ @@ -269,8 +269,8 @@ "speed" "300" "knockback" "0" - "jump_height" "0.0" - "jump_distance" "0.2" + "jump_height" "1.0" + "jump_distance" "1.0" } "human_speedy" @@ -312,8 +312,8 @@ "speed" "380" "knockback" "0" - "jump_height" "0.0" - "jump_distance" "0.2" + "jump_height" "1.0" + "jump_distance" "1.0" } "human_light" @@ -355,7 +355,7 @@ "speed" "300" "knockback" "0" - "jump_height" "30.0" - "jump_distance" "0.4" + "jump_height" "1.3" + "jump_distance" "1.3" } } diff --git a/cstrike/cfg/sourcemod/zombiereloaded/zombiereloaded.cfg b/cstrike/cfg/sourcemod/zombiereloaded/zombiereloaded.cfg index 1389a17..574088a 100644 --- a/cstrike/cfg/sourcemod/zombiereloaded/zombiereloaded.cfg +++ b/cstrike/cfg/sourcemod/zombiereloaded/zombiereloaded.cfg @@ -554,7 +554,7 @@ zr_respawn_team_zombie_world "1" // 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" zr_napalm_ignite "1" @@ -565,15 +565,15 @@ zr_napalm_ignite "1" // Prevent players from using forward jump boost multipliers to bunny hop. // 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. -// Default: "275" -zr_jumpboost_bunnyhop_max "275" +// The maximum horizontal velocity a player can achieve before bunnyhop protection kicks in. [Dependency: zr_jumpboost_bhop_protect] +// Default: "300" +zr_jumpboost_bhop_max "300" -// Specifies whether the speed should be reset, or limited to maximum when the limit is reached. -// Default: "1" -zr_jumpboost_bunnyhop_reset "1" +// 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: "0.9" +zr_jumpboost_bhop_reset "0.9" // ---------------------------------------------------------------------------- diff --git a/src/zr/cvars.inc b/src/zr/cvars.inc index b547009..0667c57 100644 --- a/src/zr/cvars.inc +++ b/src/zr/cvars.inc @@ -135,9 +135,9 @@ enum CvarsList Handle:CVAR_RESPAWN_TEAM_ZOMBIE, Handle:CVAR_RESPAWN_TEAM_ZOMBIE_WORLD, Handle:CVAR_NAPALM_IGNITE, - Handle:CVAR_JUMPBOOST_BUNNYHOP_PROTECT, - Handle:CVAR_JUMPBOOST_BUNNYHOP_MAX, - Handle:CVAR_JUMPBOOST_BUNNYHOP_RESET, + Handle:CVAR_JUMPBOOST_BHOP_PROTECT, + Handle:CVAR_JUMPBOOST_BHOP_MAX, + Handle:CVAR_JUMPBOOST_BHOP_RESET, Handle:CVAR_VOL, Handle:CVAR_VOL_UPDATE_INTERVAL, Handle:CVAR_VOL_TRIGGER_INTERVAL, @@ -406,14 +406,14 @@ CvarsCreate() // 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) // =========================== - 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_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_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_PROTECT] = CreateConVar("zr_jumpboost_bhop_protect", "1", "Prevent players from using forward jump boost multipliers to bunny hop."); + 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_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]"); // =========================== diff --git a/src/zr/event.inc b/src/zr/event.inc index 213dd6b..b98c157 100644 --- a/src/zr/event.inc +++ b/src/zr/event.inc @@ -103,7 +103,7 @@ public Action:EventRoundStart(Handle:event, const String:name[], bool:dontBroadc * @param name Name of the event. * @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. } @@ -213,18 +213,18 @@ public Action:EventPlayerSpawn(Handle:event, const String:name[], bool:dontBroad * @param name Name of the event. * @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 (!IsClientInGame(index)) + if (!IsClientInGame(client)) { return; } // Forward event to modules. - WeaponsOnClientSpawnPost(index); - SEffectsOnClientSpawnPost(index); - SpawnProtectOnClientSpawnPost(index); + WeaponsOnClientSpawnPost(client); + SEffectsOnClientSpawnPost(client); + SpawnProtectOnClientSpawnPost(client); } /** @@ -307,8 +307,28 @@ public Action:EventPlayerJump(Handle:event, const String:name[], bool:dontBroadc // Get all required event info. 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. - JumpBoostOnClientJump(index); + JumpBoostOnClientJumpPost(client); } /** diff --git a/src/zr/jumpboost.inc b/src/zr/jumpboost.inc index 168c96b..36e4f2d 100644 --- a/src/zr/jumpboost.inc +++ b/src/zr/jumpboost.inc @@ -30,85 +30,58 @@ * * @param client The client index. */ -JumpBoostOnClientJump(client) +JumpBoostOnClientJumpPost(client) { - new Float:vecVelocity[3]; - new Float:vecBuffer[3]; - new Float:magnitude; - // Get class jump multipliers. - new Float:distance = ClassGetJumpDistance(client); - new Float:height = ClassGetJumpHeight(client); + new Float:distancemultiplier = ClassGetJumpDistance(client); + new Float:heightmultiplier = ClassGetJumpHeight(client); - // Do not apply jump boost if settings indicate no boost. - if (height == 0.0 && distance == 0.2) - { - return; - } + new Float:vecVelocity[3]; // Get client's current velocity. ToolsClientVelocity(client, vecVelocity, false); - // Get bunny hop setting. - new bool:bunnyhopprotect = GetConVarBool(g_hCvarsList[CVAR_JUMPBOOST_BUNNYHOP_PROTECT]); + // Protect against bunnyhop. + JumpBoostBHopProtect(vecVelocity, distancemultiplier); - // Check if bunny hop protection is enabled. - if (bunnyhopprotect) - { - // Get jump boost settings. - 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 multipliers to jump vector. + vecVelocity[0] *= distancemultiplier; + vecVelocity[1] *= distancemultiplier; + vecVelocity[2] *= heightmultiplier; - // Apply forward jump boost. - vecVelocity[0] *= distance; - vecVelocity[1] *= distance; - - // Apply vertical jump boost. - vecVelocity[2] += height; - - // Apply velocity. - JumpBoostSetClientVelocity(client, vecVelocity); + ToolsClientVelocity(client, vecVelocity, true, false); } /** - * 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 Velocity to set on client. + * @param vecVelocity The velocity of the client jumping. + * @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); } diff --git a/src/zr/tools.inc b/src/zr/tools.inc index b339daf..d630172 100644 --- a/src/zr/tools.inc +++ b/src/zr/tools.inc @@ -29,7 +29,6 @@ * Initialize global offset variables. */ new g_iToolsVelocity; -new g_iToolsBaseVelocity; new g_iToolsLMV; new g_iToolsHasNightVision; 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."); } - // 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. g_iToolsLMV = FindSendPropInfo("CCSPlayer", "m_flLaggedMovementValue"); if (g_iToolsLMV == -1)