Immobilize: on fall

master
Coder12a 2021-02-13 18:26:48 -06:00
parent af5aa338e4
commit 310d6e381c
2 changed files with 31 additions and 1 deletions

16
api.lua
View File

@ -1,13 +1,15 @@
local get_player_information = minetest.get_player_information
local get_us_time = minetest.get_us_time
local add_entity = minetest.add_entity
local player_data = pvp_revamped.player_data
local immobilize_mul = pvp_revamped.config.immobilize_mul
local shield_entity_pos = pvp_revamped.config.shield_entity_pos
local shield_entity_rotate = pvp_revamped.config.shield_entity_rotate
local shield_entity_scale = pvp_revamped.config.shield_entity_scale
local player_data = pvp_revamped.player_data
local armor_3d = minetest.global_exists("armor")
local new = vector.new
local floor = math.floor
local abs = math.abs
local y = 0
-- Get or create player data.
@ -304,3 +306,15 @@ function pvp_revamped.shield_inv(user, name, player_pdata, data)
return false
end
function pvp_revamped.set_immobilize_data(player, speed, damage, tool_capabilities)
player:set_physics_override({speed = speed, jump = speed})
local _immobilize_mul = immobilize_mul
if tool_capabilities and tool_capabilities.immobilize_mul then
_immobilize_mul = tool_capabilities.immobilize_mul
end
return {time = get_us_time(), value = abs(damage * _immobilize_mul)}
end

View File

@ -1,11 +1,16 @@
local leg_immobilize_mul = pvp_revamped.config.leg_immobilize_mul
local player_data = pvp_revamped.player_data
local get_player_data = pvp_revamped.get_player_data
local player_persistent_data = pvp_revamped.player_persistent_data
local remove_text_center = pvp_revamped.remove_text_center
local clear_blockdata = pvp_revamped.clear_blockdata
local clear_shielddata = pvp_revamped.clear_shielddata
local set_immobilize_data = pvp_revamped.set_immobilize_data
local get_player_by_name = minetest.get_player_by_name
local add_item = minetest.add_item
local new = vector.new
local max = math.max
local min = math.min
-- Create an empty data sheet for the player.
minetest.register_on_joinplayer(function(player)
@ -15,6 +20,17 @@ minetest.register_on_joinplayer(function(player)
}
end)
-- Immobilize the player on fall.
minetest.register_on_player_hpchange(function(player, hp_change, reason)
local data = get_player_data(player:get_player_name())
local dmg = max(hp_change - player:get_hp(), 1)
local speed = min(1 / dmg * leg_immobilize_mul, 0.01)
if reason.type == "fall" then
data.immobilize = set_immobilize_data(player, speed, hp_change)
end
end)
-- Drops an item at the given or player's position.
local function drop(player, item, pos)
-- Check if the param is true or not.