Fixed bugs with pedestal abilities, started working on Alchemical Books
This commit is contained in:
parent
633d5082c2
commit
47450327c4
|
@ -92,18 +92,13 @@ You can find the old textures and sounds by going back to previous commits in Gi
|
||||||
- [ ] Add Void Ring
|
- [ ] Add Void Ring
|
||||||
- [x] Add DM Pedestal
|
- [x] Add DM Pedestal
|
||||||
- [ ] Add Pedestal abilities
|
- [ ] Add Pedestal abilities
|
||||||
- [ ] Passive Stones
|
- [x] Passive Stones
|
||||||
- [x] Soul
|
- [x] Talisman
|
||||||
- [x] Body
|
|
||||||
- [x] Life
|
|
||||||
- [ ] Mind
|
|
||||||
- [ ] Talisman
|
|
||||||
- [ ] Evertide
|
- [ ] Evertide
|
||||||
- [ ] Volcanite
|
- [ ] Volcanite
|
||||||
- [ ] Zero
|
- [ ] Zero
|
||||||
- [ ] Ignition
|
- [ ] Ignition
|
||||||
- [ ] Black Hole/Void
|
- [ ] Black Hole/Void
|
||||||
- [ ] Functions for passive stones, talisman, evertide/volcanite, zero/ignition
|
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
<details><summary>Look at this fancy expanding changelog</summary>
|
<details><summary>Look at this fancy expanding changelog</summary>
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
local function extract_dimension(pos)
|
||||||
|
if exchangeclone.mtg then
|
||||||
|
if minetest.get_modpath("nether") then
|
||||||
|
if pos.y >= nether.DEPTH_FLOOR and pos.y <= nether.DEPTH_CEILING then
|
||||||
|
local report_y = pos.y - nether.DEPTH_FLOOR
|
||||||
|
return "Nether", {x = pos.x, y = report_y, z = pos.z}
|
||||||
|
else
|
||||||
|
return "Overworld", pos
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil, pos
|
||||||
|
end
|
||||||
|
|
||||||
|
-- overworld
|
||||||
|
if (pos.y >= mcl_vars.mg_overworld_min) and (pos.y <= mcl_vars.mg_overworld_max) then
|
||||||
|
return "Overworld", pos
|
||||||
|
end
|
||||||
|
|
||||||
|
-- nether
|
||||||
|
if (pos.y >= mcl_vars.mg_nether_min) and (pos.y <= mcl_vars.mg_nether_max) then
|
||||||
|
local report_y = pos.y - mcl_vars.mg_nether_min
|
||||||
|
return "Nether", {x = pos.x, y = report_y, z = pos.z}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- end
|
||||||
|
if (pos.y >= mcl_vars.mg_end_min) and (pos.y <= mcl_vars.mg_end_max) then
|
||||||
|
local report_y = pos.y - mcl_vars.mg_end_min
|
||||||
|
return "End", {x = pos.x, y = report_y, z = pos.z}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- outside of scoped bounds.
|
||||||
|
return "Void", pos
|
||||||
|
end
|
||||||
|
|
||||||
|
local function add_dimension(dimension, pos)
|
||||||
|
dimension = dimension:lower()
|
||||||
|
if exchangeclone.mtg then
|
||||||
|
if dimension == "nether" then
|
||||||
|
if minetest.get_modpath("nether") then
|
||||||
|
local report_y = pos.y + nether.DEPTH_FLOOR
|
||||||
|
return {x = pos.x, y = report_y, z = pos.z}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return pos
|
||||||
|
end
|
||||||
|
|
||||||
|
if dimension == "nether" then
|
||||||
|
local report_y = pos.y + mcl_vars.mg_nether_min
|
||||||
|
return {x = pos.x, y = report_y, z = pos.z}
|
||||||
|
end
|
||||||
|
|
||||||
|
if dimension == "end" then
|
||||||
|
local report_y = pos.y + mcl_vars.mg_end_min
|
||||||
|
return {x = pos.x, y = report_y, z = pos.z}
|
||||||
|
end
|
||||||
|
|
||||||
|
return pos
|
||||||
|
end
|
||||||
|
|
||||||
|
local base_formspec = {
|
||||||
|
"formspec_version[3]",
|
||||||
|
"size[13,10]",
|
||||||
|
"textarea[8.5,0.5;3,0.7;name;;Location Name]",
|
||||||
|
"button[11.5,0.5;1,0.7;add;Add]",
|
||||||
|
"button[8.5,1.5;4,1;teleport;Teleport]",
|
||||||
|
"button[8.5,2.75;4,1;rename;Rename]",
|
||||||
|
"button[8.5,4;4,1;up;Move Up]",
|
||||||
|
"button[8.5,5.25;4,1;down;Move Down]",
|
||||||
|
"button[8.5,6.5;4,1;delete;Delete]",
|
||||||
|
"field_close_on_enter[name;false]",
|
||||||
|
"field_enter_after_edit[name;false]"
|
||||||
|
}
|
||||||
|
|
||||||
|
local using_stack_data = {}
|
||||||
|
|
||||||
|
-- player: The player to be shown the formspec
|
||||||
|
-- index: The index of the location the player is currently selecting
|
||||||
|
-- use_stack_data: Whether to use locations stored with the book or the player.
|
||||||
|
local function show_formspec(player, index, use_stack_data)
|
||||||
|
local stack = player:get_wielded_item()
|
||||||
|
if minetest.get_item_group(stack:get_name(), "exchangeclone_alchemical_book") < 1 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
using_stack_data[player:get_player_name()] = use_stack_data
|
||||||
|
local book_data = stack:get_definition().alchemical_book_data
|
||||||
|
local data = minetest.deserialize((use_stack_data and stack or player):get_meta():get_string("exchangeclone_alchemical_book"))
|
||||||
|
local formspec = table.copy(base_formspec)
|
||||||
|
local player_pos = player:get_pos()
|
||||||
|
if type(data) ~= "table" then
|
||||||
|
data = {}
|
||||||
|
end
|
||||||
|
if not data.locations then
|
||||||
|
data.locations = {}
|
||||||
|
end
|
||||||
|
if #data.locations > 0 then
|
||||||
|
formspec[#formspec+1] = "textlist[0.5,0.5;7,7;location_list;"
|
||||||
|
for _, location in ipairs(data.locations) do
|
||||||
|
formspec[#formspec+1] = minetest.formspec_escape(location.name)..";"
|
||||||
|
end
|
||||||
|
formspec[#formspec+1] = "]"
|
||||||
|
end
|
||||||
|
if index then
|
||||||
|
local selected = data.locations[index]
|
||||||
|
if selected then
|
||||||
|
local dimension, pos = extract_dimension(selected.pos)
|
||||||
|
local dimension_string = dimension and (" ("..dimension..")") or ""
|
||||||
|
local distance = vector.distance(pos, player_pos)
|
||||||
|
local cost = book_data.emc_per_node*distance
|
||||||
|
local info = minetest.formspec_escape(string.format([[%s
|
||||||
|
Position: %s, %s, %s%s
|
||||||
|
Distance: %s
|
||||||
|
Cost: %s EMC]], selected.name, pos.x, pos.y, pos.z, dimension_string, distance, cost))
|
||||||
|
formspec[#formspec+1] = "textarea[0.5,8;4,4;;;"..info.."]"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
minetest.show_formspec(player:get_player_name(), "exchangeclone_alchemical_book", table.concat(formspec))
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
|
if formname ~= "exchangeclone_alchemical_book" then return end
|
||||||
|
if fields.quit == "true" then return end
|
||||||
|
local use_stack_data = using_stack_data[player:get_player_name()]
|
||||||
|
local stack = player:get_wielded_item()
|
||||||
|
local data = minetest.deserialize((use_stack_data and stack or player):get_meta():get_string("exchangeclone_alchemical_book"))
|
||||||
|
if type(data) ~= "table" then
|
||||||
|
data = {}
|
||||||
|
end
|
||||||
|
if not data.locations then
|
||||||
|
data.locations = {}
|
||||||
|
end
|
||||||
|
minetest.log(dump(fields))
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_tool("exchangeclone:basic_alchemical_book", {
|
||||||
|
description = "Basic Alchemical Book",
|
||||||
|
groups = {exchangeclone_alchemical_book = 1},
|
||||||
|
alchemical_book_data = {emc_per_node = 1000},
|
||||||
|
on_secondary_use = function(itemstack, player, pointed_thing)
|
||||||
|
show_formspec(player)
|
||||||
|
end
|
||||||
|
})
|
|
@ -131,6 +131,7 @@ local files = {
|
||||||
"talisman_of_repair",
|
"talisman_of_repair",
|
||||||
"passive_stones",
|
"passive_stones",
|
||||||
"emc_link",
|
"emc_link",
|
||||||
|
"alchemical_books",
|
||||||
"dark_matter_pedestal",
|
"dark_matter_pedestal",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,8 +43,10 @@ minetest.register_tool("exchangeclone:soul_stone", {
|
||||||
exclude = {"exchangeclone:life_stone"}
|
exclude = {"exchangeclone:life_stone"}
|
||||||
},
|
},
|
||||||
_exchangeclone_pedestal = function(pos)
|
_exchangeclone_pedestal = function(pos)
|
||||||
for _, player in minetest.get_objects_inside_radius(pos, 5) do
|
for _, object in pairs(minetest.get_objects_inside_radius(pos, 5)) do
|
||||||
heal(player, 2)
|
if object:is_player() then
|
||||||
|
heal(object, 2)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
on_secondary_use = exchangeclone.toggle_active,
|
on_secondary_use = exchangeclone.toggle_active,
|
||||||
|
@ -79,7 +81,7 @@ if (exchangeclone.mcl and mcl_hunger.active) or (exchangeclone.mtg and minetest.
|
||||||
_exchangeclone_pedestal = function(pos)
|
_exchangeclone_pedestal = function(pos)
|
||||||
for _, object in pairs(minetest.get_objects_inside_radius(pos, 5)) do
|
for _, object in pairs(minetest.get_objects_inside_radius(pos, 5)) do
|
||||||
if object:is_player() then
|
if object:is_player() then
|
||||||
heal(object, 2)
|
satiate(object, 2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
@ -174,12 +176,12 @@ if exchangeclone.mcl then
|
||||||
mcl_experience.set_xp(player, player_xp - amount_to_take)
|
mcl_experience.set_xp(player, player_xp - amount_to_take)
|
||||||
stored = stored + amount_to_take
|
stored = stored + amount_to_take
|
||||||
meta:set_int("exchangeclone_stored_xp", stored)
|
meta:set_int("exchangeclone_stored_xp", stored)
|
||||||
meta:set_string("description", get_mind_description(itemstack))
|
|
||||||
if stored > 0 then
|
if stored > 0 then
|
||||||
meta:set_string("exchangeclone_emc_value", "none")
|
meta:set_string("exchangeclone_emc_value", "none")
|
||||||
else
|
else
|
||||||
meta:set_string("exchangeclone_emc_value", "")
|
meta:set_string("exchangeclone_emc_value", "")
|
||||||
end
|
end
|
||||||
|
meta:set_string("description", get_mind_description(itemstack))
|
||||||
return itemstack
|
return itemstack
|
||||||
else
|
else
|
||||||
local player_xp = mcl_experience.get_xp(player)
|
local player_xp = mcl_experience.get_xp(player)
|
||||||
|
@ -208,7 +210,25 @@ if exchangeclone.mcl then
|
||||||
on_secondary_use = mind_action,
|
on_secondary_use = mind_action,
|
||||||
on_place = mind_action,
|
on_place = mind_action,
|
||||||
groups = {exchangeclone_passive = 1, disable_repair = 1},
|
groups = {exchangeclone_passive = 1, disable_repair = 1},
|
||||||
_mcl_generate_description = get_mind_description
|
_mcl_generate_description = get_mind_description,
|
||||||
|
_exchangeclone_pedestal = function(pos, itemstack)
|
||||||
|
local meta = itemstack:get_meta()
|
||||||
|
for _, object in pairs(minetest.get_objects_inside_radius(pos, 5)) do
|
||||||
|
local lua_entity = object:get_luaentity()
|
||||||
|
if lua_entity and lua_entity.name == "mcl_experience:orb" then
|
||||||
|
local amount = lua_entity._xp
|
||||||
|
meta:set_int("exchangeclone_stored_xp", meta:get_int("exchangeclone_stored_xp") + amount)
|
||||||
|
if meta:get_int("exchangeclone_stored_xp") > 0 then
|
||||||
|
meta:set_string("exchangeclone_emc_value", "none")
|
||||||
|
else
|
||||||
|
meta:set_string("exchangeclone_emc_value", "")
|
||||||
|
end
|
||||||
|
meta:set_string("description", get_mind_description(itemstack))
|
||||||
|
object:remove()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local book = "mcl_books:book"
|
local book = "mcl_books:book"
|
||||||
|
|
|
@ -42,11 +42,7 @@ local function repair_items(inv, listname)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_tool("exchangeclone:talisman_of_repair", {
|
local function repair_player_inv(player)
|
||||||
description = "Talisman of Repair",
|
|
||||||
inventory_image = "exchangeclone_talisman_of_repair.png",
|
|
||||||
_exchangeclone_passive = {
|
|
||||||
func = function(player)
|
|
||||||
local inv = player:get_inventory()
|
local inv = player:get_inventory()
|
||||||
repair_items(inv, "main")
|
repair_items(inv, "main")
|
||||||
if exchangeclone.mcl then
|
if exchangeclone.mcl then
|
||||||
|
@ -56,9 +52,22 @@ minetest.register_tool("exchangeclone:talisman_of_repair", {
|
||||||
local _, armor_inv = armor:get_valid_player(player, "3d_armor")
|
local _, armor_inv = armor:get_valid_player(player, "3d_armor")
|
||||||
repair_items(armor_inv, "armor")
|
repair_items(armor_inv, "armor")
|
||||||
end
|
end
|
||||||
end,
|
end
|
||||||
|
|
||||||
|
minetest.register_tool("exchangeclone:talisman_of_repair", {
|
||||||
|
description = "Talisman of Repair",
|
||||||
|
inventory_image = "exchangeclone_talisman_of_repair.png",
|
||||||
|
_exchangeclone_passive = {
|
||||||
|
func = repair_player_inv,
|
||||||
always_active = true
|
always_active = true
|
||||||
},
|
},
|
||||||
|
_exchangeclone_pedestal = function(pos)
|
||||||
|
for _, object in pairs(minetest.get_objects_inside_radius(pos, 5)) do
|
||||||
|
if object:is_player() then
|
||||||
|
repair_player_inv(object)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
groups = {exchangeclone_passive = 1, disable_repair = 1}
|
groups = {exchangeclone_passive = 1, disable_repair = 1}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue