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
parent
58c58695d4
commit
bb7f5f806f
79
mover.lua
79
mover.lua
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue