diff --git a/big.lua b/big.lua index 08f7ebe..c45b5cc 100644 --- a/big.lua +++ b/big.lua @@ -28,6 +28,7 @@ mobs:register_mob('scorpion:big', { fear_height = 5, drops = { {name = 'mobs:meat_raw', chance = 1, min = 5, max = 20}, + {name = 'scorpion:shell', chance = 1, min = 5, max = 20}, }, water_damage = 2, lava_damage = 60, @@ -43,5 +44,13 @@ mobs:register_mob('scorpion:big', { }, }) -mobs:register_spawn('scorpion:big', {'default:desert_sand'}, 10, 0, 2000, 5, 31000) -mobs:register_egg('scorpion:big', 'Big Scorpion', 'default_grass.png', 1) +mobs:spawn({ + name = 'scorpion:big', + nodes = {'default:desert_sand'}, + max_light = 14, + min_height = -10, + max_height = 150, + interval = 45, + chance = 5000, + active_object_count = 5, +}) diff --git a/boss.lua b/boss.lua index 4f9da3f..27e3f55 100644 --- a/boss.lua +++ b/boss.lua @@ -3,7 +3,7 @@ mobs:register_mob('scorpion:boss', { passive = false, attack_type = 'dogfight', damage = 2, - hp_min = 7.5, hp_max = 17.5, armor = 200, + hp_min = 75, hp_max = 175, armor = 20, collisionbox = {-1, -0.95, -1, 1, .35, 1}, visual = 'mesh', mesh = 'scorpion.b3d', @@ -28,6 +28,7 @@ mobs:register_mob('scorpion:boss', { {name = 'default:diamondblock', chance = 3, min = 4, max = 15}, {name = 'default:mese', chance = 3, min = 4, max = 15}, {name = 'default:steel_ingot', chance = 2, min = 10, max = 40}, + {name = 'scorpion:shell', chance = 1, min = 20, max = 100}, }, water_damage = 20, lava_damage = 60, @@ -46,18 +47,22 @@ mobs:register_mob('scorpion:boss', { }, custom_attack = function(self) - local random_number = math.random(0,7) + local random_number = math.random(20) print (random_number) - if random_number == 3 then + if random_number < 5 then local s = self.object:get_pos() local pos1 = {x=s.x+math.random(-3,3), y=s.y, z=s.z+math.random(-3,3)} minetest.add_entity(pos1, 'scorpion:little') + elseif random_number == 16 then + local s = self.object:get_pos() + local pos1 = {x=s.x+math.random(-3,3), y=s.y, z=s.z+math.random(-3,3)} + minetest.add_entity(pos1, 'scorpion:big') end end, on_die = function(self) - local random_number = math.random(0,10) - --if random_number == 2 then + local random_number = math.random(0,2) + if random_number == 1 then local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius(pos, 4) for _, obj in pairs(objs) do @@ -82,9 +87,17 @@ mobs:register_mob('scorpion:boss', { ent2.child = true end end - --end + end end, }) -mobs:register_spawn('scorpion:boss', {'default:desert_stone'}, 10, 0, 5000, 1, 31000) -mobs:register_egg('scorpion:boss', 'Boss Scorpion', 'default_grass.png', 1) +mobs:spawn({ + name = 'scorpion:big', + nodes = {'default:desert_stone'}, + max_light = 14, + min_height = 0, + max_height = 150, + interval = 60, + chance = 9000, + active_object_count = 1, +}) diff --git a/init.lua b/init.lua index 7033415..6ba17a2 100644 --- a/init.lua +++ b/init.lua @@ -1,8 +1,9 @@ -if mobs.mod and mobs.mod == "redo" then - dofile(minetest.get_modpath('scorpion')..'/little.lua') dofile(minetest.get_modpath('scorpion')..'/big.lua') dofile(minetest.get_modpath('scorpion')..'/boss.lua') dofile(minetest.get_modpath('scorpion')..'/pet.lua') -end +minetest.register_craftitem('scorpion:shell', { + description = 'Piece of insect shell', + inventory_image = 'scorpion_shell_piece.png', +}) diff --git a/little.lua b/little.lua index 809ce28..69599be 100644 --- a/little.lua +++ b/little.lua @@ -7,7 +7,6 @@ mobs:register_mob('scorpion:little', { collisionbox = {-0.6, -0.35, -0.5, 0.6, 0.3, 0.5}, visual = 'mesh', mesh = 'scorpion.b3d', - drawtype = 'front', textures = { {'scorpion_red.png'}, {'scorpion_green.png'}, @@ -24,10 +23,11 @@ mobs:register_mob('scorpion:little', { jump = true, stepheight = 1.7, reach = 3, - view_range = 6, + view_range = 7, fear_height = 2, drops = { {name = 'mobs:meat_raw', chance = 1, min = 2, max = 8}, + {name = 'scorpion:shell', chance = 1, min = 1, max = 10}, }, water_damage = 2, lava_damage = 60, @@ -43,5 +43,12 @@ mobs:register_mob('scorpion:little', { }, }) -mobs:register_spawn('scorpion:little', {'default:dirt_with_rainforest_litter', 'default:desert_sand'}, 10, 0, 2000, 7, 31000) -mobs:register_egg('scorpion:little', 'Little Scorpion', 'default_grass.png', 1) +mobs:spawn({ + name = 'scorpion:little', + nodes = {'default:desert_sand', 'default:dirt_with_rainforest_litter', 'default:dry_dirt_with_grass'}, + min_height = -10, + max_height = 200, + interval = 45, + chance = 3000, + active_object_count = 5, +}) diff --git a/pet.lua b/pet.lua index 3927399..4441ea1 100644 --- a/pet.lua +++ b/pet.lua @@ -1,3 +1,8 @@ +local get_distance = function(a, b) + local x, y, z = a.x - b.x, a.y - b.y, a.z - b.z + return (x * x + y * y + z * z) +end + mobs:register_mob('scorpion:pet', { type = 'npc', passive = false, @@ -5,7 +10,7 @@ mobs:register_mob('scorpion:pet', { owner_loyal = true, pathfinding = true, damage = 10, - hp_min = 30, hp_max = 75, armor = 45, + hp_min = 30, hp_max = 75, armor = 20, collisionbox = {-0.6, -0.35, -0.5, 0.6, 0.3, 0.5}, visual = 'mesh', mesh = 'scorpion.b3d', @@ -15,6 +20,7 @@ mobs:register_mob('scorpion:pet', { {'scorpion_green.png^scorpion_pet.png'}, {'scorpion_tan.png^scorpion_pet.png'}, }, + follow = {'mobs:meat_raw', 'mobs:chicken_raw'}, blood_texture = 'mobs_blood.png', visual_size = {x=8,y=8}, makes_footstep_sound = true, @@ -28,10 +34,11 @@ mobs:register_mob('scorpion:pet', { reach = 4, view_range = 15, fear_height = 2, - ower = '', + owner = '', order = 'follow', drops = { {name = 'mobs:meat_raw', chance = 1, min = 2, max = 8}, + {name = 'scorpion:shell', chance = 1, min = 5, max = 20}, }, water_damage = 1, lava_damage = 6, @@ -52,27 +59,51 @@ mobs:register_mob('scorpion:pet', { for _, obj in pairs(objs) do if obj:is_player() then local owner = obj:get_player_name() - print ('owner name is '..owner) self.owner = owner + minetest.chat_send_player(owner, "Aww, a baby scorpion think you're its parent!") end end + return true end, on_rightclick = function(self, clicker) local name = clicker:get_player_name() + if mobs:feed_tame(self, clicker, 10, false, true) then + return + end if self.owner and self.owner == name then - if self.order == "follow" then - self.order = "stand" - minetest.chat_send_player(name, ("Scorpion holding ground.")) + if self.order == 'follow' then + self.order = 'stand' + minetest.chat_send_player(name, ('Scorpion holding ground.')) else - self.order = "follow" - minetest.chat_send_player(name, ("Scorpion following you.")) + self.order = 'follow' + minetest.chat_send_player(name, ('Scorpion following you.')) end + mobs:capture_mob(self, clicker, 20, 0, 100, false, nil) end end, on_grown = function(self) - print 'your pet grew up.' + local owner = self.owner + minetest.chat_send_player(owner, ('Your pet scorpion grew up!')) + end, + + do_custom = function(self, dtime) --Thanks to IhrFussel for many ideas used in this code block. + self.dtime = (self.dtime or 0) + dtime + if self.dtime < 5 then + return + end + self.dtime = 0 + local pet_pos = self.object:get_pos() + local owner = minetest.get_player_by_name(self.owner) or false + if owner then --and self.state == "walk + local distance = get_distance(owner:getpos(), pet_pos) + if distance > 1000 then --should teleport to player + if self.order == 'follow' then --but only if following + self.object:set_pos(owner:getpos()) + end + end + end end, }) diff --git a/textures/scorpion_armor.png b/textures/scorpion_armor.png index 55c93ce..33e671a 100644 Binary files a/textures/scorpion_armor.png and b/textures/scorpion_armor.png differ diff --git a/textures/scorpion_pet.png b/textures/scorpion_pet.png index eb60f17..80ea7c7 100644 Binary files a/textures/scorpion_pet.png and b/textures/scorpion_pet.png differ diff --git a/textures/scorpion_shell_piece.png b/textures/scorpion_shell_piece.png new file mode 100644 index 0000000..ba56a33 Binary files /dev/null and b/textures/scorpion_shell_piece.png differ