~~ { ~~ 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) ~~ navWaitFollow - return-to-start route (both roles, e.g. neftet_wait_follow / neftet_wait_follow2) ~~ ammoType - 0 = mage/none, 1 = xbow, 2 = bow ~~ disableLumCap - 0 = enable lum_cap, 1 = skip lum_cap ~~ (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]} 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} 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} Expr {getvar[disableLumCap]!=1} 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\>) .*, \"#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 {(?\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]=(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]=(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 ~~ }