From e1b685429d947bb676ffe1a27d5d99febf809ecd Mon Sep 17 00:00:00 2001 From: ancientmarinerdev Date: Sun, 23 Oct 2022 01:12:19 +0100 Subject: [PATCH] Texture now changes when villager loses job. --- mods/ENTITIES/mcl_mobs/api.lua | 19 +++++++++- mods/ENTITIES/mobs_mc/villager.lua | 59 ++++++++++++++++++++---------- 2 files changed, 56 insertions(+), 22 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 41a23a9de..1ef8a9ab0 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -3128,7 +3128,10 @@ local gopath_last = os.time() function mcl_mobs:gopath(self,target,callback_arrived) if self.state == "gowp" then mcl_log("Already set as gowp, don't set another path until done.") return end - if os.time() - gopath_last < 15 then return end + if os.time() - gopath_last < 15 then + mcl_log("Not ready to path yet") + return + end gopath_last = os.time() self.order = nil @@ -3143,14 +3146,26 @@ function mcl_mobs:gopath(self,target,callback_arrived) --mcl_log("gowp. no wp. Look for door") local d = minetest.find_node_near(target,16,{"group:door"}) if d then + --mcl_log("Found a door near") for _,v in pairs(plane_adjacents) do local pos = vector.add(d,v) local n = minetest.get_node(pos) if n.name == "air" then wp = minetest.find_path(p,pos,150,1,4) - if wp then break end + if wp then + --mcl_log("Found a path to next to door".. minetest.pos_to_string(pos)) + break + + else + --mcl_log("This block next to door doesn't work.") + end + else + --mcl_log("Block is not air, it is: ".. n.name) end + end + else + mcl_log("No door found") end end if wp and #wp > 0 then diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index bd5173d23..885792995 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -550,6 +550,11 @@ end local function get_badge_textures(self) local t = professions[self._profession].texture + if self._profession == "unemployed" then + t = professions[self._profession].textures -- ideally both scenarios should be textures with a list containing 1 or multiple + --mcl_log("t: " .. tostring(t)) + end + if self._profession == "unemployed" or self._profession == "nitwit" then return t end local tier = self._max_trade_tier or 1 return { @@ -670,8 +675,8 @@ local function take_bed (entity) for _,n in pairs(nn) do local m=minetest.get_meta(n) - mcl_log("Bed owner: ".. m:get_string("villager")) - if m:get_string("villager") == "" and not entity.state == "gowp" then + --mcl_log("Bed owner: ".. m:get_string("villager")) + if m:get_string("villager") == "" and not (entity.state == "gowp") then mcl_log("Can we path to bed: "..minetest.pos_to_string(n) ) local gp = mcl_mobs:gopath(entity,n,function(self) if self then @@ -690,7 +695,7 @@ local function take_bed (entity) mcl_log("Awww. I can't find my bed.") end else - mcl_log("Currently gowp, or it's taken.") + mcl_log("Currently gowp, or it's taken: ".. m:get_string("villager")) end end end @@ -742,6 +747,12 @@ end local function has_traded (self) --mcl_log("Checking name: " .. self._trades) + + if not self._trades then + mcl_log("No trades set. has_traded is false") + return false + end + local cur_trades_tab = minetest.deserialize(self._trades) if cur_trades_tab and type(cur_trades_tab) == "table" then @@ -765,7 +776,7 @@ end local function unlock_trades (self) if self then - mcl_log("We should now try to unlock trades") + --mcl_log("We should now try to unlock trades") else mcl_log("Missing self") end @@ -784,15 +795,14 @@ local function employ(self,jobsite_pos) local p = get_profession_by_jobsite(n.name) if p and m:get_string("villager") == "" then mcl_log("Taking this jobsite") - + m:set_string("villager",self._id) self._jobsite = jobsite_pos - if not self.traded then + if not has_traded(self) then self._profession=p set_textures(self) end - return true else mcl_log("I can not steal someone's job!") @@ -801,15 +811,19 @@ end local function look_for_job(self, requested_jobsites) - if self.last_jobhunt and os.time() - self.last_jobhunt < 40 then return end - self.last_jobhunt = os.time() + math.random(0,30) + + --if self.last_jobhunt and os.time() - self.last_jobhunt < 15 then + -- mcl_log("Is time less than 40?" .. tostring(os.time() - self.last_jobhunt)) + -- return + --end + --self.last_jobhunt = os.time() + math.random(0,30) mcl_log("Looking for jobs") local looking_for_type = jobsites if requested_jobsites then - mcl_log("Looking for jobs of my type") - local looking_for_type = requested_jobsites + mcl_log("Looking for jobs of my type: " .. tostring(requested_jobsites)) + looking_for_type = requested_jobsites else mcl_log("Looking for any job type") end @@ -839,7 +853,7 @@ local function look_for_job(self, requested_jobsites) end return n else - mcl_log("We could not path to block") + mcl_log("We could not path to block or it's not ready to path yet.") end end end @@ -899,16 +913,21 @@ local function retrieve_my_jobsite (self) end local function validate_jobsite(self) + if self._profession == "unemployed" then return false end + if not retrieve_my_jobsite (self) then - if not self._traded then + self._jobsite = nil + if self.order == WORK then + self.order = nil + end + + if not has_traded(self) then mcl_log("Cannot retrieve my jobsite. I am now unemployed.") - self._jobsite = nil self._profession = "unemployed" self._trades = nil set_textures(self) - if self.order == WORK then - self.order = nil - end + else + mcl_log("Cannot retrieve my jobsite but I've traded so only remove jobsite.") end return false else @@ -931,12 +950,12 @@ local function do_work (self) if self and jobsite2 and self._jobsite then - mcl_log("Villager: ".. minetest.pos_to_string(self.object:get_pos()) .. ", jobsite: " .. minetest.pos_to_string(self._jobsite)) + --mcl_log("Villager: ".. minetest.pos_to_string(self.object:get_pos()) .. ", jobsite: " .. minetest.pos_to_string(self._jobsite)) if vector.distance(self.object:get_pos(),self._jobsite) < 2 then mcl_log("Made it to work ok!") if not (self.state == "gowp") then - mcl_log("Setting order to work.") + --mcl_log("Setting order to work.") self.order = WORK else mcl_log("Not gowp. What is it: " .. self.state) @@ -1728,7 +1747,7 @@ mcl_mobs:register_mob("mobs_mc:villager", { go_home(self, false) return elseif mcl_beds.is_night() or (weather_mod and mcl_weather.get_weather() == "thunder") then - mcl_log("It's night or thunderstorm. Better get to bed ") + mcl_log("It's night or thunderstorm. Better get to bed. Weather is: " .. mcl_weather.get_weather()) go_home(self, true) return end