From 4c1160bb48ca46aece1995ab14b58af383572d82 Mon Sep 17 00:00:00 2001 From: thunderdog1138 Date: Fri, 20 Nov 2020 19:48:40 +0000 Subject: [PATCH] Upload files to 'mods/mobs_npc' --- mods/mobs_npc/license.txt | 21 +++++ mods/mobs_npc/lucky_block.lua | 11 +++ mods/mobs_npc/mod.conf | 1 + mods/mobs_npc/npc.lua | 139 ++++++++++++++++++++++++++++++++++ mods/mobs_npc/readme.md | 15 ++++ 5 files changed, 187 insertions(+) create mode 100644 mods/mobs_npc/license.txt create mode 100644 mods/mobs_npc/lucky_block.lua create mode 100644 mods/mobs_npc/mod.conf create mode 100644 mods/mobs_npc/npc.lua create mode 100644 mods/mobs_npc/readme.md diff --git a/mods/mobs_npc/license.txt b/mods/mobs_npc/license.txt new file mode 100644 index 00000000..fec6f6aa --- /dev/null +++ b/mods/mobs_npc/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 TenPlus1 + +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. 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..c2c8d011 --- /dev/null +++ b/mods/mobs_npc/npc.lua @@ -0,0 +1,139 @@ + +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.attack = nil + self.order = "stand" + self.state = "stand" + self:set_animation("stand") + self:set_velocity(0) + + 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, +}) + +if not mobs.custom_spawn_npc then +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, +}) +end + +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