Compare commits
21 Commits
63572c5c23
...
master
Author | SHA1 | Date | |
---|---|---|---|
8837f4d707 | |||
84bea1052e | |||
303d3cf45c | |||
ac9a442a07 | |||
a17725133e | |||
041a4c5dcc | |||
36fc4d2639 | |||
111639b778 | |||
3fc59c9010 | |||
d4d89c5cc4 | |||
c8ecf77255 | |||
61ebaab55e | |||
8a449ea8a8 | |||
d8ece75bee | |||
0abcd7960a | |||
f5fef5118d | |||
0974de93e4 | |||
0629d3b6ed | |||
5e9cd77fdc | |||
1b3f948daa | |||
1eb0bc363e |
22
.gitattributes
vendored
22
.gitattributes
vendored
@ -1,22 +0,0 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
||||
# Custom for Visual Studio
|
||||
*.cs diff=csharp
|
||||
*.sln merge=union
|
||||
*.csproj merge=union
|
||||
*.vbproj merge=union
|
||||
*.fsproj merge=union
|
||||
*.dbproj merge=union
|
||||
|
||||
# Standard to msysgit
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
215
.gitignore
vendored
215
.gitignore
vendored
@ -1,215 +0,0 @@
|
||||
#################
|
||||
## Eclipse
|
||||
#################
|
||||
|
||||
*.pydevproject
|
||||
.project
|
||||
.metadata
|
||||
bin/
|
||||
tmp/
|
||||
*.tmp
|
||||
*.bak
|
||||
*.swp
|
||||
*~.nib
|
||||
local.properties
|
||||
.classpath
|
||||
.settings/
|
||||
.loadpath
|
||||
|
||||
# External tool builders
|
||||
.externalToolBuilders/
|
||||
|
||||
# Locally stored "Eclipse launch configurations"
|
||||
*.launch
|
||||
|
||||
# CDT-specific
|
||||
.cproject
|
||||
|
||||
# PDT-specific
|
||||
.buildpath
|
||||
|
||||
|
||||
#################
|
||||
## Visual Studio
|
||||
#################
|
||||
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.sln.docstates
|
||||
|
||||
# Build results
|
||||
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
x64/
|
||||
build/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.log
|
||||
*.scc
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# NCrunch
|
||||
*.ncrunch*
|
||||
.*crunch*.local.xml
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.Publish.xml
|
||||
*.pubxml
|
||||
|
||||
# NuGet Packages Directory
|
||||
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
|
||||
#packages/
|
||||
|
||||
# Windows Azure Build Output
|
||||
csx
|
||||
*.build.csdef
|
||||
|
||||
# Windows Store app package directory
|
||||
AppPackages/
|
||||
|
||||
# Others
|
||||
sql/
|
||||
*.Cache
|
||||
ClientBin/
|
||||
[Ss]tyle[Cc]op.*
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.[Pp]ublish.xml
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file to a newer
|
||||
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
App_Data/*.mdf
|
||||
App_Data/*.ldf
|
||||
|
||||
#############
|
||||
## Windows detritus
|
||||
#############
|
||||
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
|
||||
# Folder config file
|
||||
Desktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Mac crap
|
||||
.DS_Store
|
||||
|
||||
|
||||
#############
|
||||
## Python
|
||||
#############
|
||||
|
||||
*.py[co]
|
||||
|
||||
# Packages
|
||||
*.egg
|
||||
*.egg-info
|
||||
dist/
|
||||
build/
|
||||
eggs/
|
||||
parts/
|
||||
var/
|
||||
sdist/
|
||||
develop-eggs/
|
||||
.installed.cfg
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
.coverage
|
||||
.tox
|
||||
|
||||
#Translations
|
||||
*.mo
|
||||
|
||||
#Mr Developer
|
||||
.mr.developer.cfg
|
2
.mailmap
Normal file
2
.mailmap
Normal file
@ -0,0 +1,2 @@
|
||||
Wuzzy <Wuzzy@disroot.org> <Wuzzy2@mail.ru>
|
||||
Wuzzy <Wuzzy@disroot.org> <almikes@aol.com>
|
@ -1,6 +1,6 @@
|
||||
# Pyramids (with Treasurer support) [`tsm_pyramids`]
|
||||
|
||||
* Version: 1.0.0
|
||||
* Version: 1.0.4
|
||||
|
||||
## Description
|
||||
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)
|
||||
local sand = "default:sand"
|
||||
local n = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if not treasure_chance then
|
||||
treasure_chance = 100
|
||||
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"
|
||||
end
|
||||
local n = minetest.get_node(pos)
|
||||
local treasure_added = false
|
||||
if n and n.name and n.name == "default:chest" then
|
||||
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)
|
||||
local stacks = {}
|
||||
-- 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)})
|
||||
end
|
||||
-- Add treasures
|
||||
if math.random(1,100) <= treasure_chance 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
|
||||
for i=0,2,1 do
|
||||
local stuff = chest_stuff.normal[math.random(1,#chest_stuff.normal)]
|
||||
|
@ -10,7 +10,7 @@ Mummy=
|
||||
Mummy Spawn Egg=
|
||||
Mummy Spawner=
|
||||
Sandstone with Eye Engraving=
|
||||
Sandstone with Man Engraving=
|
||||
Sandstone with Human Engraving=
|
||||
Sandstone with Sun Engraving=
|
||||
A mummy spawner causes hostile mummies to appear in its vicinity as long it exists.=
|
||||
Can be used to create a hostile mummy.=
|
||||
|
@ -10,7 +10,7 @@ Mummy=Mumie
|
||||
Mummy Spawn Egg=Mumien-Spawn-Ei
|
||||
Mummy Spawner=Mumien-Spawner
|
||||
Sandstone with Eye Engraving=Sandstein mit Augengravur
|
||||
Sandstone with Man Engraving=Sandstein mit Manngravur
|
||||
Sandstone with Human Engraving=Sandstein mit Menschengravur
|
||||
Sandstone with Sun Engraving=Sandstein mit Sonnengravur
|
||||
A mummy spawner causes hostile mummies to appear in its vicinity as long it exists.=Ein Mumien-Spawner lässt feindliche Mumien in seiner näheren Umgebung auftauchen, solange er existiert.
|
||||
Can be used to create a hostile mummy.=Kann benutzt werden, um eine feindliche Mumie zu erzeugen (auch »spawnen« genannt).
|
||||
|
1
mod.conf
1
mod.conf
@ -2,3 +2,4 @@ name = tsm_pyramids
|
||||
description = Pyramids with treasures! You can find them in deserts and sandstone deserts.
|
||||
depends = default
|
||||
optional_depends = farming, tnt, treasurer, doc_items, awards, cmi
|
||||
min_minetest_version = 5.0
|
||||
|
125
mummy.lua
125
mummy.lua
@ -14,6 +14,8 @@ local mummy_texture = {"tsm_pyramids_mummy.png"}
|
||||
local mummy_hp = 20
|
||||
local mummy_drop = "default:papyrus"
|
||||
|
||||
local spawner_entity_offset = -0.28
|
||||
|
||||
local sound_normal = "mummy"
|
||||
local sound_hit = "mummy_hurt"
|
||||
local sound_dead = "mummy_death"
|
||||
@ -49,15 +51,11 @@ local ANIM_WALK_MINE = 5
|
||||
local ANIM_MINE = 6
|
||||
|
||||
local function hit(self)
|
||||
local prop = {
|
||||
mesh = mummy_mesh,
|
||||
textures = {"tsm_pyramids_mummy.png^tsm_pyramids_hit.png"},
|
||||
}
|
||||
self.object:set_properties(prop)
|
||||
self.object:set_texture_mod("^tsm_pyramids_hit.png")
|
||||
minetest.after(0.4, function(self)
|
||||
local prop = {textures = mummy_texture,}
|
||||
if self ~= nil and self.object ~= nil then
|
||||
self.object:set_properties(prop)
|
||||
self.object:set_texture_mod("")
|
||||
end
|
||||
end, self)
|
||||
end
|
||||
@ -65,7 +63,6 @@ end
|
||||
local function mummy_update_visuals_def(self)
|
||||
npc_anim = 0 -- Animation will be set further below immediately
|
||||
local prop = {
|
||||
mesh = mummy_mesh,
|
||||
textures = mummy_texture,
|
||||
}
|
||||
self.object:set_properties(prop)
|
||||
@ -101,6 +98,24 @@ local MUMMY_DEF = {
|
||||
description = S("Mummy"),
|
||||
}
|
||||
|
||||
-- Returns true if a mummy spawner entity was found at pos.
|
||||
-- If self is provided, this object does not count.
|
||||
local function check_if_mummy_spawner_entity_exists(pos, self)
|
||||
local ents = minetest.get_objects_inside_radius(pos, 0.5)
|
||||
for e=1, #ents do
|
||||
if (not self) or (ents[e] ~= ents[e]) then
|
||||
local lua = ents[e]:get_luaentity()
|
||||
if lua then
|
||||
if lua.name == "tsm_pyramids:mummy_spawner" then
|
||||
-- entity found
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local spawner_DEF = {
|
||||
hp_max = 1,
|
||||
physical = false,
|
||||
@ -115,6 +130,13 @@ local spawner_DEF = {
|
||||
}
|
||||
|
||||
spawner_DEF.on_activate = function(self)
|
||||
local pos = self.object:get_pos()
|
||||
local spos = vector.new(pos.x, pos.y + spawner_entity_offset, pos.z)
|
||||
if check_if_mummy_spawner_entity_exists(spos, self) then
|
||||
-- Remove possible duplicate entity
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
mummy_update_visuals_def(self)
|
||||
self.object:set_velocity({x=0, y=0, z=0})
|
||||
self.object:set_acceleration({x=0, y=0, z=0})
|
||||
@ -122,13 +144,18 @@ spawner_DEF.on_activate = function(self)
|
||||
|
||||
end
|
||||
|
||||
-- Regularily check if entity is still inside spawner
|
||||
spawner_DEF.on_step = function(self, dtime)
|
||||
self.timer = self.timer + 0.01
|
||||
local n = minetest.get_node_or_nil(self.object:get_pos())
|
||||
if self.timer > 1 then
|
||||
self.timer = self.timer + dtime
|
||||
local pos = self.object:get_pos()
|
||||
pos.y = pos.y - spawner_entity_offset
|
||||
local n = minetest.get_node_or_nil(pos)
|
||||
if self.timer > 50 then
|
||||
if n and n.name and n.name ~= "tsm_pyramids:spawner_mummy" then
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
self.timer = 0
|
||||
end
|
||||
end
|
||||
|
||||
@ -155,14 +182,14 @@ MUMMY_DEF.on_punch = function(self, puncher, time_from_last_punch, tool_capabili
|
||||
end
|
||||
self.attacker = puncher
|
||||
|
||||
if damage > 0 then
|
||||
if damage and damage > 0 then
|
||||
self.last_damage = {
|
||||
type = "punch",
|
||||
puncher = puncher,
|
||||
}
|
||||
end
|
||||
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
|
||||
hit(self)
|
||||
self.direction = {x=self.object:get_velocity().x, y=self.object:get_velocity().y, z=self.object:get_velocity().z}
|
||||
@ -178,7 +205,7 @@ MUMMY_DEF.on_punch = function(self, puncher, time_from_last_punch, tool_capabili
|
||||
end
|
||||
|
||||
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
|
||||
local count = math.random(0,3)
|
||||
if count > 0 then
|
||||
@ -232,22 +259,24 @@ MUMMY_DEF.on_step = function(self, dtime)
|
||||
self.envdmg_timer = self.envdmg_timer + dtime
|
||||
if dmg > 0 then
|
||||
if self.envdmg_timer >= 1 then
|
||||
local new_hp = self.object:get_hp() - dmg
|
||||
if new_hp <= 0 then
|
||||
if self.on_death then
|
||||
self.on_death(self)
|
||||
end
|
||||
self.object:remove()
|
||||
return
|
||||
else
|
||||
self.envdmg_timer = 0
|
||||
self.object:set_hp(self.object:get_hp()-dmg)
|
||||
self.object:set_hp(new_hp)
|
||||
self.last_damage = {
|
||||
type = "environment",
|
||||
pos = current_pos,
|
||||
node = current_node,
|
||||
}
|
||||
if self.object:get_hp() <= 0 then
|
||||
if self.on_death then
|
||||
self.on_death(self)
|
||||
end
|
||||
self.object:remove()
|
||||
else
|
||||
hit(self)
|
||||
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
|
||||
else
|
||||
@ -266,7 +295,7 @@ MUMMY_DEF.on_step = function(self, dtime)
|
||||
|
||||
--play sound
|
||||
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
|
||||
end
|
||||
|
||||
@ -287,7 +316,9 @@ MUMMY_DEF.on_step = function(self, dtime)
|
||||
if self.state == 1 then
|
||||
self.yawwer = true
|
||||
self.attacker = ""
|
||||
for _,object in ipairs(minetest.get_objects_inside_radius(self.object:get_pos(), 4)) do
|
||||
local pos_obj = self.object:get_pos()
|
||||
if pos_obj then
|
||||
for _,object in ipairs(minetest.get_objects_inside_radius(pos_obj, 4)) do
|
||||
if object:is_player() then
|
||||
self.yawwer = false
|
||||
local NPC = self.object:get_pos()
|
||||
@ -302,6 +333,7 @@ MUMMY_DEF.on_step = function(self, dtime)
|
||||
self.attacker = object
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if self.attacker == "" and self.turn_timer > math.random(1,4) then
|
||||
self.yaw = 360 * math.random()
|
||||
@ -309,7 +341,8 @@ MUMMY_DEF.on_step = function(self, dtime)
|
||||
self.turn_timer = 0
|
||||
self.direction = {x = math.sin(self.yaw)*-1, y = -20, z = math.cos(self.yaw)}
|
||||
end
|
||||
self.object:set_velocity({x=0,y=self.object:get_velocity().y,z=0})
|
||||
local old_vel = self.object:get_velocity()
|
||||
self.object:set_velocity({x=0,y=old_vel and old_vel.y or 0,z=0})
|
||||
if self.npc_anim ~= ANIM_STAND then
|
||||
self.anim = get_animations()
|
||||
self.object:set_animation({x=self.anim.stand_START,y=self.anim.stand_END}, mummy_animation_speed, mummy_animation_blend)
|
||||
@ -324,7 +357,12 @@ MUMMY_DEF.on_step = function(self, dtime)
|
||||
if self.state == 2 then
|
||||
|
||||
if self.direction ~= nil then
|
||||
self.object:set_velocity({x=self.direction.x*mummy_chillaxin_speed,y=self.object:get_velocity().y,z=self.direction.z*mummy_chillaxin_speed})
|
||||
local old_vel = self.object:get_velocity()
|
||||
self.object:set_velocity({
|
||||
x=self.direction.x*mummy_chillaxin_speed,
|
||||
y=old_vel and old_vel.y or 0,
|
||||
z=self.direction.z*mummy_chillaxin_speed,
|
||||
})
|
||||
end
|
||||
if self.turn_timer > math.random(1,4) and not self.attacker then
|
||||
self.yaw = 360 * math.random()
|
||||
@ -409,6 +447,20 @@ else
|
||||
spawnersounds = default.node_sound_stone_defaults()
|
||||
end
|
||||
|
||||
local spawn_mummy_spawner_entity = function(pos)
|
||||
local spos = vector.new(pos.x, pos.y+spawner_entity_offset, pos.z)
|
||||
minetest.add_entity(spos, "tsm_pyramids:mummy_spawner")
|
||||
end
|
||||
|
||||
-- Respawn mummy spawner entity at pos if none exists
|
||||
local respawn_mummy_spawner_entity = function(pos)
|
||||
local spos = vector.new(pos.x, pos.y + spawner_entity_offset, pos.z)
|
||||
if check_if_mummy_spawner_entity_exists(spos) then
|
||||
return
|
||||
end
|
||||
spawn_mummy_spawner_entity(pos)
|
||||
end
|
||||
|
||||
minetest.register_node("tsm_pyramids:spawner_mummy", {
|
||||
description = S("Mummy Spawner"),
|
||||
_doc_items_longdesc = S("A mummy spawner causes hostile mummies to appear in its vicinity as long it exists."),
|
||||
@ -419,13 +471,15 @@ minetest.register_node("tsm_pyramids:spawner_mummy", {
|
||||
groups = {cracky=1,level=1},
|
||||
drop = "",
|
||||
on_construct = function(pos)
|
||||
pos.y = pos.y - 0.28
|
||||
minetest.add_entity(pos,"tsm_pyramids:mummy_spawner")
|
||||
spawn_mummy_spawner_entity(pos)
|
||||
end,
|
||||
on_punch = function(pos)
|
||||
respawn_mummy_spawner_entity(pos)
|
||||
end,
|
||||
on_destruct = function(pos)
|
||||
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
|
||||
if not obj:is_player() then
|
||||
if obj ~= nil and obj:get_luaentity().name == "tsm_pyramids:mummy_spawner" then
|
||||
for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do
|
||||
if obj ~= nil and not obj:is_player() then
|
||||
if obj:get_luaentity().name == "tsm_pyramids:mummy_spawner" then
|
||||
obj:remove()
|
||||
end
|
||||
end
|
||||
@ -434,6 +488,17 @@ minetest.register_node("tsm_pyramids:spawner_mummy", {
|
||||
sounds = spawnersounds,
|
||||
})
|
||||
|
||||
-- Neccessary in case the spawner entity got lost due to /clearobjects
|
||||
minetest.register_lbm({
|
||||
label = "Respawn mummy spawner entity",
|
||||
name = "tsm_pyramids:respawn_mummy_spawner_entity",
|
||||
nodenames = { "tsm_pyramids:spawner_mummy" },
|
||||
run_at_every_load = true,
|
||||
action = function(pos, node)
|
||||
respawn_mummy_spawner_entity(pos)
|
||||
end,
|
||||
})
|
||||
|
||||
-- Attempt to spawn a mummy at a random appropriate position around pos.
|
||||
-- Criteria:
|
||||
-- * Must be close to pos
|
||||
|
29
nodes.lua
29
nodes.lua
@ -5,7 +5,7 @@ local img = {
|
||||
"ankh", "scarab", "cactus"
|
||||
}
|
||||
local desc = {
|
||||
S("Sandstone with Eye Engraving"), S("Sandstone with Man Engraving"), S("Sandstone with Sun Engraving"),
|
||||
S("Sandstone with Eye Engraving"), S("Sandstone with Human Engraving"), S("Sandstone with Sun Engraving"),
|
||||
S("Desert Sandstone with Ankh Engraving"), S("Desert Sandstone with Scarab Engraving"), S("Desert Sandstone with Cactus Engraving")
|
||||
}
|
||||
|
||||
@ -97,3 +97,30 @@ register_trap_stone("desert_trap",
|
||||
"default_desert_sandstone_brick.png",
|
||||
{ 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
|
||||
tries = tries + 1
|
||||
end
|
||||
local sanded = room.flood_sand ~= false and stype ~= "desert_stone" and math.random(1,8) == 1
|
||||
local chests = {}
|
||||
local column_style
|
||||
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)
|
||||
minetest.set_node(cpos, {name=nn, param2=p2})
|
||||
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)
|
||||
end
|
||||
end
|
||||
@ -1045,6 +1053,13 @@ function tsm_pyramids.make_room(pos, stype, room_id, rotations)
|
||||
local nn = code_table[n_str]
|
||||
minetest.set_node(cpos, {name=nn, param2=p2})
|
||||
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)
|
||||
end
|
||||
end
|
||||
@ -1053,7 +1068,6 @@ function tsm_pyramids.make_room(pos, stype, room_id, rotations)
|
||||
else
|
||||
minetest.log("error", "Invalid pyramid room style! room type ID="..r)
|
||||
end
|
||||
local sanded = room.flood_sand ~= false and stype ~= "desert_stone" and math.random(1,8) == 1
|
||||
if #chests > 0 then
|
||||
-- Make at least 8 attempts to fill chests
|
||||
local filled = 0
|
||||
|
Reference in New Issue
Block a user