{ "schemaVersion": 1, "dungeonId": "kalins-shrine", "zoneId": 107, "status": "review-required", "source": { "populationRecipe": "scripts/runewaker-pipeline/recipes/kalins-shrine-population.json", "snapshot": "scripts/runewaker-pipeline/snapshots/kalins-shrine-zone-107.json", "snapshotContentSha256": "fea45d739ae54018ae5882576f0ce1a9635c9bb16e4a1ecca4a84496fcbca4bc", "dungeonConfig": "../rom-pvt-server-backups/Runewaker/Tools/dungeon_config.json", "dungeonConfigId": "kalins_shrine" }, "configuredBossTemplateIds": [ 100237, 101500, 101501, 101502, 101503, 101507 ], "configuredBossPositions": { "100237": { "name": "Regin", "x": 2086.63, "y": 175.47, "z": 6318.56, "kx": 2086.63, "ky": 175.47, "kz": 6288.56, "autoplot": "LuaI_KS_Loc6", "zone_spawn": false, "px": 2788.39, "py": 717.84, "pz": 1750.55, "pdir": 0 }, "101500": { "name": "Goddess", "x": 2398.91, "y": 340.5, "z": 4914.04, "kx": 2398.91, "ky": 340.5, "kz": 4884.04, "autoplot": "LuaI_KS_Loc4", "zone_spawn": false, "px": 2788.39, "py": 717.84, "pz": 1750.55, "pdir": 0 }, "101501": { "name": "Yusalien", "x": 2654.01, "y": 504.57, "z": 2190.08, "kx": 2654.01, "ky": 504.57, "kz": 2160.08, "autoplot": "LuaI_KS_Loc2", "zone_spawn": false, "px": 2788.39, "py": 717.84, "pz": 1750.55, "pdir": 0 }, "101502": { "name": "Locatha", "x": 1841.97, "y": 341.01, "z": 3296.52, "kx": 1841.97, "ky": 341.01, "kz": 3266.52, "autoplot": "LuaI_KS_Loc3", "zone_spawn": false, "px": 2788.39, "py": 717.84, "pz": 1750.55, "pdir": 0 }, "101503": { "name": "Ensia", "x": 2413, "y": 87.96, "z": 5436.44, "kx": 2413, "ky": 87.96, "kz": 5406.44, "autoplot": "LuaI_KS_Loc5", "zone_spawn": false, "px": 2788.39, "py": 717.84, "pz": 1750.55, "pdir": 0 }, "101507": { "name": "Iron Rune Warrior", "x": 2788.39, "y": 717.84, "z": 1780.55, "kx": 2788.39, "ky": 717.84, "kz": 1750.55, "autoplot": "LuaI_KS_Loc1", "zone_spawn": false, "px": 2788.39, "py": 717.84, "pz": 1750.55, "pdir": 0 } }, "bossRows": [ { "spawnId": 5952167, "templateId": 101507, "name": "Iron Rune Warrior", "sourcePosition": [ 2696, 717.8355712890625, 1600 ], "autoPlot": null, "plotClassName": null }, { "spawnId": 5952226, "templateId": 101502, "name": "Locatha", "sourcePosition": [ 1657.823974609375, 194.43809509277344, 3445.680908203125 ], "autoPlot": null, "plotClassName": null }, { "spawnId": 5952255, "templateId": 101503, "name": "Ensia", "sourcePosition": [ 2155.06689453125, 87.957763671875, 5242.46923828125 ], "autoPlot": "LuaI_101503_Set", "plotClassName": null }, { "spawnId": 5952258, "templateId": 101500, "name": "Goddess of Art's Disciple", "sourcePosition": [ 2165, 340.5011901855469, 4954 ], "autoPlot": null, "plotClassName": null }, { "spawnId": 5952260, "templateId": 101501, "name": "Yusalien", "sourcePosition": [ 2662.055908203125, 504.5624084472656, 2194.0009765625 ], "autoPlot": null, "plotClassName": null } ], "luaSources": [ { "file": "03248.lua", "exists": true, "sha256": "9ed7a16a717ecf7ebce9d1d98b7daa322e976daa39e0c04906788c76f1639359", "functions": [ "LuaI_KS_Entry", "KS_Entry_Touch", "LuaS_KS_Entry", "KS_EntryCancel", "KS_ShowGroupSelect", "KS_PickSolo", "KS_PickDuo", "KS_PickParty", "KS_ShowLevelSelect", "KS_PickLv1", "KS_PickLv10", "KS_PickLv20", "KS_PickLv30", "KS_PickLv40", "KS_PickLv50", "KS_EnterDungeon" ], "referencedIds": [], "signalCounts": { "summon": 0, "door": 0, "timer": 1, "movement": 0, "spell": 0, "death": 0, "phase": 0, "interaction": 24, "loot": 0 } }, { "file": "03246.lua", "exists": true, "sha256": "4433ae50f4e6d5945886228de9796552cdd69ad5725a300467f7dcf5baac553d", "functions": [ "MS_CopySpawn", "MS_ReadItemValue", "MS_FindGrantedBodySlot", "MS_GiveConfiguredItem", "MS_SortedLocs", "MS_BuildLegacyLocData", "MS_RebuildLocCaches", "MS_EnsureLocConfig", "MS_GetLocData", "MS_GetLocDisplayName", "MS_GetCurrencyLabel", "MS_GetZoneForLoc", "MS_GetKeeperPos", "MS_GetPlayerPos", "MS_GetChestPos", "MS_LocHasChest", "MS_GetActiveLocsForLevel", "MS_FindLiveDungeonSpawnByZone", "MS_GetRespawnPos", "MS_ClearReviveDebuffs", "MS_HandlePostRevive", "MS_PostReviveMove", "LuaI_MS_ZoneInit", "LuaZone_MS_Revive", "MS_GetModeBuffID", "MS_ApplyModeBuff", "MS_StartModeBuffWatch", "MS_RunModeBuffWatch", "MS_StartRoomBuffAudit", "MS_RunRoomBuffAudit", "MS_TeleportGroupWithBuff", "LuaI_MS_Mom", "MS_Mom_Touch", "LuaS_MS_Mom", "MS_MomCancel", "MS_ShowGroupSelect", "MS_PickSolo", "MS_PickDuo", "MS_PickParty", "MS_ShowLevelSelect", "MS_PickLv1", "MS_PickLv5", "MS_PickLv10", "MS_PickLv20", "MS_PickLv30", "MS_PickLv40", "MS_PickLv50", "MS_EnterZone", "MS_TeleportIn", "MS_LocInit", "LuaI_MS_Loc1", "LuaI_MS_Loc2", "LuaI_MS_Loc3", "LuaI_MS_Loc4", "LuaI_KS_Loc1", "LuaI_KS_Loc2", "LuaI_KS_Loc3", "LuaI_KS_Loc4", "LuaI_KS_Loc5", "LuaI_KS_Loc6", "LuaI_MS_TravelKeeper", "MS_LocBitSet", "MS_GetUncleared", "MS_TeleportGroup", "MS_BossKey", "MS_GetBossState", "MS_EnsureBossState", "MS_RecordBossSpawn", "MS_RecordBossKill", "MS_IsTrackedBossOrg", "MS_FindLivingBossInRoom", "MS_HasLivingBossInRoom", "MS_UpdateBossRoomState", "MS_IsBossKilled", "MS_RegisterLocHandlers", "MS_RollLoot", "MS_GetRewardState", "MS_IsRewardClaimed", "MS_GrantLocLootToParty", "MS_GrantFallbackReward", "MS_ChestInit", "MS_SpawnChestForKeeper", "MS_ChestTouch", "MS_AuditKeeperRoom", "MS_GetKeeperShopLevel", "MS_GetKeeperShopCategoryName", "MS_GetKeeperShopPool", "MS_GetKeeperShopItemsFor", "MS_GetKeeperShopCategoryCount", "MS_GetKeeperNativeShop", "MS_OpenKeeperNativeShop", "MS_ShowKeeperShopCategories", "MS_ShowKeeperShop", "MS_KeeperShopCategory", "MS_KeeperShopPage", "MS_KeeperBuy", "MS_KeeperRepair", "MS_Keeper_Touch", "LuaS_MS_Keeper", "MS_TestShowPageFromKeeper", "MS_StayHere", "MS_GoNext", "MS_DoGoNext", "MS_Quit", "MS_DoQuit", "MS_StayHere", "MS_TestShowGroupSelect", "MS_TestPickSolo", "MS_TestPickDuo", "MS_TestPickParty", "MS_TestShowPage", "MS_TestNextPage", "MS_TestPrevPage", "MS_TestShowBracket", "MS_TestTeleport", "MS_TestGo1", "MS_TestGo2", "MS_TestGo3", "MS_TestGo4", "MS_TestGo5", "MS_TestGo6", "MS_TestGo7", "_ms_test_pick" ], "referencedIds": [ 104534 ], "signalCounts": { "summon": 6, "door": 0, "timer": 10, "movement": 1, "spell": 7, "death": 18, "phase": 53, "interaction": 73, "loot": 70 } } ], "luaSignals": [ { "file": "03248.lua", "line": 41, "kinds": [ "interaction" ], "text": "CallSpeakLua( TargetID(), OwnerID(), \"LuaS_KS_Entry\" )" }, { "file": "03248.lua", "line": 45, "kinds": [ "interaction" ], "text": "SetSpeakDetail( OwnerID(), \"I can take you to Kalin's Shrine.\" )" }, { "file": "03248.lua", "line": 46, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Enter the dungeon\", \"KS_ShowGroupSelect\", 0 )" }, { "file": "03248.lua", "line": 47, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Nevermind\", \"KS_EntryCancel\", 0 )" }, { "file": "03248.lua", "line": 51, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03248.lua", "line": 58, "kinds": [ "interaction" ], "text": "SetSpeakDetail( OwnerID()," }, { "file": "03248.lua", "line": 63, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Solo (1 player)\", \"KS_PickSolo\", 0 )" }, { "file": "03248.lua", "line": 64, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Duo (2 players)\", \"KS_PickDuo\", 0 )" }, { "file": "03248.lua", "line": 65, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Party (6 players)\", \"KS_PickParty\", 0 )" }, { "file": "03248.lua", "line": 66, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Back\", \"LuaS_KS_Entry\", 0 )" }, { "file": "03248.lua", "line": 88, "kinds": [ "interaction" ], "text": "SetSpeakDetail( OwnerID(), \"Choose a level bracket:\" )" }, { "file": "03248.lua", "line": 89, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 1\", \"KS_PickLv1\", 0 )" }, { "file": "03248.lua", "line": 90, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 10\", \"KS_PickLv10\", 0 )" }, { "file": "03248.lua", "line": 91, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 20\", \"KS_PickLv20\", 0 )" }, { "file": "03248.lua", "line": 92, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 30\", \"KS_PickLv30\", 0 )" }, { "file": "03248.lua", "line": 93, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 40\", \"KS_PickLv40\", 0 )" }, { "file": "03248.lua", "line": 94, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 50\", \"KS_PickLv50\", 0 )" }, { "file": "03248.lua", "line": 95, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Back\", \"KS_ShowGroupSelect\", 0 )" }, { "file": "03248.lua", "line": 100, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03248.lua", "line": 106, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03248.lua", "line": 112, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03248.lua", "line": 118, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03248.lua", "line": 124, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03248.lua", "line": 130, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03248.lua", "line": 144, "kinds": [ "timer" ], "text": "sleep( 5 )" }, { "file": "03246.lua", "line": 46, "kinds": [ "loot" ], "text": "MS_LOOT_POOL = {" }, { "file": "03246.lua", "line": 49, "kinds": [ "loot" ], "text": "MS_LOOT_BY_LEVEL = {" }, { "file": "03246.lua", "line": 106, "kinds": [ "death" ], "text": "MS_ROOM_PLAYER_DEAD = {}" }, { "file": "03246.lua", "line": 109, "kinds": [ "loot" ], "text": "MS_CHEST_OBJECT_ID = 104534" }, { "file": "03246.lua", "line": 159, "kinds": [ "loot" ], "text": "[14] = \"Duelist Reward\"," }, { "file": "03246.lua", "line": 162, "kinds": [ "phase", "loot" ], "text": "MS_CHEST_STATE = {}" }, { "file": "03246.lua", "line": 163, "kinds": [ "loot" ], "text": "MS_CHEST_BY_OBJ = {}" }, { "file": "03246.lua", "line": 247, "kinds": [ "loot" ], "text": "chest = MS_CopySpawn( player )," }, { "file": "03246.lua", "line": 350, "kinds": [ "loot" ], "text": "function MS_GetChestPos( loc )" }, { "file": "03246.lua", "line": 352, "kinds": [ "loot" ], "text": "if data ~= nil and data.chest ~= nil then" }, { "file": "03246.lua", "line": 353, "kinds": [ "loot" ], "text": "return data.chest" }, { "file": "03246.lua", "line": 358, "kinds": [ "loot" ], "text": "function MS_LocHasChest( loc )" }, { "file": "03246.lua", "line": 359, "kinds": [ "loot" ], "text": "return MS_CHEST_OBJECT_ID ~= nil and MS_CHEST_OBJECT_ID > 0 and MS_GetChestPos( loc ) ~= nil" }, { "file": "03246.lua", "line": 414, "kinds": [ "death" ], "text": "if pos ~= nil and ReadRoleValue( player, EM_RoleValue_IsDead ) ~= 1 then" }, { "file": "03246.lua", "line": 429, "kinds": [ "death" ], "text": "if ReadRoleValue( player, EM_RoleValue_IsDead ) ~= 1 then" }, { "file": "03246.lua", "line": 434, "kinds": [ "timer" ], "text": "sleep( 2 )" }, { "file": "03246.lua", "line": 500, "kinds": [ "death" ], "text": "if ReadRoleValue( player, EM_RoleValue_IsDead ) ~= 1 then" }, { "file": "03246.lua", "line": 505, "kinds": [ "timer" ], "text": "sleep( 10 )" }, { "file": "03246.lua", "line": 537, "kinds": [ "death" ], "text": "local isDead = ReadRoleValue( player, EM_RoleValue_IsDead ) == 1" }, { "file": "03246.lua", "line": 543, "kinds": [ "death" ], "text": "if isDead then" }, { "file": "03246.lua", "line": 544, "kinds": [ "death" ], "text": "MS_ROOM_PLAYER_DEAD[player] = true" }, { "file": "03246.lua", "line": 546, "kinds": [ "death" ], "text": "if MS_ROOM_PLAYER_DEAD[player] == true then" }, { "file": "03246.lua", "line": 549, "kinds": [ "death" ], "text": "MS_ROOM_PLAYER_DEAD[player] = false" }, { "file": "03246.lua", "line": 556, "kinds": [ "death" ], "text": "MS_ROOM_PLAYER_DEAD[player] = nil" }, { "file": "03246.lua", "line": 561, "kinds": [ "timer" ], "text": "sleep( 10 )" }, { "file": "03246.lua", "line": 582, "kinds": [ "timer" ], "text": "sleep( 5 )" }, { "file": "03246.lua", "line": 598, "kinds": [ "interaction" ], "text": "CallSpeakLua( TargetID(), OwnerID(), \"LuaS_MS_Mom\" )" }, { "file": "03246.lua", "line": 602, "kinds": [ "timer", "interaction" ], "text": "SetSpeakDetail( OwnerID(), \"The Manastorms await. Choose your fate.\" )" }, { "file": "03246.lua", "line": 603, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Enter Manastorms\", \"MS_ShowGroupSelect\", 0 )" }, { "file": "03246.lua", "line": 604, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"[TEST] Live Dungeon Travel\", \"MS_TestShowGroupSelect\", 0 )" }, { "file": "03246.lua", "line": 605, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Nevermind\", \"MS_MomCancel\", 0 )" }, { "file": "03246.lua", "line": 609, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03246.lua", "line": 615, "kinds": [ "interaction" ], "text": "SetSpeakDetail( OwnerID()," }, { "file": "03246.lua", "line": 620, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Solo (1 player)\", \"MS_PickSolo\", 0 )" }, { "file": "03246.lua", "line": 621, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Duo (2 players)\", \"MS_PickDuo\", 0 )" }, { "file": "03246.lua", "line": 622, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Party (6 players)\", \"MS_PickParty\", 0 )" }, { "file": "03246.lua", "line": 623, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Back\", \"LuaS_MS_Mom\", 0 )" }, { "file": "03246.lua", "line": 634, "kinds": [ "interaction" ], "text": "SetSpeakDetail( OwnerID(), \"Choose a level bracket:\" )" }, { "file": "03246.lua", "line": 635, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 1\", \"MS_PickLv1\", 0 )" }, { "file": "03246.lua", "line": 636, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 5\", \"MS_PickLv5\", 0 )" }, { "file": "03246.lua", "line": 637, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 10\", \"MS_PickLv10\", 0 )" }, { "file": "03246.lua", "line": 638, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 20\", \"MS_PickLv20\", 0 )" }, { "file": "03246.lua", "line": 639, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 30\", \"MS_PickLv30\", 0 )" }, { "file": "03246.lua", "line": 640, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 40\", \"MS_PickLv40\", 0 )" }, { "file": "03246.lua", "line": 641, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Level 50\", \"MS_PickLv50\", 0 )" }, { "file": "03246.lua", "line": 642, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Back\", \"MS_ShowGroupSelect\", 0 )" }, { "file": "03246.lua", "line": 658, "kinds": [ "interaction" ], "text": "SetSpeakDetail( Player, \"There are no active Manastorm boss rooms configured for this bracket yet.\" )" }, { "file": "03246.lua", "line": 659, "kinds": [ "interaction" ], "text": "AddSpeakOption( Player, TargetID(), \"Back\", \"MS_ShowLevelSelect\", 0 )" }, { "file": "03246.lua", "line": 670, "kinds": [ "interaction" ], "text": "CloseSpeak( Player )" }, { "file": "03246.lua", "line": 683, "kinds": [ "timer" ], "text": "sleep( 5 )" }, { "file": "03246.lua", "line": 783, "kinds": [ "movement" ], "text": "MS_BOSS_KILL_REQUIRED = false -- flip to true once boss AutoPlots are set up" }, { "file": "03246.lua", "line": 786, "kinds": [ "phase" ], "text": "MS_BossState = {}" }, { "file": "03246.lua", "line": 792, "kinds": [ "phase" ], "text": "function MS_GetBossState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 793, "kinds": [ "phase" ], "text": "return MS_BossState[ MS_BossKey(zoneID, roomID, loc) ]" }, { "file": "03246.lua", "line": 796, "kinds": [ "phase" ], "text": "function MS_EnsureBossState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 798, "kinds": [ "phase" ], "text": "local state = MS_BossState[key]" }, { "file": "03246.lua", "line": 799, "kinds": [ "phase" ], "text": "if state == nil then" }, { "file": "03246.lua", "line": 800, "kinds": [ "death", "phase" ], "text": "state = { spawned=false, dead=false, bossID=0, orgID=0 }" }, { "file": "03246.lua", "line": 801, "kinds": [ "phase" ], "text": "MS_BossState[key] = state" }, { "file": "03246.lua", "line": 803, "kinds": [ "phase" ], "text": "return state" }, { "file": "03246.lua", "line": 810, "kinds": [ "phase" ], "text": "local state = MS_EnsureBossState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 811, "kinds": [ "phase" ], "text": "state.spawned = true" }, { "file": "03246.lua", "line": 812, "kinds": [ "death", "phase" ], "text": "state.dead = false" }, { "file": "03246.lua", "line": 813, "kinds": [ "phase" ], "text": "state.bossID = npc" }, { "file": "03246.lua", "line": 814, "kinds": [ "phase" ], "text": "state.orgID = ReadRoleValue( npc, EM_RoleValue_OrgID )" }, { "file": "03246.lua", "line": 818, "kinds": [ "spell" ], "text": "function MS_RecordBossKill( loc )" }, { "file": "03246.lua", "line": 822, "kinds": [ "phase" ], "text": "local state = MS_EnsureBossState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 823, "kinds": [ "phase" ], "text": "state.spawned = true" }, { "file": "03246.lua", "line": 824, "kinds": [ "death", "phase" ], "text": "state.dead = true" }, { "file": "03246.lua", "line": 825, "kinds": [ "phase" ], "text": "state.bossID = npc" }, { "file": "03246.lua", "line": 826, "kinds": [ "phase" ], "text": "state.orgID = ReadRoleValue( npc, EM_RoleValue_OrgID )" }, { "file": "03246.lua", "line": 848, "kinds": [ "death" ], "text": "and ReadRoleValue( npc, EM_RoleValue_IsDead ) == 0 then" }, { "file": "03246.lua", "line": 860, "kinds": [ "phase" ], "text": "function MS_UpdateBossRoomState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 861, "kinds": [ "phase" ], "text": "local state = MS_EnsureBossState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 864, "kinds": [ "phase" ], "text": "state.spawned = true" }, { "file": "03246.lua", "line": 865, "kinds": [ "death", "phase" ], "text": "state.dead = false" }, { "file": "03246.lua", "line": 866, "kinds": [ "phase" ], "text": "state.bossID = boss" }, { "file": "03246.lua", "line": 867, "kinds": [ "phase" ], "text": "state.orgID = ReadRoleValue( boss, EM_RoleValue_OrgID )" }, { "file": "03246.lua", "line": 870, "kinds": [ "phase" ], "text": "if state.spawned == true then" }, { "file": "03246.lua", "line": 871, "kinds": [ "death", "phase" ], "text": "state.dead = true" }, { "file": "03246.lua", "line": 877, "kinds": [ "spell" ], "text": "function MS_IsBossKilled( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 878, "kinds": [ "phase" ], "text": "local state = MS_GetBossState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 879, "kinds": [ "death", "phase" ], "text": "if state ~= nil and state.dead == true then" }, { "file": "03246.lua", "line": 882, "kinds": [ "phase" ], "text": "return MS_UpdateBossRoomState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 895, "kinds": [ "death" ], "text": "SetPlot( OwnerID(), \"dead\", \"MS_BossDied_Loc\" .. tostring(loc) )" }, { "file": "03246.lua", "line": 898, "kinds": [ "spell" ], "text": "MS_RecordBossKill( loc )" }, { "file": "03246.lua", "line": 909, "kinds": [ "loot" ], "text": "function MS_RollLoot( player, lv )" }, { "file": "03246.lua", "line": 910, "kinds": [ "loot" ], "text": "local pool = MS_LOOT_POOL" }, { "file": "03246.lua", "line": 911, "kinds": [ "loot" ], "text": "local byLevel = MS_LOOT_BY_LEVEL[lv]" }, { "file": "03246.lua", "line": 925, "kinds": [ "phase", "loot" ], "text": "function MS_GetRewardState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 927, "kinds": [ "phase", "loot" ], "text": "local state = MS_CHEST_STATE[key]" }, { "file": "03246.lua", "line": 928, "kinds": [ "phase" ], "text": "if state == nil then" }, { "file": "03246.lua", "line": 929, "kinds": [ "phase", "loot" ], "text": "state = { spawned=false, opened=false, chestID=0 }" }, { "file": "03246.lua", "line": 930, "kinds": [ "phase", "loot" ], "text": "MS_CHEST_STATE[key] = state" }, { "file": "03246.lua", "line": 932, "kinds": [ "phase" ], "text": "return state" }, { "file": "03246.lua", "line": 935, "kinds": [ "loot" ], "text": "function MS_IsRewardClaimed( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 936, "kinds": [ "phase", "loot" ], "text": "return MS_GetRewardState( zoneID, roomID, loc ).opened == true" }, { "file": "03246.lua", "line": 939, "kinds": [ "loot" ], "text": "function MS_GrantLocLootToParty( player, zoneID, roomID )" }, { "file": "03246.lua", "line": 944, "kinds": [ "loot" ], "text": "MS_RollLoot( player, lv )" }, { "file": "03246.lua", "line": 952, "kinds": [ "loot" ], "text": "MS_RollLoot( member, lv )" }, { "file": "03246.lua", "line": 957, "kinds": [ "loot" ], "text": "function MS_GrantFallbackReward( player, zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 958, "kinds": [ "phase", "loot" ], "text": "local state = MS_GetRewardState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 959, "kinds": [ "phase" ], "text": "if state.opened == true then" }, { "file": "03246.lua", "line": 962, "kinds": [ "phase" ], "text": "state.opened = true" }, { "file": "03246.lua", "line": 963, "kinds": [ "loot" ], "text": "MS_GrantLocLootToParty( player, zoneID, roomID )" }, { "file": "03246.lua", "line": 966, "kinds": [ "loot" ], "text": "function MS_ChestInit()" }, { "file": "03246.lua", "line": 967, "kinds": [ "loot" ], "text": "SetPlot( OwnerID(), \"touch\", \"MS_ChestTouch\", 40 )" }, { "file": "03246.lua", "line": 970, "kinds": [ "loot" ], "text": "function MS_SpawnChestForKeeper( keeper, loc )" }, { "file": "03246.lua", "line": 971, "kinds": [ "loot" ], "text": "if not MS_LocHasChest( loc ) then" }, { "file": "03246.lua", "line": 976, "kinds": [ "phase", "loot" ], "text": "local state = MS_GetRewardState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 977, "kinds": [ "phase" ], "text": "if state.opened == true then" }, { "file": "03246.lua", "line": 980, "kinds": [ "phase", "loot" ], "text": "if state.chestID ~= nil and state.chestID > 0 and CheckID( state.chestID ) == true then" }, { "file": "03246.lua", "line": 983, "kinds": [ "loot" ], "text": "local pos = MS_GetChestPos( loc )" }, { "file": "03246.lua", "line": 987, "kinds": [ "loot" ], "text": "local chest = CreateObj( MS_CHEST_OBJECT_ID, pos.x, pos.y, pos.z, pos.dir or 0, 1 )" }, { "file": "03246.lua", "line": 988, "kinds": [ "loot" ], "text": "if chest == nil or chest <= 0 then" }, { "file": "03246.lua", "line": 991, "kinds": [ "loot" ], "text": "SetModeEX( chest, EM_SetModeType_Fight, false )" }, { "file": "03246.lua", "line": 992, "kinds": [ "loot" ], "text": "SetModeEX( chest, EM_SetModeType_Searchenemy, false )" }, { "file": "03246.lua", "line": 993, "kinds": [ "loot" ], "text": "SetModeEX( chest, EM_SetModeType_Move, false )" }, { "file": "03246.lua", "line": 994, "kinds": [ "loot" ], "text": "SetModeEX( chest, EM_SetModeType_Strikback, false )" }, { "file": "03246.lua", "line": 995, "kinds": [ "loot" ], "text": "AddToPartition( chest, roomID )" }, { "file": "03246.lua", "line": 996, "kinds": [ "loot" ], "text": "WriteRoleValue( chest, EM_RoleValue_Register1, loc )" }, { "file": "03246.lua", "line": 997, "kinds": [ "loot" ], "text": "WriteRoleValue( chest, EM_RoleValue_Register2, zoneID )" }, { "file": "03246.lua", "line": 998, "kinds": [ "loot" ], "text": "WriteRoleValue( chest, EM_RoleValue_Register3, roomID )" }, { "file": "03246.lua", "line": 999, "kinds": [ "loot" ], "text": "MS_CHEST_BY_OBJ[chest] = { zoneID=zoneID, roomID=roomID, loc=loc }" }, { "file": "03246.lua", "line": 1000, "kinds": [ "phase" ], "text": "state.spawned = true" }, { "file": "03246.lua", "line": 1001, "kinds": [ "phase", "loot" ], "text": "state.chestID = chest" }, { "file": "03246.lua", "line": 1002, "kinds": [ "loot" ], "text": "BeginPlot( chest, \"MS_ChestInit\", 0 )" }, { "file": "03246.lua", "line": 1005, "kinds": [ "loot" ], "text": "function MS_ChestTouch()" }, { "file": "03246.lua", "line": 1007, "kinds": [ "loot" ], "text": "local chest = TargetID()" }, { "file": "03246.lua", "line": 1008, "kinds": [ "loot" ], "text": "local ref = MS_CHEST_BY_OBJ[chest]" }, { "file": "03246.lua", "line": 1009, "kinds": [ "loot" ], "text": "local loc = ReadRoleValue( chest, EM_RoleValue_Register1 )" }, { "file": "03246.lua", "line": 1010, "kinds": [ "loot" ], "text": "local zoneID = ReadRoleValue( chest, EM_RoleValue_Register2 )" }, { "file": "03246.lua", "line": 1011, "kinds": [ "loot" ], "text": "local roomID = ReadRoleValue( chest, EM_RoleValue_Register3 )" }, { "file": "03246.lua", "line": 1020, "kinds": [ "phase", "loot" ], "text": "local state = MS_GetRewardState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 1021, "kinds": [ "phase" ], "text": "if state.opened == true then" }, { "file": "03246.lua", "line": 1024, "kinds": [ "phase" ], "text": "state.opened = true" }, { "file": "03246.lua", "line": 1025, "kinds": [ "phase" ], "text": "state.spawned = false" }, { "file": "03246.lua", "line": 1026, "kinds": [ "phase", "loot" ], "text": "state.chestID = 0" }, { "file": "03246.lua", "line": 1027, "kinds": [ "loot" ], "text": "MS_CHEST_BY_OBJ[chest] = nil" }, { "file": "03246.lua", "line": 1028, "kinds": [ "loot" ], "text": "SetPlot( chest, \"touch\", \"\", 0 )" }, { "file": "03246.lua", "line": 1029, "kinds": [ "loot" ], "text": "MS_GrantLocLootToParty( player, zoneID, roomID )" }, { "file": "03246.lua", "line": 1030, "kinds": [ "loot" ], "text": "DelObj( chest )" }, { "file": "03246.lua", "line": 1031, "kinds": [ "loot" ], "text": "ScriptMessage( player, player, 1, \"Treasure claimed from \" .. MS_GetLocDisplayName(loc) .. \".\", \"\" )" }, { "file": "03246.lua", "line": 1044, "kinds": [ "spell", "loot" ], "text": "if MS_IsBossKilled( zoneID, roomID, loc ) and MS_LocHasChest( loc ) then" }, { "file": "03246.lua", "line": 1045, "kinds": [ "phase", "loot" ], "text": "local state = MS_GetRewardState( zoneID, roomID, loc )" }, { "file": "03246.lua", "line": 1046, "kinds": [ "phase" ], "text": "if state.opened ~= true then" }, { "file": "03246.lua", "line": 1047, "kinds": [ "loot" ], "text": "MS_SpawnChestForKeeper( keeper, loc )" }, { "file": "03246.lua", "line": 1128, "kinds": [ "interaction" ], "text": "CloseSpeak( player )" }, { "file": "03246.lua", "line": 1139, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"Choose a shop category for Lv \" .. tostring(lv) .. \".\" )" }, { "file": "03246.lua", "line": 1145, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), category .. \" (\" .. tostring(count) .. \")\", \"MS_KeeperShopCategory(\" .. tostring(idx) .. \")\", 0 )" }, { "file": "03246.lua", "line": 1149, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"I am not carrying any wares for Lv \" .. tostring(lv) .. \" yet. Add some Keeper Shop items in Zone Manager first.\" )" }, { "file": "03246.lua", "line": 1150, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"Back\", \"LuaS_MS_Keeper\", 0 )" }, { "file": "03246.lua", "line": 1153, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"Back\", \"LuaS_MS_Keeper\", 0 )" }, { "file": "03246.lua", "line": 1166, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"There are no \" .. category .. \" wares configured for Lv \" .. tostring(lv) .. \" yet.\" )" }, { "file": "03246.lua", "line": 1167, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"Back\", \"MS_ShowKeeperShopCategories()\", 0 )" }, { "file": "03246.lua", "line": 1170, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"Pick an item to buy from \" .. category .. \" (Lv \" .. tostring(lv) .. \", page \" .. curr .. \"/\" .. pages .. \").\" )" }, { "file": "03246.lua", "line": 1186, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), label, \"MS_KeeperBuy(\" .. tostring(categoryIndex) .. \",\" .. tostring(idx) .. \")\", 0 )" }, { "file": "03246.lua", "line": 1190, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"Next >>\", \"MS_KeeperShopPage(\" .. tostring(categoryIndex) .. \",\" .. tostring(curr + 1) .. \")\", 0 )" }, { "file": "03246.lua", "line": 1193, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"<< Prev\", \"MS_KeeperShopPage(\" .. tostring(categoryIndex) .. \",\" .. tostring(curr - 1) .. \")\", 0 )" }, { "file": "03246.lua", "line": 1195, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"Back\", \"MS_ShowKeeperShopCategories()\", 0 )" }, { "file": "03246.lua", "line": 1224, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"You need \" .. tostring(cost) .. \" \" .. MS_GetCurrencyLabel(costType) .. \" for that purchase.\" )" }, { "file": "03246.lua", "line": 1225, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"Back\", \"MS_KeeperShopPage(\" .. tostring(categoryIndex) .. \",\" .. tostring(page) .. \")\", 0 )" }, { "file": "03246.lua", "line": 1229, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"Your inventory is full.\" )" }, { "file": "03246.lua", "line": 1230, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"Back\", \"MS_KeeperShopPage(\" .. tostring(categoryIndex) .. \",\" .. tostring(page) .. \")\", 0 )" }, { "file": "03246.lua", "line": 1240, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"I could not hand that item over right now.\" )" }, { "file": "03246.lua", "line": 1241, "kinds": [ "interaction" ], "text": "AddSpeakOption( player, TargetID(), \"Back\", \"MS_KeeperShopPage(\" .. tostring(categoryIndex) .. \",\" .. tostring(page) .. \")\", 0 )" }, { "file": "03246.lua", "line": 1251, "kinds": [ "interaction" ], "text": "CloseSpeak( player )" }, { "file": "03246.lua", "line": 1264, "kinds": [ "interaction" ], "text": "CallSpeakLua( TargetID(), OwnerID(), \"LuaS_MS_Keeper\" )" }, { "file": "03246.lua", "line": 1272, "kinds": [ "interaction" ], "text": "SetSpeakDetail( OwnerID()," }, { "file": "03246.lua", "line": 1273, "kinds": [ "loot" ], "text": "\"The chamber is yours. Defeat the boss, claim the chest, and I will send you to the next challenge.\" )" }, { "file": "03246.lua", "line": 1274, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Send me to the next boss\", \"MS_GoNext\", 0 )" }, { "file": "03246.lua", "line": 1276, "kinds": [ "interaction" ], "text": "SetSpeakDetail( OwnerID()," }, { "file": "03246.lua", "line": 1279, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Repair my gear\", \"MS_KeeperRepair\", 0 )" }, { "file": "03246.lua", "line": 1280, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Show me your wares\", \"MS_ShowKeeperShopCategories()\", 0 )" }, { "file": "03246.lua", "line": 1281, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Choose a different dungeon\", \"MS_TestShowPageFromKeeper\", 0 )" }, { "file": "03246.lua", "line": 1282, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Quit Manastorms\", \"MS_Quit\", 0 )" }, { "file": "03246.lua", "line": 1283, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Stay here\", \"MS_StayHere\", 0 )" }, { "file": "03246.lua", "line": 1295, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"Take your time. Speak to me again when you are ready.\" )" }, { "file": "03246.lua", "line": 1307, "kinds": [ "spell" ], "text": "if not MS_IsBossKilled( zoneID, roomID, currLoc ) then" }, { "file": "03246.lua", "line": 1308, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player," }, { "file": "03246.lua", "line": 1309, "kinds": [ "loot" ], "text": "\"The boss still lives. Defeat it first, then return for your reward.\" )" }, { "file": "03246.lua", "line": 1313, "kinds": [ "loot" ], "text": "if MS_LocHasChest( currLoc ) and not MS_IsRewardClaimed( zoneID, roomID, currLoc ) then" }, { "file": "03246.lua", "line": 1314, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player," }, { "file": "03246.lua", "line": 1315, "kinds": [ "timer", "loot" ], "text": "\"The treasure chest for \" .. MS_GetLocDisplayName(currLoc) .. \" is still waiting. Claim it first, then I will move you on.\" )" }, { "file": "03246.lua", "line": 1319, "kinds": [ "loot" ], "text": "if not MS_LocHasChest( currLoc ) and not MS_IsRewardClaimed( zoneID, roomID, currLoc ) then" }, { "file": "03246.lua", "line": 1320, "kinds": [ "loot" ], "text": "MS_GrantFallbackReward( player, zoneID, roomID, currLoc )" }, { "file": "03246.lua", "line": 1332, "kinds": [ "interaction" ], "text": "CloseSpeak( player )" }, { "file": "03246.lua", "line": 1362, "kinds": [ "timer" ], "text": "sleep(3)" }, { "file": "03246.lua", "line": 1368, "kinds": [ "interaction" ], "text": "CloseSpeak( player )" }, { "file": "03246.lua", "line": 1375, "kinds": [ "timer" ], "text": "sleep(2)" }, { "file": "03246.lua", "line": 1380, "kinds": [ "interaction" ], "text": "CloseSpeak( OwnerID() )" }, { "file": "03246.lua", "line": 1399, "kinds": [ "interaction" ], "text": "SetSpeakDetail( OwnerID()," }, { "file": "03246.lua", "line": 1404, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Solo (1 player)\", \"MS_TestPickSolo\", 0 )" }, { "file": "03246.lua", "line": 1405, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Duo (2 players)\", \"MS_TestPickDuo\", 0 )" }, { "file": "03246.lua", "line": 1406, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Party (6 players)\", \"MS_TestPickParty\", 0 )" }, { "file": "03246.lua", "line": 1407, "kinds": [ "interaction" ], "text": "AddSpeakOption( OwnerID(), TargetID(), \"Back\", \"LuaS_MS_Mom\", 0 )" }, { "file": "03246.lua", "line": 1422, "kinds": [ "loot" ], "text": "{ id=\"treasure_trove\", name=\"Treasure Trove\", spawn={ x=3155.00, y=711.00, z=664.00, dir=0.00 }, zones={ [1]=455, [10]=484, [20]=513, [30]=542, [40]=571, [50]=600 } }," }, { "file": "03246.lua", "line": 1441, "kinds": [ "spell" ], "text": "{ id=\"grafu_castle\", name=\"Grafu Castle\", spawn={ x=352.00, y=1270.00, z=-1456.00, dir=180.00 }, zones={ [1]=475, [10]=504, [20]=533, [30]=562, [40]=591, [50]=624 } }," }, { "file": "03246.lua", "line": 1442, "kinds": [ "spell" ], "text": "{ id=\"sardo_castle\", name=\"Sardo Castle\", spawn={ x=910.00, y=1471.00, z=-1421.00, dir=181.00 }, zones={ [1]=476, [10]=505, [20]=534, [30]=563, [40]=592, [50]=625 } }," }, { "file": "03246.lua", "line": 1462, "kinds": [ "interaction" ], "text": "SetSpeakDetail( npc, \"Select a populated Manastorm dungeon (page \" .. page .. \"/\" .. pages .. \"):\" )" }, { "file": "03246.lua", "line": 1464, "kinds": [ "summon", "interaction" ], "text": "AddSpeakOption( npc, TargetID(), MS_TEST_DUNGEONS[i].name, \"MS_TestPickDgn\" .. i, 0 )" }, { "file": "03246.lua", "line": 1467, "kinds": [ "summon", "interaction" ], "text": "AddSpeakOption( npc, TargetID(), \"Next >>\", \"MS_TestNextPage\", 0 )" }, { "file": "03246.lua", "line": 1470, "kinds": [ "summon", "interaction" ], "text": "AddSpeakOption( npc, TargetID(), \"<< Prev\", \"MS_TestPrevPage\", 0 )" }, { "file": "03246.lua", "line": 1472, "kinds": [ "summon", "interaction" ], "text": "AddSpeakOption( npc, TargetID(), \"Back\", backFn, 0 )" }, { "file": "03246.lua", "line": 1481, "kinds": [ "interaction" ], "text": "SetSpeakDetail( npc, \"Travel to \" .. d.name .. \" — pick level bracket:\" )" }, { "file": "03246.lua", "line": 1483, "kinds": [ "summon", "interaction" ], "text": "AddSpeakOption( npc, TargetID(), MS_TEST_LV_LABELS[i], \"MS_TestGo\" .. i, 0 )" }, { "file": "03246.lua", "line": 1485, "kinds": [ "summon", "interaction" ], "text": "AddSpeakOption( npc, TargetID(), \"Back\", \"MS_TestShowPage\", 0 )" }, { "file": "03246.lua", "line": 1495, "kinds": [ "interaction" ], "text": "SetSpeakDetail( player, \"That dungeon does not have a configured zone for this bracket yet.\" )" }, { "file": "03246.lua", "line": 1503, "kinds": [ "interaction" ], "text": "CloseSpeak( player )" }, { "file": "03246.lua", "line": 1507, "kinds": [ "timer" ], "text": "sleep(2)" } ], "templateCandidates": [ { "templateId": 101500, "name": "Goddess of Art's Disciple", "classification": "boss", "spawnCount": 1, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "onDead", "script": "LuaS_101500_DeadLog" } ], "spells": [ { "id": 490477, "level": 20 }, { "id": 492367, "level": 14 }, { "id": 492383, "level": 14 }, { "id": 492384, "level": 10 } ] }, { "templateId": 101501, "name": "Yusalien", "classification": "boss", "spawnCount": 1, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "init", "script": "AI_UZALIAN" }, { "event": "onDead", "script": "LuaS_101501_DeadLog" } ], "spells": [] }, { "templateId": 101502, "name": "Locatha", "classification": "boss", "spawnCount": 1, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "onDead", "script": "LuaS_101502_DeadLog" } ], "spells": [ { "id": 492375, "level": 300 }, { "id": 492376, "level": 5 }, { "id": 492377, "level": 1 }, { "id": 492536, "level": 1 }, { "id": 492778, "level": 1 } ] }, { "templateId": 101503, "name": "Ensia", "classification": "boss", "spawnCount": 1, "autoPlots": [ "LuaI_101503_Set" ], "plotClassNames": [], "templateScripts": [ { "event": "onDead", "script": "LuaS_101503_DeadLog" } ], "spells": [ { "id": 490656, "level": 990 }, { "id": 492569, "level": 1 }, { "id": 492570, "level": 1 }, { "id": 492571, "level": 1 }, { "id": 492682, "level": 1 } ] }, { "templateId": 101504, "name": "Glamorous Maid of the Muses", "classification": "combat", "spawnCount": 13, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 490656, "level": 60 }, { "id": 491027, "level": 400 } ] }, { "templateId": 101505, "name": "Mad Maid of the Muses", "classification": "combat", "spawnCount": 9, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 491027, "level": 350 }, { "id": 492571, "level": 4 } ] }, { "templateId": 101506, "name": "Miserable Maid of the Muses", "classification": "combat", "spawnCount": 16, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 491027, "level": 400 }, { "id": 492385, "level": 5 } ] }, { "templateId": 101507, "name": "Iron Rune Warrior", "classification": "boss", "spawnCount": 1, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "onDead", "script": "LuaS_101507_DeadLog" } ], "spells": [ { "id": 492371, "level": 8 }, { "id": 492372, "level": 25 }, { "id": 492373, "level": 8 }, { "id": 492374, "level": 1 } ] }, { "templateId": 101508, "name": "Rune Sentinel", "classification": "combat", "spawnCount": 8, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 492371, "level": 1 }, { "id": 492372, "level": 1 }, { "id": 492374, "level": 1 } ] }, { "templateId": 101509, "name": "Rune Guardian", "classification": "combat", "spawnCount": 28, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 492371, "level": 1 }, { "id": 492373, "level": 1 }, { "id": 492374, "level": 1 } ] }, { "templateId": 101511, "name": "Rune Destroyer", "classification": "combat", "spawnCount": 21, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 490581, "level": 1 }, { "id": 490584, "level": 1 } ] }, { "templateId": 101512, "name": "Rune Patroller", "classification": "combat", "spawnCount": 24, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 490551, "level": 1 }, { "id": 490553, "level": 1 }, { "id": 492280, "level": 69 } ] }, { "templateId": 101514, "name": "Dead Ousul Salamander", "classification": "deferred-object", "spawnCount": 7, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "init", "script": "LuaP_Dead" } ], "spells": [] }, { "templateId": 101515, "name": "Ousul Salamander", "classification": "combat", "spawnCount": 22, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 492574, "level": 300 } ] }, { "templateId": 101516, "name": "Ousul Poison Frog", "classification": "combat", "spawnCount": 19, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [ { "id": 492575, "level": 300 } ] }, { "templateId": 101519, "name": "Dead Ousul Poison Frog", "classification": "deferred-object", "spawnCount": 6, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "init", "script": "LuaP_Dead" } ], "spells": [] }, { "templateId": 101520, "name": "Destroyed Rune Destroyer", "classification": "deferred-object", "spawnCount": 7, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "init", "script": "LuaP_Dead" } ], "spells": [] }, { "templateId": 101521, "name": "Destroyed Rune Patroller", "classification": "deferred-object", "spawnCount": 8, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "init", "script": "LuaP_Dead" } ], "spells": [] }, { "templateId": 101523, "name": "Cask", "classification": "deferred-object", "spawnCount": 7, "autoPlots": [], "plotClassNames": [], "templateScripts": [ { "event": "onDead", "script": "LuaS_101500_Drunk" } ], "spells": [] }, { "templateId": 110426, "name": "Template 110426", "classification": "deferred-object", "spawnCount": 1, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 110578, "name": "Template 110578", "classification": "deferred-object", "spawnCount": 3, "autoPlots": [ "LuaI_CancelBuff_101502", "LuaS_107toZone6_0", "LuaS_112077_1" ], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 110987, "name": "Template 110987", "classification": "deferred-object", "spawnCount": 24, "autoPlots": [ "LuaI_CancelBuff_101502" ], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112073, "name": "Template 112073", "classification": "deferred-object", "spawnCount": 2, "autoPlots": [ "LuaI_107_HarlonDoor", "LuaI_ControlBox_101502" ], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112078, "name": "Great Door of the Inner Hall", "classification": "deferred-object", "spawnCount": 1, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112079, "name": "Damaged Mysterious Device", "classification": "deferred-object", "spawnCount": 1, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112082, "name": "Laertes", "classification": "deferred-object", "spawnCount": 1, "autoPlots": [ "LuaP_Sitting" ], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112083, "name": "Eliot", "classification": "deferred-object", "spawnCount": 1, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112084, "name": "Huge Boulder", "classification": "deferred-object", "spawnCount": 1, "autoPlots": [ "LuaS_112077_8" ], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112085, "name": "Sweet Water Plant", "classification": "deferred-object", "spawnCount": 5, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112086, "name": "Massalihum", "classification": "deferred-object", "spawnCount": 1, "autoPlots": [ "LuaP_Sitting" ], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 112087, "name": "Loten", "classification": "deferred-object", "spawnCount": 1, "autoPlots": [ "LuaP_Dead" ], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 780088, "name": "Template 780088", "classification": "deferred-object", "spawnCount": 11, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 780230, "name": "Template 780230", "classification": "deferred-object", "spawnCount": 12, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 780237, "name": "Template 780237", "classification": "deferred-object", "spawnCount": 11, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 780238, "name": "Template 780238", "classification": "deferred-object", "spawnCount": 3, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 780239, "name": "Template 780239", "classification": "deferred-object", "spawnCount": 4, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] }, { "templateId": 780286, "name": "Template 780286", "classification": "deferred-object", "spawnCount": 6, "autoPlots": [], "plotClassNames": [], "templateScripts": [], "spells": [] } ], "categories": { "summon": 6, "door": 1, "timer": 11, "movement": 1, "spell": 7, "death": 28, "phase": 53, "interaction": 97, "loot": 70 }, "reviewQueue": [ "Map authoritative spell ids/scripts to HealerMan EnemyAttackDefinition data.", "Implement and test doors/gates as encounter state, not static combat entities.", "Map summons and waves only after identifying their trigger, lifetime, and reset rules.", "Convert patrol/AutoPlot routes to navmesh-projected paths.", "Separate interactables/loot from combat population and define offline state transitions.", "Add encounter-specific tests and a browser playtest before marking mechanics green." ], "safety": { "executableMechanicsGenerated": false, "reason": "Lua/AutoPlot syntax is audited as evidence; ambiguous behavior is never silently guessed.", "runtimeSqlDependency": false } }