Compare commits
8 Commits
63572c5c23
...
nalc-1.2.0
Author | SHA1 | Date | |
---|---|---|---|
d8ece75bee | |||
0abcd7960a | |||
f5fef5118d | |||
0974de93e4 | |||
0629d3b6ed | |||
5e9cd77fdc | |||
1b3f948daa | |||
1eb0bc363e |
@ -1,6 +1,6 @@
|
|||||||
# Pyramids (with Treasurer support) [`tsm_pyramids`]
|
# Pyramids (with Treasurer support) [`tsm_pyramids`]
|
||||||
|
|
||||||
* Version: 1.0.0
|
* Version: 1.0.2
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
This is a mod for Minetest Game which adds randomly spawned pyramids in deserts and
|
This is a mod for Minetest Game which adds randomly spawned pyramids in deserts and
|
||||||
|
11
init.lua
11
init.lua
@ -67,13 +67,16 @@ end
|
|||||||
|
|
||||||
function tsm_pyramids.fill_chest(pos, stype, flood_sand, treasure_chance)
|
function tsm_pyramids.fill_chest(pos, stype, flood_sand, treasure_chance)
|
||||||
local sand = "default:sand"
|
local sand = "default:sand"
|
||||||
|
local n = minetest.get_node(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
if not treasure_chance then
|
if not treasure_chance then
|
||||||
treasure_chance = 100
|
treasure_chance = 100
|
||||||
end
|
end
|
||||||
if stype == "desert_sandstone" or stype == "desert_stone" then
|
if meta:get_string("tsm_pyramids:stype") == "desert_sandstone" or
|
||||||
|
meta:get_string("tsm_pyramids:stype") == "desert_stone" or
|
||||||
|
stype == "desert_sandstone" or stype == "desert_stone" then
|
||||||
sand = "default:desert_sand"
|
sand = "default:desert_sand"
|
||||||
end
|
end
|
||||||
local n = minetest.get_node(pos)
|
|
||||||
local treasure_added = false
|
local treasure_added = false
|
||||||
if n and n.name and n.name == "default:chest" then
|
if n and n.name and n.name == "default:chest" then
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
@ -81,13 +84,13 @@ function tsm_pyramids.fill_chest(pos, stype, flood_sand, treasure_chance)
|
|||||||
inv:set_size("main", 8*4)
|
inv:set_size("main", 8*4)
|
||||||
local stacks = {}
|
local stacks = {}
|
||||||
-- Fill with sand in sand-flooded pyramids
|
-- Fill with sand in sand-flooded pyramids
|
||||||
if flood_sand then
|
if meta:get_int("tsm_pyramids:sanded") == 1 or flood_sand then
|
||||||
table.insert(stacks, {name=sand, count = math.random(1,32)})
|
table.insert(stacks, {name=sand, count = math.random(1,32)})
|
||||||
end
|
end
|
||||||
-- Add treasures
|
-- Add treasures
|
||||||
if math.random(1,100) <= treasure_chance then
|
if math.random(1,100) <= treasure_chance then
|
||||||
if minetest.get_modpath("treasurer") ~= nil then
|
if minetest.get_modpath("treasurer") ~= nil then
|
||||||
stacks = treasurer.select_random_treasures(3,7,9,{"minetool", "food", "crafting_component"})
|
stacks = treasurer.select_random_treasures(3,1,5,{"armes", "armures", "precieux", "nourriture"})
|
||||||
else
|
else
|
||||||
for i=0,2,1 do
|
for i=0,2,1 do
|
||||||
local stuff = chest_stuff.normal[math.random(1,#chest_stuff.normal)]
|
local stuff = chest_stuff.normal[math.random(1,#chest_stuff.normal)]
|
||||||
|
19
mummy.lua
19
mummy.lua
@ -49,15 +49,11 @@ local ANIM_WALK_MINE = 5
|
|||||||
local ANIM_MINE = 6
|
local ANIM_MINE = 6
|
||||||
|
|
||||||
local function hit(self)
|
local function hit(self)
|
||||||
local prop = {
|
self.object:set_texture_mod("^tsm_pyramids_hit.png")
|
||||||
mesh = mummy_mesh,
|
|
||||||
textures = {"tsm_pyramids_mummy.png^tsm_pyramids_hit.png"},
|
|
||||||
}
|
|
||||||
self.object:set_properties(prop)
|
|
||||||
minetest.after(0.4, function(self)
|
minetest.after(0.4, function(self)
|
||||||
local prop = {textures = mummy_texture,}
|
local prop = {textures = mummy_texture,}
|
||||||
if self ~= nil and self.object ~= nil then
|
if self ~= nil and self.object ~= nil then
|
||||||
self.object:set_properties(prop)
|
self.object:set_texture_mod("")
|
||||||
end
|
end
|
||||||
end, self)
|
end, self)
|
||||||
end
|
end
|
||||||
@ -65,7 +61,6 @@ end
|
|||||||
local function mummy_update_visuals_def(self)
|
local function mummy_update_visuals_def(self)
|
||||||
npc_anim = 0 -- Animation will be set further below immediately
|
npc_anim = 0 -- Animation will be set further below immediately
|
||||||
local prop = {
|
local prop = {
|
||||||
mesh = mummy_mesh,
|
|
||||||
textures = mummy_texture,
|
textures = mummy_texture,
|
||||||
}
|
}
|
||||||
self.object:set_properties(prop)
|
self.object:set_properties(prop)
|
||||||
@ -128,6 +123,7 @@ spawner_DEF.on_step = function(self, dtime)
|
|||||||
if self.timer > 1 then
|
if self.timer > 1 then
|
||||||
if n and n.name and n.name ~= "tsm_pyramids:spawner_mummy" then
|
if n and n.name and n.name ~= "tsm_pyramids:spawner_mummy" then
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -162,7 +158,7 @@ MUMMY_DEF.on_punch = function(self, puncher, time_from_last_punch, tool_capabili
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
if puncher ~= nil then
|
if puncher ~= nil then
|
||||||
minetest.sound_play(sound_hit, {pos = self.object:get_pos(), loop = false, max_hear_distance = 10, gain = 0.4})
|
minetest.sound_play(sound_hit, {pos = self.object:get_pos(), loop = false, max_hear_distance = 10, gain = 0.4}, true)
|
||||||
if time_from_last_punch >= 0.45 then
|
if time_from_last_punch >= 0.45 then
|
||||||
hit(self)
|
hit(self)
|
||||||
self.direction = {x=self.object:get_velocity().x, y=self.object:get_velocity().y, z=self.object:get_velocity().z}
|
self.direction = {x=self.object:get_velocity().x, y=self.object:get_velocity().y, z=self.object:get_velocity().z}
|
||||||
@ -178,7 +174,7 @@ MUMMY_DEF.on_punch = function(self, puncher, time_from_last_punch, tool_capabili
|
|||||||
end
|
end
|
||||||
|
|
||||||
MUMMY_DEF.on_death = function(self, killer)
|
MUMMY_DEF.on_death = function(self, killer)
|
||||||
minetest.sound_play(sound_dead, {pos = self.object:get_pos(), max_hear_distance = 10 , gain = 0.3})
|
minetest.sound_play(sound_dead, {pos = self.object:get_pos(), max_hear_distance = 10 , gain = 0.3}, true)
|
||||||
-- Drop item on death
|
-- Drop item on death
|
||||||
local count = math.random(0,3)
|
local count = math.random(0,3)
|
||||||
if count > 0 then
|
if count > 0 then
|
||||||
@ -244,10 +240,11 @@ MUMMY_DEF.on_step = function(self, dtime)
|
|||||||
self.on_death(self)
|
self.on_death(self)
|
||||||
end
|
end
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
|
return
|
||||||
else
|
else
|
||||||
hit(self)
|
hit(self)
|
||||||
self.sound_timer = 0
|
self.sound_timer = 0
|
||||||
minetest.sound_play(sound_hit, {pos = current_pos, max_hear_distance = 10, gain = 0.4})
|
minetest.sound_play(sound_hit, {pos = current_pos, max_hear_distance = 10, gain = 0.4}, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -266,7 +263,7 @@ MUMMY_DEF.on_step = function(self, dtime)
|
|||||||
|
|
||||||
--play sound
|
--play sound
|
||||||
if self.sound_timer > math.random(5,35) then
|
if self.sound_timer > math.random(5,35) then
|
||||||
minetest.sound_play(sound_normal, {pos = current_pos, max_hear_distance = 10, gain = 0.2})
|
minetest.sound_play(sound_normal, {pos = current_pos, max_hear_distance = 10, gain = 0.2}, true)
|
||||||
self.sound_timer = 0
|
self.sound_timer = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
27
nodes.lua
27
nodes.lua
@ -97,3 +97,30 @@ register_trap_stone("desert_trap",
|
|||||||
"default_desert_sandstone_brick.png",
|
"default_desert_sandstone_brick.png",
|
||||||
{ items = { { items = { "default:desert_sand" }, rarity = 1 }, { items = { "default:desert_sand" }, rarity = 2 }, } })
|
{ items = { { items = { "default:desert_sand" }, rarity = 1 }, { items = { "default:desert_sand" }, rarity = 2 }, } })
|
||||||
|
|
||||||
|
local chest = minetest.registered_nodes["default:chest"]
|
||||||
|
local def_on_rightclick = chest.on_rightclick
|
||||||
|
local def_on_timer = chest.on_timer
|
||||||
|
minetest.override_item(
|
||||||
|
"default:chest",
|
||||||
|
{
|
||||||
|
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||||
|
if minetest.get_meta(pos):get_string("tsm_pyramids:stype") ~= "" then
|
||||||
|
local timer = minetest.get_node_timer(pos)
|
||||||
|
if not timer:is_started() then
|
||||||
|
timer:start(1800) -- remplissages des coffres toutes les 30 minutes
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return def_on_rightclick(pos, node, clicker, itemstack, pointed_thing)
|
||||||
|
end,
|
||||||
|
on_timer = function(pos, elapsed)
|
||||||
|
if minetest.get_meta(pos):get_string("tsm_pyramids:stype") ~= "" then
|
||||||
|
minetest.log("action", "[DEBUG] chest refilling")
|
||||||
|
tsm_pyramids.fill_chest(pos)
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
if def_on_timer then return def_on_timer(pos, elapsed) else return false end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_alias("tsm_pyramids:chest", "default:chest")
|
||||||
|
16
room.lua
16
room.lua
@ -960,6 +960,7 @@ function tsm_pyramids.make_room(pos, stype, room_id, rotations)
|
|||||||
end
|
end
|
||||||
tries = tries + 1
|
tries = tries + 1
|
||||||
end
|
end
|
||||||
|
local sanded = room.flood_sand ~= false and stype ~= "desert_stone" and math.random(1,8) == 1
|
||||||
local chests = {}
|
local chests = {}
|
||||||
local column_style
|
local column_style
|
||||||
if stype == "desert_stone" then
|
if stype == "desert_stone" then
|
||||||
@ -1002,6 +1003,13 @@ function tsm_pyramids.make_room(pos, stype, room_id, rotations)
|
|||||||
local nn = replace(n_str, iy, code_table, deco, column_style)
|
local nn = replace(n_str, iy, code_table, deco, column_style)
|
||||||
minetest.set_node(cpos, {name=nn, param2=p2})
|
minetest.set_node(cpos, {name=nn, param2=p2})
|
||||||
if nn == "default:chest" then
|
if nn == "default:chest" then
|
||||||
|
local meta = minetest.get_meta(cpos)
|
||||||
|
meta:set_string("tsm_pyramids:stype", stype)
|
||||||
|
if sanded then
|
||||||
|
meta:set_int("tsm_pyramids:sanded", 1)
|
||||||
|
else
|
||||||
|
meta:set_int("tsm_pyramids:sanded", 0)
|
||||||
|
end
|
||||||
table.insert(chests, cpos)
|
table.insert(chests, cpos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -1045,6 +1053,13 @@ function tsm_pyramids.make_room(pos, stype, room_id, rotations)
|
|||||||
local nn = code_table[n_str]
|
local nn = code_table[n_str]
|
||||||
minetest.set_node(cpos, {name=nn, param2=p2})
|
minetest.set_node(cpos, {name=nn, param2=p2})
|
||||||
if nn == "default:chest" then
|
if nn == "default:chest" then
|
||||||
|
local meta = minetest.get_meta(cpos)
|
||||||
|
meta:set_string("tsm_pyramids:stype", stype)
|
||||||
|
if sanded then
|
||||||
|
meta:set_int("tsm_pyramids:sanded", 1)
|
||||||
|
else
|
||||||
|
meta:set_int("tsm_pyramids:sanded", 0)
|
||||||
|
end
|
||||||
table.insert(chests, cpos)
|
table.insert(chests, cpos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -1053,7 +1068,6 @@ function tsm_pyramids.make_room(pos, stype, room_id, rotations)
|
|||||||
else
|
else
|
||||||
minetest.log("error", "Invalid pyramid room style! room type ID="..r)
|
minetest.log("error", "Invalid pyramid room style! room type ID="..r)
|
||||||
end
|
end
|
||||||
local sanded = room.flood_sand ~= false and stype ~= "desert_stone" and math.random(1,8) == 1
|
|
||||||
if #chests > 0 then
|
if #chests > 0 then
|
||||||
-- Make at least 8 attempts to fill chests
|
-- Make at least 8 attempts to fill chests
|
||||||
local filled = 0
|
local filled = 0
|
||||||
|
Reference in New Issue
Block a user