All pastes #840164 Raw Edit

AFK Hive

public text v1 · immutable
#840164 ·published 2007-12-31 15:31 UTC
rendered paste body
#event Cleared "#*#The zone is clear! Drop Mission!#*#"
#Event LeechCount "#*#Leech Standing by for Duty!#*#"
#Event GTG "#*#Good to Go!#*#"

#include ZoneClear.inc

Sub Main
|Define Task Name **Change only if necessary**
  /define task                     string     outer The Lost Notebook(hard)
  /define InTask                   bool       outer false
  /define LeechReady               int        outer
  /define LeechNumber              int        outer
  /define GoodToGo                 bool       outer false
|Define Character Duty Variables **DO NOT CHANGE**
  /define Killer                   string     outer
  /define QuestGetter              string     outer
  /define Leech1                   string     outer
  /define Leech2                   string     outer
  /define Leech3                   string     outer
  /define Leech4                   string     outer

|Populate Character Duty Variables from AFKHive.INI
  /varset Killer ${Ini[AFKHive.INI,CharInfo,Killer]}
  /varset QuestGetter  ${Ini[AFKHive.INI,CharInfo,QuestGetter]}
  /varset Leech1 ${Ini[AFKHive.INI,CharInfo,Leech1]}
  /varset Leech2 ${Ini[AFKHive.INI,CharInfo,Leech2]}
  /varset Leech3 ${Ini[AFKHive.INI,CharInfo,Leech3]}
  /varset Leech4 ${Ini[AFKHive.INI,CharInfo,Leech4]}
|Make the quest getter leader of the group.
  /Makeleader ${QuestGetter}

|Determine This Character's Function in the macro.
  /if (${Me.Name.Equal[${QuestGetter}]}) /call QuestGetter
  /if (${Me.Name.Equal[${Killer}]}) /call Killer
  /if (${Me.Name.Equal[${Leech1}]}) /call Leech
  /if (${Me.Name.Equal[${Leech2}]}) /call Leech
  /if (${Me.Name.Equal[${Leech3}]}) /call Leech
  /if (${Me.Name.Equal[${Leech4}]}) /call Leech
/end 

|This character is the Quest getter. He will zone to Corathus Creep, and request the mission. 
|Then he will standby to request the mission again when the group is ready for it.
Sub QuestGetter
:QuestCycle
|--Zone to corathus creep
  /if (!${Zone.ID}==365) /call ZoneTo Corathus 365
  /delay 5s
|--Request the mission
  /target Brovil
  /delay 1s
  /saytarget "I will recover the pages."
  /call GetTask
  /delay 3s
|--Destroy the notebook and wait for the group to finish clearing the zone.
  /destroy
  /varset InTask TRUE
:WaitingForComplete
  /if (!${InTask}) {
|--The group is ready for a new task, drop the old one.
    /taskremove ${Killer}
    /taskremove ${Leech1}
    /taskremove ${Leech2}
    /taskremove ${Leech3}
    /taskremove ${Leech4}
    /taskremove ${Me.Name}
    /goto :QuestCycle
  } else /if ${InTask} {
  /delay 1s
  /doevents
  /goto :WaitingForComplete
/return
  
|This character is the Ghost Killer. He will zone into the instance, and wait for the leechers to be ready, 
|then clear the zone using the zoneclear macro of your choice. (just make sure that the zoneclear macro is
|titled ZoneClear.INC, the sub main is changed to sub ZoneClear, and all /end commands are changed to 
|/return and you should be fine using any zoneclear macro. The Default ZoneClear.INI is identical to MQ2SourceZC.Mac
|except for the above noted changes.
Sub Killer
|--Zone to Stoneroot Falls (if not already there)
  /zone westkorlach 358
|--Wait to get the quest.
:WaitforQuest
  /if (!${Window[TaskWnd].Open}) {
    /delay 1s
    /goto :WaitforQuest
  }
  /varset InTask TRUE
  /squelch /windowstate TaskWnd close
|--Zone into the instance.
|--**PROBLEM: how to force the toon to zone into the instance? from stoneroot falls
:WaitOnLeech
|--Clear the zone
  /if (${GoodToGo}) /call ZoneClear
  /if (!${GoodToGo}) /goto :WaitOnLeech
|--Reset conditions
  /varset LeechReady 0
  /g The zone is clear! Drop Mission!
  /warp succor
  /doevents
|--Zone out, back to stoneroot falls.
|--**PROBLEM: how to force the toon to zone out of the instance to stoneroot falls?
|--Return to wait on another quest.
/goto :WaitforQuest
/return

|This character is a leech character. He will zone into the instance and then begin a GK leech macro. 
|once he is set up he will notify the group that he is ready to begin.
Sub Leech
  /g Leech Standing by for Duty!
|--Zone to Stoneroot Falls (if not already there)
  /zone westkorlach 358
|--Wait to get the quest.
:WaitforQuest
  /if (!${Window[TaskWnd].Open}) {
    /delay 1s
    /goto :WaitforQuest
  }
  /varset InTask TRUE
  /squelch /windowstate TaskWnd close
|--Zone in to the instance.
|--**PROBLEM: how to force the toon to zone into the instance? from stoneroot falls
|--Initialize the ghost xp macro / plugin
  /target ${Killer}
  /delay 5
  /warp target
  /delay 5
  /target clear
  /sghostxp on
|--Notify the killer you're GTG
  /if (${Me.Name.Equal[${Leech1}]}) /g ${Leech1} Good to Go!
  /if (${Me.Name.Equal[${Leech2}]}) /g ${Leech2} Good to Go!
  /if (${Me.Name.Equal[${Leech3}]}) /g ${Leech3} Good to Go!
  /if (${Me.Name.Equal[${Leech4}]}) /g ${Leech4} Good to Go!
|--Ghost XP leech loop
:mainloop
  /assist ${Killer}
  /doevents
  /if (${InTask}) /goto :mainloop
|--You're no longer in the task, so stop leeching exp and zone out.
  /if (!${InTask}) {
    /sghostxp off
|--**PROBLEM: How to force the toon to zone out of the instance to stoneroot falls?
|--Return to wait on another quest.
    /goto :WaitforQuest
  }    
/return

|Force the character to chain zone to ZoneName (variable), with ZoneID (variable)
Sub ZoneTo(string ZoneName, ZoneID)
  /declare ZoneTime int local

  /echo Now Zoning to: ${ZoneName}, Please Standby.
:ZoneLoop
  /if (${Zone.ID}=${ZoneID}) /return
  /zone ${ZoneName}
  /for ZoneTime 1 to 30
    /if (${Zone.ID}=${ZoneID}) /return
    /delay 1s
  /next ZoneTime
/goto :ZoneLoop
/return

|Request the task: The Lost Notebook(Hard)
Sub GetTask
:GetTaskLoop
  /if (!${Window[TaskSelectWnd].Open}) {
    /delay 1
    /goto :GetTaskLoop
  }
  /notify TaskSelectWnd TaskList leftmouseup
  /notify TaskSelectWnd TaskList listselect ${Window[TaskSelectWnd].Child[TaskList].List[=${task}]}
  /notify TaskSelectWnd AcceptButton leftmouseup
:TaskWindowLoop
  /if (!${Window[TaskWnd].Open}) {
    /delay 1
    /goto :TaskWindowLoop
  }
  /squelch /windowstate TaskWnd close
/return

Sub Event_Cleared
  /varset InTask FALSE
/return

Sub Event_LeechCount
  /varcalc LeechNumber ${LeechNumber}+1
/return

sub Event_GTG
  /varcalc LeechReady ${LeechReady}+1
  /if (${LeechReady}==${LeechNumber}) /varset GoodToGo TRUE
/return