From 10e2c174d42a74b48cd57b525cc5facd8f954c32 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 4 Jun 2018 14:59:10 +0200 Subject: [PATCH] Pick random villager profession on spawn --- mods/ENTITIES/mobs_mc/villager.lua | 55 +++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 53b9aca7bb..faa86b12ce 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -11,9 +11,11 @@ local S, NS = dofile(MP.."/intllib.lua") --################### VILLAGER --################### +-- LIST OF VILLAGES PROFESSIONS AND TRADES local E1 = { "mcl_core:emerald", 1, 1 } -- one emerald local professions = { - { + farmer = { + id = "farmer", name = "Farmer", trades = { { @@ -39,7 +41,8 @@ local professions = { }, } }, - { + fisherman = { + id = "fisherman", name = "Fisherman", trades = { { @@ -50,7 +53,8 @@ local professions = { -- TODO: enchanted fishing rod }, }, - { + fletcher = { + id = "fletcher", name = "Fletcher", trades = { { @@ -64,7 +68,8 @@ local professions = { }, } }, - { + shepherd ={ + id = "shepherd", name = "Shepherd", trades = { { @@ -91,7 +96,8 @@ local professions = { }, }, }, - { + librarian = { + id = "librarian", name = "Librarian", trades = { { @@ -119,7 +125,8 @@ local professions = { } }, }, - { + cartographer = { + id = "cartographer", name = "Cartographer", trades = { { @@ -138,7 +145,8 @@ local professions = { -- TODO: special maps }, }, - { + armorer = { + id = "armorer", name = "Armorer", trades = { { @@ -165,7 +173,7 @@ local professions = { }, }, }, - { + leatherworker = { name = "Leatherworker", trades = { { @@ -183,7 +191,7 @@ local professions = { }, }, }, - { + butcher = { name = "Butcher", trades = { { @@ -198,7 +206,7 @@ local professions = { }, }, }, - { + weapon_smith = { name = "Weapon Smith", trades = { { @@ -221,7 +229,7 @@ local professions = { }, }, }, - { + tool_smith = { name = "Tool Smith", trades = { { @@ -243,7 +251,7 @@ local professions = { }, }, }, - { + cleric = { name = "Cleric", trades = { { @@ -267,6 +275,21 @@ local professions = { -- TODO: Nitwit } +local profession_names = {} +for id, _ in pairs(professions) do + table.insert(profession_names, id) +end + +local init_profession = function(self) + if not self._profession then + local p = math.random(1, #profession_names) + self._profession = profession_names[p] + end + if not self._max_trade_tier then + -- TODO: Randomize + self._max_trade_tier = 10 + end +end mobs:register_mob("mobs_mc:villager", { type = "npc", @@ -414,7 +437,9 @@ mobs:register_mob("mobs_mc:villager", { inv:set_stack("offered", i, "") end - local profession = professions[math.random(1, #professions)] + init_profession(self) + local profession = professions[self._profession] + local trade_tiers = profession.trades if trade_tiers == nil then return @@ -452,6 +477,10 @@ mobs:register_mob("mobs_mc:villager", { minetest.sound_play("mobs_mc_villager_trade", {to_player = clicker:get_player_name()}) minetest.show_formspec(clicker:get_player_name(), "mobs_mc:trade", formspec) end, + + on_spawn = function(self) + init_profession(self) + end, }) -- Returns a single itemstack in the given inventory to the player's main inventory, or drop it when there's no space left