Files
healer-man/src/assets/game/dungeons/kalins-shrine/mechanics-audit.json
T
2026-08-14 15:56:39 -04:00

2897 lines
62 KiB
JSON

{
"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
}
}