Immobilize: on fall
parent
af5aa338e4
commit
310d6e381c
16
api.lua
16
api.lua
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue