Rename: stagger to immobilize

master
Coder12a 2020-09-24 14:08:05 -05:00
parent 5b5a68015e
commit 6557348eb9
7 changed files with 159 additions and 157 deletions

View File

@ -88,8 +88,8 @@ Damage to the:
1. *Head* gives a damage multipliable.
2. *Torso* gives a damage multipliable. **(Also vector related)**
3. *Arm* gives a damage multipliable, and chance to disarm item. **(Also vector related)**
4. *Leg* gives a damage multipliable, and staggers player.
5. Kneecaps stagger the player. **(Slows them down for a short amount of time)**
4. *Leg* gives a damage multipliable, and immobilizes player.
5. Kneecaps immobilize the player. **(Slows them down for a short amount of time)**
#### side related damage.
When hitting another player at an angle.
@ -142,8 +142,8 @@ If enabled full punches can only kill a player. Spam punches will only bring the
#### disarming
Hitting a player in the arms gives a random chance to cause them to drop whatever item they are holding. The chance to disarm is affected by what item they are holding and the player health. Lesser health means better chance at disarming.
#### staggering
The stagger effect makes a player move slow. To stagger a player hit them in the legs or kneecaps.
#### immobilizeing
The immobilize effect makes a player move slow. To immobilize a player hit them in the legs or kneecaps.
### maneuvers
Explaining in detail the different evasive maneuvers you can pull off in-game.
@ -371,15 +371,15 @@ pvp_revamped.disarm_chance_mul = 2
```
Value multiplies damage subtracted by health to set the new walk speed.
``` lua
pvp_revamped.knee_stagger_mul = 1.5
pvp_revamped.knee_immobilize_mul = 1.5
```
Value multiplies damage subtracted by health to set the new walk speed.
``` lua
pvp_revamped.leg_stagger_mul = 0.8
pvp_revamped.leg_immobilize_mul = 0.8
```
Multiplies the stagger duration In microseconds.
Multiplies the immobilize duration In microseconds.
``` lua
pvp_revamped.stagger_mul = 100000
pvp_revamped.immobilize_mul = 100000
```
#### projectile
@ -451,12 +451,12 @@ tool_capabilities = {
block_duration = 100000,
-- See disarm_chance_mul in config.
disarm_chance_mul = 2,
-- See leg_stagger_mul in config.
leg_stagger_mul = 0.8,
-- See knee_stagger_mul in config.
knee_stagger_mul = 1.5,
-- See stagger_mul in config.
stagger_mul = 100000,
-- See leg_immobilize_mul in config.
leg_immobilize_mul = 0.8,
-- See knee_immobilize_mul in config.
knee_immobilize_mul = 1.5,
-- See immobilize_mul in config.
immobilize_mul = 100000,
-- See block_duration_mul in config.
block_duration_mul = 100000,
-- See block_interval_mul in config.

View File

@ -15,9 +15,9 @@ pvp_revamped.config.dash_aerial_cooldown = tonumber(minetest.settings:get("pvp_r
pvp_revamped.config.dash_speed = tonumber(minetest.settings:get("pvp_revamped.dash_speed")) or 9.2
pvp_revamped.config.barrel_roll_speed = tonumber(minetest.settings:get("pvp_revamped.barrel_roll_speed")) or 1
pvp_revamped.config.disarm_chance_mul = tonumber(minetest.settings:get("pvp_revamped.disarm_chance_mul")) or 2
pvp_revamped.config.leg_stagger_mul = tonumber(minetest.settings:get("pvp_revamped.leg_stagger_mul")) or 0.8
pvp_revamped.config.knee_stagger_mul = tonumber(minetest.settings:get("pvp_revamped.knee_stagger_mul")) or 1.5
pvp_revamped.config.stagger_mul = tonumber(minetest.settings:get("pvp_revamped.stagger_mul")) or 100000
pvp_revamped.config.leg_immobilize_mul = tonumber(minetest.settings:get("pvp_revamped.leg_immobilize_mul")) or 0.8
pvp_revamped.config.knee_immobilize_mul = tonumber(minetest.settings:get("pvp_revamped.knee_immobilize_mul")) or 1.5
pvp_revamped.config.immobilize_mul = tonumber(minetest.settings:get("pvp_revamped.immobilize_mul")) or 100000
pvp_revamped.config.block_duration_mul = tonumber(minetest.settings:get("pvp_revamped.block_duration_mul")) or 100000
pvp_revamped.config.block_interval_mul = tonumber(minetest.settings:get("pvp_revamped.block_interval_mul")) or 0.15
pvp_revamped.config.block_pool_mul = tonumber(minetest.settings:get("pvp_revamped.block_pool_mul")) or 2

View File

@ -171,14 +171,14 @@ minetest.register_globalstep(function(dtime)
active = true
end
if v.stagger then
local stagger = v.stagger
if v.immobilize then
local immobilize = v.immobilize
-- Check if the stagger duration expired.
if stagger.time + stagger.value + server_lag < time then
-- Check if the immobilize duration expired.
if immobilize.time + immobilize.value + server_lag < time then
-- Restore the player's physics.
get_player_by_name(k):set_physics_override({speed = 1, jump = 1})
v.stagger = nil
v.immobilize = nil
end
active = true

View File

@ -1,11 +1,11 @@
local player_data = pvp_revamped.player_data
local calculate_knockback = minetest.calculate_knockback
--Disable knockback on stagger.
--Disable knockback on immobilize.
function minetest.calculate_knockback(player, hitter, time_from_last_punch, tool_capabilities, dir, distance, damage)
local pdata = player_data[player:get_player_name()]
if pdata and pdata.stagger then
if pdata and pdata.immobilize then
return 0.0
end

View File

@ -3,9 +3,9 @@ local torso_height = pvp_revamped.config.torso_height
local leg_height = pvp_revamped.config.leg_height
local knee_height = pvp_revamped.config.knee_height
local disarm_chance_mul = pvp_revamped.config.disarm_chance_mul
local leg_stagger_mul = pvp_revamped.config.leg_stagger_mul
local knee_stagger_mul = pvp_revamped.config.knee_stagger_mul
local stagger_mul = pvp_revamped.config.stagger_mul
local leg_immobilize_mul = pvp_revamped.config.leg_immobilize_mul
local knee_immobilize_mul = pvp_revamped.config.knee_immobilize_mul
local immobilize_mul = pvp_revamped.config.immobilize_mul
local block_wear_mul = pvp_revamped.config.block_wear_mul
local head_dmg_mul = pvp_revamped.config.head_dmg_mul
local torso_dmg_mul = pvp_revamped.config.torso_dmg_mul
@ -499,37 +499,37 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
end
end
local function set_stagger_data(speed)
local function set_immobilize_data(speed)
player:set_physics_override({speed = speed, jump = speed})
local stagger_mul = tool_capabilities.stagger_mul or stagger_mul
local immobilize_mul = tool_capabilities.immobilize_mul or immobilize_mul
victim_data.stagger = {time = get_us_time(), value = (1 / speed) * stagger_mul}
victim_data.immobilize = {time = get_us_time(), value = (1 / speed) * immobilize_mul}
end
-- Process if the player was hit in the leg.
if leg then
-- Stagger the player.
local leg_stagger_mul = tool_capabilities.leg_stagger_mul or leg_stagger_mul
local speed = min(1 / max(damage - hp, 1) * leg_stagger_mul, 0.1)
local data_stagger = victim_data.stagger
-- immobilize the player.
local leg_immobilize_mul = tool_capabilities.leg_immobilize_mul or leg_immobilize_mul
local speed = min(1 / max(damage - hp, 1) * leg_immobilize_mul, 0.1)
local data_immobilize = victim_data.immobilize
if not data_stagger or data_stagger.value > speed then
set_stagger_data(speed)
if not data_immobilize or data_immobilize.value > speed then
set_immobilize_data(speed)
end
elseif knee then
-- Stagger the player.
local knee_stagger_mul = tool_capabilities.knee_stagger_mul or knee_stagger_mul
local speed = min(1 / max(damage - hp, 1.5) * knee_stagger_mul, 0.1)
local data_stagger = victim_data.stagger
-- immobilize the player.
local knee_immobilize_mul = tool_capabilities.knee_immobilize_mul or knee_immobilize_mul
local speed = min(1 / max(damage - hp, 1.5) * knee_immobilize_mul, 0.1)
local data_immobilize = victim_data.immobilize
if data_stagger then
-- Add the original value and update all stagger data.
speed = min(abs(speed - data_stagger.value), 0.1)
if data_immobilize then
-- Add the original value and update all immobilize data.
speed = min(abs(speed - data_immobilize.value), 0.1)
set_stagger_data(speed)
set_immobilize_data(speed)
else
set_stagger_data(speed)
set_immobilize_data(speed)
end
end
@ -599,7 +599,7 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
return true
end
-- This needs to be the first punch function to prevent knockback on a staggered player.
-- This needs to be the first punch function to prevent knockback on a immobilizeed player.
insert(minetest.registered_on_punchplayers, 1, punch)
minetest.callback_origins[punch] = {

View File

@ -110,11 +110,11 @@ pvp_revamped.hasty_shield_mul (Hasty shield multiplier) float 1000
# Value is used to decrease the chance of disarming another player.
pvp_revamped.disarm_chance_mul (Disarm chance multiplier) float 2
# Value multiplies damage subtracted by health to set the new walk speed.
pvp_revamped.knee_stagger_mul (Knee stagger multiplier) float 1.5
pvp_revamped.knee_immobilize_mul (Knee immobilize multiplier) float 1.5
# Value multiplies damage subtracted by health to set the new walk speed.
pvp_revamped.leg_stagger_mul (Leg stagger multiplier) float 0.8
# Multiplies the stagger duration In microseconds.
pvp_revamped.stagger_mul (Stagger multiplier) float 100000
pvp_revamped.leg_immobilize_mul (Leg immobilize multiplier) float 0.8
# Multiplies the immobilize duration In microseconds.
pvp_revamped.immobilize_mul (immobilize multiplier) float 100000
[Projectile]
# This value multiplies full_punch_interval to create the time need to fully throw a tool at max speed and damage.

216
sscsm.lua
View File

@ -1,108 +1,110 @@
if sscsm then
local dash_speed = pvp_revamped.config.dash_speed
local barrel_roll_speed = pvp_revamped.config.barrel_roll_speed
local get_player_data = pvp_revamped.get_player_data
local player_data = pvp_revamped.player_data
local player_persistent_data = pvp_revamped.player_persistent_data
local create_wield_shield = pvp_revamped.create_wield_shield
local create_hud_text_center = pvp_revamped.create_hud_text_center
local remove_text_center = pvp_revamped.remove_text_center
local use_player_api = pvp_revamped.use_player_api
local shield_inv = pvp_revamped.shield_inv
local dash = pvp_revamped.dash
local barrel_roll = pvp_revamped.barrel_roll
local dodge = pvp_revamped.dodge
local get_us_time = minetest.get_us_time
local get_player_by_name = minetest.get_player_by_name
local set_textures
local cos = math.cos
local sin = math.sin
if use_player_api then
set_textures = player_api.set_textures
end
-- Register a sscsm for dodging and dashing.
sscsm.register({name = "pvp_revamped:movement",
file = minetest.get_modpath("pvp_revamped") .. "/movement.lua"})
-- Channel for dodge request.
sscsm.register_on_com_receive("pvp_revamped:dodge", function(name, msg)
if msg and type(msg) == "string" and msg == "dodge" then
local player = get_player_by_name(name)
local velocity = player:get_player_velocity().y
local aerial_points = 0
if velocity < 0.0 or velocity > 0.0 then
aerial_points = 1
end
dodge(name, player, 1 + aerial_points)
end
end)
-- Channel for barrel_roll request.
sscsm.register_on_com_receive("pvp_revamped:barrel_roll", function(name, msg)
if msg and type(msg) == "string" then
local player = get_player_by_name(name)
local yaw = player:get_look_horizontal()
local velocity = player:get_player_velocity().y
local aerial_points = 0
if velocity < 0.0 or velocity > 0.0 then
aerial_points = 4
end
if msg == "barrel_roll_l" then
barrel_roll(name, player, 1 + aerial_points, -barrel_roll_speed, 0)
elseif msg == "barrel_roll_u" then
barrel_roll(name, player, 2 + aerial_points, 0, barrel_roll_speed)
elseif msg == "barrel_roll_r" then
barrel_roll(name, player, 3 + aerial_points, barrel_roll_speed, 0)
elseif msg == "barrel_roll_d" then
barrel_roll(name, player, 4 + aerial_points, 0, -barrel_roll_speed)
else
return false
end
end
end)
-- Channel for dash request.
sscsm.register_on_com_receive("pvp_revamped:dash", function(name, msg)
if msg and type(msg) == "string" then
local player = get_player_by_name(name)
local y = dash_speed * 0.5
local aerial_points = 0
local velocity = player:get_player_velocity().y
if velocity < 0.0 or velocity > 0.0 then
aerial_points = 4
end
if msg == "dash_l" then
dash(player, name, 1 + aerial_points, -dash_speed, y, 0)
elseif msg == "dash_u" then
dash(player, name, 2 + aerial_points, 0, y, dash_speed)
elseif msg == "dash_r" then
dash(player, name, 3 + aerial_points, dash_speed, y, 0)
elseif msg == "dash_d" then
dash(player, name, 4 + aerial_points, 0, y, -dash_speed)
else
return false
end
end
end)
-- Channel for shield_block request.
if minetest.global_exists("armor") then
sscsm.register_on_com_receive("pvp_revamped:shield_block", function(name, msg)
if msg and type(msg) == "string" then
local data = get_player_data(name)
local player = get_player_by_name(name)
local player_pdata = player_persistent_data[name]
shield_inv(player, name, player_pdata, data)
end
end)
end
if not sscsm then
return
end
local dash_speed = pvp_revamped.config.dash_speed
local barrel_roll_speed = pvp_revamped.config.barrel_roll_speed
local get_player_data = pvp_revamped.get_player_data
local player_data = pvp_revamped.player_data
local player_persistent_data = pvp_revamped.player_persistent_data
local create_wield_shield = pvp_revamped.create_wield_shield
local create_hud_text_center = pvp_revamped.create_hud_text_center
local remove_text_center = pvp_revamped.remove_text_center
local use_player_api = pvp_revamped.use_player_api
local shield_inv = pvp_revamped.shield_inv
local dash = pvp_revamped.dash
local barrel_roll = pvp_revamped.barrel_roll
local dodge = pvp_revamped.dodge
local get_us_time = minetest.get_us_time
local get_player_by_name = minetest.get_player_by_name
local set_textures
local cos = math.cos
local sin = math.sin
if use_player_api then
set_textures = player_api.set_textures
end
-- Register a sscsm for dodging and dashing.
sscsm.register({name = "pvp_revamped:movement",
file = minetest.get_modpath("pvp_revamped") .. "/movement.lua"})
-- Channel for dodge request.
sscsm.register_on_com_receive("pvp_revamped:dodge", function(name, msg)
if msg and type(msg) == "string" and msg == "dodge" then
local player = get_player_by_name(name)
local velocity = player:get_player_velocity().y
local aerial_points = 0
if velocity < 0.0 or velocity > 0.0 then
aerial_points = 1
end
dodge(name, player, 1 + aerial_points)
end
end)
-- Channel for barrel_roll request.
sscsm.register_on_com_receive("pvp_revamped:barrel_roll", function(name, msg)
if msg and type(msg) == "string" then
local player = get_player_by_name(name)
local yaw = player:get_look_horizontal()
local velocity = player:get_player_velocity().y
local aerial_points = 0
if velocity < 0.0 or velocity > 0.0 then
aerial_points = 4
end
if msg == "barrel_roll_l" then
barrel_roll(name, player, 1 + aerial_points, -barrel_roll_speed, 0)
elseif msg == "barrel_roll_u" then
barrel_roll(name, player, 2 + aerial_points, 0, barrel_roll_speed)
elseif msg == "barrel_roll_r" then
barrel_roll(name, player, 3 + aerial_points, barrel_roll_speed, 0)
elseif msg == "barrel_roll_d" then
barrel_roll(name, player, 4 + aerial_points, 0, -barrel_roll_speed)
else
return false
end
end
end)
-- Channel for dash request.
sscsm.register_on_com_receive("pvp_revamped:dash", function(name, msg)
if msg and type(msg) == "string" then
local player = get_player_by_name(name)
local y = dash_speed * 0.5
local aerial_points = 0
local velocity = player:get_player_velocity().y
if velocity < 0.0 or velocity > 0.0 then
aerial_points = 4
end
if msg == "dash_l" then
dash(player, name, 1 + aerial_points, -dash_speed, y, 0)
elseif msg == "dash_u" then
dash(player, name, 2 + aerial_points, 0, y, dash_speed)
elseif msg == "dash_r" then
dash(player, name, 3 + aerial_points, dash_speed, y, 0)
elseif msg == "dash_d" then
dash(player, name, 4 + aerial_points, 0, y, -dash_speed)
else
return false
end
end
end)
-- Channel for shield_block request.
if minetest.global_exists("armor") then
sscsm.register_on_com_receive("pvp_revamped:shield_block", function(name, msg)
if msg and type(msg) == "string" then
local data = get_player_data(name)
local player = get_player_by_name(name)
local player_pdata = player_persistent_data[name]
shield_inv(player, name, player_pdata, data)
end
end)
end