Rename: stagger to immobilize
parent
5b5a68015e
commit
6557348eb9
28
README.md
28
README.md
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
44
punch.lua
44
punch.lua
|
@ -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] = {
|
||||
|
|
|
@ -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
216
sscsm.lua
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue