From 9ee0c889f61199dce4314dad9c0e294a9acaa5d7 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 9 Jan 2017 00:50:58 +0100 Subject: [PATCH] Remove mobs legacy code --- mods/mobs/api.lua~ | 1050 ------------------------------------------- mods/mobs/copie.old | 559 ----------------------- mods/mobs/init.lua | 18 +- 3 files changed, 5 insertions(+), 1622 deletions(-) delete mode 100644 mods/mobs/api.lua~ delete mode 100644 mods/mobs/copie.old diff --git a/mods/mobs/api.lua~ b/mods/mobs/api.lua~ deleted file mode 100644 index 6c79b5ebf..000000000 --- a/mods/mobs/api.lua~ +++ /dev/null @@ -1,1050 +0,0 @@ -mobs = {} -function mobs:register_mob(name, def) - minetest.register_entity(name, { - hp_max = def.hp_max, - physical = true, - collisionbox = def.collisionbox, - collide_with_objects = def.collide_with_objects, - visual = def.visual, - visual_size = def.visual_size, - mesh = def.mesh, - textures = def.textures, - makes_footstep_sound = def.makes_footstep_sound, - view_range = def.view_range, - walk_velocity = def.walk_velocity, - run_velocity = def.run_velocity, - damage = def.damage, - light_damage = def.light_damage, - water_damage = def.water_damage, - lava_damage = def.lava_damage, - disable_fall_damage = def.disable_fall_damage, - drops = def.drops, - armor = def.armor, - drawtype = def.drawtype, - on_rightclick = def.on_rightclick, - type = def.type, - hostile_type = def.hostile_type or 1, - attack_type = def.attack_type, - arrow = def.arrow, - shoot_interval = def.shoot_interval, - sounds = def.sounds or nil, - animation = def.animation, - randomsound = def.randomsound, - hit= def.hit, - follow = def.follow, - jump = def.jump or true, - exp_min = def.exp_min or 0, - exp_max = def.exp_max or 0, - walk_chance = def.walk_chance or 10, - attacks_monsters = def.attacks_monsters or false, - group_attack = def.group_attack or false, - step = def.step or 0, - fov = def.fov or 120, - passive = def.passive or false, - recovery_time = def.recovery_time or 0.5, - knock_back = def.knock_back or 2, - pause_timer = def.pause_timer or 30, - rewards = def.rewards or nil, - animaltype = def.animaltype, - - stimer = 0, - canfight = 0, - timer = 0, - affolated_timer = 0; - blinktimer = 0, - blinkstatus = true, - env_damage_timer = 0, -- only if state = "attack" - attack = {player = nil, dist = nil}, - state = "stand", - v_start = false, - have_been_hit = 0, - old_y = nil, - lifetimer = 600, - tamed = false, - - do_attack = function(self, player, dist) - if self.state ~= "attack" then - if self.sounds ~= nil and self.sounds.war_cry then - if math.random(0,100) > 95 then - minetest.sound_play(self.sounds.war_cry,{ object = self.object }) - end - end - self.state = "attack" - self.attack.player = player - self.attack.dist = dist - end - end, - set_affolated = function(self) - local yaw = self.object:getyaw() - self.affolated_timer = math.random(1,4) - self.set_velocity(self, self.run_velocity + math.random(-10,10)) - end, - - set_velocity = function(self, v) - local yaw = self.object:getyaw() - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - local x = math.sin(yaw) * -v - local z = math.cos(yaw) * v - self.object:setvelocity({x =x, y = self.object:getvelocity().y, z =z}) - end, - - give_hit = function(self) - self.hit = self.hit - if self.hit == 1 then - self.object:settexturemod("") - self.hit = 0 - else - self.object:settexturemod("^[brighten") - self.hit = 1 - end - end, - - get_velocity = function(self) - local v = self.object:getvelocity() - return (v.x^2 + v.z^2)^(0.5) - end, - - in_fov = function(self,pos) - local yaw = self.object:getyaw() - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - local vx = math.sin(yaw) - local vz = math.cos(yaw) - local ds = math.sqrt(vx^2 + vz^2) - local ps = math.sqrt(pos.x^2 + pos.z^2) - local d = { x = vx / ds, z = vz / ds } - local p = { x = pos.x / ps, z = pos.z / ps } - - local an = ( d.x * p.x ) + ( d.z * p.z ) - - a = math.deg( math.acos( an ) ) - - if a > ( self.fov / 2 ) then - return false - else - return true - end - end, - - set_animation = function(self, type) - if not self.animation then - return - end - if not self.animation.current then - self.animation.current = "" - end - if type == "die" and self.animation.current ~= "die" then - if self.animation.stand_start - and self.animation.stand_end - and self.animation.speed_normal - then - self.object:set_animation( - {x = self.animation.stand_start,y = self.animation.stand_end}, - self.animation.speed_normal, 0 - ) - self.animation.current = "die" - end - elseif type == "stand" and self.animation.current ~= "stand" then - if - self.animation.stand_start - and self.animation.stand_end - and self.animation.speed_normal - then - self.object:set_animation( - {x = self.animation.stand_start,y = self.animation.stand_end}, - self.animation.speed_normal, 0 - ) - self.animation.current = "stand" - end - elseif type == "walk" and self.animation.current ~= "walk" then - if - self.animation.walk_start - and self.animation.walk_end - and self.animation.speed_normal - then - self.object:set_animation( - {x = self.animation.walk_start,y = self.animation.walk_end}, - self.animation.speed_normal, 0 - ) - self.animation.current = "walk" - end - elseif type == "run" and self.animation.current ~= "run" then - if - self.animation.run_start - and self.animation.run_end - and self.animation.speed_run - then - if self.animation.run_start ~= nil then - self.object:set_animation( - {x = self.animation.run_start,y = self.animation.run_end}, - self.animation.speed_run, 0 - ) - else - self.object:set_animation( - {x = self.animation.walk_start,y = self.animation.walk_end}, - self.animation.speed_run, 0 - ) - end - self.animation.current = "run" - end - elseif type == "punch" and self.animation.current ~= "punch" then - if - self.animation.punch_start - and self.animation.punch_end - and self.animation.speed_normal - then - self.object:set_animation( - {x = self.animation.punch_start,y = self.animation.punch_end}, - self.animation.speed_normal, 0 - ) - self.animation.current = "punch" - end - end - end, - - on_step = function(self, dtime) - - if self.lifetimer < 600 and self.lifetimer > 590 and self.state == "stand" then - self.set_velocity(self, self.walk_velocity) - self.state = "walk" - self.set_animation(self, "walk") - self.pause_timer = 25; - elseif type == "animal" then - if math.random(1, 5) == 1 and self.pause_timer == 0 then - self.set_velocity(self, self.walk_velocity) - self.state = "walk" - self.set_animation(self, "walk") - else - self.set_velocity(self, 0) - self:set_animation("stand") - self.pause_timer = 25; - end - - end - - if self.pause_timer > 0 then - self.pause_timer = self.pause_timer - dtime - end - - if self.type == "monster" and minetest.setting_getbool("only_peaceful") then - self.object:remove() - end - - self.affolated_timer = self.affolated_timer - dtime - if self.affolated_timer <= 0 and self.type == "animal" then - for _,player in pairs(minetest.get_connected_players()) do - local s = self.object:getpos() - local p = player:getpos() - local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.8 - if self.view_range and dist < self.view_range then - self.set_velocity(self, self.walk_velocity) - self.state = "walk" - self.set_animation(self, "walk") - self.following = player - break - end - end - end - - if self.hostile_type == 1 then - self.canfight = 1 - elseif self.hostile_type == 2 then - local pos = self.object:getpos() - local n = minetest.get_node(pos) - if minetest.get_timeofday() > 0.2 and minetest.get_timeofday() < 0.8 and self.have_been_hit == 0 then - self.canfight = 0 - else - self.canfight = 1 - end - elseif self.hostile_type == 3 then - if self.have_been_hit == 0 then - self.canfight = 0 - else - self.canfight = 1 - end - end - -- FIND SOMEONE TO ATTACK - if self.type == "monster" and self.state ~= "attack" and self.canfight == 1 then - - local s = self.object:getpos() - local inradius = minetest.get_objects_inside_radius(s,self.view_range) - local player = nil - local type = nil - for _,oir in ipairs(inradius) do - if oir:is_player() then - player = oir - type = "player" - else - local obj = oir:get_luaentity() - if obj then - player = obj.object - type = obj.type - end - end - - if type == "player" or type == "npc" then - local s = self.object:getpos() - local p = player:getpos() - local sp = s - p.y = p.y - 1 - local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 - if dist < self.view_range and self.in_fov(self,p) then - self.do_attack(self,player,dist) - end - end - end - - - end - - -- NPC FIND A MONSTER TO ATTACK - if self.type == "npc" and self.attacks_monsters and self.state ~= "attack" then - local s = self.object:getpos() - local inradius = minetest.get_objects_inside_radius(s,self.view_range) - for _, oir in pairs(inradius) do - local obj = oir:get_luaentity() - if obj then - if obj.type == "monster" then - -- attack monster - local p = obj.object:getpos() - local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 - self.do_attack(self,obj.object,dist) - break - end - end - end - end - - self.lifetimer = self.lifetimer - dtime - if self.lifetimer <= 0 and not self.tamed and self.type ~= "npc" then - local player_count = 0 - for _,obj in ipairs(minetest.get_objects_inside_radius(self.object:getpos(), 12)) do - if obj:is_player() then - player_count = player_count + 1 - end - end - if player_count == 0 and self.state ~= "attack" then - local pos = self.object:getpos() - local hp = self.object:get_hp() - minetest.log("action", "A mob with " .. tostring(hp) .. " HP despawned at " .. minetest.pos_to_string(pos) .. ".") - self.object:remove() - return - end - end - - if self.object:getvelocity().y > 0.1 then - local yaw = self.object:getyaw() - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - local x = math.sin(yaw) * -2 - local z = math.cos(yaw) * 2 - if minetest.get_item_group(minetest.get_node(self.object:getpos()).name, "water") ~= 0 then - self.object:setacceleration({x = x, y = 1.5, z = z}) - else - self.object:setacceleration({x = x, y = -10, z = z}) - end - else - if minetest.get_item_group(minetest.get_node(self.object:getpos()).name, "water") ~= 0 then - self.object:setacceleration({x = 0, y = 1.5, z = 0}) - else - self.object:setacceleration({x = 0, y = -10, z = 0}) - end - end - - - if self.disable_fall_damage and self.object:getvelocity().y == 0 then - if not self.old_y then - self.old_y = self.object:getpos().y - else - local d = self.old_y - self.object:getpos().y - if d > 5 then - local damage = d-5 - self.object:set_hp(self.object:get_hp()-damage) - minetest.sound_play("monster_damage", {object = self.object, gain = 0.25}) - if self.object:get_hp() == 0 then - minetest.sound_play("monster_death", {object = self.object, gain = 0.4}) - self.object:remove() - end - end - self.old_y = self.object:getpos().y - end - end - - self.timer = self.timer + dtime - if self.state ~= "attack" then - if self.timer < 1.0 then return end - self.timer = 0 - end - - if self.randomsound and math.random(1, 200) <= 1 then - minetest.sound_play(self.randomsound, {object = self.object}) - end - - local do_env_damage = function(self) - local pos = self.object:getpos() - local n = minetest.get_node(pos) - self.give_hit(self) - if self.light_damage and self.light_damage ~= 0 - and pos.y > 0 - and minetest.get_node_light(pos) - and minetest.get_node_light(pos) > 10 - and minetest.get_timeofday() > 0.2 - and minetest.get_timeofday() < 0.8 - then - self.object:set_hp(self.object:get_hp()-self.light_damage) - minetest.sound_play("zombie_sun_damage", {object = self.object, gain = 0.25}) - if self.object:get_hp() <= 0 then - minetest.sound_play("monster_death", {object = self.object, gain = 0.4}) - self.object:remove() - end - end - - if self.water_damage and self.water_damage ~= 0 and - minetest.get_item_group(n.name, "water") ~= 0 - then - self.object:set_hp(self.object:get_hp()-self.water_damage) - minetest.sound_play("monster_damage", {object = self.object, gain = 0.25}) - if self.object:get_hp() <= 0 then - minetest.sound_play("monster_death", {object = self.object, gain = 0.4}) - self.object:remove() - end - end - - if self.lava_damage and self.lava_damage ~= 0 and - minetest.get_item_group(n.name, "lava") ~= 0 - then - self.object:set_hp(self.object:get_hp()-self.lava_damage) - minetest.sound_play("monster_damage", {object = self.object, gain = 0.25}) - if self.object:get_hp() <= 0 then - minetest.sound_play("monster_death", {object = self.object, gain = 0.4}) - self.object:remove() - end - end - self.give_hit(self) - end - - self.env_damage_timer = self.env_damage_timer + dtime - if self.state == "attack" and self.env_damage_timer > 1 then - self.env_damage_timer = 0 - do_env_damage(self) - elseif self.state ~= "attack" then - do_env_damage(self) - end - - if self.follow ~= "" and not self.following then - for _,player in pairs(minetest.get_connected_players()) do - local s = self.object:getpos() - local p = player:getpos() - local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 - if self.view_range and dist < self.view_range then - self.following = player - break - end - end - end - - if self.following and self.following:is_player() then - if self.following:get_wielded_item():get_name() ~= self.follow then - self.following = nil - else - local s = self.object:getpos() - local p = self.following:getpos() - local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 - if dist > self.view_range then - self.following = nil - self.v_start = false - else - local vec = {x=p.x-s.x, y=p.y-s.y, z=p.z-s.z} - local yaw = math.atan(vec.z/vec.x)+math.pi/2 - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - if p.x > s.x then - yaw = yaw+math.pi - end - self.object:setyaw(yaw) - if dist > 2 then - if not self.v_start then - self.v_start = true - self.set_velocity(self, self.walk_velocity) - else - if self.jump and self.get_velocity(self) <= 1.5 and self.object:getvelocity().y == 0 then - local v = self.object:getvelocity() - v.y = 6 - self.object:setvelocity(v) - end - self.set_velocity(self, self.walk_velocity) - end - self:set_animation("walk") - else - self.v_start = false - self.set_velocity(self, 0) - self:set_animation("stand") - end - return - end - end - end - - if self.state == "stand" then - if math.random(1, 4) == 1 then - -- if there is a player nearby look at them - local lp = nil - local s = self.object:getpos() - if self.type == "npc" then - local o = minetest.get_objects_inside_radius(self.object:getpos(), 3) - - local yaw = 0 - for _,o in ipairs(o) do - if o:is_player() then - lp = o:getpos() - break - end - end - end - if lp ~= nil then - local vec = {x=lp.x-s.x, y=lp.y-s.y, z=lp.z-s.z} - yaw = math.atan(vec.z/vec.x)+math.pi/2 - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - if lp.x > s.x then - yaw = yaw+math.pi - end - else - yaw = self.object:getyaw()+((math.random(0,360)-180)/180*math.pi) - end - self.object:setyaw(yaw) - end - self.set_velocity(self, 0) - self.set_animation(self, "stand") - if math.random(1, 100) <= self.walk_chance then - self.set_velocity(self, self.walk_velocity) - self.state = "walk" - self.set_animation(self, "walk") - end - elseif self.state == "walk" then - if math.random(1, 100) <= 30 then - self.object:setyaw(self.object:getyaw()+((math.random(0,360)-180)/180*math.pi)) - end - if self.jump and self.get_velocity(self) <= 0.5 and self.object:getvelocity().y == 0 then - local v = self.object:getvelocity() - v.y = 5 - self.object:setvelocity(v) - end - self:set_animation("walk") - self.set_velocity(self, self.walk_velocity) - if math.random(1, 100) <= 30 then - self.set_velocity(self, 0) - self.state = "stand" - self:set_animation("stand") - end - elseif self.state == "attack" and self.attack_type == "kamicaze" then - if not self.attack.player or not self.attack.player:is_player() then - self.state = "stand" - self:set_animation("stand") - self.timer = 0 - self.blinktimer = 0 - return - end - local s = self.object:getpos() - local p = self.attack.player:getpos() - local dist = ((p.x - s.x) ^ 2 + (p.y - s.y) ^ 2 + (p.z - s.z) ^ 2) ^ 0.5 - if dist > self.view_range or self.attack.player:get_hp() <= 0 then - self.state = "stand" - self.v_start = false - self.set_velocity(self, 0) - self.timer = 0 - self.blinktimer = 0 - self.attack = {player = nil, dist = nil} - self:set_animation("stand") - return - else - self:set_animation("walk") - self.attack.dist = dist - end - - local vec = {x = p.x -s.x, y = p.y -s.y, z = p.z -s.z} - local yaw = math.atan(vec.z/vec.x)+math.pi/2 - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - if p.x > s.x then - yaw = yaw+math.pi - end - self.object:setyaw(yaw) - if self.attack.dist > 3 then - if not self.v_start then - self.v_start = true - self.set_velocity(self, self.run_velocity) - self.timer = 0 - self.blinktimer = 0 - else - self.timer = 0 - self.blinktimer = 0 - if self.get_velocity(self) <= 1.58 and self.object:getvelocity().y == 0 then - local v = self.object:getvelocity() - v.y = 5 - self.object:setvelocity(v) - end - self.set_velocity(self, self.run_velocity) - end - self:set_animation("run") - else - self.set_velocity(self, 0) - self.timer = self.timer + dtime - self.blinktimer = self.blinktimer + dtime - if self.blinktimer > 0.2 then - self.blinktimer = self.blinktimer - 0.2 - if self.blinkstatus then - self.object:settexturemod("") - else - self.object:settexturemod("^[brighten") - end - self.blinkstatus = not self.blinkstatus - end - if self.timer > 3 then - local pos = self.object:getpos() - pos.x = math.floor(pos.x+0.5) - pos.y = math.floor(pos.y+0.5) - pos.z = math.floor(pos.z+0.5) - do_tnt_physics(pos, 3) - local meta = minetest.env:get_meta(pos) - minetest.sound_play("tnt_explode", {pos = pos,gain = 1.0,max_hear_distance = 16,}) - if minetest.env:get_node(pos).name == "default:water_source" or minetest.env:get_node(pos).name == "default:water_flowing" or minetest.is_protected(pos, "tnt") then - self.object:remove() - return - end - for x=-3,3 do - for y=-3,3 do - for z=-3,3 do - if x*x+y*y+z*z <= 3 * 3 + 3 then - local np={x=pos.x+x,y=pos.y+y,z=pos.z+z} - local n = minetest.env:get_node(np) - if n.name ~= "air" and n.name ~= "default:obsidian" and n.name ~= "default:bedrock" and n.name ~= "protector:protect" then - activate_if_tnt(n.name, np, pos, 3) - minetest.env:remove_node(np) - nodeupdate(np) - if n.name ~= "tnt:tnt" and math.random() > 0.9 then - local drop = minetest.get_node_drops(n.name, "") - for _,item in ipairs(drop) do - if type(item) == "string" then - if math.random(1,100) > 40 then - local obj = minetest.env:add_item(np, item) - end - end - end - end - end - end - end - end - self.object:remove() - end - end - end - elseif self.state == "attack" and self.attack_type == "dogfight" then - if not self.attack.player or not self.attack.player:getpos() then - self.state = "stand" - self:set_animation("stand") - return - end - local s = self.object:getpos() - local p = self.attack.player:getpos() - local dist = ((p.x - s.x) ^ 2 + (p.y - s.y) ^ 2 + (p.z - s.z) ^ 2) ^ 0.5 - if dist > self.view_range or self.attack.player:get_hp() <= 0 then - self.state = "stand" - self.v_start = false - self.set_velocity(self, 0) - self.attack = {player = nil, dist = nil} - self:set_animation("stand") - return - else - self:set_animation("walk") - self.attack.dist = dist - end - - local vec = {x = p.x -s.x, y = p.y -s.y, z = p.z -s.z} - local yaw = math.atan(vec.z/vec.x)+math.pi/2 - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - if p.x > s.x then - yaw = yaw+math.pi - end - self.object:setyaw(yaw) - if self.attack.dist > 2 then - if not self.v_start then - self.v_start = true - self.set_velocity(self, self.run_velocity) - else - if self.get_velocity(self) <= 1.58 and self.object:getvelocity().y == 0 then - local v = self.object:getvelocity() - v.y = 5 - self.object:setvelocity(v) - end - self.set_velocity(self, self.run_velocity) - end - self:set_animation("run") - else - self.set_velocity(self, 0) - self:set_animation("punch") - self.v_start = false - if self.timer > 1 then - self.timer = 0 - minetest.sound_play("mobs_punch", {object = self.object, gain = 1}) - self.attack.player:punch(self.object, 1.0, { - full_punch_interval= 1.0, - damage_groups = {fleshy = self.damage} - }, vec) - end - end - elseif self.state == "attack" and self.attack_type == "shoot" then - if not self.attack.player or not self.attack.player:is_player() then - self.state = "stand" - self:set_animation("stand") - return - end - local s = self.object:getpos() - local p = self.attack.player:getpos() - p.y = p.y - .5 - s.y = s.y + .5 - local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 - if dist > self.view_range or self.attack.player:get_hp() <= 0 then - self.state = "stand" - self.v_start = false - self.set_velocity(self, 0) - if self.type ~= "npc" then - self.attack = {player=nil, dist=nil} - end - self:set_animation("stand") - return - else - self.attack.dist = dist - end - - local vec = {x = p.x -s.x, y = p.y -s.y, z = p.z -s.z} - local yaw = math.atan(vec.z/vec.x)+math.pi/2 - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - if p.x > s.x then - yaw = yaw+math.pi - end - self.object:setyaw(yaw) - self.set_velocity(self, 0) - - if self.timer > self.shoot_interval and math.random(1, 100) <= 60 then - self.timer = 0 - - self:set_animation("punch") - - if self.sounds ~= nil and self.sounds.attack then - minetest.sound_play(self.sounds.attack, {object = self.object}) - end - - local p = self.object:getpos() - p.y = p.y + (self.collisionbox[2]+self.collisionbox[5])/2 - local obj = minetest.add_entity(p, self.arrow) - local amount = (vec.x^ 2+vec.y^ 2+vec.z^ 2) ^ 0.5 - local v = obj:get_luaentity().velocity - vec.y = vec.y+1 - vec.x = vec.x*v/amount - vec.y = vec.y*v/amount - vec.z = vec.z*v/amount - obj:setvelocity(vec) - end - end - end, - - on_activate = function(self, staticdata, dtime_s) - self.object:set_armor_groups({fleshy = self.armor}) - self.object:setacceleration({x = 0, y = -10, z = 0}) - self.state = "stand" - self.object:setvelocity({x = 0, y = self.object:getvelocity().y, z = 0}) - self.object:setyaw(math.random(1, 360) / 180 * math.pi) - - if self.type ~= "npc" then - self.lifetimer = 600 - dtime_s - else - self.lifetimer = 300 - dtime_s - end - - if self.type == "monster" and minetest.setting_getbool("only_peaceful") then - self.object:remove() - end - - if staticdata then - local tmp = minetest.deserialize(staticdata) - if tmp and tmp.lifetimer then - self.lifetimer = tmp.lifetimer - dtime_s - end - if tmp and tmp.tamed then - self.tamed = tmp.tamed - end - end - if self.lifetimer <= 0 and not self.tamed then - local pos = self.object:getpos() - local hp = self.object:get_hp() - minetest.log("action", "A mob with " .. tostring(hp) .. " HP despawned at " .. minetest.pos_to_string(pos) .. " on activation.") - self.object:remove() - end - end, - - get_staticdata = function(self) - local tmp = { - lifetimer = self.lifetimer, - tamed = self.tamed, - textures = { textures = self.textures }, - } - return minetest.serialize(tmp) - end, - - on_punch = function(self, hitter, tflp, tool_capabilities, dir) - local hp = self.object:get_hp() - self.have_been_hit = 1 - if hp >= 1 then - process_weapon(hitter,tflp,tool_capabilities) - end - - local pos = self.object:getpos() - if self.object:get_hp() <= 0 then - if hitter and hitter:is_player() and hitter:get_inventory() then - for _,drop in ipairs(self.drops) do - if math.random(1, drop.chance) == 1 then - local d = ItemStack(drop.name.." "..math.random(drop.min, drop.max)) --- default.drop_item(pos,d) - local pos2 = pos - pos2.y = pos2.y + 0.5 -- drop items half block higher - minetest.add_item(pos2,d) - end - end - - if self.sounds ~= nil and self.sounds.death ~= nil then - minetest.sound_play(self.sounds.death,{ - object = self.object, - }) - end - if minetest.get_modpath("skills") and minetest.get_modpath("experience") then - -- DROP experience - local distance_rating = ( ( get_distance({x=0,y=0,z=0},pos) ) / ( skills.get_player_level(hitter:get_player_name()).level * 1000 ) ) - local emax = math.floor( self.exp_min + ( distance_rating * self.exp_max ) ) - local expGained = math.random(self.exp_min, emax) - skills.add_exp(hitter:get_player_name(),expGained) - local expStack = experience.exp_to_items(expGained) - for _,stack in ipairs(expStack) do - default.drop_item(pos,stack) - end - end - - -- see if there are any NPCs to shower you with rewards - if self.type ~= "npc" then - local inradius = minetest.get_objects_inside_radius(hitter:getpos(),10) - for _, oir in pairs(inradius) do - local obj = oir:get_luaentity() - if obj then - if obj.type == "npc" and obj.rewards ~= nil then - local yaw = nil - local lp = hitter:getpos() - local s = obj.object:getpos() - local vec = {x=lp.x-s.x, y=1, z=lp.z-s.z} - yaw = math.atan(vec.z/vec.x)+math.pi/2 - if self.drawtype == "side" then - yaw = yaw+(math.pi/2) - end - if lp.x > s.x then - yaw = yaw+math.pi - end - obj.object:setyaw(yaw) - local x = math.sin(yaw) * -2 - local z = math.cos(yaw) * 2 - acc = {x=x, y=-5, z=z} - for _, r in pairs(obj.rewards) do - if math.random(0,100) < r.chance then - default.drop_item(obj.object:getpos(),r.item, vec, acc) - end - end - end - end - end - end - - end - end - - -- knock back effect, adapted from blockmen's pyramids mod - -- https://github.com/BlockMen/pyramids - local kb = self.knock_back - local r = self.recovery_time - - if tflp < tool_capabilities.full_punch_interval then - kb = kb * ( tflp / tool_capabilities.full_punch_interval ) - r = r * ( tflp / tool_capabilities.full_punch_interval ) - end - - local ykb=2 - local v = self.object:getvelocity() - if v.y ~= 0 then - ykb = 0 - end - - self.object:setvelocity({x=dir.x*kb,y=ykb,z=dir.z*kb}) - self.pause_timer = r - if self.type == "animal" then - self.set_affolated(self) - self:set_animation("run") - end - -- for zombie pig <3 - if self.passive == false then - if self.state ~= "attack" then - self.do_attack(self,hitter,1) - end - -- alert other NPCs to the attack - local inradius = minetest.get_objects_inside_radius(hitter:getpos(),10) - for _, oir in pairs(inradius) do - local obj = oir:get_luaentity() - if obj then - if obj.group_attack == true and obj.name == self.name and obj.state ~= "attack" then - obj.do_attack(obj,hitter,1) - end - end - end - end - end, - - }) -end - -mobs.spawning_mobs = {} -function mobs:register_spawn(name, description, nodes, max_light, min_light, chance, active_object_count, max_height, spawn_func) - mobs.spawning_mobs[name] = true - minetest.register_abm({ - nodenames = nodes, - neighbors = {"air"}, - interval = 15, - chance = chance, - action = function(pos, node, _, active_object_count_wider) - --local players = minetest.get_connected_players() - --if players == 0 then return end - if active_object_count_wider > active_object_count then return end - if not mobs.spawning_mobs[name] then return end - pos.y = pos.y + 1 - if not minetest.get_node_light(pos) then return end - if minetest.get_node(pos).name ~= "air" then return end - if pos.y > max_height then return end - if not minetest.get_node_light(pos) then return end - if minetest.get_node_light(pos) > max_light then return end - if minetest.get_node_light(pos) < min_light then return end - if minetest.registered_nodes[minetest.get_node(pos).name].walkable then else return end - if min_dist == nil then - min_dist = {x=-1,z=-1} - end - if max_dist == nil then - max_dist = {x=33000,z=33000} - end - - if math.abs(pos.x) < min_dist.x or math.abs(pos.z) < min_dist.z then - return - end - - if math.abs(pos.x) > max_dist.x or math.abs(pos.z) > max_dist.z then - return - end - if spawn_func and not spawn_func(pos, node) then return end - if math.random(1,1000) <= chance or chance > 99 then - if chance > 99 then - minetest.log("action", "Spawned " .. description .. " at " .. minetest.pos_to_string(pos) .. " with 100% chance .") - minetest.add_entity(pos, name) - elseif math.random(1.0,100.9) <= chance then - minetest.log("action", "Spawned " .. description .. " at " .. minetest.pos_to_string(pos) .. "with "..chance.."% chance.") - minetest.add_entity(pos, name) - end - end - - end - }) -end - -function do_tnt_physics(tnt_np,tntr) - local objs = minetest.env:get_objects_inside_radius(tnt_np, tntr) - for k, obj in pairs(objs) do - local oname = obj:get_entity_name() - local v = obj:getvelocity() - local p = obj:getpos() - if oname == "tnt:tnt" then - obj:setvelocity({x=(p.x - tnt_np.x) + (tntr / 2) + v.x, y=(p.y - tnt_np.y) + tntr + v.y, z=(p.z - tnt_np.z) + (tntr / 2) + v.z}) - else - if v ~= nil then - obj:setvelocity({x=(p.x - tnt_np.x) + (tntr / 4) + v.x, y=(p.y - tnt_np.y) + (tntr / 2) + v.y, z=(p.z - tnt_np.z) + (tntr / 4) + v.z}) - else - if obj:get_player_name() ~= nil then - obj:set_hp(obj:get_hp() - 1) - end - end - end - end -end - - -function mobs:register_arrow(name, def) - minetest.register_entity(name, { - physical = false, - collisionbox = {0, 0, 0, 0, 0, 0}, - visual = def.visual, - visual_size = def.visual_size, - textures = def.textures, - velocity = def.velocity, - hit_player = def.hit_player, - hit_node = def.hit_node, - - on_step = function(self, dtime) - local pos = self.object:getpos() - if minetest.get_node(self.object:getpos()).name ~= "air" then - self.hit_node(self, pos, node) - self.object:remove() - return - end - -- pos.y = pos.y-1.0 - for _,player in pairs(minetest.get_objects_inside_radius(pos, 1)) do - if player:is_player() then - self.hit_player(self, player) - self.object:remove() - return - end - end - end - }) -end - -function get_distance(pos1,pos2) - if ( pos1 ~= nil and pos2 ~= nil ) then - return math.abs(math.floor(math.sqrt( (pos1.x - pos2.x)^2 + (pos1.z - pos2.z)^2 ))) - else - return 0 - end -end - -function process_weapon(player, time_from_last_punch, tool_capabilities) -local weapon = player:get_wielded_item() - if tool_capabilities ~= nil then - local wear = ( tool_capabilities.full_punch_interval / 75 ) * 65535 - weapon:add_wear(wear) - player:set_wielded_item(weapon) - end - - if weapon:get_definition().sounds ~= nil then - local s = math.random(0,#weapon:get_definition().sounds) - minetest.sound_play(weapon:get_definition().sounds[s], { - object=player, - }) - else - minetest.sound_play("default_sword_wood", { - object = player, - }) - end -end - diff --git a/mods/mobs/copie.old b/mods/mobs/copie.old deleted file mode 100644 index a6e339c17..000000000 --- a/mods/mobs/copie.old +++ /dev/null @@ -1,559 +0,0 @@ -dofile(minetest.get_modpath("mobs").."/api.lua") - --- Mouton -dofile(minetest.get_modpath("mobs").."/sheep.lua") - - -mobs:register_mob("mobs:dirt_monster", { - type = "monster", - hp_max = 25, - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, - visual = "mesh", - mesh = "mobs_stone_monster.x", - textures = {"mobs_dirt_monster.png"}, - visual_size = {x = 3, y = 2.6}, - makes_footstep_sound = true, - view_range = 12, - walk_velocity = 1.1, - run_velocity = 2.6, - on_rightclick = nil, - damage = 4, - drops = { - name = "default:dirt", - chance = 1, - min = 4, - max = 4, --- {name = "maptools:silver_coin", --- chance = 1, --- min = 2, --- max = 2,}, - }, - armor = 100, - drawtype = "front", - lava_damage = 8, - light_damage = 1, - attack_type = "dogfight", - animation = { - speed_normal = 18, - speed_run = 50, - stand_start = 0, - stand_end = 14, - walk_start = 15, - walk_end = 38, - run_start = 40, - run_end = 63, - punch_start = 40, - punch_end = 63, - }, -}) - -minetest.register_craftitem("mobs:dirt_monster", { - description = "Dirt Monster", - inventory_image = "mobs_dirt_monster.png", - wield_scale = {x = 1.25, y = 1.25, z = 2.5}, - groups = {not_in_creative_inventory = 1}, - - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.above then - minetest.add_entity(pointed_thing.above, "mobs:dirt_monster") - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end - minetest.log("action", placer:get_player_name() .. " placed a dirt monster at " .. minetest.pos_to_string(pointed_thing.above) .. ".") - end - return itemstack - end, -}) - -mobs:register_mob("mobs:stone_monster", { - type = "monster", - hp_max = 30, - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, - visual = "mesh", - mesh = "mobs_stone_monster.x", - textures = {"mobs_stone_monster.png"}, - visual_size = {x = 3, y = 2.6}, - makes_footstep_sound = true, - view_range = 16, - walk_velocity = 0.4, - run_velocity = 1.8, - damage = 6, - drops = { - {name = "default:stone", - chance = 1, - min = 4, - max = 4,}, --- {name = "maptools:silver_coin", --- chance = 1, --- min = 3, --- max = 3,}, - }, - armor = 80, - drawtype = "front", - light_damage = 1, - attack_type = "dogfight", - animation = { - speed_normal = 8, - speed_run = 40, - stand_start = 0, - stand_end = 14, - walk_start = 15, - walk_end = 38, - run_start = 40, - run_end = 63, - punch_start = 40, - punch_end = 63, - } -}) - -minetest.register_craftitem("mobs:stone_monster", { - description = "Stone Monster", - inventory_image = "mobs_stone_monster.png", - wield_scale = {x = 1.25, y = 1.25, z = 2.5}, - groups = {not_in_creative_inventory = 1}, - - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.above then - minetest.add_entity(pointed_thing.above, "mobs:stone_monster") - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end - minetest.log("action", placer:get_player_name() .. " placed a stone monster at " .. minetest.pos_to_string(pointed_thing.above) .. ".") - end - return itemstack - end, -}) - -mobs:register_mob("mobs:sand_monster", { - type = "monster", - hp_max = 15, - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, - visual = "mesh", - mesh = "mobs_sand_monster.x", - textures = {"mobs_sand_monster.png"}, - visual_size = {x =8,y =8}, - makes_footstep_sound = true, - view_range = 20, - walk_velocity = 1.8, - run_velocity = 3.6, - damage = 2, - drops = { - {name = "default:sand", - chance = 1, - min = 4, - max = 4,}, --- {name = "maptools:silver_coin", --- chance = 1, --- min = 3, --- max = 3,}, - }, - armor = 100, - drawtype = "front", - lava_damage = 8, - light_damage = 1, - attack_type = "dogfight", - animation = { - speed_normal = 35, - speed_run = 45, - stand_start = 0, - stand_end = 39, - walk_start = 41, - walk_end = 72, - run_start = 74, - run_end = 105, - punch_start = 74, - punch_end = 105, - }, -}) - -minetest.register_craftitem("mobs:sand_monster", { - description = "Sand Monster", - inventory_image = "mobs_sand_monster.png", - wield_scale = {x = 1.25, y = 1.25, z = 2.5}, - groups = {not_in_creative_inventory = 1}, - - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.above then - minetest.add_entity(pointed_thing.above, "mobs:sand_monster") - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end - minetest.log("action", placer:get_player_name() .. " placed a sand monster at " .. minetest.pos_to_string(pointed_thing.above) .. ".") - end - return itemstack - end, -}) - -mobs:register_mob("mobs:rat", { - type = "animal", - hp_max = 1, - collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.35, 0.25}, - collide_with_objects = false, - visual = "mesh", - mesh = "mobs_rat.x", - textures = {"mobs_rat.png"}, - makes_footstep_sound = false, - walk_velocity = 0.8, - armor = 200, - drops = { - {name = "mobs:rat", - chance = 1, - min = 1, - max = 1,}, - }, - drawtype = "front", - water_damage = 1, - lava_damage = 8, - follow = "default:scorched_stuff", - view_range = 4, -}) - -mobs:register_mob("mobs:oerkki", { - type = "monster", - hp_max = 45, - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, - visual = "mesh", - mesh = "mobs_oerkki.x", - textures = {"mobs_oerkki.png"}, - visual_size = {x =5, y =5}, - makes_footstep_sound = false, - view_range = 16, - walk_velocity = 0.5, - run_velocity = 3, - damage = 5, - drops = { - {name = "default:obsidian", - chance = 1, - min = 4, - max = 4,}, --- {name = "maptools:silver_coin", --- chance = 1, --- min = 5, --- max = 5,}, - }, - armor = 100, - drawtype = "front", - lava_damage = 8, - light_damage = 1, - attack_type = "dogfight", - animation = { - stand_start = 0, - stand_end = 23, - walk_start = 24, - walk_end = 36, - run_start = 37, - run_end = 49, - punch_start = 37, - punch_end = 49, - speed_normal = 10, - speed_run = 18, - }, -}) - -minetest.register_craftitem("mobs:oerkki", { - description = "Oerkki", - inventory_image = "mobs_oerkki.png", - wield_scale = {x = 1.25, y = 1.25, z = 2.5}, - groups = {not_in_creative_inventory = 1}, - - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.above then - minetest.add_entity(pointed_thing.above, "mobs:oerkki") - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end - minetest.log("action", placer:get_player_name() .. " placed an oerkki at " .. minetest.pos_to_string(pointed_thing.above) .. ".") - end - return itemstack - end, -}) - -mobs:register_mob("mobs:tree_monster", { - type = "monster", - hp_max = 60, - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, - visual = "mesh", - mesh = "mobs_tree_monster.x", - textures = {"mobs_tree_monster.png"}, - visual_size = {x = 4.5,y = 4.5}, - makes_footstep_sound = true, - view_range = 32, - walk_velocity = 0, - run_velocity = 1.6, - damage = 6, - drops = { - {name = "default:sapling", - chance = 1, - min = 4, - max = 4,}, - {name = "default:junglesapling", - chance = 1, - min = 4, - max = 4,}, --- {name = "maptools:silver_coin", --- chance = 1, --- min = 6, --- max = 6,}, - }, - armor = 80, - drawtype = "front", - lava_damage = 8, - light_damage = 1, - disable_fall_damage = true, - attack_type = "dogfight", - animation = { - speed_normal = 8, - speed_run = 20, - stand_start = 0, - stand_end = 24, - walk_start = 25, - walk_end = 47, - run_start = 48, - run_end = 62, - punch_start = 48, - punch_end = 62, - }, -}) - -minetest.register_craftitem("mobs:tree_monster", { - description = "Tree Monster", - inventory_image = "mobs_tree_monster.png", - wield_scale = {x = 1.25, y = 1.25, z = 2.5}, - groups = {not_in_creative_inventory = 1}, - - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.above then - minetest.add_entity(pointed_thing.above, "mobs:tree_monster") - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end - minetest.log("action", placer:get_player_name() .. " placed a tree monster at " .. minetest.pos_to_string(pointed_thing.above) .. ".") - end - return itemstack - end, -}) - -mobs:register_mob("mobs:dungeon_master", { - type = "monster", - hp_max = 50, - collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.6, 0.7}, - visual = "mesh", - mesh = "mobs_dungeon_master.x", - textures = {"mobs_dungeon_master.png"}, - visual_size = {x =8, y =8}, - makes_footstep_sound = true, - view_range = 12, - walk_velocity = 0.4, - run_velocity = 2, - damage = 10, - drops = { - {name = "default:mese_crystal", - chance = 1, - min = 1, - max = 1,}, --- {name = "maptools:silver_coin", --- chance = 1, --- min = 8, --- max = 8,}, - }, - armor = 60, - drawtype = "front", - lava_damage = 8, - light_damage = 200, - on_rightclick = nil, - attack_type = "shoot", - arrow = "mobs:fireball", - shoot_interval = 2.5, - sounds = { - attack = "mobs_fireball", - }, - animation = { - stand_start = 0, - stand_end = 19, - walk_start = 20, - walk_end = 35, - punch_start = 36, - punch_end = 48, - speed_normal = 8, - speed_run = 5, - }, -}) - -minetest.register_craftitem("mobs:dungeon_master", { - description = "Dungeon Master", - inventory_image = "mobs_dungeon_master.png", - wield_scale = {x = 1.25, y = 1.25, z = 2.5}, - groups = {not_in_creative_inventory = 1}, - - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.above then - minetest.add_entity(pointed_thing.above, "mobs:dungeon_master") - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end - minetest.log("action", placer:get_player_name() .. " placed a dungeon master at " .. minetest.pos_to_string(pointed_thing.above) .. ".") - end - return itemstack - end, -}) - -mobs:register_arrow("mobs:fireball", { - visual = "sprite", - visual_size = {x = 1, y = 1}, - textures = {"mobs_fireball.png"}, - velocity = 9, - hit_player = function(self, player) - local s = self.object:getpos() - local p = player:getpos() - local vec = {x = s.x - p.x, y = s.y - p.y, z = s.z - p.z} - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = 10}, - }, vec) - local pos = self.object:getpos() - for dx = -1, 1 do - for dy = -1, 1 do - for dz = -1, 1 do - local p = {x = pos.x + dx, y = pos.y + dy, z = pos.z + dz} - local n = minetest.get_node(pos).name - if n ~= "bedrock:bedrock" - and n ~= "default:chest_locked" - and n ~= "bones:bones" - and n ~= "default:chest" - and n ~= "default:furnace" then - minetest.dig_node(p) - end - minetest.sound_play("mobs_fireball_explode", { - pos = s, - gain = 0.1, - max_hear_distance = 48}) - end - end - end - end, - hit_node = function(self, pos, node) - for dx = -1, 1 do - for dy = -2, 1 do - for dz = -1, 1 do - local p = {x = pos.x + dx, y = pos.y + dy, z = pos.z + dz} - local n = minetest.get_node(pos).name - if n ~= "bedrock:bedrock" - and n ~= "default:chest_locked" - and n ~= "bones:bones" - and n ~= "default:chest" - and n ~= "default:furnace" then - minetest.dig_node(p) - end - minetest.sound_play("mobs_fireball_explode", { - pos = s, - gain = 0.1, - max_hear_distance = 48}) - end - end - end - end -}) - -mobs:register_mob("mobs:rhino", { - type = "monster", - hp_max = 25, - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, - visual = "mesh", - mesh = "mobs_sand_monster.x", - textures = {"mobs_rhino.png"}, - visual_size = {x = 8, y = 8}, - makes_footstep_sound = true, - view_range = 10, - walk_velocity = 1.2, - run_velocity = 2.4, - damage = 2, - drops = { - {name = "default:steel_ingot", - chance = 1, - min = 10, - max = 10,}, --- {name = "maptools:silver_coin", --- chance = 1, --- min = 12, --- max = 12,}, - }, - armor = 60, - drawtype = "front", - lava_damage = 8, - light_damage = 1, - on_rightclick = nil, - attack_type = "shoot", - arrow = "mobs:bullet", - shoot_interval = 0.5, - sounds = { - attack = "mobs_bullet", - }, - animation = { - speed_normal = 25, - speed_run = 45, - stand_start = 0, - stand_end = 39, - walk_start = 41, - walk_end = 72, - run_start = 74, - run_end = 105, - punch_start = 74, - punch_end = 105, - }, -}) - -minetest.register_craftitem("mobs:rhino", { - description = "Rhino", - inventory_image = "mobs_rhino.png", - wield_scale = {x = 1.25, y = 1.25, z = 2.5}, - groups = {not_in_creative_inventory = 1}, - - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.above then - minetest.add_entity(pointed_thing.above, "mobs:rhino") - if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end - minetest.log("action", placer:get_player_name() .. " placed a rhino at " .. minetest.pos_to_string(pointed_thing.above) .. ".") - end - return itemstack - end, -}) - -mobs:register_arrow("mobs:bullet", { - visual = "sprite", - visual_size = {x = 0.75, y = 0.75}, - textures = {"mobs_bullet.png"}, - velocity = 18, - hit_player = function(self, player) - local s = self.object:getpos() - local p = player:getpos() - local vec = {x =s.x-p.x, y =s.y-p.y, z =s.z-p.z} - player:punch(self.object, 1.0, { - full_punch_interval= 1.0, - damage_groups = {fleshy = 2}, - }, vec) - local pos = self.object:getpos() - for dx = -1, 1 do - for dy = -1, 1 do - for dz = -1, 1 do - local p = {x = pos.x + dx, y = pos.y + dy, z = pos.z + dz} - local n = minetest.get_node(pos).name - end - end - end - end, - hit_node = function(self, pos, node) - for dx = -1, 1 do - for dy = -2, 1 do - for dz = -1, 1 do - local p = {x = pos.x + dx, y = pos.y + dy, z = pos.z + dz} - local n = minetest.get_node(pos).name - end - end - end - end -}) - -if not minetest.setting_getbool("creative_mode") then - if minetest.setting_getbool("spawn_friendly_mobs") ~= false then -- “If not defined or set to true then” - mobs:register_spawn("mobs:sheep", "a sheep", {"default:dirt_with_grass"}, 16, 8, 20000, 2, 100) - end - if minetest.setting_getbool("spawn_hostile_mobs") ~= false then -- “If not defined or set to true then” - mobs:register_spawn("mobs:dirt_monster", "a dirt monster", {"default:stone", "default:desert_stone"}, 1, -1, 15000, 6, 0) - mobs:register_spawn("mobs:stone_monster", "a stone monster", {"default:stone", "default:desert_stone"}, 1, -1, 15000, 4, 0) - mobs:register_spawn("mobs:sand_monster", "a sand monster", {"default:stone", "default:desert_stone"}, 1, -1, 15000, 4, 0) - mobs:register_spawn("mobs:oerkki", "an oerkki", {"default:stone", "default:desert_stone"}, 1, -1, 20000, 4, 0) - mobs:register_spawn("mobs:tree_monster", "a tree monster", {"default:stone", "default:desert_stone"}, 1, -1, 25000, 2, 0) - mobs:register_spawn("mobs:dungeon_master", "a dungeon master", {"default:stone", "default:desert_stone"}, 1, -1, 25000, 2, -50) - mobs:register_spawn("mobs:rhino", "a rhino", {"default:stone", "default:desert_stone"}, 1, -1, 25000, 2, 0) - end -end - -print('[OK] Mobs loaded!') diff --git a/mods/mobs/init.lua b/mods/mobs/init.lua index 33fd8ef75..065e35406 100644 --- a/mods/mobs/init.lua +++ b/mods/mobs/init.lua @@ -24,24 +24,16 @@ dofile(minetest.get_modpath("mobs").."/spider.lua") dofile(minetest.get_modpath("mobs").."/herobrine.lua") ----mobs:register_spawn(name, description, nodes, max_light, min_light, chance, active_object_count, max_height, spawn_func) if minetest.setting_getbool("spawn_friendly_mobs") ~= false then -- “If not defined or set to true then” - mobs:register_spawn("mobs:sheep", "Sheep", {"default:dirt_with_grass"},16, 8, 2, 250, 100) + mobs:register_spawn("mobs:sheep", "Sheep", {"default:dirt_with_grass"},16, 8, 2, 250, 100) end if minetest.setting_getbool("spawn_hostile_mobs") ~= false then -- “If not defined or set to true then” - mobs:register_spawn("mobs:slime", "Slime", { "default:dirt_with_grass"}, 20, 1, 11, 80, 0) - mobs:register_spawn("mobs:herobrine", "Herobrine", {"head:herobine"}, 20, -1, 100, 1, 0) - mobs:register_spawn("mobs:zombie", "Zombie", {"default:stone", "default:dirt", "default:dirt_with_grass", "default:sand"}, 1, -1, 7, 80, 0) - mobs:register_spawn("mobs:spider", "Spider", {"default:stone", "default:dirt", "default:dirt_with_grass", "default:sand"}, 1, -1, 7, 40, 0) --- mobs:register_spawn("mobs:stone_monster", "a stone monster", {"default:stone", "default:desert_stone"}, 1, -1, 15000, 4, 0) --- mobs:register_spawn("mobs:sand_monster", "a sand monster", {"default:stone", "default:desert_stone"}, 1, -1, 15000, 4, 0) --- mobs:register_spawn("mobs:oerkki", "an oerkki", {"default:stone", "default:desert_stone"}, 1, -1, 20000, 4, 0) --- mobs:register_spawn("mobs:tree_monster", "a tree monster", {"default:stone", "default:desert_stone"}, 1, -1, 25000, 2, 0) --- mobs:register_spawn("mobs:dungeon_master", "a dungeon master", {"default:stone", "default:desert_stone"}, 1, -1, 25000, 2, -50) --- mobs:register_spawn("mobs:rhino", "a rhino", {"default:stone", "default:desert_stone"}, 1, -1, 25000, 2, 0) + mobs:register_spawn("mobs:slime", "Slime", { "default:dirt_with_grass"}, 20, 1, 11, 80, 0) + mobs:register_spawn("mobs:herobrine", "Herobrine", {"head:herobine"}, 20, -1, 100, 1, 0) + mobs:register_spawn("mobs:zombie", "Zombie", {"default:stone", "default:dirt", "default:dirt_with_grass", "default:sand"}, 1, -1, 7, 80, 0) + mobs:register_spawn("mobs:spider", "Spider", {"default:stone", "default:dirt", "default:dirt_with_grass", "default:sand"}, 1, -1, 7, 40, 0) end - local time_to_load= os.clock() - init print(string.format("[MOD] "..minetest.get_current_modname().." loaded in %.4f s", time_to_load))