metas/neftet/neftet.af

728 lines
27 KiB
Text

~~ {
~~ FOR AUTO-COMPLETION ASSISTANCE: testvar getvar setvar touchvar clearallvars clearvar getcharintprop getchardoubleprop getcharquadprop getcharboolprop getcharstringprop getisspellknown getcancastspell_hunt getcancastspell_buff getcharvital_base getcharvital_current getcharvital_buffedmax getcharskill_traininglevel getcharskill_base getcharskill_buffed getplayerlandcell getplayercoordinates coordinategetns coordinategetwe coordinategetz coordinatetostring coordinateparse coordinatedistancewithz coordinatedistanceflat wobjectgetphysicscoordinates wobjectgetname wobjectgetobjectclass wobjectgettemplatetype wobjectgetisdooropen wobjectfindnearestmonster wobjectfindnearestdoor wobjectfindnearestbyobjectclass wobjectfindininventorybytemplatetype wobjectfindininventorybyname wobjectfindininventorybynamerx wobjectgetselection wobjectgetplayer wobjectfindnearestbynameandobjectclass actiontryselect actiontryuseitem actiontryapplyitem actiontrygiveitem actiontryequipanywand actiontrycastbyid actiontrycastbyidontarget chatbox chatboxpaste statushud statushudcolored uigetcontrol uisetlabel isfalse istrue iif randint cstr strlen getobjectinternaltype cstrf stopwatchcreate stopwatchstart stopwatchstop stopwatchelapsedseconds cnumber floor ceiling round abs getworldname getitemcountininventorybyname getheading getitemcountininventorybynamerx getheadingto actiontrygiveprofile vitae getfellowshipstatus getfellowshipname getfellowshipisopen getfellowshipisleader getfellowshipleaderid getfellowshipcanrecruit getfellowid getfellowshipcount getfellowshiplocked getfellowname getfellowshipisfull sin cos tan sqrt asin acos atan atan2 sinh cosh tanh vtsetmetastate getregexmatch echo chr ord wobjectgetid wobjectgethealth wobjectfindbyid wobjectgetintprop wobjectfindnearestbytemplatetype wobjectgetopencontainer testquestflag getquestktprogress isrefreshingquests getquestktrequired getqueststatus getisday getgamehour getgamehourname getisnight getgameday getgameticks getminutesuntilday getgamemonth getgameyear
~~ }
~~
~~ Merged Neftet meta (leader + follower)
~~ Variables set by external launcher:
~~ isLeader - 1 for leader, 0 for follower
~~ followTarget - leader character name (follower only)
~~ navRoute - main hunting route (leader only, e.g. neftet_route)
~~ navRoute2 - alternate route after flower/prickly pickup (leader only, e.g. neftet_route2)
~~ navWaitFollow - return-to-start route (both roles, e.g. neftet_wait_follow / neftet_wait_follow2)
~~ (navCloseStopRangeDefault removed - hardcoded to 0.00825 for both roles)
~~
~~
~~ File auto-generated by metaf, a program created by Eskarina of Morningthaw/Coldeve.
~~ Get metaf here: https://github.com/JJEII/metaf/
~~
~~ All recognized structural designators:
~~ STATE: DO:
~~ IF: NAV:
~~
~~ All recognized CONDITION (IF:) operation keywords:
~~ Never NavEmpty MobsInDist_Priority Not
~~ Always Death NeedToBuff PSecsInStateGE
~~ All VendorOpen NoMobsInDist SecsOnSpellGE
~~ Any VendorClosed BlockE BuPercentGE
~~ ChatMatch ItemCountLE CellE DistToRteGE
~~ MainSlotsLE ItemCountGE IntoPortal Expr
~~ SecsInStateGE MobsInDist_Name ExitPortal ChatCapture
~~
~~ All recognized ACTION (DO:) operation keywords:
~~ None EmbedNav ChatExpr SetOpt
~~ SetState CallState SetWatchdog CreateView
~~ Chat Return ClearWatchdog DestroyView
~~ DoAll DoExpr GetOpt DestroyAllViews
~~
~~ All recognized NAV types:
~~ circular follow
~~ linear once
~~
~~ All recognized NAV NODE types:
~~ flw vnd
~~ pnt ptl
~~ rcl tlk
~~ pau chk
~~ cht jmp
~~ prt (deprecated in VTank)
~~ }
STATE: {death} ~~ {
IF: ExitPortal
DO: Chat {/vt opt set enablebuffing false}
IF: ExitPortal
DO: Chat {/vt opt set enablenav true}
IF: ExitPortal
DO: Chat {/vt opt set enablelooting false}
IF: ExitPortal
DO: Chat {/vt opt set enablecombat false}
IF: Always
DO: EmbedNav nav0__death_pause_nav {death_pause.nav}
IF: NavEmpty
DO: SetState {turn_in_quests}
IF: Always
DO: SetWatchdog 5 60 {stuck}
~~ }
STATE: {Default} ~~ {
~~ One-time login setup state. Runs once when the character logs in.
~~ Leader: enable settings, load nav route, create fellowship, init flower/prickly vars.
~~ Follower: enable settings, set navpriorityboost. Both transition to Hunt.
IF: All
Expr {getvar[isLeader]}
DO: DoAll
Chat {/ub opt set VTank.PatchExpressionEngine true}
Chat {/vt opt set enablecombat true}
Chat {/vt opt set enablelooting true}
Chat {/vt opt set enablebuffing true}
Chat {/vt opt set enablenav true}
Chat {/vt opt set navpriorityboost false}
ChatExpr {\/vt nav load +getvar[navRoute]}
Chat {/ub fellow create Sawato Rockstyle}
DoExpr {setvar[pickFlowers, 1]}
DoExpr {setvar[pokePricklys, 1]}
DoExpr {setvar[pickupRange, 10]}
DoExpr {setvar[ammoType, cond[getinvcount[Wrapped Bundle of Quarrelshafts]>0, 1, cond[getinvcount[Wrapped Bundle of Arrowshafts]>0, 2, 0]]]}
SetState {Hunt}
IF: All
Expr {getvar[isLeader]==0}
DO: DoAll
Chat {/ub opt set VTank.PatchExpressionEngine true}
Chat {/vt opt set enablecombat true}
Chat {/vt opt set enablelooting true}
Chat {/vt opt set enablebuffing true}
Chat {/vt opt set enablenav true}
Chat {/vt opt set navpriorityboost true}
DoExpr {setvar[ammoType, cond[getinvcount[Wrapped Bundle of Quarrelshafts]>0, 1, cond[getinvcount[Wrapped Bundle of Arrowshafts]>0, 2, 0]]]}
SetState {Hunt}
~~ }
STATE: {Hunt} ~~ {
~~ Main hunting/monitoring loop. Both roles enter here after setup or returning from side tasks.
~~ Leader: loads navRoute, hunts along route, flower/prickly pickup, DistToRteGE, toggle commands.
~~ Listens for #alexgillarkillar tells and auto-recruits sender to fellowship.
~~ Follower: issues /ub follow once when leader is in range, leader-leave detection via ChatCapture.
~~ If not in fellowship and leader nearby, sends #alexgillarkillar tell every 5s.
IF: All
Expr {getvar[isLeader]}
DO: DoAll
Chat {/vt opt set navpriorityboost false}
ChatExpr {\/vt nav load +getvar[navRoute]}
IF: All
Expr {getvar[isLeader]==0}
Expr {wobjectfindnearestbynameandobjectclass[24, getvar[followTarget]]!=0}
DO: ChatExpr {\/ub follow +getvar[followTarget]}
IF: All
Expr {getvar[isLeader]==0}
Expr {getfellowshipstatus[]==0}
Expr {wobjectfindnearestbynameandobjectclass[24, getvar[followTarget]]!=0}
SecsInStateGE 5
DO: DoAll
ChatExpr {\/t +getvar[followTarget]+`\, #alexgillarkillar`}
SetState {Hunt}
IF: All
Expr {getcharquadprop[6]>=1500000}
Expr {getcharintprop[333]>=5}
Expr {getcharintprop[334]>=5}
Expr {getcharintprop[335]>=5}
Expr {getcharintprop[336]>=5}
Expr {getcharintprop[338]>=5}
Expr {getcharintprop[339]>=5}
Expr {getcharintprop[340]>=5}
Expr {getcharintprop[342]>=5}
Expr {getcharintprop[343]>=5}
Expr {getcharintprop[365]>=10}
Any
Expr {getcharintprop[333]<10}
Expr {getcharintprop[335]<10}
DO: SetState {seer_cap}
IF: All
Expr {getcharquadprop[6]>=1500000}
Any
Expr {getcharintprop[333]<5}
Expr {getcharintprop[334]<5}
Expr {getcharintprop[335]<5}
Expr {getcharintprop[336]<5}
Expr {getcharintprop[338]<5}
Expr {getcharintprop[339]<5}
Expr {getcharintprop[340]<5}
Expr {getcharintprop[342]<5}
Expr {getcharintprop[343]<5}
Expr {getcharintprop[365]<10}
DO: SetState {lum_cap}
IF: All
Expr {getvar[isLeader]}
Expr {coordinatedistancewithz[getplayercoordinates[], wobjectgetphysicscoordinates[wobjectfindnearestbyobjectclass[8]]]<=getvar[pickupRange]}
Expr {wobjectgetname[wobjectfindnearestbyobjectclass[8]]==Prickly Pear}
Expr {getvar[pokePricklys]==1}
DO: SetState {picking_flowers}
IF: All
Expr {getvar[isLeader]}
Expr {coordinatedistancewithz[getplayercoordinates[], wobjectgetphysicscoordinates[wobjectfindnearestbyobjectclass[8]]]<=getvar[pickupRange]}
Expr {wobjectgetname[wobjectfindnearestbyobjectclass[8]]==Desert Flower}
Expr {getvar[pickFlowers]==1}
DO: SetState {picking_flowers}
IF: Death
DO: SetState {death}
IF: Always
DO: SetWatchdog 10 600 {stuck}
IF: All
Expr {getvar[isLeader]}
ChatMatch {^\[Fellowship\].*(say|says), \"#toggle_flowers\"$}
DO: CallState {toggle_flowers} {Hunt}
IF: All
Expr {getvar[isLeader]}
ChatMatch {^\[Fellowship\].*(say|says), \"#toggle_pricklys\"$}
DO: CallState {toggle_pricklys} {Hunt}
IF: All
Expr {getvar[isLeader]}
ChatCapture {(^(\[[A-z]+?\] |)You|.*\<Tell:IIDString:.+:(?<who>[^\<]*)\>.+\<\\Tell\>) .*, \"#alexgillarkillar\"$} {}
DO: ChatExpr {\/ub fellow recruit +getvar[capturegroup_who]}
IF: All
ItemCountLE 100 {Prismatic Taper}
NoMobsInDist 5
DO: DoAll
Chat {/fellowship Out of tapers! Recomping.}
SetState {recomp}
IF: All
Expr {getvar[isLeader]}
DistToRteGE 1000
DO: SetState {turn_in_quests}
IF: All
Expr {getvar[isLeader]}
DistToRteGE 100
DO: SetState {stuck}
IF: All
ItemCountLE 10 {Mana Scarab}
NoMobsInDist 5
DO: DoAll
Chat {/fellowship Out of mana scarabs. Recomping.}
SetState {recomp_mana_scarab}
IF: All
Expr {getvar[ammoType]==1}
Any
ItemCountLE 10 {Wrapped Bundle of Deadly Prismatic Arrowheads}
ItemCountLE 10 {Wrapped Bundle of Quarrelshafts}
NoMobsInDist 5
DO: DoAll
Chat {/fellowship Low on xbow ammo. Recomping.}
SetState {recomp_missile}
IF: All
Expr {getvar[ammoType]==2}
Any
ItemCountLE 10 {Wrapped Bundle of Deadly Prismatic Arrowheads}
ItemCountLE 10 {Wrapped Bundle of Arrowshafts}
NoMobsInDist 5
DO: DoAll
Chat {/fellowship Low on bow ammo. Recomping.}
SetState {recomp_missile}
IF: All
MainSlotsLE 4
NoMobsInDist 5
DO: SetState {give_keys}
IF: All
ItemCountGE 1000 {A'nekshay Token}
NoMobsInDist 5
DO: DoAll
Chat {/fellowship Turning in A'nekshay Tokens.}
SetState {go_to_atokens}
IF: All
Expr {getvar[isLeader]==0}
ChatCapture {(?<who>\w[\w ]*\w) has left your Fellowship} {}
Expr {getvar[capturegroup_who]==getvar[followTarget]}
DO: DoAll
Chat {/ub fellow quit}
SetState {turn_in_quests}
~~ }
STATE: {picking_flowers} ~~ {
~~ Leader-only: flower/prickly pickup. Follower never reaches this state.
IF: Expr {coordinatedistancewithz[getplayercoordinates[], wobjectgetphysicscoordinates[wobjectfindnearestbyobjectclass[8]]]<=getvar[pickupRange]+3}
DO: DoAll
DoExpr {setvar[ObjectClose, 1]}
EmbedNav nav1__pickup_nav {pickup.nav}
IF: All
Expr {getvar[ObjectClose]==1}
Expr {coordinatedistancewithz[getplayercoordinates[], wobjectgetphysicscoordinates[wobjectfindnearestbyobjectclass[8]]]>getvar[pickupRange]+4}
DO: DoAll
DoExpr {setvar[ObjectClose, 0]}
SetState {Reset}
IF: All
Expr {getvar[ObjectClose]==1}
SecsInStateGE 3
DO: DoAll
DoExpr {setvar[ObjectClose, 0]}
SetState {Reset}
IF: Death
DO: SetState {death}
IF: Always
DO: SetWatchdog 5 120 {stuck}
~~ }
STATE: {give_keys} ~~ {
IF: Death
DO: SetState {death}
IF: Always
DO: DoAll
Chat {/vt opt set enablecombat false}
Chat {/vt opt set enablebuffing false}
Chat {/vt nav load ah_give_keys}
IF: Always
DO: SetWatchdog 3 300 {Default}
IF: NavEmpty
DO: SetState {stuck}
~~ }
STATE: {go_to_atokens} ~~ {
IF: Death
DO: SetState {death}
IF: All
Expr {testvar[goATokensNavLoaded]}
NavEmpty
DO: DoAll
DoExpr {clearvar[goATokensNavLoaded]}
SetState {hand_over_atokens}
IF: Always
DO: DoAll
DoExpr {setvar[goATokensNavLoaded, 1]}
Chat {/vt opt set enablecombat false}
Chat {/vt opt set enablebuffing false}
Chat {/vt nav load anekshey_tokens_to_proms}
Chat {/vt opt set enablenav true}
SetWatchdog 5 300 {stuck}
~~ }
STATE: {go_to_start} ~~ {
~~ Loads navWaitFollow to rendezvous point. Re-enables combat/looting/buffing, then goes to Hunt.
IF: Death
DO: SetState {death}
IF: Always
DO: DoAll
Chat {/vt opt set enablecombat true}
Chat {/vt opt set enablelooting true}
Chat {/vt opt set enablebuffing true}
ChatExpr {\/vt nav load +getvar[navWaitFollow]}
SetWatchdog 5 300 {stuck}
IF: All
SecsInStateGE 3
NavEmpty
DO: SetState {Hunt}
~~ }
STATE: {hand_over_atokens} ~~ {
IF: Death
DO: SetState {death}
IF: Expr {getvar[atokenRetries]>=40}
DO: DoAll
Chat {/f A'nekshay token hand-over failed after 40 retries. Bailing.}
DoExpr {clearvar[atokenRetries]}
SetState {turn_in_quests}
IF: ItemCountGE 20 {A'nekshay Token}
DO: DoAll
DoExpr {setvar[atokenRetries, getvar[atokenRetries]+1]}
Chat {/ub give 20 A'nekshay Token to Higashiyama Akako}
Chat {/ub prepclick yes 5}
SetState {wait_atokens}
IF: ItemCountLE 19 {A'nekshay Token}
DO: DoAll
DoExpr {clearvar[atokenRetries]}
SetState {turn_in_quests}
~~ }
STATE: {Reset} ~~ {
~~ Reset: go to turn_in_quests to restart the loop.
IF: Always
DO: SetState {turn_in_quests}
~~ }
STATE: {recomp} ~~ {
IF: Death
DO: SetState {death}
IF: Always
DO: DoAll
Chat {/vt opt set enablecombat false}
Chat {/vt opt set enablebuffing false}
Chat {/vt nav load ah_recomp}
Chat {/vt opt set enablenav true}
IF: Always
DO: SetWatchdog 3 300 {Default}
IF: NavEmpty
DO: SetState {stuck}
~~ }
STATE: {recomp_mana_scarab} ~~ {
IF: Death
DO: SetState {death}
IF: Always
DO: DoAll
Chat {/vt opt set enablecombat false}
Chat {/vt opt set enablebuffing false}
Chat {/vt opt set NavCloseStopRange 0.00425}
Chat {/vt nav load recomp_gilly}
IF: SecsInStateGE 300
DO: DoAll
Chat {/vt opt set NavCloseStopRange 0.00825}
SetState {turn_in_quests}
IF: NavEmpty
DO: DoAll
Chat {/vt opt set NavCloseStopRange 0.00825}
SetState {stuck}
~~ }
STATE: {recomp_missile} ~~ {
IF: Death
DO: SetState {death}
IF: Always
DO: DoAll
Chat {/vt opt set enablecombat false}
Chat {/vt opt set enablebuffing false}
Chat {/vt nav load recomp_laurana}
IF: Always
DO: SetWatchdog 3 300 {stuck}
IF: NavEmpty
DO: SetState {stuck}
~~ }
STATE: {stuck} ~~ {
IF: Always
DO: DoAll
Chat {/f #turn_in_quests}
SetState {turn_in_quests}
~~ }
STATE: {toggle_flowers} ~~ {
~~ Leader-only: toggled via CallState from Hunt.
IF: Always
DO: DoAll
DoExpr {setvar[pickFlowers, getvar[pickFlowers]^1]}
ChatExpr {\/f Pick flowers\: +cstr[(getvar[pickFlowers])]}
Return
~~ }
STATE: {toggle_pricklys} ~~ {
~~ Leader-only: toggled via CallState from Hunt.
IF: Always
DO: DoAll
DoExpr {setvar[pokePricklys, getvar[pokePricklys]^1]}
ChatExpr {\/f Poke pricklys\: +cstr[(getvar[pokePricklys])]}
Return
~~ }
STATE: {turn_in_quests} ~~ {
IF: Death
DO: SetState {death}
IF: Always
DO: DoAll
Chat {/vt nav load neftet_quests}
Chat {/vt opt set enablenav true}
Chat {/vt opt set enablecombat false}
Chat {/vt opt set enablebuffing false}
Chat {/vt opt set NavCloseStopRange 0.008}
IF: NavEmpty
DO: SetState {go_to_start}
IF: Always
DO: SetWatchdog 5 120 {turn_in_quests}
~~ }
STATE: {wait_atokens} ~~ {
IF: Death
DO: SetState {death}
IF: ChatMatch {Higashiyama Akako gives you 10 Promissory Notes}
DO: SetState {hand_over_atokens}
IF: Always
DO: SetWatchdog 0 3 {hand_over_atokens}
~~ }
STATE: {lum_cap} ~~ {
~~ Luminance aura auto-purchase: disable combat, navigate to Nalicana area, then buy auras.
~~ Uses nav_nalicana to get to token pickup position. Returns to Default when done.
IF: Death
DO: SetState {death}
IF: All
Expr {testvar[lumCapNavLoaded]}
NavEmpty
DO: DoAll
DoExpr {clearvar[lumCapNavLoaded]}
SetState {lum_pick_aura}
IF: Always
DO: DoAll
DoExpr {setvar[lumCapNavLoaded, 1]}
Chat {/vt opt set enablecombat false}
Chat {/vt opt set enablelooting false}
Chat {/vt opt set enablebuffing true}
Chat {/vt opt set enablenav true}
Chat {/vt nav load nav_nalicana}
SetWatchdog 5 300 {stuck}
~~ }
STATE: {lum_pick_aura} ~~ {
~~ Compute cheapest aura to buy. "Cheapest first": find lowest rank among non-maxed auras.
~~ Standard auras (cap 5): cost = (rank+2)*50000. AllSkills (cap 10): cost = (rank+1)*100000.
~~ Aura IDs: 333=Valor, 334=Protection, 335=Glory, 336=Temperance, 338=AethericVision,
~~ 343=Craftsman, 339=ManaFlow, 340=ManaInfusion, 342=Purity, 365=AllSkills
IF: Death
DO: SetState {death}
IF: Always
DO: DoAll
DoExpr {setvar[lumMinRank, 999]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[333]<5&&getcharintprop[333]<getvar[lumMinRank],getcharintprop[333],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[334]<5&&getcharintprop[334]<getvar[lumMinRank],getcharintprop[334],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[335]<5&&getcharintprop[335]<getvar[lumMinRank],getcharintprop[335],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[336]<5&&getcharintprop[336]<getvar[lumMinRank],getcharintprop[336],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[338]<5&&getcharintprop[338]<getvar[lumMinRank],getcharintprop[338],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[343]<5&&getcharintprop[343]<getvar[lumMinRank],getcharintprop[343],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[339]<5&&getcharintprop[339]<getvar[lumMinRank],getcharintprop[339],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[340]<5&&getcharintprop[340]<getvar[lumMinRank],getcharintprop[340],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[342]<5&&getcharintprop[342]<getvar[lumMinRank],getcharintprop[342],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[365]<10&&getcharintprop[365]<getvar[lumMinRank],getcharintprop[365],getvar[lumMinRank]]]}
SetState {lum_select_token}
~~ }
STATE: {lum_select_token} ~~ {
~~ Select which token to pick up based on lumMinRank. First match at lowest rank wins.
IF: Death
DO: SetState {death}
IF: All
Expr {getcharintprop[333]<5}
Expr {getcharintprop[333]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[333]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of Valor`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[334]<5}
Expr {getcharintprop[334]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[334]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of Protection`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[335]<5}
Expr {getcharintprop[335]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[335]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of Glory`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[336]<5}
Expr {getcharintprop[336]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[336]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of Temperance`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[338]<5}
Expr {getcharintprop[338]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[338]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of Aetheric Vision`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[343]<5}
Expr {getcharintprop[343]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[343]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of the Craftsman`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[339]<5}
Expr {getcharintprop[339]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[339]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of Mana Flow`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[340]<5}
Expr {getcharintprop[340]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[340]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of Mana Infusion`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[342]<5}
Expr {getcharintprop[342]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[342]+2)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of Purity`]}
SetState {lum_pickup_token}
IF: All
Expr {getcharintprop[365]<10}
Expr {getcharintprop[365]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[365]+1)*100000}
DO: DoAll
DoExpr {setvar[lumToken, `Token of the Aura of the World`]}
SetState {lum_pickup_token}
IF: Always
DO: DoAll
Chat {/f All Nalicana auras maxed or can't afford. Heading back.}
SetState {turn_in_quests}
~~ }
STATE: {lum_pickup_token} ~~ {
~~ Pick up the selected token from the ground spawn. Wait for it to appear in inventory.
IF: Death
DO: SetState {death}
IF: Expr {getitemcountininventorybyname[getvar[lumToken]]>=1}
DO: SetState {lum_give_token}
IF: SecsInStateGE 30
DO: DoAll
Chat {/f Failed to pick up token. Retrying...}
SetState {lum_pickup_token}
IF: Not Expr {getitemcountininventorybyname[getvar[lumToken]]>=1}
DO: DoAll
ChatExpr {\/ub use +getvar[lumToken]}
SetWatchdog 5 120 {Default}
~~ }
STATE: {lum_give_token} ~~ {
~~ Give the token to Nalicana. Prepclick yes for confirmation dialog.
~~ Chat responses:
~~ Success: "You feel a surge of energy pass through you as the Light empowers your being"
~~ Already maxed: "You cannot increase your Aura of ... any further."
~~ Can't afford: "Nalicana tells you, "You do not have enough Luminance.""
IF: Death
DO: SetState {death}
IF: ChatMatch {You do not have enough Luminance}
DO: DoAll
Chat {/f Not enough luminance. Heading back.}
SetState {turn_in_quests}
IF: ChatMatch {You cannot increase}
DO: SetState {lum_wait_spawn}
IF: ChatMatch {You feel a surge of energy}
DO: SetState {lum_wait_spawn}
IF: SecsInStateGE 15
DO: SetState {lum_give_token}
IF: Always
DO: DoAll
Chat {/ub prepclick yes 5}
ChatExpr {\/ub givep +getvar[lumToken]+` to Nalicana`}
SetWatchdog 5 120 {Default}
~~ }
STATE: {lum_wait_spawn} ~~ {
~~ Wait 20s for next token to spawn, then nav back to pickup position via nav_nalicanareset.
IF: Death
DO: SetState {death}
IF: All
Expr {testvar[lumNavLoaded]}
NavEmpty
DO: DoAll
DoExpr {clearvar[lumNavLoaded]}
SetState {lum_pick_aura}
IF: SecsInStateGE 60
DO: DoAll
DoExpr {clearvar[lumNavLoaded]}
SetState {lum_pick_aura}
IF: SecsInStateGE 20
DO: DoAll
DoExpr {setvar[lumNavLoaded,1]}
Chat {/vt nav load nav_nalicanareset}
IF: Always
DO: None
~~ }
STATE: {seer_cap} ~~ {
~~ Seer aura auto-purchase: disable combat, navigate to Liam of Gelid.
~~ Uses nav_liamofgelid to get to token area. Returns to Default when done.
IF: Death
DO: SetState {death}
IF: All
Expr {testvar[seerCapNavLoaded]}
NavEmpty
DO: DoAll
DoExpr {clearvar[seerCapNavLoaded]}
SetState {seer_pay}
IF: Always
DO: DoAll
DoExpr {setvar[seerCapNavLoaded, 1]}
Chat {/vt opt set enablecombat false}
Chat {/vt opt set enablelooting false}
Chat {/vt opt set enablebuffing true}
Chat {/vt opt set enablenav true}
Chat {/vt nav load nav_liamofgelid}
SetWatchdog 5 300 {stuck}
~~ }
STATE: {seer_pay} ~~ {
~~ Give Trade Note (250,000) to Liam of Gelid. Required once per character, harmless to retry.
IF: Death
DO: SetState {death}
IF: SecsInStateGE 5
DO: SetState {seer_pick_aura}
IF: Always
DO: DoAll
Chat {/ub prepclick yes 5}
Chat {/ub givep 1 Trade Note (250,000) to Liam of Gelid}
~~ }
STATE: {seer_pick_aura} ~~ {
~~ Compute cheapest seer aura. Seer cost = (rank+7)*50000.
~~ Properties: 333=Destruction (Damage Rating), 335=Retribution (Crit Damage). Both cap at 10 total.
IF: Death
DO: SetState {death}
IF: Always
DO: DoAll
DoExpr {setvar[lumMinRank, 999]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[333]<10&&getcharintprop[333]<getvar[lumMinRank],getcharintprop[333],getvar[lumMinRank]]]}
DoExpr {setvar[lumMinRank, iif[getcharintprop[335]<10&&getcharintprop[335]<getvar[lumMinRank],getcharintprop[335],getvar[lumMinRank]]]}
SetState {seer_select_token}
~~ }
STATE: {seer_select_token} ~~ {
~~ Select seer token. Cheapest first between Destruction (333) and Retribution (335).
IF: Death
DO: SetState {death}
IF: All
Expr {getcharintprop[333]<10}
Expr {getcharintprop[333]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[333]+7)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Dericost Token of the Aura of Destruction`]}
SetState {seer_pickup_token}
IF: All
Expr {getcharintprop[335]<10}
Expr {getcharintprop[335]==getvar[lumMinRank]}
Expr {getcharquadprop[6]>=(getcharintprop[335]+7)*50000}
DO: DoAll
DoExpr {setvar[lumToken, `Dericost Token of the Aura of Retribution`]}
SetState {seer_pickup_token}
IF: Always
DO: DoAll
Chat {/f All seer auras maxed or can't afford. Heading back.}
SetState {turn_in_quests}
~~ }
STATE: {seer_pickup_token} ~~ {
~~ Pick up the selected seer token from the ground spawn near Liam.
IF: Death
DO: SetState {death}
IF: Expr {getitemcountininventorybyname[getvar[lumToken]]>=1}
DO: SetState {seer_give_token}
IF: SecsInStateGE 30
DO: DoAll
Chat {/f Failed to pick up seer token. Retrying...}
SetState {seer_pickup_token}
IF: Not Expr {getitemcountininventorybyname[getvar[lumToken]]>=1}
DO: DoAll
ChatExpr {\/ub use +getvar[lumToken]}
SetWatchdog 5 120 {Default}
~~ }
STATE: {seer_give_token} ~~ {
~~ Give seer token to Liam of Gelid. Prepclick yes for confirmation dialog.
~~ Success: "has been augmented"
~~ Can't afford: "You do not have enough Luminance"
~~ Already maxed: "You cannot increase"
IF: Death
DO: SetState {death}
IF: ChatMatch {You do not have enough Luminance}
DO: DoAll
Chat {/f Not enough luminance for seer aura. Heading back.}
SetState {turn_in_quests}
IF: ChatMatch {You cannot increase}
DO: SetState {seer_wait_spawn}
IF: ChatMatch {has been augmented}
DO: SetState {seer_wait_spawn}
IF: SecsInStateGE 15
DO: SetState {seer_give_token}
IF: Always
DO: DoAll
Chat {/ub prepclick yes 5}
ChatExpr {\/ub givep +getvar[lumToken]+` to Liam of Gelid`}
SetWatchdog 5 120 {Default}
~~ }
STATE: {seer_wait_spawn} ~~ {
~~ Wait 20s for next seer token to spawn, then loop back. No reset nav needed.
IF: Death
DO: SetState {death}
IF: SecsInStateGE 20
DO: SetState {seer_pick_aura}
IF: Always
DO: None
~~ }
~~========================= ONLY NAVS APPEAR BELOW THIS LINE =========================~~
NAV: nav0__death_pause_nav once ~~ {
pau 47.1262349446615 26.1864453474681 0.225020837783813 5000
~~ }
NAV: nav1__pickup_nav circular ~~ {
cht 6.85679616481066 -19.8018191655477 2.08332513769468E-05 {/vt mexec actiontryuseitem[wobjectfindnearestbyobjectclass[8]]}
pau 6.85679616481066 -19.8018191655477 2.08332513769468E-05 10000
~~ }