From a96a93e45fb707aaef0170763a0738aab6327aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lilian=20J=C3=B3nsd=C3=B3ttir?= Date: Thu, 6 Aug 2020 23:24:42 -0700 Subject: [PATCH] fixed public house detection (whoopsie) --- MWSE/mods/celediel/NPCsGoHome/main.lua | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/MWSE/mods/celediel/NPCsGoHome/main.lua b/MWSE/mods/celediel/NPCsGoHome/main.lua index a876f88..b411c50 100644 --- a/MWSE/mods/celediel/NPCsGoHome/main.lua +++ b/MWSE/mods/celediel/NPCsGoHome/main.lua @@ -359,16 +359,18 @@ local function isPublicHouse(cell) -- no NPCs of ignored classes, so let's check out factions for faction, info in pairs(npcs.factions) do - info.percentage = info.total / npcs.total + info.percentage = ( info.total / npcs.total ) * 100 log(common.logLevels.large, - "No NPCs of ignored class in %s, checking faction %s (ignored: %s) with %s (%s%%) vs total %s", cell.name, - faction, config.ignored[faction], info.total, info.percentage * 100, npcs.total) + "No NPCs of ignored class in %s, checking faction %s (ignored: %s, player joined: %s) with %s (%s%%) vs total %s", cell.name, + faction, config.ignored[faction.id], faction.playerJoined, info.total, info.percentage, npcs.total) -- less than 3 NPCs can't possibly be a public house unless it's a Blades house - if config.ignored[faction] and (npcs.total >= config.minimumOccupancy or faction == "Blades") and + if ( config.ignored[faction.id] or faction.playerJoined ) and (npcs.total >= config.minimumOccupancy or faction == "Blades") and info.percentage >= config.factionIgnorePercentage then - log(common.logLevels.medium, "%s is %s%% faction %s, marking public.", cell.name, info.percentage * 100, + log(common.logLevels.medium, "%s is %s%% faction %s, marking public.", cell.name, info.percentage, faction) + + createPublicHouseTableEntry(cell, npcs.factions[faction].master) return true end end @@ -385,11 +387,12 @@ local function isIgnoredDoor(door, homeCellId) return true end - -- Only doors in cities and towns (cells that share the same first characters) return true + -- Only doors in cities and towns (cells whose names share the same first characters) + -- todo: if destination cell name contains outside cell name local inCity = string.sub(homeCellId, 1, 4) == string.sub(door.destination.cell.id, 1, 4) -- peek inside doors to look for guild halls, inns and clubs - local isPublic = isPublicHouse(door.destination.cell) + local leadsToPublicCell = isPublicHouse(door.destination.cell) local hasOccupants = false for npc in door.destination.cell:iterateReferences(tes3.objectType.npc) do @@ -402,10 +405,10 @@ local function isIgnoredDoor(door, homeCellId) log(common.logLevels.large, "%s is %s, %s is %s (%sin a city, is %spublic)", door.destination.cell.id, config.ignored[door.destination.cell.id] and "ignored" or "not ignored", door.destination.cell.sourceMod, config.ignored[door.destination.cell.sourceMod] and "ignored" or "not ignored", inCity and "" or "not ", - isPublic and "" or "not ") + leadsToPublicCell and "" or "not ") return config.ignored[door.destination.cell.id] or config.ignored[door.destination.cell.sourceMod] or not inCity or - isPublicHouse or not hasOccupants + leadsToPublicCell or not hasOccupants end local function isIgnoredCell(cell)