Add: new user hook functions

on_block_deactivated
on_block_damage
on_guard_break
master
Coder12a 2020-11-01 14:49:00 -06:00
parent 03af48aeaf
commit 31dada114f
8 changed files with 248 additions and 16 deletions

View File

@ -534,7 +534,7 @@ tool_capabilities = {
### shield groups only
``` lua
armor:register_tool("test:shield_test", {
minetest.register_tool("test:shield_test", {
groups = {
-- See shield_pool_mul in config.
shield_pool_mul = 4,
@ -557,10 +557,19 @@ armor:register_tool("test:shield_test", {
})
```
### tool
### tool functions
``` lua
minetest.register_tool("pvp_shields:shield_steel", {
minetest.register_tool("test:tool", {
on_block_activate = function(player)
-- Invokes when the player activates the tool's block ability.
end,
on_block_deactivated = function(player)
-- Invokes when the player's block ability is deactivated.
end,
on_block_damage = function(player, damage)
-- Invokes when the player blocks damage.
end,
on_guard_break = function(player)
-- Invokes when the player's guard pool is zero or below.
end
```

View File

@ -12,8 +12,6 @@ local projectile_dmg_mul = pvp_revamped.config.projectile_dmg_mul
local projectile_spinning_gravity_mul = pvp_revamped.config.projectile_spinning_gravity_mul
local projectile_dip_gravity_mul = pvp_revamped.config.projectile_dip_gravity_mul
local clash_duration = pvp_revamped.config.clash_duration
local dash_cooldown = pvp_revamped.config.dash_cooldown
local dash_cooldown = pvp_revamped.config.dash_cooldown
local hasty_guard_duration = pvp_revamped.config.hasty_guard_duration
local takedown = pvp_revamped.config.takedown
local projectile_throw_style_dip = pvp_revamped.projectile_throw_style_dip
@ -65,6 +63,14 @@ minetest.register_globalstep(function(dtime)
(check_item and player:get_wielded_item():get_name() ~= block.name) then
-- Revert the damage texture modifier.
player:set_properties{damage_texture_modifier = pp_data.damage_texture_modifier}
local on_block_deactivated = block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
v.block = nil
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:block_pool")
@ -94,6 +100,14 @@ minetest.register_globalstep(function(dtime)
(check_item and not shield.armor_inv and player:get_wielded_item():get_name() ~= shield.name) then
-- Revert the damage texture modifier.
player:set_properties{damage_texture_modifier = pp_data.damage_texture_modifier}
local on_block_deactivated = shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
v.shield = nil
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:shield_pool")

View File

@ -128,8 +128,24 @@ function pvp_revamped.dodge(name, player, number)
player:set_properties{damage_texture_modifier = ""}
-- Clear out any hit data on dodge.
remove_hits(name)
local on_block_deactivated = dodge_data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
-- Remove shield and block.
dodge_data.block = nil
on_block_deactivated = dodge_data.shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
dodge_data.shield = nil
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:block_pool")
@ -141,8 +157,24 @@ function pvp_revamped.dodge(name, player, number)
player:set_properties{damage_texture_modifier = ""}
-- Clear out any hit data on dodge.
remove_hits(name)
local on_block_deactivated = dodge_data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
-- Remove shield and block.
dodge_data.block = nil
on_block_deactivated = dodge_data.shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
dodge_data.shield = nil
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:block_pool")
@ -162,7 +194,22 @@ function pvp_revamped.barrel_roll(name, player, number, x, z)
-- Clear out any hit data on barrel roll.
remove_hits(name)
-- Remove shield and block.
local on_block_deactivated = barrel_roll_data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
barrel_roll_data.block = nil
on_block_deactivated = barrel_roll_data.shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
barrel_roll_data.shield = nil
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:block_pool")
@ -175,7 +222,22 @@ function pvp_revamped.barrel_roll(name, player, number, x, z)
-- Clear out any hit data on barrel roll.
remove_hits(name)
-- Remove shield and block.
local on_block_deactivated = barrel_roll_data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
barrel_roll_data.block = nil
on_block_deactivated = barrel_roll_data.shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
barrel_roll_data.shield = nil
-- Remove un-used hud element.
remove_text_center(player, "pvp_revamped:block_pool")
@ -236,9 +298,20 @@ function pvp_revamped.shield_inv(user, name, player_pdata, data)
time = time,
duration = data_shield.duration,
hasty_guard_duration = data_shield.hasty_guard_duration,
armor_inv = true
armor_inv = true,
on_block_activate = data_shield.on_block_activate,
on_block_deactivated = data_shield.on_block_deactivated,
on_block_damage = data_shield.on_block_damage,
on_guard_break = data_shield.on_guard_break
}
local on_block_deactivated = data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(user)
end
data.block = nil
player_data[name] = data

View File

@ -34,7 +34,10 @@ armor.save_armor_inventory = function(self, player)
duration = groups.duration,
hasty_guard_duration = groups.hasty_guard_duration,
groups = groups,
on_block_activate = def.on_block_activate
on_block_activate = def.on_block_activate,
on_block_deactivated = def.on_block_deactivated,
on_block_damage = def.on_block_damage,
on_guard_break = def.on_guard_break
}
return old_save_armor_inventory(self, player)
@ -78,7 +81,10 @@ armor.load_armor_inventory = function(self, player)
duration = groups.duration,
hasty_guard_duration = groups.hasty_guard_duration,
groups = groups,
on_block_activate = def.on_block_activate
on_block_activate = def.on_block_activate,
on_block_deactivated = def.on_block_deactivated,
on_block_damage = def.on_block_damage,
on_guard_break = def.on_guard_break
}
return results

View File

@ -11,10 +11,12 @@ function wieldview.update_wielded_item(self, player)
local name = player:get_player_name()
local stack = player:get_wielded_item()
local item = stack:get_name()
local item = stack:get_name()
if not item then
return
end
end
if self.wielded_item[name] then
local pdata = player_data[name]
@ -30,6 +32,7 @@ function wieldview.update_wielded_item(self, player)
armor.textures[name].wielditem = self:get_item_texture(item)
armor:update_player_visuals(player)
end
end
self.wielded_item[name] = item
end

View File

@ -133,7 +133,16 @@ minetest.register_on_mods_loaded(function()
-- Write pool to hud.
create_hud_text_center(user, "pvp_revamped:block_pool", block_pool)
data.shield = nil
if data.shield then
local on_block_deactivated = data.shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(user)
end
data.shield = nil
end
-- Remove un-used hud element.
remove_text_center(user, "pvp_revamped:shield_pool")
@ -176,13 +185,29 @@ minetest.register_on_mods_loaded(function()
return old_on_drop(itemstack, dropper, pos)
end
data.block = nil
if data.block then
local on_block_deactivated = data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(dropper)
end
data.block = nil
end
-- Remove un-used block hud element.
remove_text_center(dropper, "pvp_revamped:block_pool")
-- Only clear shield if it is not from the armor inv.
if shield_data and not shield_data.armor_inv then
local on_block_deactivated = shield_data.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(dropper)
end
data.shield = nil
-- Remove shield pool hud element.
remove_text_center(dropper, "pvp_revamped:shield_pool")
@ -220,6 +245,10 @@ minetest.register_on_mods_loaded(function()
local duration = groups.duration or shield_duration + (armor_use + value) * shield_duration_mul
local hasty_shield_mul = groups.hasty_shield_mul or hasty_shield_mul
local hasty_guard_duration = hasty_guard_duration
local on_block_activate = v.on_block_activate
local on_block_deactivated = v.on_block_deactivated
local on_block_damage = v.on_block_damage
local on_guard_break = v.on_guard_break
if max_armor_use then
block_pool = groups.block_pool or max_armor_use - armor_use + value * shield_pool_mul
@ -267,10 +296,23 @@ minetest.register_on_mods_loaded(function()
initial_time = time,
time = time,
duration = duration,
hasty_guard_duration = hasty_guard_duration
hasty_guard_duration = hasty_guard_duration,
on_block_activate = on_block_activate,
on_block_deactivated = on_block_deactivated,
on_block_damage = on_block_damage,
on_guard_break = on_guard_break
}
data.block = nil
if data.block then
local on_block_deactivated = data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(user)
end
data.block = nil
end
player_data[name] = data

View File

@ -114,6 +114,13 @@ local function break_guard(player, name)
local pdata = player_data[name]
if pdata.shield then
local on_block_deactivated = pdata.shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
player_data[name].shield = nil
-- Remove hud element.
@ -121,6 +128,13 @@ local function break_guard(player, name)
end
if pdata.block then
local on_block_deactivated = pdata.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
player_data[name].block = nil
-- Remove hud element.

View File

@ -346,7 +346,22 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
if not projectile then
-- Remove the hitter's blocking data.
local on_block_deactivated = hitter_data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
hitter_data.block = nil
on_block_deactivated = hitter_data.shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
hitter_data.shield = nil
player_data[hitter_name] = hitter_data
@ -372,6 +387,13 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
-- Remove block table if pool is zero or below.
if pool <= 0 then
local on_guard_break = data_block.on_guard_break
-- Invoke deactivate block function if any.
if on_guard_break then
on_guard_break(player)
end
victim_data.block = nil
-- Remove un-used hud element.
@ -380,6 +402,13 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
return true
end
local on_block_damage = data_block.on_block_damage
-- Run damage blocked function.
if on_block_damage then
on_block_damage(player, damage)
end
-- Update block pool text.
create_hud_text_center(player, "pvp_revamped:block_pool", pool)
@ -409,6 +438,13 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
-- Remove shield table if pool is zero or below.
if pool <= 0 then
local on_guard_break = data_shield.on_guard_break
-- Invoke guard break function if any.
if on_guard_break then
on_guard_break(player)
end
victim_data.shield = nil
-- Remove un-used hud element.
@ -417,6 +453,13 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
return true
end
local on_block_damage = data_shield.on_block_damage
-- Run damage blocked function.
if on_block_damage then
on_block_damage(player, damage)
end
-- Update shield pool text.
create_hud_text_center(player, "pvp_revamped:shield_pool", pool)
@ -448,6 +491,13 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
-- Remove shield table if pool is zero or below.
if pool <= 0 then
local on_guard_break = data_shield.on_guard_break
-- Invoke guard break function if any.
if on_guard_break then
on_guard_break(player)
end
victim_data.shield = nil
-- Remove un-used hud element.
@ -456,6 +506,13 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
return true
end
local on_block_damage = data_shield.on_block_damage
-- Run damage blocked function.
if on_block_damage then
on_block_damage(player, damage)
end
-- Update shield pool text.
create_hud_text_center(player, "pvp_revamped:shield_pool", pool)
@ -589,6 +646,20 @@ local function punch(player, hitter, time_from_last_punch, tool_capabilities, di
victim_data.hit = {{name = hitter_name, damage = damage, full_punch = full_punch, time = get_us_time()}}
end
local on_block_deactivated = victim_data.block.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
on_block_deactivated = victim_data.shield.on_block_deactivated
-- Invoke deactivate block function if any.
if on_block_deactivated then
on_block_deactivated(player)
end
victim_data.block = nil
victim_data.shield = nil