From b1ff9dc8c712170bf71f38e453c9ae64d3e06112 Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Mon, 12 May 2025 02:21:07 +0200 Subject: [PATCH 1/3] ZM8: Cutscene in lower delkfutt is optional This goes against logic and other things. But it's true. --- .../rotz/08_Return_to_Delkfutts_Tower.lua | 82 +++++++------------ 1 file changed, 30 insertions(+), 52 deletions(-) diff --git a/scripts/missions/rotz/08_Return_to_Delkfutts_Tower.lua b/scripts/missions/rotz/08_Return_to_Delkfutts_Tower.lua index 529929f606d..d12a6884285 100644 --- a/scripts/missions/rotz/08_Return_to_Delkfutts_Tower.lua +++ b/scripts/missions/rotz/08_Return_to_Delkfutts_Tower.lua @@ -17,6 +17,11 @@ mission.reward = nextMission = { xi.mission.log_id.ZILART, xi.mission.id.zilart.ROMAEVE }, } +-- Bits +-- 0 -> Lower Jeuno Aldo interaction. Optional. +-- 1 -> Lower Delkfutt tower Zone-in cutscene. Optional. Yes. Really. +-- 2 -> Stellar Fulcrum pre-battle cutscene. Can't miss it. + mission.sections = { -- Section: Mission Active @@ -25,12 +30,28 @@ mission.sections = return currentMission == mission.missionId end, + [xi.zone.LOWER_DELKFUTTS_TOWER] = + { + onZoneIn = function(player, prevZone) + if not mission:isVarBitsSet(player, 'Option', 1) then + return 15 + end + end, + + onEventFinish = + { + [15] = function(player, csid, option, npc) + mission:setVarBit(player, 'Option', 1) + end, + }, + }, + [xi.zone.LOWER_JEUNO] = { ['Aldo'] = { onTrigger = function(player, npc) - if mission:getVar(player, 'Option') == 0 then + if not mission:isVarBitsSet(player, 'Option', 0) then return mission:progressEvent(104, 0, 1, 255, 0, 12590582, 95569, 4095, 1) else return mission:event(68) @@ -41,7 +62,7 @@ mission.sections = onEventFinish = { [104] = function(player, csid, option, npc) - mission:setVar(player, 'Option', 1) + mission:setVarBit(player, 'Option', 0) end, }, }, @@ -50,39 +71,15 @@ mission.sections = { ['Gilgamesh'] = mission:event(13), }, - }, - - -- Section: Mission Active and missionStatus == 0 - { - check = function(player, currentMission, missionStatus, vars) - return currentMission == mission.missionId and missionStatus == 0 - end, - - [xi.zone.LOWER_DELKFUTTS_TOWER] = - { - onZoneIn = function(player, prevZone) - return 15 - end, - - onEventFinish = - { - [15] = function(player, csid, option, npc) - player:setMissionStatus(mission.areaId, 1) - end, - }, - }, - }, - - -- Section: Mission Active and missionStatus == 1 - { - check = function(player, currentMission, missionStatus, vars) - return currentMission == mission.missionId and missionStatus == 1 - end, [xi.zone.STELLAR_FULCRUM] = { onZoneIn = function(player, prevZone) - return 0 + if not mission:isVarBitsSet(player, 'Option', 2) then + return 0 -- Pre-Battle. + elseif player:getMissionStatus(mission.areaId) == 1 then + return 17 -- Post-Battle. Mission complete event. + end end, onEventUpdate = @@ -97,35 +94,16 @@ mission.sections = onEventFinish = { [0] = function(player, csid, option, npc) - player:setMissionStatus(mission.areaId, 2) + mission:setVarBit(player, 'Option', 2) end, - }, - }, - }, - -- Section: Mission Active and missionStatus == 2 - { - check = function(player, currentMission, missionStatus, vars) - return currentMission == mission.missionId and missionStatus >= 2 - end, - - [xi.zone.STELLAR_FULCRUM] = - { - onZoneIn = function(player, prevZone) - if player:getMissionStatus(mission.areaId) == 3 then - return 17 - end - end, - - onEventFinish = - { [17] = function(player, csid, option, npc) mission:complete(player) end, [32001] = function(player, csid, option, npc) if player:getLocalVar('battlefieldWin') == xi.battlefield.id.RETURN_TO_DELKFUTTS_TOWER then - player:setMissionStatus(mission.areaId, 3) + player:setMissionStatus(mission.areaId, 1) player:setPos(-519.99, 1.076, -19.943, 64, xi.zone.STELLAR_FULCRUM) end end, From 065eb97c0249ce7d01c47d537aabbc18b8f4b266 Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Mon, 12 May 2025 03:13:11 +0200 Subject: [PATCH 2/3] Add missing onZoneIn events for the tower --- .../rotz/08_Return_to_Delkfutts_Tower.lua | 12 ++++++++++-- scripts/zones/Lower_Delkfutts_Tower/Zone.lua | 18 ++++++++++-------- scripts/zones/Middle_Delkfutts_Tower/Zone.lua | 6 ++++++ scripts/zones/Stellar_Fulcrum/Zone.lua | 7 +++++-- scripts/zones/Upper_Delkfutts_Tower/Zone.lua | 6 ++++++ 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/scripts/missions/rotz/08_Return_to_Delkfutts_Tower.lua b/scripts/missions/rotz/08_Return_to_Delkfutts_Tower.lua index d12a6884285..c2a3514b02d 100644 --- a/scripts/missions/rotz/08_Return_to_Delkfutts_Tower.lua +++ b/scripts/missions/rotz/08_Return_to_Delkfutts_Tower.lua @@ -33,8 +33,14 @@ mission.sections = [xi.zone.LOWER_DELKFUTTS_TOWER] = { onZoneIn = function(player, prevZone) - if not mission:isVarBitsSet(player, 'Option', 1) then - return 15 + local previousZone = player:getPreviousZone() + if + previousZone == xi.zone.QUFIM_ISLAND and + not mission:isVarBitsSet(player, 'Option', 1) + then + return 15 -- Optional cutscene. Only triggers from qufim entrance. + elseif previousZone == xi.zone.MIDDLE_DELKFUTTS_TOWER then + return 14 -- Ensure regular entering CS plays. end end, @@ -79,6 +85,8 @@ mission.sections = return 0 -- Pre-Battle. elseif player:getMissionStatus(mission.areaId) == 1 then return 17 -- Post-Battle. Mission complete event. + elseif player:getPreviousZone() == xi.zone.UPPER_DELKFUTTS_TOWER then + return 7 -- Ensure regular entering CS plays. end end, diff --git a/scripts/zones/Lower_Delkfutts_Tower/Zone.lua b/scripts/zones/Lower_Delkfutts_Tower/Zone.lua index 7b40b0c27a3..9bf05d14d92 100644 --- a/scripts/zones/Lower_Delkfutts_Tower/Zone.lua +++ b/scripts/zones/Lower_Delkfutts_Tower/Zone.lua @@ -15,6 +15,16 @@ end zoneObject.onZoneIn = function(player, prevZone) local cs = -1 + if prevZone == xi.zone.MIDDLE_DELKFUTTS_TOWER then + cs = 14 -- Teleport. + -- BORN OF HER NIGHTMARES + -- TODO: Convert to interaction. + elseif + prevZone == xi.zone.QUFIM_ISLAND and + player:getCurrentMission(xi.mission.log_id.ACP) == xi.mission.id.acp.BORN_OF_HER_NIGHTMARES + then + cs = 34 + end if player:getXPos() == 0 and @@ -24,14 +34,6 @@ zoneObject.onZoneIn = function(player, prevZone) player:setPos(460.022, -1.77, -103.442, 188) end - -- BORN OF HER NIGHTMARES - if - player:getCurrentMission(xi.mission.log_id.ACP) == xi.mission.id.acp.BORN_OF_HER_NIGHTMARES and - prevZone == xi.zone.QUFIM_ISLAND - then - cs = 34 - end - return cs end diff --git a/scripts/zones/Middle_Delkfutts_Tower/Zone.lua b/scripts/zones/Middle_Delkfutts_Tower/Zone.lua index 46c506939bd..711e7990e44 100644 --- a/scripts/zones/Middle_Delkfutts_Tower/Zone.lua +++ b/scripts/zones/Middle_Delkfutts_Tower/Zone.lua @@ -26,6 +26,12 @@ end zoneObject.onZoneIn = function(player, prevZone) local cs = -1 + if + prevZone == xi.zone.LOWER_DELKFUTTS_TOWER or + prevZone == xi.zone.UPPER_DELKFUTTS_TOWER + then + cs = 13 -- Teleport. + end if player:getXPos() == 0 and diff --git a/scripts/zones/Stellar_Fulcrum/Zone.lua b/scripts/zones/Stellar_Fulcrum/Zone.lua index 335ad4d3335..bf2611c9e2e 100644 --- a/scripts/zones/Stellar_Fulcrum/Zone.lua +++ b/scripts/zones/Stellar_Fulcrum/Zone.lua @@ -5,8 +5,8 @@ local zoneObject = {} zoneObject.onInitialize = function(zone) - zone:registerCuboidTriggerArea(1, -522, -2, -49, -517, -1, -43) -- To Upper Delkfutt's Tower - zone:registerCuboidTriggerArea(2, 318, -3, 2, 322, 1, 6) -- Exit BCNM to ? + zone:registerCuboidTriggerArea(1, -522, -2, -49, -517, -1, -43) -- To Upper Delkfutt's Tower + zone:registerCuboidTriggerArea(2, 318, -3, 2, 322, 1, 6) -- Exit BCNM to ? end zoneObject.onConquestUpdate = function(zone, updatetype, influence, owner, ranking, isConquestAlliance) @@ -15,6 +15,9 @@ end zoneObject.onZoneIn = function(player, prevZone) local cs = -1 + if prevZone == xi.zone.UPPER_DELKFUTTS_TOWER then + cs = 7 -- Teleport. + end if player:getXPos() == 0 and diff --git a/scripts/zones/Upper_Delkfutts_Tower/Zone.lua b/scripts/zones/Upper_Delkfutts_Tower/Zone.lua index f8e752a9064..bfac8eeea90 100644 --- a/scripts/zones/Upper_Delkfutts_Tower/Zone.lua +++ b/scripts/zones/Upper_Delkfutts_Tower/Zone.lua @@ -17,6 +17,12 @@ end zoneObject.onZoneIn = function(player, prevZone) local cs = -1 + if + prevZone == xi.zone.MIDDLE_DELKFUTTS_TOWER or + prevZone == xi.zone.STELLAR_FULCRUM + then + cs = 14 -- Teleport. + end if player:getXPos() == 0 and From 31b370707b35f86bd6c5384db2726baf3071422d Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Mon, 12 May 2025 03:18:53 +0200 Subject: [PATCH 3/3] Add some missing immunities to Kam'lanaut --- scripts/zones/Stellar_Fulcrum/mobs/Kamlanaut.lua | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/zones/Stellar_Fulcrum/mobs/Kamlanaut.lua b/scripts/zones/Stellar_Fulcrum/mobs/Kamlanaut.lua index b017d3adfc8..bd2f21c5d9c 100644 --- a/scripts/zones/Stellar_Fulcrum/mobs/Kamlanaut.lua +++ b/scripts/zones/Stellar_Fulcrum/mobs/Kamlanaut.lua @@ -16,6 +16,12 @@ local skillToAbsorb = [828] = xi.mod.WATER_ABSORB, -- water_blade } +entity.onMobInitialize = function(mob) + mob:addImmunity(xi.immunity.SILENCE) + mob:addImmunity(xi.immunity.LIGHT_SLEEP) + mob:addImmunity(xi.immunity.DARK_SLEEP) +end + entity.onMobEngage = function(mob, target) mob:setLocalVar('nextEnSkill', os.time() + 10) end @@ -30,7 +36,7 @@ entity.onMobFight = function(mob, target) end entity.onMobWeaponSkill = function(target, mob, skill) - local skillId = skill:getID() + local skillId = skill:getID() local absorbId = skillToAbsorb[skillId] if absorbId then @@ -54,7 +60,4 @@ entity.onMobWeaponSkill = function(target, mob, skill) end end -entity.onMobDeath = function(mob, player, optParams) -end - return entity