diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 412eeda..0000000 --- a/.gitattributes +++ /dev/null @@ -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 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b9d6bd9..0000000 --- a/.gitignore +++ /dev/null @@ -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 diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000..3d78b58 --- /dev/null +++ b/.mailmap @@ -0,0 +1,2 @@ +Wuzzy +Wuzzy diff --git a/README.md b/README.md index 8809d7b..0ec5da8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Pyramids (with Treasurer support) [`tsm_pyramids`] -* Version: 1.0.3 +* Version: 1.0.4 ## Description This is a mod for Minetest Game which adds randomly spawned pyramids in deserts and diff --git a/locale/template.txt b/locale/template.txt index a9efc96..cdc521d 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -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.= diff --git a/locale/tsm_pyramids.de.tr b/locale/tsm_pyramids.de.tr index 9e6b620..04a2123 100644 --- a/locale/tsm_pyramids.de.tr +++ b/locale/tsm_pyramids.de.tr @@ -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). diff --git a/mod.conf b/mod.conf index 3d0f1db..adea35c 100644 --- a/mod.conf +++ b/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 diff --git a/mummy.lua b/mummy.lua index 42ebf6c..8606265 100644 --- a/mummy.lua +++ b/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" @@ -96,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, @@ -110,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}) @@ -117,14 +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 @@ -228,20 +259,21 @@ MUMMY_DEF.on_step = function(self, dtime) self.envdmg_timer = self.envdmg_timer + dtime if dmg > 0 then if self.envdmg_timer >= 1 then - self.envdmg_timer = 0 - self.object:set_hp(self.object:get_hp()-dmg) - self.last_damage = { - type = "environment", - pos = current_pos, - node = current_node, - } - if self.object:get_hp() <= 0 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(new_hp) + self.last_damage = { + type = "environment", + pos = current_pos, + node = current_node, + } hit(self) self.sound_timer = 0 minetest.sound_play(sound_hit, {pos = current_pos, max_hear_distance = 10, gain = 0.4}, true) @@ -415,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."), @@ -425,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 @@ -440,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 diff --git a/nodes.lua b/nodes.lua index 4ea9a39..8e8f8e9 100644 --- a/nodes.lua +++ b/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") }