diff --git a/mods/mobs_npc/lucky_block.lua b/mods/mobs_npc/lucky_block.lua new file mode 100644 index 00000000..98735619 --- /dev/null +++ b/mods/mobs_npc/lucky_block.lua @@ -0,0 +1,11 @@ + +if minetest.get_modpath("lucky_block") then + + lucky_block:add_blocks({ + {"spw", "mobs:npc", 1, true, true}, + {"spw", "mobs:igor", 1, true, true, 5, "Igor"}, + {"spw", "mobs:trader", 1, false, false}, + {"lig", "fire:permanent_flame"}, + }) + +end diff --git a/mods/mobs_npc/mod.conf b/mods/mobs_npc/mod.conf new file mode 100644 index 00000000..9646cf74 --- /dev/null +++ b/mods/mobs_npc/mod.conf @@ -0,0 +1 @@ +name = mobs_npc diff --git a/mods/mobs_npc/npc.lua b/mods/mobs_npc/npc.lua new file mode 100644 index 00000000..071d2b5c --- /dev/null +++ b/mods/mobs_npc/npc.lua @@ -0,0 +1,132 @@ + +local S = mobs.intllib + +-- Npc by TenPlus1 + +mobs.npc_drops = { + "default:pick_steel", "mobs:meat", "default:sword_steel", + "default:shovel_steel", "farming:bread", "bucket:bucket_water" +} + +mobs:register_mob("mobs_npc:npc", { + type = "npc", + passive = false, + damage = 3, + attack_type = "dogfight", + attacks_monsters = true, + attack_npcs = false, + owner_loyal = true, + pathfinding = true, + hp_min = 10, + hp_max = 20, + armor = 100, + collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35}, + visual = "mesh", + mesh = "mobs_character.b3d", + drawtype = "front", + textures = { + {"mobs_npc.png"}, + {"mobs_npc2.png"}, -- female by nuttmeg20 + }, + child_texture = { + {"mobs_npc_baby.png"}, -- derpy baby by AmirDerAssassine + }, + makes_footstep_sound = true, + sounds = {}, + walk_velocity = 2, + run_velocity = 3, + jump = true, + drops = { + {name = "default:wood", chance = 1, min = 1, max = 3}, + {name = "default:apple", chance = 2, min = 1, max = 2}, + {name = "default:axe_stone", chance = 5, min = 1, max = 1}, + }, + water_damage = 0, + lava_damage = 2, + light_damage = 0, + follow = {"farming:bread", "mobs:meat", "default:diamond"}, + view_range = 15, + owner = "", + order = "follow", + fear_height = 3, + animation = { + speed_normal = 30, + speed_run = 30, + stand_start = 0, + stand_end = 79, + walk_start = 168, + walk_end = 187, + run_start = 168, + run_end = 187, + punch_start = 200, + punch_end = 219, + }, + on_rightclick = function(self, clicker) + + -- feed to heal npc + if mobs:feed_tame(self, clicker, 8, true, true) then return end + + -- capture npc with net or lasso + if mobs:capture_mob(self, clicker, nil, 5, 80, false, nil) then return end + + -- protect npc with mobs:protector + if mobs:protect(self, clicker) then return end + + local item = clicker:get_wielded_item() + local name = clicker:get_player_name() + + -- right clicking with gold lump drops random item from mobs.npc_drops + if item:get_name() == "default:gold_lump" then + + if not mobs.is_creative(name) then + item:take_item() + clicker:set_wielded_item(item) + end + + local pos = self.object:get_pos() + + pos.y = pos.y + 0.5 + + local drops = self.npc_drops or mobs.npc_drops + + minetest.add_item(pos, { + name = drops[math.random(1, #drops)] + }) + + minetest.chat_send_player(name, S("NPC dropped you an item for gold!")) + + return + end + + -- by right-clicking owner can switch npc between follow and stand + if self.owner and self.owner == name then + + if self.order == "follow" then + self.order = "stand" + + minetest.chat_send_player(name, S("NPC stands still.")) + else + self.order = "follow" + + minetest.chat_send_player(name, S("NPC will follow you.")) + end + end + + end, +}) + +mobs:spawn({ + name = "mobs_npc:npc", + nodes = {"default:brick"}, + neighbors = {"default:grass_3"}, + min_light = 10, + chance = 10000, + active_object_count = 1, + min_height = 0, + day_toggle = true, +}) + +mobs:register_egg("mobs_npc:npc", S("Npc"), "default_brick.png", 1) + +-- compatibility +mobs:alias_mob("mobs:npc", "mobs_npc:npc") diff --git a/mods/mobs_npc/readme.md b/mods/mobs_npc/readme.md new file mode 100644 index 00000000..43e0d285 --- /dev/null +++ b/mods/mobs_npc/readme.md @@ -0,0 +1,15 @@ + +NPC MOBS + + +NPC + +- While NPC's don't actually spawn in the world just yet, they do have a spawn egg available to drop him/her into the world and wander around defending himself if attacked. It will also he will help you attack any monsters in the area and will follow you if you hold a diamond. Right-clicking the NPC with a gold lump will make him drop steel tools or food, right-clicking with an empty hand orders the NPC to stay or follow if owned. + +Trader + +- Traders are new and still being tested but can be placed into the world using a spawn egg. Right-clicking on a trader opens his shop and allows you to buy his wares inside. If provoked a trader will attack a player or monster. + +Note: self.npc_drops and self.igor_drops are used for random item list when trading for gold and may be changed within the mob itself, if not found the global mobs.npc_drops and mobs.igor_drops are used instead for a default list. + +Lucky Blocks: 4 diff --git a/mods/mobs_npc/screenshot.png b/mods/mobs_npc/screenshot.png new file mode 100644 index 00000000..631f73b1 Binary files /dev/null and b/mods/mobs_npc/screenshot.png differ