From d80814c0b72405f2fb8a86d082bae908bb19698d Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 1 Feb 2021 10:53:42 +0000 Subject: [PATCH] Tweaked and tidied code, fixed few bugs. --- CHANGELOG.md | 4 +- arrows/dragonarrows.lua | 57 +++++++-------- arrows/dragonfire.lua | 146 +++++++++++++++++++++++--------------- arrows/fire.lua | 46 ++++++------ arrows/fire_explosive.lua | 47 ++++++------ arrows/sting.lua | 39 +++++----- dragons/dragon1.lua | 109 ++++++++++++++-------------- dragons/dragon2.lua | 108 ++++++++++++++-------------- dragons/dragon3.lua | 106 ++++++++++++++------------- dragons/dragon4.lua | 105 ++++++++++++++------------- dragons/dragon_normal.lua | 104 +++++++++++++-------------- dragons/eggs.lua | 75 +++++++++++++------- dragons/great_dragon.lua | 17 ++--- dragons/main.lua | 13 ++-- dragons/piloting.lua | 29 ++++++-- dragons/water_dragon.lua | 43 ++++++----- dragons/wyvern.lua | 98 ++++++++++++------------- init.lua | 137 +++++++++++++++-------------------- mobs/badger.lua | 1 - mobs/butterfly.lua | 27 ++++--- mobs/elephant.lua | 4 +- mobs/fox.lua | 6 +- mobs/gnorm.lua | 5 +- mobs/golem.lua | 1 - mobs/golem_friendly.lua | 2 +- mobs/hedgehog.lua | 1 - mobs/nyan.lua | 50 +++++++------ mobs/ogre.lua | 3 +- mobs/orc.lua | 7 +- mobs/owl.lua | 30 ++++---- mobs/panda.lua | 8 +-- mobs/pig.lua | 27 +++---- mobs/pig_evil.lua | 17 ++--- mobs/rat.lua | 6 +- mobs/skeleton.lua | 1 - mobs/tortoise.lua | 2 +- mobs/wasps.lua | 18 +++-- mobs/whale.lua | 10 +-- nodes.lua | 23 +++--- saddle.lua | 43 ----------- 40 files changed, 817 insertions(+), 758 deletions(-) delete mode 100644 saddle.lua diff --git a/CHANGELOG.md b/CHANGELOG.md index 61bd150..c3fa022 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +* 2021-02-01 : TenPlus1 + * Updated and tidied code to work with Minetest 5.x and latest Mobs Redo API + * Fixed a few nil error bugs * 2019-07-31 : Grossam * spawn.lua rewritten using mobs:spawn() * spawn rules modified for more consistency (e.g. hedgehogs now spawn at night) @@ -13,4 +16,3 @@ * great dragons now need a diamond block nest (you've to deserve greatness !) * 2019-07-27 : Grossam * Forked on https://git.fwhost.eu/Grossam/dmobs - diff --git a/arrows/dragonarrows.lua b/arrows/dragonarrows.lua index ffecbbd..827f2cf 100644 --- a/arrows/dragonarrows.lua +++ b/arrows/dragonarrows.lua @@ -1,34 +1,35 @@ -local name = {} - local base_arrow = { - visual = "sprite", - visual_size = {x = 0.5, y = 0.5}, - velocity = 8, - textures = {}, - tail = 1, -- enable tail - tail_texture = "dmobs_ice.png", + visual = "sprite", + visual_size = {x = 0.5, y = 0.5}, + velocity = 8, + textures = {}, + tail = 1, -- enable tail + tail_texture = "dmobs_ice.png", - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 8}, - }, nil) - end, - - hit_mob = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 8}, - }, nil) - end, + hit_player = function(self, player) - hit_node = function(self, pos, node) - self.object:remove() - end, + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 8}, + }, nil) + end, + + hit_mob = function(self, player) + + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 8}, + }, nil) + end, + + hit_node = function(self, pos, node) + self.object:remove() + end, } -for _,arrowtype in pairs( {"ice","lightning","poison"} ) do - base_arrow.textures = {"dmobs_"..arrowtype..".png"} - name = "dmobs:"..arrowtype - mobs:register_arrow(name, dmobs.deepclone(base_arrow) ) +for _,arrowtype in pairs({"ice","lightning","poison"}) do + + base_arrow.textures = {"dmobs_" .. arrowtype .. ".png"} + + mobs:register_arrow("dmobs:" .. arrowtype, dmobs.deepclone(base_arrow)) end diff --git a/arrows/dragonfire.lua b/arrows/dragonfire.lua index 22438b0..b3b41d4 100644 --- a/arrows/dragonfire.lua +++ b/arrows/dragonfire.lua @@ -1,70 +1,104 @@ --function to register tamed dragon attacks -function dmobs.register_fire(fname, texture, dmg, replace_node, explode, ice, variance, size) -minetest.register_entity(fname, { - textures = {texture}, - velocity = 0.1, - damage = dmg, - collisionbox = {0, 0, 0, 0, 0, 0}, - on_step = function(self, obj, pos) - local remove = minetest.after(2, function() - self.object:remove() - end) - local pos = self.object:get_pos() - local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then - if obj:get_luaentity().name ~= fname and obj:get_luaentity().name ~= "dmobs:dragon_red" and obj:get_luaentity().name ~= "dmobs:dragon_blue" and obj:get_luaentity().name ~= "dmobs:dragon_black" and obj:get_luaentity().name ~= "dmobs:dragon_green" and obj:get_luaentity().name ~= "dmobs:dragon_great_tame" and obj:get_luaentity().name ~= "__builtin:item" then - obj:punch(self.launcher, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=3}, - }, nil) - self.object:remove() +function dmobs.register_fire(fname, texture, dmg, replace_node, explode, + ice, variance, size) + + minetest.register_entity(fname, { + textures = {texture}, + velocity = 0.1, + damage = dmg, + collisionbox = {0, 0, 0, 0, 0, 0}, + on_step = function(self, obj, pos) + + local remove = minetest.after(2, function() + self.object:remove() + end) + + local pos = self.object:get_pos() + local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + + for k, obj in pairs(objs) do + + if obj:get_luaentity() ~= nil then + + if obj:get_luaentity().name ~= fname + and obj:get_luaentity().name ~= "dmobs:dragon_red" + and obj:get_luaentity().name ~= "dmobs:dragon_blue" + and obj:get_luaentity().name ~= "dmobs:dragon_black" + and obj:get_luaentity().name ~= "dmobs:dragon_green" + and obj:get_luaentity().name ~= "dmobs:dragon_great_tame" + and obj:get_luaentity().name ~= "__builtin:item" then + + obj:punch(self.launcher, 1.0, { + full_punch_interval = 1.0, + damage_groups={fleshy = 3}, + }, nil) + + self.object:remove() + end end end - end - for dx=0,1 do - for dy=0,1 do - for dz=0,1 do - local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz} - local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} - local n = minetest.get_node(p).name - if n ~= fname and n ~="default:dirt_with_grass" and n ~="default:dirt_with_dry_grass" and n ~="default:stone" then - if minetest.registered_nodes[n].groups.flammable --[[or math.random(1, 100) <= 1]] then - minetest.set_node(t, {name=replace_node}) + + for dx = 0, 1 do + for dy = 0, 1 do + for dz = 0, 1 do + + local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz} + local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local n = minetest.get_node(p).name + + if n ~= fname and n ~="default:dirt_with_grass" + and n ~="default:dirt_with_dry_grass" + and n ~="default:stone" then + + if minetest.registered_nodes[n].groups.flammable then + + minetest.set_node(t, {name=replace_node}) self.object:remove() return - end - if ice and n == "default:water_source" then + end + + if ice and n == "default:water_source" then minetest.set_node(t, {name="default:ice"}) self.object:remove() - end end end end end - local apos = self.object:get_pos() ; if not apos then return end - minetest.add_particlespawner({ - amount = 6, - time = 0.3, - minpos = {x=apos.x-variance, y=apos.y-variance, z=apos.z-variance}, - maxpos = {x=apos.x+variance, y=apos.y+variance, z=apos.z+variance}, - minvel = {x=-0, y=-0, z=-0}, - maxvel = {x=0, y=0, z=0}, - minacc = {x=variance,y=-0.5-variance,z=variance}, - maxacc = {x=0.5+variance,y=0.5+variance,z=0.5+variance}, - minexptime = 0.1, - maxexptime = 0.3, - minsize = size, - maxsize = size+2, - collisiondetection = false, - texture = texture - }) - end, -}) + end + + local apos = self.object:get_pos() + + if not apos then return end + + minetest.add_particlespawner({ + amount = 6, + time = 0.3, + minpos = {x=apos.x-variance, y=apos.y-variance, z=apos.z-variance}, + maxpos = {x=apos.x+variance, y=apos.y+variance, z=apos.z+variance}, + minvel = {x=-0, y=-0, z=-0}, + maxvel = {x=0, y=0, z=0}, + minacc = {x=variance,y=-0.5-variance,z=variance}, + maxacc = {x=0.5+variance,y=0.5+variance,z=0.5+variance}, + minexptime = 0.1, + maxexptime = 0.3, + minsize = size, + maxsize = size+2, + collisiondetection = false, + texture = texture + }) + end + }) end -dmobs.register_fire("dmobs:fire_plyr", "dmobs_fire.png", 2, "fire:basic_flame", true, false, 0.3, 1) -dmobs.register_fire("dmobs:ice_plyr", "dmobs_ice.png", 2, "default:ice", false, true, 0.5, 10) -dmobs.register_fire("dmobs:poison_plyr", "dmobs_poison.png", 2, "air", false, false, 0.3, 1) -dmobs.register_fire("dmobs:lightning_plyr", "dmobs_lightning.png", 2, "air", true, false, 0, 0.5) +dmobs.register_fire("dmobs:fire_plyr", "dmobs_fire.png", 2, + "fire:basic_flame", true, false, 0.3, 1) + +dmobs.register_fire("dmobs:ice_plyr", "dmobs_ice.png", 2, + "default:ice", false, true, 0.5, 10) + +dmobs.register_fire("dmobs:poison_plyr", "dmobs_poison.png", 2, + "air", false, false, 0.3, 1) + +dmobs.register_fire("dmobs:lightning_plyr", "dmobs_lightning.png", 2, + "air", true, false, 0, 0.5) diff --git a/arrows/fire.lua b/arrows/fire.lua index 47a51cb..00c7b2e 100644 --- a/arrows/fire.lua +++ b/arrows/fire.lua @@ -1,27 +1,29 @@ --Thanks to Tenplus1 mobs:register_arrow("dmobs:fire", { - visual = "sprite", - visual_size = {x = 0.5, y = 0.5}, - textures = {"dmobs_fire.png"}, - velocity = 8, - tail = 1, -- enable tail - tail_texture = "fire_basic_flame.png", + visual = "sprite", + visual_size = {x = 0.5, y = 0.5}, + textures = {"dmobs_fire.png"}, + velocity = 8, + tail = 1, -- enable tail + tail_texture = "fire_basic_flame.png", - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 8}, - }, nil) - end, - - hit_mob = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 8}, - }, nil) - end, + hit_player = function(self, player) - hit_node = function(self, pos, node) - self.object:remove() - end, + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 8}, + }, nil) + end, + + hit_mob = function(self, player) + + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 8}, + }, nil) + end, + + hit_node = function(self, pos, node) + self.object:remove() + end, }) diff --git a/arrows/fire_explosive.lua b/arrows/fire_explosive.lua index dde110d..ab4cb03 100644 --- a/arrows/fire_explosive.lua +++ b/arrows/fire_explosive.lua @@ -1,27 +1,28 @@ - mobs:register_arrow("dmobs:fire", { - visual = "sprite", - visual_size = {x = 0.5, y = 0.5}, - textures = {"dmobs_fire.png"}, - velocity = 8, - tail = 1, -- enable tail - tail_texture = "fire_basic_flame.png", + visual = "sprite", + visual_size = {x = 0.5, y = 0.5}, + textures = {"dmobs_fire.png"}, + velocity = 8, + tail = 1, -- enable tail + tail_texture = "fire_basic_flame.png", - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 8}, - }, nil) - end, - - hit_mob = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 8}, - }, nil) - end, + hit_player = function(self, player) - hit_node = function(self, pos, node) - mobs:explosion(pos, 2, 1, 1) - end, + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 8}, + }, nil) + end, + + hit_mob = function(self, player) + + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 8}, + }, nil) + end, + + hit_node = function(self, pos, node) + mobs:explosion(pos, 2, 1, 1) + end, }) diff --git a/arrows/sting.lua b/arrows/sting.lua index ba6cf80..d87a9a3 100644 --- a/arrows/sting.lua +++ b/arrows/sting.lua @@ -1,22 +1,23 @@ mobs:register_arrow("dmobs:sting", { - visual = "sprite", - visual_size = {x = 0.5, y = 0.5}, - textures = {"dmobs_sting.png"}, - velocity = 8, - tail = 0, -- enable tail - tail_texture = "fire_basic_flame.png", + visual = "sprite", + visual_size = {x = 0.5, y = 0.5}, + textures = {"dmobs_sting.png"}, + velocity = 8, + tail = 0, -- enable tail + tail_texture = "fire_basic_flame.png", - hit_player = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 1}, - }, nil) - end, - - hit_mob = function(self, player) - end, + hit_player = function(self, player) - hit_node = function(self, pos, node) - self.object:remove() - end, - }) + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 1}, + }, nil) + end, + + hit_mob = function(self, player) + end, + + hit_node = function(self, pos, node) + self.object:remove() + end, +}) diff --git a/dragons/dragon1.lua b/dragons/dragon1.lua index b0e32bf..be71978 100644 --- a/dragons/dragon1.lua +++ b/dragons/dragon1.lua @@ -1,30 +1,30 @@ -- Fire dragon local dragondef = { - type = "monster", - passive = false, - attacks_monsters = true, - damage = 4, - reach = 3, - attack_type = "dogshoot", - shoot_interval = 2.5, + type = "monster", + passive = false, + attacks_monsters = true, + damage = 4, + reach = 3, + attack_type = "dogshoot", + shoot_interval = 2.5, dogshoot_switch = 2, dogshoot_count = 0, - dogshoot_count_max =5, - arrow = "dmobs:fire", - shoot_offset = 1, - hp_min = 70, - hp_max = 100, - armor = 100, + dogshoot_count_max = 5, + arrow = "dmobs:fire", + shoot_offset = 1, + hp_min = 70, + hp_max = 100, + armor = 100, collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6}, - visual = "mesh", - mesh = "dragon.b3d", - textures = { - {"dmobs_dragon.png"}, - }, - blood_texture = "mobs_blood.png", - visual_size = {x=2, y=2}, - makes_footstep_sound = true, + visual = "mesh", + mesh = "dragon.b3d", + textures = { + {"dmobs_dragon.png"}, + }, + blood_texture = "mobs_blood.png", + visual_size = {x = 2, y = 2}, + makes_footstep_sound = true, runaway = false, jump_chance = 30, walk_chance = 80, @@ -32,36 +32,39 @@ local dragondef = { follow = {"dmobs:dragon_gem"}, pathfinding = true, fall_damage = 0, - sounds = { - shoot_attack = "mobs_fireball", - }, - walk_velocity = 3, - run_velocity = 5, - jump = true, - fly = true, - fly_in = {"air","default:water_source", "default:water_flowing", "default:lava_source", "default:lava_flowing"}, - drops = { - {name = "dmobs:egg", chance = 1, min = 1, max = 1}, - {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1}, - }, - fall_speed = 0, - stepheight = 10, - water_damage = 3, - lava_damage = 1, - light_damage = 0, - view_range = 20, - animation = { - speed_normal = 10, - speed_run = 20, - walk_start = 1, - walk_end = 22, - stand_start = 1, - stand_end = 22, - run_start = 1, - run_end = 22, - punch_start = 22, - punch_end = 47, - }, + sounds = { + shoot_attack = "mobs_fireball", + }, + walk_velocity = 3, + run_velocity = 5, + jump = true, + fly = true, + fly_in = { + "air", "default:water_source", "default:water_flowing", + "default:lava_source", "default:lava_flowing" + }, + drops = { + {name = "dmobs:egg", chance = 1, min = 1, max = 1}, + {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1}, + }, + fall_speed = 0, + stepheight = 10, + water_damage = 3, + lava_damage = 1, + light_damage = 0, + view_range = 20, + animation = { + speed_normal = 10, + speed_run = 20, + walk_start = 1, + walk_end = 22, + stand_start = 1, + stand_end = 22, + run_start = 1, + run_end = 22, + punch_start = 22, + punch_end = 47, + }, knock_back = 2, do_custom = dmobs.dragon.step_custom, on_rightclick = dmobs.dragon.on_rc @@ -69,7 +72,7 @@ local dragondef = { -- The wild dragon is registered -mobs:register_mob("dmobs:dragon1", dmobs.deepclone(dragondef) ) +mobs:register_mob("dmobs:dragon1", dmobs.deepclone(dragondef)) -- The def is modified to make it tamed and rideable dragondef.type = "npc" @@ -78,4 +81,4 @@ dragondef.on_rightclick = dmobs.dragon.ride dragondef.do_custom = dmobs.dragon.do_custom -- The tamed version is registered -mobs:register_mob("dmobs:dragon_red", dmobs.deepclone(dragondef) ) +mobs:register_mob("dmobs:dragon_red", dmobs.deepclone(dragondef)) diff --git a/dragons/dragon2.lua b/dragons/dragon2.lua index 7931769..c28f68e 100644 --- a/dragons/dragon2.lua +++ b/dragons/dragon2.lua @@ -1,30 +1,30 @@ -- Lightning dragon local dragondef = { - type = "monster", - passive = false, - attacks_monsters = true, - damage = 4, - reach = 3, - attack_type = "dogshoot", - shoot_interval = 2.5, + type = "monster", + passive = false, + attacks_monsters = true, + damage = 4, + reach = 3, + attack_type = "dogshoot", + shoot_interval = 2.5, dogshoot_switch = 2, dogshoot_count = 0, - dogshoot_count_max =5, - arrow = "dmobs:lightning", - shoot_offset = 1, - hp_min = 70, - hp_max = 100, - armor = 100, + dogshoot_count_max = 5, + arrow = "dmobs:lightning", + shoot_offset = 1, + hp_min = 70, + hp_max = 100, + armor = 100, collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6}, - visual = "mesh", - mesh = "dragon.b3d", - textures = { - {"dmobs_dragon2.png"}, - }, - blood_texture = "mobs_blood.png", - visual_size = {x=2, y=2}, - makes_footstep_sound = true, + visual = "mesh", + mesh = "dragon.b3d", + textures = { + {"dmobs_dragon2.png"}, + }, + blood_texture = "mobs_blood.png", + visual_size = {x = 2, y = 2}, + makes_footstep_sound = true, runaway = false, jump_chance = 30, walk_chance = 80, @@ -32,49 +32,47 @@ local dragondef = { follow = {"dmobs:dragon_gem"}, pathfinding = true, fall_damage = 0, - sounds = { - shoot_attack = "dmobs_thunder", - }, - walk_velocity = 3, - run_velocity = 5, - jump = true, - fly = true, - fly_in = {"air","default:water_source","default:water_flowing"}, - drops = { - {name = "dmobs:egg", chance = 1, min = 1, max = 1}, - {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1}, - }, - fall_speed = 0, - stepheight = 10, - water_damage = 2, - lava_damage = 0, - light_damage = 0, - view_range = 20, - animation = { - speed_normal = 10, - speed_run = 20, - walk_start = 1, - walk_end = 22, - stand_start = 1, - stand_end = 22, - run_start = 1, - run_end = 22, - punch_start = 22, - punch_end = 47, - }, + sounds = { + shoot_attack = "dmobs_thunder", + }, + walk_velocity = 3, + run_velocity = 5, + jump = true, + fly = true, + fly_in = {"air","default:water_source","default:water_flowing"}, + drops = { + {name = "dmobs:egg", chance = 1, min = 1, max = 1}, + {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1}, + }, + fall_speed = 0, + stepheight = 10, + water_damage = 2, + lava_damage = 0, + light_damage = 0, + view_range = 20, + animation = { + speed_normal = 10, + speed_run = 20, + walk_start = 1, + walk_end = 22, + stand_start = 1, + stand_end = 22, + run_start = 1, + run_end = 22, + punch_start = 22, + punch_end = 47, + }, knock_back = 2, do_custom = dmobs.dragon.step_custom, on_rightclick = dmobs.dragon.on_rc } -mobs:register_mob("dmobs:dragon2", dmobs.deepclone(dragondef) ) +mobs:register_mob("dmobs:dragon2", dmobs.deepclone(dragondef)) dragondef.type = "npc" dragondef.attacks_monsters = true - dragondef.on_rightclick = dmobs.dragon.ride - dragondef.do_custom = dmobs.dragon.do_custom -mobs:register_mob("dmobs:dragon_black", dmobs.deepclone(dragondef) ) +mobs:register_mob("dmobs:dragon_black", dmobs.deepclone(dragondef)) diff --git a/dragons/dragon3.lua b/dragons/dragon3.lua index 30b98e9..d742bdd 100644 --- a/dragons/dragon3.lua +++ b/dragons/dragon3.lua @@ -1,30 +1,30 @@ -- Poison dragon local dragondef = { - type = "monster", - passive = false, - attacks_monsters = true, - damage = 4, - reach = 3, - attack_type = "dogshoot", - shoot_interval = 2.5, + type = "monster", + passive = false, + attacks_monsters = true, + damage = 4, + reach = 3, + attack_type = "dogshoot", + shoot_interval = 2.5, dogshoot_switch = 2, dogshoot_count = 0, dogshoot_count_max =5, - arrow = "dmobs:poison", - shoot_offset = 1, - hp_min = 70, - hp_max = 100, - armor = 100, + arrow = "dmobs:poison", + shoot_offset = 1, + hp_min = 70, + hp_max = 100, + armor = 100, collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6}, - visual = "mesh", - mesh = "dragon.b3d", - textures = { - {"dmobs_dragon3.png"}, - }, - blood_texture = "mobs_blood.png", - visual_size = {x=2, y=2}, - makes_footstep_sound = true, + visual = "mesh", + mesh = "dragon.b3d", + textures = { + {"dmobs_dragon3.png"}, + }, + blood_texture = "mobs_blood.png", + visual_size = {x = 2, y = 2}, + makes_footstep_sound = true, runaway = false, jump_chance = 30, walk_chance = 80, @@ -32,49 +32,47 @@ local dragondef = { follow = {"dmobs:dragon_gem"}, pathfinding = true, fall_damage = 0, - sounds = { - shoot_attack = "dmobs_poison", - }, - walk_velocity = 3, - run_velocity = 5, - jump = true, - fly = true, - fly_in = {"air","default:water_source","default:water_flowing"}, - drops = { - {name = "dmobs:egg", chance = 1, min = 1, max = 1}, - {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1}, - }, - fall_speed = 0, - stepheight = 10, - water_damage = 2, - lava_damage = 0, - light_damage = 0, - view_range = 20, - animation = { - speed_normal = 10, - speed_run = 20, - walk_start = 1, - walk_end = 22, - stand_start = 1, - stand_end = 22, - run_start = 1, - run_end = 22, - punch_start = 22, - punch_end = 47, - }, + sounds = { + shoot_attack = "dmobs_poison", + }, + walk_velocity = 3, + run_velocity = 5, + jump = true, + fly = true, + fly_in = {"air","default:water_source","default:water_flowing"}, + drops = { + {name = "dmobs:egg", chance = 1, min = 1, max = 1}, + {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1}, + }, + fall_speed = 0, + stepheight = 10, + water_damage = 2, + lava_damage = 0, + light_damage = 0, + view_range = 20, + animation = { + speed_normal = 10, + speed_run = 20, + walk_start = 1, + walk_end = 22, + stand_start = 1, + stand_end = 22, + run_start = 1, + run_end = 22, + punch_start = 22, + punch_end = 47, + }, knock_back = 2, do_custom = dmobs.dragon.step_custom, on_rightclick = dmobs.dragon.on_rc } -mobs:register_mob("dmobs:dragon3", dmobs.deepclone(dragondef) ) +mobs:register_mob("dmobs:dragon3", dmobs.deepclone(dragondef)) dragondef.type = "npc" dragondef.attacks_monsters = true - dragondef.on_rightclick = dmobs.dragon.ride - dragondef.do_custom = dmobs.dragon.do_custom -mobs:register_mob("dmobs:dragon_green", dmobs.deepclone(dragondef) ) +mobs:register_mob("dmobs:dragon_green", dmobs.deepclone(dragondef)) diff --git a/dragons/dragon4.lua b/dragons/dragon4.lua index 22ba68e..79d2f9b 100644 --- a/dragons/dragon4.lua +++ b/dragons/dragon4.lua @@ -1,30 +1,30 @@ -- Ice dragon local dragondef = { - type = "monster", - passive = false, - attacks_monsters = true, - damage = 4, - reach = 3, - attack_type = "dogshoot", - shoot_interval = 2.5, + type = "monster", + passive = false, + attacks_monsters = true, + damage = 4, + reach = 3, + attack_type = "dogshoot", + shoot_interval = 2.5, dogshoot_switch = 2, dogshoot_count = 0, dogshoot_count_max =5, - arrow = "dmobs:ice", - shoot_offset = 1, - hp_min = 70, - hp_max = 100, - armor = 100, + arrow = "dmobs:ice", + shoot_offset = 1, + hp_min = 70, + hp_max = 100, + armor = 100, collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6}, - visual = "mesh", - mesh = "dragon.b3d", - textures = { - {"dmobs_dragon4.png"}, - }, - blood_texture = "mobs_blood.png", - visual_size = {x=2, y=2}, - makes_footstep_sound = true, + visual = "mesh", + mesh = "dragon.b3d", + textures = { + {"dmobs_dragon4.png"}, + }, + blood_texture = "mobs_blood.png", + visual_size = {x = 2, y = 2}, + makes_footstep_sound = true, runaway = false, jump_chance = 30, walk_chance = 80, @@ -32,47 +32,46 @@ local dragondef = { follow = {"dmobs:dragon_gem"}, pathfinding = true, fall_damage = 0, - sounds = { - shoot_attack = "dmobs_wind.ogg", - }, - walk_velocity = 3, - run_velocity = 5, - jump = true, - fly = true, - fly_in = {"air","default:water_source","default:water_flowing"}, - drops = { - {name = "dmobs:egg", chance = 1, min = 1, max = 1}, - {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1}, - }, - fall_speed = 0, - stepheight = 10, - water_damage = 1, - lava_damage = 2, - light_damage = 0, - view_range = 20, - animation = { - speed_normal = 10, - speed_run = 20, - walk_start = 1, - walk_end = 22, - stand_start = 1, - stand_end = 22, - run_start = 1, - run_end = 22, - punch_start = 22, - punch_end = 47, - }, + sounds = { + shoot_attack = "dmobs_wind.ogg", + }, + walk_velocity = 3, + run_velocity = 5, + jump = true, + fly = true, + fly_in = {"air","default:water_source","default:water_flowing"}, + drops = { + {name = "dmobs:egg", chance = 1, min = 1, max = 1}, + {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1}, + }, + fall_speed = 0, + stepheight = 10, + water_damage = 1, + lava_damage = 2, + light_damage = 0, + view_range = 20, + animation = { + speed_normal = 10, + speed_run = 20, + walk_start = 1, + walk_end = 22, + stand_start = 1, + stand_end = 22, + run_start = 1, + run_end = 22, + punch_start = 22, + punch_end = 47, + }, knock_back = 2, do_custom = dmobs.dragon.step_custom, on_rightclick = dmobs.dragon.on_rc } -mobs:register_mob("dmobs:dragon4", dmobs.deepclone(dragondef) ) +mobs:register_mob("dmobs:dragon4", dmobs.deepclone(dragondef)) dragondef.type = "npc" dragondef.attacks_monsters = true - dragondef.on_rightclick = dmobs.dragon.ride dragondef.do_custom = dmobs.dragon.do_custom -mobs:register_mob("dmobs:dragon_blue", dmobs.deepclone(dragondef) ) +mobs:register_mob("dmobs:dragon_blue", dmobs.deepclone(dragondef)) diff --git a/dragons/dragon_normal.lua b/dragons/dragon_normal.lua index 6ad7e46..28c0699 100644 --- a/dragons/dragon_normal.lua +++ b/dragons/dragon_normal.lua @@ -1,69 +1,67 @@ -- 'Generic' dragon -dofile(minetest.get_modpath("dmobs").."/dragons/piloting.lua") - mobs:register_mob("dmobs:dragon", { - type = "monster", - passive = false, - attacks_monsters = true, - damage = 4, - reach = 3, - attack_type = "dogshoot", - shoot_interval = 2.5, + type = "monster", + passive = false, + attacks_monsters = true, + damage = 4, + reach = 3, + attack_type = "dogshoot", + shoot_interval = 2.5, dogshoot_switch = 2, dogshoot_count = 0, dogshoot_count_max =5, - arrow = "dmobs:fire", - shoot_offset = 1, - hp_min = 50, - hp_max = 80, - armor = 100, + arrow = "dmobs:fire", + shoot_offset = 1, + hp_min = 50, + hp_max = 80, + armor = 100, collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6}, - visual = "mesh", - mesh = "dragon.b3d", - textures = { - {"dmobs_dragon.png"}, - {"dmobs_dragon2.png"}, - {"dmobs_dragon3.png"}, - {"dmobs_dragon4.png"}, - }, - blood_texture = "mobs_blood.png", - visual_size = {x=2, y=2}, - makes_footstep_sound = true, + visual = "mesh", + mesh = "dragon.b3d", + textures = { + {"dmobs_dragon.png"}, + {"dmobs_dragon2.png"}, + {"dmobs_dragon3.png"}, + {"dmobs_dragon4.png"}, + }, + blood_texture = "mobs_blood.png", + visual_size = {x = 2, y = 2}, + makes_footstep_sound = true, runaway = false, jump_chance = 30, walk_chance = 80, fall_speed = 0, pathfinding = true, fall_damage = 0, - sounds = { - shoot_attack = "mobs_fireball", - }, - walk_velocity = 3, - run_velocity = 5, - jump = true, - fly = true, - drops = { - {name = "mobs:lava_orb", chance = 1, min = 1, max = 1}, - }, - fall_speed = 0, - stepheight = 10, - water_damage = 2, - lava_damage = 0, - light_damage = 0, - view_range = 20, - animation = { - speed_normal = 10, - speed_run = 20, - walk_start = 1, - walk_end = 22, - stand_start = 1, - stand_end = 22, - run_start = 1, - run_end = 22, - punch_start = 22, - punch_end = 47, - }, + sounds = { + shoot_attack = "mobs_fireball", + }, + walk_velocity = 3, + run_velocity = 5, + jump = true, + fly = true, + drops = { + {name = "mobs:lava_orb", chance = 1, min = 1, max = 1}, + }, + fall_speed = 0, + stepheight = 10, + water_damage = 2, + lava_damage = 0, + light_damage = 0, + view_range = 20, + animation = { + speed_normal = 10, + speed_run = 20, + walk_start = 1, + walk_end = 22, + stand_start = 1, + stand_end = 22, + run_start = 1, + run_end = 22, + punch_start = 22, + punch_end = 47, + }, knock_back = 2, do_custom = dmobs.dragon.step_custom, on_rightclick = dmobs.dragon.on_rc diff --git a/dragons/eggs.lua b/dragons/eggs.lua index eb13481..c0a4c24 100644 --- a/dragons/eggs.lua +++ b/dragons/eggs.lua @@ -1,23 +1,29 @@ -- eggs from mobs_dragon -------------------------------------------------------------------------- - + local dragonpairs = { - fire = {colour="red",nest="default:lava_source"}, - lightning = {colour="black",nest="default:obsidian"}, - poison = {colour="green",nest="default:cactus"}, - ice = {colour="blue",nest="default:ice"}, - great = {colour="great",nest="default:diamond_block"}, -- You've to deserve greatness !' + fire = {colour = "red", nest = "default:lava_source"}, + lightning = {colour = "black", nest = "default:obsidian"}, + poison = {colour = "green", nest = "default:cactus"}, + ice = {colour = "blue", nest = "default:ice"}, + -- You've to deserve greatness !' + great = {colour = "great", nest = "default:diamond_block"} } local function egg_transform(pos, node, clicker, item, _) + local wield_item = clicker:get_wielded_item():get_name() + if wield_item == "dmobs:dragon_gem" then - + local p = {x = pos.x, y = pos.y - 1, z = pos.z} local corner_name + for x1 = -1,1 do for z1 = -1,1 do + p.x = pos.x + x1 p.z = pos.z + z1 + local nestfloor_name = minetest.get_node(p).name if x1 == -1 and z1 == -1 then @@ -26,77 +32,92 @@ local function egg_transform(pos, node, clicker, item, _) elseif x1 == 0 and z1 == 0 then -- special case in centre -- must be obsidian if nestfloor_name ~= "default:obsidian" then return end - else -- else ring must all be of the same type if nestfloor_name ~= corner_name then return end end end end - + local dragon_type + for element,details in pairs(dragonpairs) do + if corner_name == details.nest then dragon_type = element break end end + -- default to Great dragon si it doesn't crash if dragon_type == nil then dragon_type = "great" end - - minetest.chat_send_player(clicker:get_player_name()," ... something seems to be happening .... come back later?") - + + minetest.chat_send_player(clicker:get_player_name(), + " ... something seems to be happening .... come back later?") + minetest.after(dmobs.eggtimer, function(pos, dragon, pname) minetest.set_node(pos, {name="dmobs:dragon_egg_"..dragon_type}) - end, - pos + end, pos ) - + item:take_item() end end local function egghatch(pos, node, clicker, item, _) + local wield_item = clicker:get_wielded_item():get_name() local eggnode = minetest.get_node(pos).name - + for nature,details in pairs(dragonpairs) do - if ( wield_item == "dmobs:dragon_gem_"..nature and eggnode:find(nature) ) or - ( wield_item == "dmobs:dragon_gem" and eggnode == "dmobs:dragon_egg_great" ) then -- special case... because inconsiderate/inconsistent naming - - minetest.chat_send_player(clicker:get_player_name(), " ... it ... swallowed the gem...") - - minetest.after(dmobs.eggtimer, - function(pos, dragon, pname) + + if ( wield_item == "dmobs:dragon_gem_"..nature + and eggnode:find(nature) ) + or ( wield_item == "dmobs:dragon_gem" + -- special case... because inconsiderate/inconsistent naming + and eggnode == "dmobs:dragon_egg_great" ) then + + minetest.chat_send_player(clicker:get_player_name(), + " ... it ... swallowed the gem...") + + minetest.after(dmobs.eggtimer, function(pos, dragon, pname) + local neweggnode = minetest.get_node(pos).name + if eggnode ~= neweggnode then return end -- prevent infinite hatchings minetest.remove_node(pos) local thedragon = "dmobs:dragon_"..details.colour + if eggnode == "dmobs:dragon_egg_great" then thedragon = "dmobs:dragon_great_tame" end local ent = minetest.add_entity(pos, thedragon) + minetest.sound_play("dmobs_chirrup",{pos=pos,max_hear_distance=20}) - + local obj = ent:get_luaentity() + if eggnode ~= "dmobs:dragon_egg_great" then + ent:set_properties({ textures = {"dmobs_dragon_young.png"}, visual_size = {x=1, y=1}, }) end + obj.tamed = true obj.owner = clicker:get_player_name() - end, - pos, clicker:get_player_name() + end, pos, clicker:get_player_name() ) + item:take_item() + break end end -- for loop @@ -116,7 +137,7 @@ local base_egg = { -- base template for all dragon eggs sunlight_propagates = true, is_ground_content = false, groups = {fleshy=3, dig_immediate=3}, - sounds = default.node_sound_leaves_defaults(), + sounds = default.node_sound_leaves_defaults(), on_rightclick = egg_transform, } diff --git a/dragons/great_dragon.lua b/dragons/great_dragon.lua index 1c1b8ab..7f0a1c9 100644 --- a/dragons/great_dragon.lua +++ b/dragons/great_dragon.lua @@ -18,10 +18,10 @@ local gdragon_base = { visual = "mesh", mesh = "dragon.b3d", textures = { - {"dmobs_dragon_great.png"}, + {"dmobs_dragon_great.png"}, }, blood_texture = "mobs_blood.png", - visual_size = {x=2.5, y=2.5}, + visual_size = {x = 2.5, y = 2.5}, makes_footstep_sound = true, runaway = false, jump_chance = 30, @@ -31,13 +31,16 @@ local gdragon_base = { fall_damage = 0, sounds = { shoot_attack = "mobs_fireball", - random = "roar", + random = "roar", }, walk_velocity = 3, run_velocity = 5, jump = true, fly = true, - fly_in = {"air","default:water_source","default:water_flowing", "default:lava_source","default:lava_flowing"}, + fly_in = { + "air","default:water_source","default:water_flowing", + "default:lava_source","default:lava_flowing" + }, drops = { {name = "dmobs:dragon_egg_great", chance = 1, min = 1, max = 1}, }, @@ -62,13 +65,11 @@ local gdragon_base = { knock_back = 2, } -mobs:register_mob("dmobs:dragon_great", dmobs.deepclone(gdragon_base) ) +mobs:register_mob("dmobs:dragon_great", dmobs.deepclone(gdragon_base)) gdragon_base.type = "npc" gdragon_base.attacks_monsters = true - gdragon_base.on_rightclick = dmobs.dragon.ride - gdragon_base.do_custom = dmobs.dragon.do_custom -mobs:register_mob("dmobs:dragon_great_tame", dmobs.deepclone(gdragon_base) ) +mobs:register_mob("dmobs:dragon_great_tame", dmobs.deepclone(gdragon_base)) diff --git a/dragons/main.lua b/dragons/main.lua index cb659f4..aead96d 100644 --- a/dragons/main.lua +++ b/dragons/main.lua @@ -1,8 +1,4 @@ ---thanks to diriel, blert2112 and taikedz - -dmobs.dragon = {} - -dofile(minetest.get_modpath("dmobs").."/dragons/piloting.lua") +--thanks to diriel, blert2112 and taikedz local tamed_dragons = {} @@ -12,14 +8,17 @@ minetest.register_craftitem("dmobs:dragon_gem_lightning", { description = "Lightning Gem", inventory_image = "dmobs_gem_lightning.png" }) + minetest.register_craftitem("dmobs:dragon_gem_ice", { description = "Ice Gem", inventory_image = "dmobs_gem_ice.png" }) + minetest.register_craftitem("dmobs:dragon_gem_fire", { description = "Fire Gem", inventory_image = "dmobs_gem_fire.png" }) + minetest.register_craftitem("dmobs:dragon_gem_poison", { description = "Poison Gem", inventory_image = "dmobs_gem_poison.png" @@ -50,5 +49,5 @@ mobs:register_egg("dmobs:dragon_red", "Tamed Fire Dragon", "default_apple.png", mobs:register_egg("dmobs:dragon_black", "Tamed Lightning Dragon", "dmobs_lightning.png", 1) mobs:register_egg("dmobs:dragon_green", "Tamed Poison Dragon", "dmobs_poison.png", 1) mobs:register_egg("dmobs:dragon_blue", "Tamed Ice Dragon", "default_ice.png", 1) -mobs:register_egg("dmobs:dragon_great_tame", "Tamed Great Dragon", "default_lava_source_animated.png", 1) - +mobs:register_egg("dmobs:dragon_great_tame", "Tamed Great Dragon", + "default_lava_source_animated.png", 1) diff --git a/dragons/piloting.lua b/dragons/piloting.lua index 63cc46d..32d7f74 100644 --- a/dragons/piloting.lua +++ b/dragons/piloting.lua @@ -4,32 +4,44 @@ if not dmobs.dragon then end dmobs.dragon.step_custom = function(self, dtime) + if self.driver then + object_fly(self, dtime, 10, true, "dmobs:fire_plyr", "walk", "stand") + if self.state == "attack" then self.state = nil end + return false end + return true end + dmobs.dragon.ride = function(self, clicker) + if self.tamed and self.owner == clicker:get_player_name() then + local inv = clicker:get_inventory() - + if self.driver and clicker == self.driver then + object_detach(self, clicker, {x=1, y=0, z=1}) - + if inv:room_for_item("main", "mobs:saddle") then inv:add_item("main", "mobs:saddle") else minetest.add_item(clicker:get_pos(), "mobs:saddle") end - + elseif not self.driver then + if clicker:get_wielded_item():get_name() == "mobs:saddle" then + object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4}) + inv:remove_item("main", "mobs:saddle") end end @@ -38,24 +50,31 @@ end dmobs.dragon.on_rc = function(self, clicker) + if not clicker or not clicker:is_player() then return end + if mobs:feed_tame(self, clicker, 1, false, false) then return end + dmobs.dragon.ride(self, clicker) end + dmobs.dragon.do_custom = function(self, dtime) + if self.driver then + object_fly(self, dtime, 10, true, "dmobs:fire_plyr", "walk", "stand") - + if self.state == "attack" then self.state = "idle" end - + return false end + return true end diff --git a/dragons/water_dragon.lua b/dragons/water_dragon.lua index 19604c9..2866bd3 100644 --- a/dragons/water_dragon.lua +++ b/dragons/water_dragon.lua @@ -17,7 +17,7 @@ mobs:register_mob("dmobs:waterdragon", { hp_max = 127, armor = 100, collisionbox = {-0.4, -0.5, -0.4, 0.4, 5, 0.4}, - visual_size = {x=4, y=4}, + visual_size = {x = 4, y = 4}, visual = "mesh", mesh = "water_dragon.b3d", textures = { @@ -57,29 +57,34 @@ mobs:register_mob("dmobs:waterdragon", { shoot_end = 40, }, do_custom = function(self) - --follow thanks to TenPlus1 and Byakuren - if not self.hydra then - self.hydra = true -- flip switch so this part is done only once - -- get head position and define a few temp variables - local pos = self.object:get_pos() - local obj, obj2, ent + --follow thanks to TenPlus1 and Byakuren + if not self.hydra then - -- add body and make it follow head - obj = minetest.add_entity({x=pos.x+1, y=pos.y, z=pos.z}, "dmobs:waterdragon_2") - ent = obj:get_luaentity() - ent.following = self.object + self.hydra = true -- flip switch so this part is done only once - -- add body and make it follow previous body segment - obj2 = minetest.add_entity({x=pos.x-1, y=pos.y, z=pos.z}, "dmobs:waterdragon_2") - ent = obj2:get_luaentity() - ent.following = self.object - end - end, + -- get head position and define a few temp variables + local pos = self.object:get_pos() + local obj, obj2, ent + + -- add body and make it follow head + obj = minetest.add_entity( + {x=pos.x+1, y=pos.y, z=pos.z}, "dmobs:waterdragon_2") + + ent = obj:get_luaentity() + ent.following = self.object + + -- add body and make it follow previous body segment + obj2 = minetest.add_entity( + {x=pos.x-1, y=pos.y, z=pos.z}, "dmobs:waterdragon_2") + + ent = obj2:get_luaentity() + ent.following = self.object + end + end, }) - mobs:register_mob("dmobs:waterdragon_2", { type = "monster", passive = false, @@ -105,7 +110,7 @@ mobs:register_mob("dmobs:waterdragon_2", { }, blood_texture = "mobs_blood.png", makes_footstep_sound = true, - sounds = { + sounds = { shoot_attack = "dmobs_wave", random = "velociraptor", }, diff --git a/dragons/wyvern.lua b/dragons/wyvern.lua index 0b7a7d6..174fcea 100644 --- a/dragons/wyvern.lua +++ b/dragons/wyvern.lua @@ -1,60 +1,60 @@ mobs:register_mob("dmobs:wyvern", { - type = "monster", - passive = false, - attacks_monsters = false, - damage = 4, - reach = 3, - attack_type = "dogshoot", - shoot_interval = 2.5, + type = "monster", + passive = false, + attacks_monsters = false, + damage = 4, + reach = 3, + attack_type = "dogshoot", + shoot_interval = 2.5, dogshoot_switch = 2, dogshoot_count = 0, dogshoot_count_max =5, - arrow = "dmobs:poison", - shoot_offset = 0.5, - hp_min = 100, - hp_max = 150, - armor = 100, + arrow = "dmobs:poison", + shoot_offset = 0.5, + hp_min = 100, + hp_max = 150, + armor = 100, collisionbox = {-0.6, -1.4, -0.6, 0.6, 0.6, 0.6}, - visual = "mesh", - mesh = "wyvern.b3d", - textures = { - {"dmobs_wyvern.png"}, - }, - blood_texture = "mobs_blood.png", - visual_size = {x=1, y=1}, - makes_footstep_sound = true, + visual = "mesh", + mesh = "wyvern.b3d", + textures = { + {"dmobs_wyvern.png"}, + }, + blood_texture = "mobs_blood.png", + visual_size = {x=1, y=1}, + makes_footstep_sound = true, runaway = true, jump_chance = 30, walk_chance = 80, pathfinding = true, - walk_velocity = 3, - run_velocity = 5, - fall_speed = -2, - jump = true, - fly = false, - drops = { - {name = "dmobs:dragon_gem_poison", chance = 1, min = 1, max = 1}, - {name = "dmobs:dragon_gem_lightning", chance = 1, min = 1, max = 1}, - }, - sounds = { - shoot_attack = "dmobs_poison", - random = "velociraptor", - }, - water_damage = 0, - lava_damage = 2, - light_damage = 0, - view_range = 20, - animation = { - speed_normal = 20, - speed_run = 30, - walk_start = 33, - walk_end = 68, - stand_start = 1, - stand_end = 30, - run_start = 33, - run_end = 68, - punch_start = 70, - punch_end = 89, - }, + walk_velocity = 3, + run_velocity = 5, + fall_speed = -2, + jump = true, + fly = false, + drops = { + {name = "dmobs:dragon_gem_poison", chance = 1, min = 1, max = 1}, + {name = "dmobs:dragon_gem_lightning", chance = 1, min = 1, max = 1}, + }, + sounds = { + shoot_attack = "dmobs_poison", + random = "velociraptor", + }, + water_damage = 0, + lava_damage = 2, + light_damage = 0, + view_range = 20, + animation = { + speed_normal = 20, + speed_run = 30, + walk_start = 33, + walk_end = 68, + stand_start = 1, + stand_end = 30, + run_start = 33, + run_end = 68, + punch_start = 70, + punch_end = 89, + }, knock_back = 2, }) diff --git a/init.lua b/init.lua index c1f8c68..755c3e5 100644 --- a/init.lua +++ b/init.lua @@ -1,121 +1,102 @@ -dmobs = {} - -- dmobs by D00Med -- mounts api by D00Med and lib_mount api by blert2112 -dofile(minetest.get_modpath("dmobs").."/api.lua") +dmobs = {dragon = {}} + +local dpath = minetest.get_modpath("dmobs") .. "/" + +dofile(dpath .. "api.lua") + -- Enable dragons (disable to remove tamed dragons and dragon bosses) -dmobs.dragons = minetest.settings:get_bool("dmobs.dragons") -if dmobs.dragons == nil then -dmobs.dragons = true -end -dmobs.regulars = minetest.settings:get_bool("dmobs.regulars") -if dmobs.regulars == nil then -dmobs.regulars = true -end - +dmobs.dragons = minetest.settings:get_bool("dmobs.dragons", true) +dmobs.regulars = minetest.settings:get_bool("dmobs.regulars", true) -- Enable fireballs/explosions -dmobs.destructive = minetest.settings:get_bool("dmobs.destructive") or false +dmobs.destructive = minetest.settings:get_bool("dmobs.destructive", false) -- Timer for the egg mechanics dmobs.eggtimer = tonumber(minetest.settings:get("dmobs.eggtimer") ) or 100 - -- Table cloning to reduce code repetition -dmobs.deepclone = function(t) -- deep-copy a table -- from https://gist.github.com/MihailJP/3931841 +-- deep-copy a table -- from https://gist.github.com/MihailJP/3931841 +dmobs.deepclone = function(t) + if type(t) ~= "table" then return t end local target = {} for k, v in pairs(t) do + if k ~= "__index" and type(v) == "table" then -- omit circular reference target[k] = dmobs.deepclone(v) else target[k] = v end end + return target end --- Start loading ---------------------------------------------------------------------------------- - -local function loadmob(mobname,dir) - dir = dir or "/mobs/" - dofile(minetest.get_modpath("dmobs")..dir..mobname..".lua") -end - --- regular mobs - -local mobslist = { - -- friendlies - "pig", - "panda", - "tortoise", - "golem_friendly", - "nyan", - "gnorm", - "hedgehog", - "owl", - "whale", - "badger", - "butterfly", - "elephant", - - -- baddies - "pig_evil", - "fox", - "rat", - "wasps", - "treeman", - "golem", - "skeleton", - "orc", - "ogre", -} if dmobs.regulars then - for _,mobname in pairs(mobslist) do - loadmob(mobname) - end + + -- load friendly mobs + dofile(dpath .. "mobs/pig.lua") + dofile(dpath .. "mobs/panda.lua") + dofile(dpath .. "mobs/tortoise.lua") + dofile(dpath .. "mobs/golem_friendly.lua") + dofile(dpath .. "mobs/nyan.lua") + dofile(dpath .. "mobs/gnorm.lua") + dofile(dpath .. "mobs/hedgehog.lua") + dofile(dpath .. "mobs/owl.lua") + dofile(dpath .. "mobs/whale.lua") + dofile(dpath .. "mobs/badger.lua") + dofile(dpath .. "mobs/butterfly.lua") + dofile(dpath .. "mobs/elephant.lua") + + -- load baddies + dofile(dpath .. "mobs/pig_evil.lua") + dofile(dpath .. "mobs/fox.lua") + dofile(dpath .. "mobs/rat.lua") + dofile(dpath .. "mobs/wasps.lua") + dofile(dpath .. "mobs/treeman.lua") + dofile(dpath .. "mobs/golem.lua") + dofile(dpath .. "mobs/skeleton.lua") + dofile(dpath .. "mobs/orc.lua") + dofile(dpath .. "mobs/ogre.lua") end ---------------- --- dragons!! -- ---------------- +-- dragons!! +dofile(dpath .. "dragons/dragon_normal.lua") +dofile(dpath .. "dragons/piloting.lua") -loadmob("dragon_normal","/dragons/") if dmobs.dragons then - loadmob("main","/dragons/") - loadmob("dragon1","/dragons/") - loadmob("dragon2","/dragons/") - loadmob("dragon3","/dragons/") - loadmob("dragon4","/dragons/") - loadmob("great_dragon","/dragons/") - loadmob("water_dragon","/dragons/") - loadmob("wyvern","/dragons/") - - dofile(minetest.get_modpath("dmobs").."/dragons/eggs.lua") + dofile(dpath .. "dragons/main.lua") + dofile(dpath .. "dragons/dragon1.lua") + dofile(dpath .. "dragons/dragon2.lua") + dofile(dpath .. "dragons/dragon3.lua") + dofile(dpath .. "dragons/dragon4.lua") + dofile(dpath .. "dragons/great_dragon.lua") + dofile(dpath .. "dragons/water_dragon.lua") + dofile(dpath .. "dragons/wyvern.lua") + dofile(dpath .. "dragons/eggs.lua") end -dofile(minetest.get_modpath("dmobs").."/arrows/dragonfire.lua") -dofile(minetest.get_modpath("dmobs").."/arrows/dragonarrows.lua") + +dofile(dpath .. "arrows/dragonfire.lua") +dofile(dpath .. "arrows/dragonarrows.lua") +dofile(dpath .. "arrows/sting.lua") -- General arrow definitions - if dmobs.destructive == true then - dofile(minetest.get_modpath("dmobs").."/arrows/fire_explosive.lua") + dofile(dpath .. "arrows/fire_explosive.lua") else - dofile(minetest.get_modpath("dmobs").."/arrows/fire.lua") + dofile(dpath .. "arrows/fire.lua") end -dofile(minetest.get_modpath("dmobs").."/nodes.lua") -dofile(minetest.get_modpath("dmobs").."/arrows/sting.lua") +dofile(dpath .. "nodes.lua") -- Spawning - - -dofile(minetest.get_modpath("dmobs").."/spawn.lua") -dofile(minetest.get_modpath("dmobs").."/saddle.lua") +dofile(dpath .. "spawn.lua") diff --git a/mobs/badger.lua b/mobs/badger.lua index e0d524d..a309c3a 100644 --- a/mobs/badger.lua +++ b/mobs/badger.lua @@ -41,7 +41,6 @@ mobs:register_mob("dmobs:badger", { run_end = 58, punch_start = 60, punch_end = 80, - }, on_rightclick = function(self, clicker) diff --git a/mobs/butterfly.lua b/mobs/butterfly.lua index 53662dd..1ffcab7 100644 --- a/mobs/butterfly.lua +++ b/mobs/butterfly.lua @@ -2,38 +2,49 @@ --butterflies minetest.register_abm({ - nodenames = {"flowers:flower_rose", "flowers:flower_tulip", + nodenames = { + "flowers:flower_rose", "flowers:flower_tulip", "flowers:flower_dandelion_yellow", "flowers:flower_viola", - "flowers:flower_dandelion_white", "flowers:flower_geranium"}, - interval = 10.0, + "flowers:flower_dandelion_white", "flowers:flower_geranium" + }, + interval = 10, chance = 10, action = function(pos, node, active_object_count, active_object_count_wider) minetest.add_entity({x=pos.x,y=pos.y+0.3,z=pos.z}, "dmobs:butterfly") end }) + minetest.register_entity("dmobs:butterfly", { visual = "mesh", mesh = "butterfly.b3d", physical = true, - textures = {"dmobs_butterfly.png",}, + textures = {"dmobs_butterfly.png"}, visual_size = {x=0.3, y=0.3}, + collisionbox = {0,0,0,0,0.1,0}, on_activate = function(self) + num = math.random(1,4) + self.object:set_properties({textures = {"dmobs_butterfly"..num..".png",},}) self.object:set_animation({x=1, y=10}, 20, 0) self.object:set_yaw(math.pi+num) + minetest.after(10, function() - self.object:remove() + self.object:remove() end) end, + on_step = function(self) + local pos = self.object:get_pos() local vec = self.object:get_velocity() local num = math.random(-math.pi, math.pi) + self.object:set_yaw(math.pi+num) - self.object:set_velocity({x=-math.sin(12*pos.y), y=math.cos(12*pos.x), z=-math.sin(12*pos.y)}) - self.object:set_acceleration({x=-math.sin(6*vec.y), y=math.cos(6*vec.x), z=-math.sin(6*vec.y)}) + self.object:set_velocity( + {x=-math.sin(12*pos.y), y=math.cos(12*pos.x), z=-math.sin(12*pos.y)}) + self.object:set_acceleration( + {x=-math.sin(6*vec.y), y=math.cos(6*vec.x), z=-math.sin(6*vec.y)}) end, - collisionbox = {0,0,0,0,0.1,0}, }) diff --git a/mobs/elephant.lua b/mobs/elephant.lua index 5dd7a08..1ec7af6 100644 --- a/mobs/elephant.lua +++ b/mobs/elephant.lua @@ -26,7 +26,9 @@ mobs:register_mob("dmobs:elephant", { fall_speed = -20, -- extra heavy! fear_height = 2, replace_rate = 10, - replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "ethereal:bamboo"}, + replace_what = { + "default:grass_3", "default:grass_4", "default:grass_5", "ethereal:bamboo" + }, replace_with = "air", follow = {"farming:wheat"}, view_range = 14, diff --git a/mobs/fox.lua b/mobs/fox.lua index 9661f98..c2c7a4c 100644 --- a/mobs/fox.lua +++ b/mobs/fox.lua @@ -1,4 +1,5 @@ -- Fox + mobs:register_mob("dmobs:fox", { type = "monster", attacks_monsters = true, @@ -36,7 +37,10 @@ mobs:register_mob("dmobs:fox", { fall_damage = 1, fear_height = 4, replace_rate = 10, - replace_what = {"farming:wheat_5", "default:fence_wood", "default:grass_5", "default:dirt_with_grass"}, + replace_what = { + "farming:wheat_5", "default:fence_wood", "default:grass_5", + "default:dirt_with_grass" + }, replace_with = "air", follow = {"mobs:meat_raw"}, view_range = 14, diff --git a/mobs/gnorm.lua b/mobs/gnorm.lua index ff6ab0e..7848f62 100644 --- a/mobs/gnorm.lua +++ b/mobs/gnorm.lua @@ -28,7 +28,10 @@ mobs:register_mob("dmobs:gnorm", { fall_speed = -6, fear_height = 4, replace_rate = 10, - replace_what = {"default:apple", "default:stone", "default:stone_with_coal", "default:fence_wood"}, + replace_what = { + "default:apple", "default:stone", "default:stone_with_coal", + "default:fence_wood" + }, replace_with = "air", follow = {"default:apple"}, view_range = 14, diff --git a/mobs/golem.lua b/mobs/golem.lua index d3242f6..1684a8d 100644 --- a/mobs/golem.lua +++ b/mobs/golem.lua @@ -1,6 +1,5 @@ --stone golem - mobs:register_mob("dmobs:golem", { type = "monster", reach = 3, diff --git a/mobs/golem_friendly.lua b/mobs/golem_friendly.lua index fe411c5..991cae6 100644 --- a/mobs/golem_friendly.lua +++ b/mobs/golem_friendly.lua @@ -1,4 +1,3 @@ - mobs:register_mob("dmobs:golem_friendly", { type = "npc", reach = 3, @@ -41,4 +40,5 @@ mobs:register_mob("dmobs:golem_friendly", { }, }) + mobs:register_egg("dmobs:golem_friendly", "Stone Golem (friendly)", "default_stone.png", 1) diff --git a/mobs/hedgehog.lua b/mobs/hedgehog.lua index 81572cc..3055318 100644 --- a/mobs/hedgehog.lua +++ b/mobs/hedgehog.lua @@ -34,7 +34,6 @@ mobs:register_mob("dmobs:hedgehog", { stand_end = 10, run_start = 1, run_end = 10, - }, on_rightclick = function(self, clicker) diff --git a/mobs/nyan.lua b/mobs/nyan.lua index 34ec26e..e78e1ed 100644 --- a/mobs/nyan.lua +++ b/mobs/nyan.lua @@ -12,10 +12,10 @@ mobs:register_mob("dmobs:nyan", { textures = { {"dmobs_nyancat.png"}, }, - jump = true, - fly = true, - fall_speed = 0, - stepheight = 1.5, + jump = true, + fly = true, + fall_speed = 0, + stepheight = 1.5, blood_texture = "mobs_blood.png", visual_size = {x=1, y=1}, makes_footstep_sound = true, @@ -43,26 +43,30 @@ mobs:register_mob("dmobs:nyan", { run_end = 7, }, - do_custom = function(self) - local apos = self.object:get_pos() + do_custom = function(self) + + local apos = self.object:get_pos() ; if not apos then return end local vec = self.object:get_velocity() - local part = minetest.add_particlespawner( - 5, --amount - 0.3, --time - {x=apos.x-0.1, y=apos.y+0.3, z=apos.z-0.1}, --minpos - {x=apos.x+0.1, y=apos.y+0.4, z=apos.z+0.1}, --maxpos - {x=-0, y=-0, z=-0}, --minvel - {x=0, y=0, z=0}, --maxvel - {x=0,y=0,z=0}, --minacc - {x=-vec.x,y=0,z=-vec.z}, --maxacc - 0.5, --minexptime - 1.5, --maxexptime - 3, --minsize - 5, --maxsize - false, --collisiondetection - "dmobs_rainbow.png" --texture - ) - end, + + minetest.add_particlespawner({ + amount = 5, + time = 0.3, + minpos = {x=apos.x-0.1, y=apos.y+0.3, z=apos.z-0.1}, + maxpos = {x=apos.x+0.1, y=apos.y+0.4, z=apos.z+0.1}, + minvel = {x=-0, y=-0, z=-0}, + maxvel = {x=0, y=0, z=0}, + minacc = {x=0,y=0,z=0}, + maxacc = {x=-vec.x,y=0,z=-vec.z}, + minexptime = 0.5, + maxexptime = 1.5, + minsize = 3, + maxsize = 5, + collisiondetection = false, + texture = "dmobs_rainbow.png", + glow = 10 + }) + end, + on_rightclick = function(self, clicker) if mobs:feed_tame(self, clicker, 8, true, true) then diff --git a/mobs/ogre.lua b/mobs/ogre.lua index c5044a4..d9d9603 100644 --- a/mobs/ogre.lua +++ b/mobs/ogre.lua @@ -1,4 +1,5 @@ -- Ogre + mobs:register_mob("dmobs:ogre", { type = "monster", passive = false, @@ -42,8 +43,8 @@ mobs:register_mob("dmobs:ogre", { run_end = 38, punch_start = 70, punch_end = 100, - }, }) + mobs:register_egg("dmobs:ogre", "Ogre", "default_desert_sand.png", 1) diff --git a/mobs/orc.lua b/mobs/orc.lua index f319cbf..363dc39 100644 --- a/mobs/orc.lua +++ b/mobs/orc.lua @@ -1,5 +1,6 @@ -- Orc + mobs:register_mob("dmobs:orc", { type = "monster", passive = false, @@ -42,10 +43,10 @@ mobs:register_mob("dmobs:orc", { run_end = 18, punch_start = 20, punch_end = 30, - }, }) + -- Orc (Redesign) mobs:register_mob("dmobs:orc2", { type = "monster", @@ -89,10 +90,10 @@ mobs:register_mob("dmobs:orc2", { run_end = 40, punch_start = 1, punch_end = 15, - }, }) -mobs:register_egg("dmobs:orc2", "Morgul Orc", "default_desert_sand.png", 1) -- new and improved, hey mobs:register_egg("dmobs:orc", "Orc", "default_desert_sand.png", 1) +-- new and improved, hey +mobs:register_egg("dmobs:orc2", "Morgul Orc", "default_desert_sand.png", 1) diff --git a/mobs/owl.lua b/mobs/owl.lua index d2d8fb8..781102d 100644 --- a/mobs/owl.lua +++ b/mobs/owl.lua @@ -21,24 +21,28 @@ mobs:register_mob("dmobs:owl", { light_damage = 0, view_range = 1, do_custom = function(self) - local daytime = minetest.get_timeofday()*24000 - if daytime <=6000 then - self.object:set_properties({ - textures = {"dmobs_owl_awake.png"}, - mesh = "owl.b3d", - }) - elseif daytime >=6000 then - self.object:set_properties({ - textures = {"dmobs_owl.png"}, - mesh = "owl.b3d", - }) - end + + local daytime = minetest.get_timeofday()*24000 + + if daytime <=6000 then + + self.object:set_properties({ + textures = {"dmobs_owl_awake.png"}, + mesh = "owl.b3d", + }) + + elseif daytime >=6000 then + + self.object:set_properties({ + textures = {"dmobs_owl.png"}, + mesh = "owl.b3d", + }) + end end, animation = { speed_normal = 1, walk_start = 1, walk_end = 50, - }, }) diff --git a/mobs/panda.lua b/mobs/panda.lua index 73e85ab..c8982a7 100644 --- a/mobs/panda.lua +++ b/mobs/panda.lua @@ -1,5 +1,3 @@ - - mobs:register_mob("dmobs:panda", { type = "animal", passive = false, @@ -32,7 +30,9 @@ mobs:register_mob("dmobs:panda", { fear_height = 4, jump_height = 2, replace_rate = 10, - replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "ethereal:bamboo"}, + replace_what = { + "default:grass_3", "default:grass_4", "default:grass_5", "ethereal:bamboo" + }, replace_with = "air", follow = {"default:papyrus"}, view_range = 14, @@ -47,8 +47,8 @@ mobs:register_mob("dmobs:panda", { run_end = 45, punch_start = 46, punch_end = 57, - }, + on_rightclick = function(self, clicker) if mobs:feed_tame(self, clicker, 8, true, true) then diff --git a/mobs/pig.lua b/mobs/pig.lua index f59041b..6bbf075 100644 --- a/mobs/pig.lua +++ b/mobs/pig.lua @@ -14,10 +14,10 @@ mobs:register_mob("dmobs:pig", { textures = { {"dmobs_flying_pig.png"}, }, - jump = true, - fly = true, - fall_speed = 0, - stepheight = 1.5, + jump = true, + fly = true, + fall_speed = 0, + stepheight = 1.5, blood_texture = "mobs_blood.png", visual_size = {x=1, y=1}, makes_footstep_sound = true, @@ -30,15 +30,9 @@ mobs:register_mob("dmobs:pig", { {name = "mobs:meat_raw", chance = 2, min = 1, max = 1}, }, sounds = { - random = "mobs_pig", - explode = "tnt_explode", + random = "mobs_pig", + explode = "tnt_explode", }, - do_custom = function(self) - if self.state == "attack" then - self.fly = false - self.fall_speed = -4 - end - end, water_damage = 0, lava_damage = 2, light_damage = 0, @@ -55,6 +49,15 @@ mobs:register_mob("dmobs:pig", { run_end = 28, }, + + do_custom = function(self) + + if self.state == "attack" then + self.fly = false + self.fall_speed = -4 + end + end, + on_rightclick = function(self, clicker) if mobs:feed_tame(self, clicker, 8, true, true) then diff --git a/mobs/pig_evil.lua b/mobs/pig_evil.lua index a3d1eda..fbe228d 100644 --- a/mobs/pig_evil.lua +++ b/mobs/pig_evil.lua @@ -32,12 +32,6 @@ local pigdef = { sounds = { random = "mobs_pig", }, - do_custom = function(self) - if self.state == "attack" then - self.fly = false - self.fall_speed = -4 - end - end, water_damage = 0, lava_damage = 2, light_damage = 0, @@ -52,8 +46,16 @@ local pigdef = { stand_end = 20, run_start = 22, run_end = 28, - }, + + do_custom = function(self) + + if self.state == "attack" then + self.fly = false + self.fall_speed = -4 + end + end, + on_rightclick = function(self, clicker) if mobs:feed_tame(self, clicker, 8, true, true) then @@ -71,5 +73,4 @@ end mobs:register_mob("dmobs:pig_evil", pigdef) - mobs:register_egg("dmobs:pig_evil", "Kamikaze Pig", "wool_pink.png", 1) diff --git a/mobs/rat.lua b/mobs/rat.lua index fb18727..2aebf16 100644 --- a/mobs/rat.lua +++ b/mobs/rat.lua @@ -1,4 +1,4 @@ ---Rat +-- Rat mobs:register_mob("dmobs:rat", { type = "monster", @@ -30,7 +30,9 @@ mobs:register_mob("dmobs:rat", { fall_damage = 1, fear_height = 5, replace_rate = 10, - replace_what = {"farming:wheat_5", "farming:wheat_4", "farming:wheat_2", "farming:wheat_3"}, + replace_what = { + "farming:wheat_5", "farming:wheat_4", "farming:wheat_2", "farming:wheat_3" + }, replace_with = "air", follow = {"mobs_animal:cheese"}, view_range = 14, diff --git a/mobs/skeleton.lua b/mobs/skeleton.lua index a66c0a8..e4c6d75 100644 --- a/mobs/skeleton.lua +++ b/mobs/skeleton.lua @@ -1,6 +1,5 @@ --skeleton - mobs:register_mob("dmobs:skeleton", { type = "monster", reach = 3, diff --git a/mobs/tortoise.lua b/mobs/tortoise.lua index dd1e057..c3f487d 100644 --- a/mobs/tortoise.lua +++ b/mobs/tortoise.lua @@ -1,4 +1,3 @@ - mobs:register_mob("dmobs:tortoise", { type = "animal", passive = false, @@ -44,6 +43,7 @@ mobs:register_mob("dmobs:tortoise", { run_end = 43, }, + on_rightclick = function(self, clicker) if mobs:feed_tame(self, clicker, 8, true, true) then diff --git a/mobs/wasps.lua b/mobs/wasps.lua index 663168a..e8e52f7 100644 --- a/mobs/wasps.lua +++ b/mobs/wasps.lua @@ -1,4 +1,5 @@ --Wasps! + mobs:register_mob("dmobs:wasp", { type = "monster", reach = 1, @@ -46,6 +47,7 @@ mobs:register_mob("dmobs:wasp", { mobs:register_egg("dmobs:wasp", "Wasp", "dmobs_wasp_bg.png", 1) + mobs:register_mob("dmobs:wasp_leader", { type = "monster", reach = 1, @@ -79,12 +81,6 @@ mobs:register_mob("dmobs:wasp_leader", { drops = { {name = "default:gold_lump", chance = 1, min = 3, max = 5}, }, - do_custom = function(self) - if math.random(1, 500) >= 500 then - local pos = self.object:get_pos() - minetest.add_entity(pos, "dmobs:wasp") - end - end, replace_rate = 700, replace_what = {"air"}, replace_with = "dmobs:hive", @@ -104,6 +100,16 @@ mobs:register_mob("dmobs:wasp_leader", { shoot_start = 6, shoot_end = 15, }, + + do_custom = function(self) + + if math.random(1, 500) >= 500 then + + local pos = self.object:get_pos() + + minetest.add_entity(pos, "dmobs:wasp") + end + end, }) diff --git a/mobs/whale.lua b/mobs/whale.lua index cafa83f..ab86e38 100644 --- a/mobs/whale.lua +++ b/mobs/whale.lua @@ -18,7 +18,7 @@ mobs:register_mob("dmobs:whale", { makes_footstep_sound = true, walk_velocity = 0.5, run_velocity = 1, - jump = false, + jump = false, stepheight = 1.5, fall_damage = 0, fall_speed = -6, @@ -33,9 +33,9 @@ mobs:register_mob("dmobs:whale", { {name = "mobs:meat_raw", chance = 1, min = 1, max = 1}, }, sounds = { - random = "whale_1", - death = "whale_1", - distance = 128, + random = "whale_1", + death = "whale_1", + distance = 128, }, animation = { speed_normal = 5, @@ -46,8 +46,8 @@ mobs:register_mob("dmobs:whale", { stand_end = 39, run_start = 2, run_end = 39, - }, + on_rightclick = function(self, clicker) if mobs:feed_tame(self, clicker, 8, true, true) then diff --git a/nodes.lua b/nodes.lua index f16f5e2..0075cfa 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1,7 +1,4 @@ - - ---wasps nest - +-- wasps nest minetest.register_node("dmobs:hive", { description = "Wasp Nest", tiles = {"dmobs_hive.png"}, @@ -14,21 +11,25 @@ minetest.register_node("dmobs:hive", { end, }) ---golem - +-- golem minetest.register_node("dmobs:golemstone", { description = "golem stone", tiles = {"dmobs_golem_stone.png",}, groups = {cracky=1}, on_construct = function(pos, node, _) + local node1 = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name local node2 = minetest.get_node({x=pos.x, y=pos.y-2, z=pos.z}).name local node3 = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name - if node1 == "default:stone" and node2 == "default:stone" and node3 == "air" then - minetest.add_entity(pos, "dmobs:golem_friendly") - minetest.remove_node({x=pos.x, y=pos.y-1, z=pos.z}) - minetest.remove_node({x=pos.x, y=pos.y-2, z=pos.z}) - minetest.remove_node({x=pos.x, y=pos.y, z=pos.z}) + + if node1 == "default:stone" + and node2 == "default:stone" + and node3 == "air" then + + minetest.add_entity(pos, "dmobs:golem_friendly") + minetest.remove_node({x=pos.x, y=pos.y-1, z=pos.z}) + minetest.remove_node({x=pos.x, y=pos.y-2, z=pos.z}) + minetest.remove_node({x=pos.x, y=pos.y, z=pos.z}) end end, }) diff --git a/saddle.lua b/saddle.lua deleted file mode 100644 index bcef4c2..0000000 --- a/saddle.lua +++ /dev/null @@ -1,43 +0,0 @@ ---saddle license - --- **mobs_saddle.png** --- ------------------- --- The MIT License (MIT) - --- Copyright (c) 2014 Krupnov Pavel - --- Permission is hereby granted, free of charge, to any person obtaining a copy --- of this software and associated documentation files (the "Software"), to deal --- in the Software without restriction, including without limitation the rights --- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell --- copies of the Software, and to permit persons to whom the Software is --- furnished to do so, subject to the following conditions: - --- The above copyright notice and this permission notice shall be included in --- all copies or substantial portions of the Software. - --- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR --- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, --- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE --- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER --- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, --- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN --- THE SOFTWARE. - - --- saddle (if not already available) -if not minetest.get_modpath("mobs_horse") then - minetest.register_craftitem(":mobs:saddle", { - description = "Saddle", - inventory_image = "mobs_saddle.png" - }) - - minetest.register_craft({ - output = "mobs:saddle", - recipe = { - {"mobs:leather", "mobs:leather", "mobs:leather"}, - {"mobs:leather", "default:steel_ingot", "mobs:leather"}, - {"mobs:leather", "default:steel_ingot", "mobs:leather"} - } - }) -end