fixed: upgrade level max 10, prevent faking upgrade by replacing item in the upgrade slot, fix upgrade increment logic, reset upgrade when switching item in upgrade node - prevents faking in another way, reset elevator mod when not in object mode - fixes bug when mover had to be digged up and placed again to reset elevator meta

master
Juraj Vajda 2018-12-10 18:39:36 -05:00
parent 58c58695d4
commit bb7f5f806f
1 changed files with 50 additions and 29 deletions

View File

@ -240,9 +240,9 @@ local get_mover_form = function(pos,player)
upgrade = upgrade - 1
end
if upgrade > 99 then
upgrade = 99
meta:set_float("upgrade", 99)
if upgrade > 10 then
upgrade = 10
meta:set_float("upgrade", 10)
end
local seltab = meta:get_int("seltab")
@ -366,14 +366,18 @@ minetest.register_node("basic_machines:mover", {
meta:set_int("public", 0)
meta:set_int("x0", 0)
meta:set_int("y0", -1)
meta:set_int("z0", 0) -- source1
-- source1
meta:set_int("z0", 0)
meta:set_int("x1", 0)
meta:set_int("y1", -1)
meta:set_int("z1", 0) -- source2: defines cube
-- source2: defines cube
meta:set_int("z1", 0)
meta:set_int("pc", 0)
meta:set_int("dim", 1)-- current cube position and dimensions
-- current cube position and dimensions
meta:set_int("dim", 1)
meta:set_int("pc", 0)
meta:set_int("dim", 1)-- current cube position and dimensions
-- current cube position and dimensions
meta:set_int("dim", 1)
meta:set_int("x2", 0)
meta:set_int("y2", 1)
meta:set_int("z2", 0)
@ -385,9 +389,10 @@ minetest.register_node("basic_machines:mover", {
local privs = minetest.get_player_privs(placer:get_player_name())
-- means operation will be for free
if privs.privs then
meta:set_float("upgrade", -1)
end -- means operation will be for free
end
local inv = meta:get_inventory()
inv:set_size("upgrade", 1 * 1)
@ -405,7 +410,8 @@ minetest.register_node("basic_machines:mover", {
-- minetest.show_formspec(name, "basic_machines:intro_mover", form)
end,
can_dig = function(pos, player) -- dont dig if upgrades inside, cause they will be destroyed
-- dont dig if upgrades inside, cause they will be destroyed
can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:is_empty("upgrade")
@ -431,33 +437,45 @@ minetest.register_node("basic_machines:mover", {
return 0
end
local stack_name = stack:get_name()
if listname == "filter" then
local meta = minetest.get_meta(pos)
local itemname = stack:get_name() or ""
meta:set_string("prefer", itemname)
-- minetest.chat_send_player(player:get_player_name(),"#mover: filter set as " .. itemname)
local form = get_mover_form(pos,player)
local form = get_mover_form(pos, player)
meta:set_string("prefer", stack_name)
minetest.show_formspec(player:get_player_name(), "basic_machines:mover_"..minetest.pos_to_string(pos), form)
return 1
end
if listname == "upgrade" then
if not (stack_name == "default:diamondblock" or stack_name == "default:mese") then
return 0
end
end
return stack:get_count()
end,
on_metadata_inventory_put = function(pos, listname, index, stack, player)
if listname == "upgrade" then
-- update upgrades
local meta = minetest.get_meta(pos)
local upgrade = 0
local inv = meta:get_inventory()
local stack_name = stack:get_name()
local upgrade_name = "default:mese"
-- check if upgrade should be for elevator
if meta:get_int("elevator") == 1 then
upgrade_name = "default:diamondblock"
end
if stack:get_name() == upgrade_name then
--inv:contains_item("upgrade", ItemStack({name="default:mese"})) then
upgrade = (inv:get_stack("upgrade", 1):get_count()) or 0
upgrade = upgrade + stack:get_count()
-- add upgrades
if stack_name == upgrade_name then
upgrade = inv:get_stack(listname, index):get_count() or 0
-- not more than 10
if upgrade > 10 then
@ -468,10 +486,15 @@ minetest.register_node("basic_machines:mover", {
local form = get_mover_form(pos, player)
minetest.show_formspec(player:get_player_name(), "basic_machines:mover_"..minetest.pos_to_string(pos), form)
end
end
-- reset upgrade level when switching the item
else
meta:set_float("upgrade", 1)
return stack:get_count()
local form = get_mover_form(pos, player)
minetest.show_formspec(player:get_player_name(), "basic_machines:mover_"..minetest.pos_to_string(pos), form)
end
end
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
@ -619,7 +642,7 @@ minetest.register_node("basic_machines:mover", {
end
-- upgrade decreases fuel cost
fuel_cost = fuel_cost/upgrade
fuel_cost = fuel_cost / upgrade
-- free operation for admin
if upgrade == -1 then
@ -2512,7 +2535,6 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
return
end
if punchset[name].state == 3 then
if punchset[name].node ~= "basic_machines:mover" then
punchset[name].state = 0
@ -2521,6 +2543,8 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
local privs = minetest.get_player_privs(puncher:get_player_name());
local elevator_mode = false
local meta = minetest.get_meta(punchset[name].pos)
meta:set_int("elevator", 0)
-- check if elevator mode
if punchset[name].pos.x == pos.x and
@ -2538,13 +2562,10 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
if inv:get_stack("upgrade", 1):get_name() == "default:diamondblock" then
local inv_stack = inv:get_stack("upgrade", 1)
upgrade = inv_stack:get_count()
if not inv_stack then
upgrade = 0
elseif inv_stack:get_count() > inv_stack:get_stack_max() then
upgrade = inv_stack:get_stack_max()
else
upgrade = inv_stack:get_count()
if upgrade > 10 then
upgrade = 10
end
end