262 lines
9 KiB
Text
262 lines
9 KiB
Text
~~
|
|
~~ Empyrean Facility Aetheria Quest Meta
|
|
~~ Automates the 3-level Aetheria slot unlock dungeon
|
|
~~ Each level: kill wisps in 4 cardinal rooms, use Aligned Mana Stone at each fountain
|
|
~~ Then use stone at center fountain and take portal to next level
|
|
~~
|
|
~~ NAV FILES REQUIRED (record in-game, save to VTank folder):
|
|
~~ nav_empyrean.nav - Route TO the dungeon (already have this)
|
|
~~ emp_upper_north.nav - Upper level: start → north room fountain
|
|
~~ emp_upper_east.nav - Upper level: north room → east room fountain
|
|
~~ emp_upper_south.nav - Upper level: east room → south room fountain
|
|
~~ emp_upper_west.nav - Upper level: south room → west room fountain
|
|
~~ emp_upper_center.nav - Upper level: west room → center room fountain
|
|
~~ emp_middle_north.nav - Middle level: landing → north room fountain
|
|
~~ emp_middle_east.nav - Middle level: north room → east room fountain
|
|
~~ emp_middle_south.nav - Middle level: east room → south room fountain
|
|
~~ emp_middle_west.nav - Middle level: south room → west room fountain
|
|
~~ emp_middle_center.nav - Middle level: west room → center room fountain
|
|
~~ emp_lower_north.nav - Lower level: landing → north room fountain
|
|
~~ emp_lower_east.nav - Lower level: north room → east room fountain
|
|
~~ emp_lower_south.nav - Lower level: east room → south room fountain
|
|
~~ emp_lower_west.nav - Lower level: south room → west room fountain
|
|
~~ emp_lower_center.nav - Lower level: west room → center room fountain
|
|
~~
|
|
|
|
~~ ============================================================
|
|
~~ STATE: Default - One-time init and travel to dungeon
|
|
~~ ============================================================
|
|
STATE: {Default}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
IF: Always
|
|
DO: DoAll
|
|
Chat {/ub opt set VTank.PatchExpressionEngine true}
|
|
SetOpt {enablecombat} {false}
|
|
SetOpt {enablenav} {true}
|
|
SetOpt {enablelooting} {false}
|
|
SetOpt {enablebuffing} {true}
|
|
SetOpt {attackdistance} {0.0125}
|
|
DoExpr {setvar[currentLevel,`upper`]}
|
|
DoExpr {setvar[currentRoom,`north`]}
|
|
DoExpr {setvar[roomsDone,0]}
|
|
Chat {/vt nav load nav_empyrean}
|
|
SetState {enter_dungeon}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: enter_dungeon - Wait for nav to reach dungeon entrance
|
|
~~ ============================================================
|
|
STATE: {enter_dungeon}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
IF: All
|
|
SecsInStateGE 3
|
|
NavEmpty
|
|
DO: DoAll
|
|
SetOpt {enablecombat} {true}
|
|
SetState {goto_room}
|
|
IF: Always
|
|
DO: DoAll
|
|
SetWatchdog 10.0 300.0 {stuck}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: goto_room - Load nav for current level+room
|
|
~~ ============================================================
|
|
STATE: {goto_room}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
IF: Always
|
|
DO: DoAll
|
|
ChatExpr {\/vt nav load emp_+getvar[currentLevel]+`_`+getvar[currentRoom]}
|
|
DoExpr {clearvar[navLoaded]}
|
|
SetState {arrive_room}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: arrive_room - Wait for nav to finish (arrived at room)
|
|
~~ ============================================================
|
|
STATE: {arrive_room}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
IF: All
|
|
Expr {testvar[navLoaded]}
|
|
NavEmpty
|
|
DO: DoAll
|
|
ClearWatchdog
|
|
SetState {kill_wisps}
|
|
IF: Always
|
|
DO: DoAll
|
|
DoExpr {touchvar[navLoaded]}
|
|
SetWatchdog 10.0 180.0 {stuck}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: kill_wisps - Wait for all mobs in room to die
|
|
~~ ============================================================
|
|
STATE: {kill_wisps}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
~~ All wisps dead — proceed to use stone
|
|
IF: All
|
|
SecsInStateGE 5
|
|
NoMobsInDist 4.0
|
|
DO: SetState {use_stone}
|
|
~~ Safety timeout: if stuck fighting for 5 minutes, try stone anyway
|
|
IF: SecsInStateGE 300
|
|
DO: SetState {use_stone}
|
|
IF: Always
|
|
DO: DoAll
|
|
SetWatchdog 10.0 300.0 {stuck}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: use_stone - Use Aligned Mana Stone, wait for result
|
|
~~ ============================================================
|
|
STATE: {use_stone}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
~~ Success: "A shiver moves across your body"
|
|
IF: ChatMatch {A shiver moves across your body}
|
|
DO: DoAll
|
|
DoExpr {echo[`Room complete! (`+getvar[currentLevel]+` `+getvar[currentRoom]+`)`,1]}
|
|
SetState {next_room}
|
|
~~ Already done: "you feel no change"
|
|
IF: ChatMatch {no change}
|
|
DO: DoAll
|
|
DoExpr {echo[`Room already done (`+getvar[currentLevel]+` `+getvar[currentRoom]+`)`,1]}
|
|
SetState {next_room}
|
|
~~ Retry stone every 5 seconds
|
|
IF: SecsInStateGE 5
|
|
DO: DoAll
|
|
Chat {/ub use Aligned Mana Stone}
|
|
SetState {use_stone}
|
|
~~ First attempt immediately
|
|
IF: Always
|
|
DO: DoAll
|
|
Chat {/ub use Aligned Mana Stone}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: next_room - Advance to next room or center
|
|
~~ Route: north → east → south → west → center
|
|
~~ ============================================================
|
|
STATE: {next_room}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
~~ From north → go east
|
|
IF: Expr {getvar[currentRoom]==`north`}
|
|
DO: DoAll
|
|
DoExpr {setvar[currentRoom,`east`]}
|
|
SetState {goto_room}
|
|
~~ From east → go south
|
|
IF: Expr {getvar[currentRoom]==`east`}
|
|
DO: DoAll
|
|
DoExpr {setvar[currentRoom,`south`]}
|
|
SetState {goto_room}
|
|
~~ From south → go west
|
|
IF: Expr {getvar[currentRoom]==`south`}
|
|
DO: DoAll
|
|
DoExpr {setvar[currentRoom,`west`]}
|
|
SetState {goto_room}
|
|
~~ From west → go to center
|
|
IF: Expr {getvar[currentRoom]==`west`}
|
|
DO: DoAll
|
|
DoExpr {setvar[currentRoom,`center`]}
|
|
SetState {goto_room}
|
|
~~ From center → level complete, use stone then take portal
|
|
IF: Expr {getvar[currentRoom]==`center`}
|
|
DO: SetState {use_stone_center}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: use_stone_center - Use stone at center fountain, then portal
|
|
~~ ============================================================
|
|
STATE: {use_stone_center}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
~~ Success at center fountain — got aetheria message
|
|
IF: ChatMatch {A shiver moves across your body}
|
|
DO: DoAll
|
|
DoExpr {echo[`Level complete! (`+getvar[currentLevel]+`)`,1]}
|
|
SetState {take_portal}
|
|
~~ Already done
|
|
IF: ChatMatch {no change}
|
|
DO: DoAll
|
|
DoExpr {echo[`Level already done (`+getvar[currentLevel]+`)`,1]}
|
|
SetState {take_portal}
|
|
~~ Retry stone every 5 seconds
|
|
IF: SecsInStateGE 5
|
|
DO: DoAll
|
|
Chat {/ub use Aligned Mana Stone}
|
|
SetState {use_stone_center}
|
|
~~ First attempt immediately
|
|
IF: Always
|
|
DO: DoAll
|
|
Chat {/ub use Aligned Mana Stone}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: take_portal - Take portal to next level
|
|
~~ ============================================================
|
|
STATE: {take_portal}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
~~ Upper level done → take Middle portal
|
|
IF: Expr {getvar[currentLevel]==`upper`}
|
|
DO: DoAll
|
|
DoExpr {setvar[currentLevel,`middle`]}
|
|
DoExpr {setvar[currentRoom,`north`]}
|
|
Chat {/ub use Empyrean Facility Middle Level}
|
|
SetState {portal_transition}
|
|
~~ Middle level done → take Lower portal
|
|
IF: Expr {getvar[currentLevel]==`middle`}
|
|
DO: DoAll
|
|
DoExpr {setvar[currentLevel,`lower`]}
|
|
DoExpr {setvar[currentRoom,`north`]}
|
|
Chat {/ub use Empyrean Facility Lower Level}
|
|
SetState {portal_transition}
|
|
~~ Lower level done → quest complete!
|
|
IF: Expr {getvar[currentLevel]==`lower`}
|
|
DO: DoAll
|
|
DoExpr {echo[`All 3 aetheria slots unlocked!`,1]}
|
|
SetState {quest_done}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: portal_transition - Wait for portal entry/exit
|
|
~~ ============================================================
|
|
STATE: {portal_transition}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
IF: ExitPortal
|
|
DO: DoAll
|
|
DoExpr {echo[`Arrived at `+getvar[currentLevel]+` level`,1]}
|
|
SetState {goto_room}
|
|
~~ Safety: if portal didn't work, retry
|
|
IF: SecsInStateGE 15
|
|
DO: SetState {take_portal}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: quest_done - All 3 levels complete, recall out
|
|
~~ ============================================================
|
|
STATE: {quest_done}
|
|
IF: Always
|
|
DO: DoAll
|
|
DoExpr {echo[`Empyrean Facility quest COMPLETE! All aetheria slots unlocked.`,1]}
|
|
Chat {/mp}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: stuck - Navigation stuck, try to recover
|
|
~~ ============================================================
|
|
STATE: {stuck}
|
|
IF: Death
|
|
DO: SetState {death}
|
|
IF: Always
|
|
DO: DoAll
|
|
Chat {/ub face}
|
|
DoExpr {echo[`Stuck! Trying to recover...`,1]}
|
|
SetState {goto_room}
|
|
|
|
~~ ============================================================
|
|
~~ STATE: death - Death recovery
|
|
~~ Re-enter dungeon from the beginning
|
|
~~ ============================================================
|
|
STATE: {death}
|
|
IF: ExitPortal
|
|
DO: DoAll
|
|
DoExpr {echo[`Died! Re-entering dungeon...`,1]}
|
|
Chat {/vt nav load nav_empyrean}
|
|
SetState {enter_dungeon}
|