pvp_revamped/sscsm.lua

97 lines
3.2 KiB
Lua

if not minetest.global_exists("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 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_player_by_name = minetest.get_player_by_name
-- 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)
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)
-- 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)
if not minetest.global_exists("armor") then
return
end
-- Channel for shield_block request.
sscsm.register_on_com_receive("pvp_revamped:shield_block", function(name, msg)
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)