Fix: wielded items covering entity

And remove shield texture when blocking with inv shield.
master
Coder12a 2020-08-15 22:51:44 -05:00
parent 792f5a635d
commit d126745563
7 changed files with 178 additions and 16 deletions

View File

@ -1,2 +1,3 @@
pvp_revamped.projectile_throw_style_dip = 1
pvp_revamped.projectile_throw_style_spinning = 2
pvp_revamped.use_player_api = minetest.global_exists("player_api")

View File

@ -19,7 +19,6 @@ local projectile_throw_style_dip = pvp_revamped.projectile_throw_style_dip
local projectile_throw_style_spinning = pvp_revamped.projectile_throw_style_spinning
local player_data = pvp_revamped.player_data
local player_persistent_data = pvp_revamped.player_persistent_data
local lag = pvp_revamped.lag
local create_hud_text_center = pvp_revamped.create_hud_text_center
local remove_text_center = pvp_revamped.remove_text_center
local get_player_information = minetest.get_player_information
@ -34,7 +33,8 @@ local max = math.max
local floor = math.floor
minetest.register_globalstep(function(dtime)
lag = dtime * 1000000
local lag = dtime * 1000000
pvp_revamped.lag = lag
for k, v in pairs(player_data) do
local server_lag = lag + get_player_information(k).avg_jitter * 1000000
@ -321,6 +321,8 @@ minetest.register_globalstep(function(dtime)
local entity = v.entity
-- Drop arms.
player:set_bone_position(entity.bone, entity.position, new(-180, 0, 0))
-- Update player's armor visual.
armor:update_player_visuals(player)
v.entity.object:remove()
v.entity = nil

View File

@ -1,3 +1,3 @@
name = pvp_revamped
description = Adds an extra layer to pvp.
optional_depends = sscsm, shields
optional_depends = sscsm, shields, player_api

View File

@ -22,12 +22,18 @@ local player_data = pvp_revamped.player_data
local player_persistent_data = pvp_revamped.player_persistent_data
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 registered_tools = minetest.registered_tools
local get_item_group = minetest.get_item_group
local get_us_time = minetest.get_us_time
local new = vector.new
local max = math.max
local floor = math.floor
local set_textures
if use_player_api then
set_textures = player_api.set_textures
end
minetest.register_on_mods_loaded(function()
local max_armor_use
@ -124,7 +130,17 @@ minetest.register_on_mods_loaded(function()
-- Write pool to hud.
create_hud_text_center(user, "pvp_revamped:shield_pool", block_pool)
data.shield = {pool = block_pool, bone = "Arm_Left", name = data_shield.name, index = data_shield.index, initial_time = time, time = time, duration = data_shield.duration, hasty_guard_duration = data_shield.hasty_guard_duration, armor_inv = true}
data.shield = {
pool = block_pool,
name = data_shield.name,
index = data_shield.index,
initial_time = time,
time = time,
duration = data_shield.duration,
hasty_guard_duration = data_shield.hasty_guard_duration,
armor_inv = true
}
data.block = nil
player_data[name] = data
@ -133,6 +149,16 @@ minetest.register_on_mods_loaded(function()
-- Remove un-used hud element.
remove_text_center(user, "pvp_revamped:block_pool")
if use_player_api then
local tex_data = armor.textures[name]
-- Remove shield from left arm.
set_textures(user, {
tex_data.skin,
tex_data.armor:gsub("%^" .. data_shield.texture .. ".png", ""),
tex_data.wielditem
})
end
return
end
@ -257,7 +283,17 @@ minetest.register_on_mods_loaded(function()
-- Write pool to hud.
create_hud_text_center(user, "pvp_revamped:shield_pool", block_pool)
data.shield = {pool = block_pool, bone = "Arm_Left", name = data_shield.name, index = data_shield.index, initial_time = time, time = time, duration = data_shield.duration, hasty_guard_duration = data_shield.hasty_guard_duration, armor_inv = true}
data.shield = {
pool = block_pool,
name = data_shield.name,
index = data_shield.index,
initial_time = time,
time = time,
duration = data_shield.duration,
hasty_guard_duration = data_shield.hasty_guard_duration,
armor_inv = true
}
data.block = nil
player_data[name] = data
@ -266,6 +302,16 @@ minetest.register_on_mods_loaded(function()
-- Remove un-used hud element.
remove_text_center(user, "pvp_revamped:block_pool")
if use_player_api then
local tex_data = armor.textures[name]
-- Remove shield from left arm.
set_textures(user, {
tex_data.skin,
tex_data.armor:gsub("%^" .. data_shield.texture .. ".png", ""),
tex_data.wielditem
})
end
return
end
@ -281,7 +327,15 @@ minetest.register_on_mods_loaded(function()
-- Write pool to hud.
create_hud_text_center(user, "pvp_revamped:shield_pool", block_pool)
data.shield = {pool = block_pool, bone = "Arm_Left", name = k, initial_time = time, time = time, duration = duration, hasty_guard_duration = hasty_guard_duration}
data.shield = {
pool = block_pool,
name = k,
initial_time = time,
time = time,
duration = duration,
hasty_guard_duration = hasty_guard_duration
}
data.block = nil
player_data[name] = data
@ -291,6 +345,16 @@ minetest.register_on_mods_loaded(function()
-- Remove un-used hud element.
remove_text_center(user, "pvp_revamped:block_pool")
if use_player_api then
local tex_data = armor.textures[name]
-- Remove shield from right arm.
set_textures(user, {
tex_data.skin,
tex_data.armor,
"3d_armor_trans.png"
})
end
end
minetest.override_item(k, {on_secondary_use = function(itemstack, user, pointed_thing)
@ -316,6 +380,7 @@ if minetest.global_exists("armor") then
armor.save_armor_inventory = function(self, player)
local _, inv = self:get_valid_player(player)
local playername = player:get_player_name()
-- Create new shield inv data.
if inv then
@ -325,9 +390,20 @@ if minetest.global_exists("armor") then
local armor_shield = get_item_group(name, "armor_shield") or 0
if armor_shield > 0 then
local groups = stack:get_definition().groups
local def = stack:get_definition()
local groups = def.groups
local texture = def.texture or name:gsub("%:", "_")
texture = texture:gsub(".png$", "")
player_persistent_data[player:get_player_name()].inventory_armor_shield = {name = name, index = i, block_pool = groups.block_pool, duration = groups.duration, hasty_guard_duration = groups.hasty_guard_duration, groups = groups}
player_persistent_data[playername].inventory_armor_shield = {
name = name,
index = i,
block_pool = groups.block_pool,
duration = groups.duration,
hasty_guard_duration = groups.hasty_guard_duration,
groups = groups,
texture = texture
}
return old_save_armor_inventory(self, player)
end
@ -335,7 +411,14 @@ if minetest.global_exists("armor") then
end
end
player_persistent_data[player:get_player_name()].inventory_armor_shield = nil
local data = get_player_data(playername)
data.shield = nil
player_data[playername] = data
player_persistent_data[playername].inventory_armor_shield = nil
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:shield_pool")
return old_save_armor_inventory(self, player)
end
@ -343,6 +426,7 @@ if minetest.global_exists("armor") then
armor.load_armor_inventory = function(self, player)
local _, inv = self:get_valid_player(player)
local results = old_load_armor_inventory(self, player)
local playername = player:get_player_name()
-- Create new shield inv data.
if inv then
@ -352,9 +436,20 @@ if minetest.global_exists("armor") then
local armor_shield = get_item_group(name, "armor_shield") or 0
if armor_shield > 0 then
local groups = stack:get_definition().groups
local def = stack:get_definition()
local groups = def.groups
local texture = def.texture or name:gsub("%:", "_")
texture = texture:gsub(".png$", "")
player_persistent_data[player:get_player_name()].inventory_armor_shield = {name = name, index = i, block_pool = groups.block_pool, duration = groups.duration, hasty_guard_duration = groups.hasty_guard_duration, groups = groups}
player_persistent_data[playername].inventory_armor_shield = {
name = name,
index = i,
block_pool = groups.block_pool,
duration = groups.duration,
hasty_guard_duration = groups.hasty_guard_duration,
groups = groups,
texture = texture
}
return results
end
@ -362,8 +457,47 @@ if minetest.global_exists("armor") then
end
end
player_persistent_data[player:get_player_name()].inventory_armor_shield = nil
local data = get_player_data(playername)
data.shield = nil
player_data[playername] = data
player_persistent_data[playername].inventory_armor_shield = nil
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:shield_pool")
return results
end
armor.update_player_visuals = function(self, player)
if not player then
return
end
local name = player:get_player_name()
local tex_data = self.textures[name]
if tex_data then
local tex_armor = tex_data.armor
local wielditem = tex_data.wielditem
local shield_data = get_player_data(name).shield
local inventory_armor_shield = player_persistent_data[name].inventory_armor_shield
if inventory_armor_shield and shield_data and shield_data.armor_inv then
tex_armor = tex_armor:gsub("%^" .. inventory_armor_shield.texture .. ".png", "")
end
if shield_data and not shield_data.armor_inv then
wielditem = "3d_armor_trans.png"
end
set_textures(player, {
tex_data.skin,
tex_armor,
wielditem
})
end
self:run_callbacks("on_update", player)
end
end

View File

@ -28,7 +28,6 @@ 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 armor_3d = pvp_revamped.armor_3d
local lag = pvp_revamped.lag
local hit_points = pvp_revamped.hit_points
local create_hud_text_center = pvp_revamped.create_hud_text_center
local remove_text_center = pvp_revamped.remove_text_center
@ -554,7 +553,7 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
local c_damage = damage * clash_def_mul
hd.damage = max(hd.damage - (damage + c_damage) * parry_dmg_mul, 0)
elseif full_punch and tool_capabilities.counter_duration and hd.time + tool_capabilities.counter_duration + lag + get_player_information(hitter_name).avg_jitter * 1000000 > get_us_time() then
elseif full_punch and tool_capabilities.counter_duration and hd.time + tool_capabilities.counter_duration + pvp_revamped.lag + get_player_information(hitter_name).avg_jitter * 1000000 > get_us_time() then
-- All damage gets reversed on counter.
-- Current damage gets added to it plus the damage multipliable.
local counter_dmg_mul = tool_capabilities.counter_dmg_mul or counter_dmg_mul

View File

@ -7,11 +7,17 @@ if sscsm then
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 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"})
@ -217,7 +223,17 @@ if sscsm then
-- Write pool to hud.
create_hud_text_center(player, "pvp_revamped:shield_pool", block_pool)
data.shield = {pool = block_pool, bone = "Arm_Left", name = data_shield.name, index = data_shield.index, initial_time = time, time = time, duration = data_shield.duration, hasty_guard_duration = data_shield.hasty_guard_duration, armor_inv = true}
data.shield = {
pool = block_pool,
name = data_shield.name,
index = data_shield.index,
initial_time = time,
time = time,
duration = data_shield.duration,
hasty_guard_duration = data_shield.hasty_guard_duration,
armor_inv = true
}
data.block = nil
player_data[name] = data
@ -225,6 +241,16 @@ if sscsm then
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:block_pool")
if use_player_api then
local tex_data = armor.textures[name]
-- Remove shield from left arm.
set_textures(player, {
tex_data.skin,
tex_data.armor:gsub("%^" .. data_shield.texture .. ".png", ""),
tex_data.wielditem
})
end
end
end
end)