mirror of
https://notabug.org/TenPlus1/protector.git
synced 2025-01-08 13:57:38 +01:00
Added player checking for player effects
This commit is contained in:
parent
5d1f2e2c01
commit
950fb7e7cf
114
init.lua
114
init.lua
@ -1,10 +1,8 @@
|
||||
|
||||
-- older privelage for admins to rbypass protected nodes, do not use anymore
|
||||
-- instead grant admin 'protection_bypass' privelage.
|
||||
|
||||
-- 'delprotect' priv removed, use 'protection_bypass' instead
|
||||
--minetest.register_privilege("delprotect","Ignore player protection")
|
||||
|
||||
|
||||
-- get minetest.conf settings
|
||||
protector = {}
|
||||
protector.mod = "redo"
|
||||
@ -15,9 +13,11 @@ protector.hurt = tonumber(minetest.setting_get("protector_hurt")) or 0
|
||||
protector.spawn = tonumber(minetest.setting_get("protector_spawn")
|
||||
or minetest.setting_get("protector_pvp_spawn")) or 0
|
||||
|
||||
|
||||
-- get static spawn position
|
||||
local statspawn = minetest.setting_get_pos("static_spawnpoint") or {x = 0, y = 2, z = 0}
|
||||
|
||||
|
||||
-- Intllib
|
||||
local S
|
||||
if minetest.get_modpath("intllib") then
|
||||
@ -40,18 +40,21 @@ else
|
||||
end
|
||||
protector.intllib = S
|
||||
|
||||
|
||||
-- return list of members as a table
|
||||
protector.get_member_list = function(meta)
|
||||
|
||||
return meta:get_string("members"):split(" ")
|
||||
end
|
||||
|
||||
|
||||
-- write member list table in protector meta as string
|
||||
protector.set_member_list = function(meta, list)
|
||||
|
||||
meta:set_string("members", table.concat(list, " "))
|
||||
end
|
||||
|
||||
|
||||
-- check if player name is a member
|
||||
protector.is_member = function (meta, name)
|
||||
|
||||
@ -65,6 +68,7 @@ protector.is_member = function (meta, name)
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
-- add player name to table as member
|
||||
protector.add_member = function(meta, name)
|
||||
|
||||
@ -79,6 +83,7 @@ protector.add_member = function(meta, name)
|
||||
protector.set_member_list(meta, list)
|
||||
end
|
||||
|
||||
|
||||
-- remove player name from table
|
||||
protector.del_member = function(meta, name)
|
||||
|
||||
@ -95,6 +100,7 @@ protector.del_member = function(meta, name)
|
||||
protector.set_member_list(meta, list)
|
||||
end
|
||||
|
||||
|
||||
-- protector interface
|
||||
protector.generate_formspec = function(meta)
|
||||
|
||||
@ -145,6 +151,7 @@ protector.generate_formspec = function(meta)
|
||||
return formspec
|
||||
end
|
||||
|
||||
|
||||
-- check if pos is inside a protected spawn area
|
||||
local function inside_spawn(pos, radius)
|
||||
|
||||
@ -165,6 +172,7 @@ local function inside_spawn(pos, radius)
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
-- Infolevel:
|
||||
-- 0 for no info
|
||||
-- 1 for "This area is owned by <owner> !" if you can't dig
|
||||
@ -273,67 +281,65 @@ function minetest.is_protected(pos, digger)
|
||||
|
||||
local player = minetest.get_player_by_name(digger)
|
||||
|
||||
-- hurt player if protection violated
|
||||
if protector.hurt > 0
|
||||
and player then
|
||||
player:set_hp(player:get_hp() - protector.hurt)
|
||||
end
|
||||
if player and player:is_player() then
|
||||
|
||||
-- flip player when protection violated
|
||||
if protector.flip
|
||||
and player then
|
||||
|
||||
-- yaw + 180°
|
||||
--local yaw = player:get_look_horizontal() + math.pi
|
||||
local yaw = player:get_look_yaw() + math.pi
|
||||
|
||||
if yaw > 2 * math.pi then
|
||||
yaw = yaw - 2 * math.pi
|
||||
-- hurt player if protection violated
|
||||
if protector.hurt > 0 and player:get_hp() > 0 then
|
||||
player:set_hp(player:get_hp() - protector.hurt)
|
||||
end
|
||||
|
||||
--player:set_look_horizontal(yaw)
|
||||
player:set_look_yaw(yaw)
|
||||
-- flip player when protection violated
|
||||
if protector.flip then
|
||||
-- yaw + 180°
|
||||
--local yaw = player:get_look_horizontal() + math.pi
|
||||
local yaw = player:get_look_yaw() + math.pi
|
||||
|
||||
-- invert pitch
|
||||
--player:set_look_vertical(-player:get_look_vertical())
|
||||
player:set_look_pitch(-player:get_look_pitch())
|
||||
if yaw > 2 * math.pi then
|
||||
yaw = yaw - 2 * math.pi
|
||||
end
|
||||
|
||||
-- if digging below player, move up to avoid falling through hole
|
||||
local pla_pos = player:getpos()
|
||||
--player:set_look_horizontal(yaw)
|
||||
player:set_look_yaw(yaw)
|
||||
|
||||
if pos.y < pla_pos.y then
|
||||
-- invert pitch
|
||||
--player:set_look_vertical(-player:get_look_vertical())
|
||||
player:set_look_pitch(-player:get_look_pitch())
|
||||
|
||||
player:setpos({
|
||||
x = pla_pos.x,
|
||||
y = pla_pos.y + 0.8,
|
||||
z = pla_pos.z
|
||||
})
|
||||
-- if digging below player, move up to avoid falling through hole
|
||||
local pla_pos = player:getpos()
|
||||
|
||||
if pos.y < pla_pos.y then
|
||||
|
||||
player:setpos({
|
||||
x = pla_pos.x,
|
||||
y = pla_pos.y + 0.8,
|
||||
z = pla_pos.z
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- drop tool/item if protection violated
|
||||
if protector.drop == true
|
||||
and player then
|
||||
-- drop tool/item if protection violated
|
||||
if protector.drop == true then
|
||||
|
||||
local holding = player:get_wielded_item()
|
||||
local holding = player:get_wielded_item()
|
||||
|
||||
if holding:to_string() ~= "" then
|
||||
if holding:to_string() ~= "" then
|
||||
|
||||
-- take stack
|
||||
local sta = holding:take_item(holding:get_count())
|
||||
player:set_wielded_item(holding)
|
||||
|
||||
-- incase of lag, reset stack
|
||||
minetest.after(0.1, function()
|
||||
-- take stack
|
||||
local sta = holding:take_item(holding:get_count())
|
||||
player:set_wielded_item(holding)
|
||||
|
||||
-- drop stack
|
||||
local obj = minetest.add_item(player:getpos(), sta)
|
||||
if obj then
|
||||
obj:setvelocity({x = 0, y = 5, z = 0})
|
||||
end
|
||||
end)
|
||||
-- incase of lag, reset stack
|
||||
minetest.after(0.1, function()
|
||||
player:set_wielded_item(holding)
|
||||
|
||||
-- drop stack
|
||||
local obj = minetest.add_item(player:getpos(), sta)
|
||||
if obj then
|
||||
obj:setvelocity({x = 0, y = 5, z = 0})
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -342,9 +348,9 @@ function minetest.is_protected(pos, digger)
|
||||
|
||||
-- otherwise can dig or place
|
||||
return protector.old_is_protected(pos, digger)
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- make sure protection block doesn't overlap another protector's area
|
||||
function protector.check_overlap(itemstack, placer, pointed_thing)
|
||||
|
||||
@ -378,6 +384,7 @@ function protector.check_overlap(itemstack, placer, pointed_thing)
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- protection node
|
||||
minetest.register_node("protector:protect", {
|
||||
description = S("Protection Block"),
|
||||
@ -457,6 +464,7 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- protection logo
|
||||
minetest.register_node("protector:protect2", {
|
||||
description = S("Protection Logo"),
|
||||
@ -537,6 +545,7 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- check formspec buttons or when name entered
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
|
||||
@ -578,6 +587,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
-- display entity shown when protector node is punched
|
||||
minetest.register_entity("protector:display", {
|
||||
physical = false,
|
||||
@ -599,6 +609,7 @@ minetest.register_entity("protector:display", {
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
-- Display-zone node, Do NOT place the display as a node,
|
||||
-- it is made to be used as an entity (see above)
|
||||
|
||||
@ -632,6 +643,7 @@ minetest.register_node("protector:display_node", {
|
||||
drop = "",
|
||||
})
|
||||
|
||||
|
||||
local path = minetest.get_modpath("protector")
|
||||
|
||||
dofile(path .. "/doors_chest.lua")
|
||||
@ -640,6 +652,7 @@ dofile(path .. "/admin.lua")
|
||||
dofile(path .. "/tool.lua")
|
||||
dofile(path .. "/lucky_block.lua")
|
||||
|
||||
|
||||
-- stop mesecon pistons from pushing protectors
|
||||
if minetest.get_modpath("mesecons_mvps") then
|
||||
mesecon.register_mvps_stopper("protector:protect")
|
||||
@ -647,4 +660,5 @@ if minetest.get_modpath("mesecons_mvps") then
|
||||
mesecon.register_mvps_stopper("protector:chest")
|
||||
end
|
||||
|
||||
|
||||
print (S("[MOD] Protector Redo loaded"))
|
||||
|
Loading…
Reference in New Issue
Block a user