#define BATTLEFIELD_NONE 0 #define BATTLEFIELD_OPEN 1 #define BATTLEFIELD_SELECT 2 #define BATTLEFIELD_QUEUED 3 #define BATTLEFIELD_CONFIRM 4 #define BATTLEFIELD_COUNTDOWN 5 #define BATTLEFIELD_ACTIVE 6 #define BATTLEFIELD_FINISHED 7 objectdef oBattlefield inherits oBase { variable bool EnteringBattlefield = FALSE variable int BattlefieldCountdown = 60 variable int PreviousState member State() { if ${WoWScript[GetBattlefieldStatus(1)].Equal["active"]} && ${BattlefieldCountdown} > 0 { return BATTLEFIELD_COUNTDOWN } if ${WoWScript[GetBattlefieldStatus(1)].Equal["active"]} { return BATTLEFIELD_ACTIVE } if ${WoWScript[GossipFrame:IsShown()].Equal[1]} ;&& ${This.EnteringBattlefield} { return BATTLEFIELD_OPEN } if ${WoWScript[BattlefieldFrame:IsShown()].Equal[1]} { return BATTLEFIELD_SELECT } if ${WoWScript[GetBattlefieldStatus(1)].Equal["queued"]} { return BATTLEFIELD_QUEUED } if ${WoWScript[GetBattlefieldStatus(1)].Equal["confirm"]} { return BATTLEFIELD_CONFIRM } if ${WoWScript[GetBattlefieldWinner()](exists)} { return BATTLEFIELD_FINISHED } return BATTLEFIELD_NONE } method Pulse() { This.CurrentState:Set[${This.State}] if ${This.PreviousState} != ${This.CurrentState} { This.PreviousState:Set[${This.CurrentState}] This:Echo["New state: ${This.CurrentState}"] } switch ${This.CurrentState} { case BATTLEFIELD_QUEUED break case BATTLEFIELD_SELECT WoWScript JoinBattlefield(0) WoWScript BattlefieldFrame:Hide() break case BATTLEFIELD_OPEN WoWScript SelectGossipOption(1) This.EnteringBattlefield:Set[FALSE] break case BATTLEFIELD_CONFIRM WoWScript AcceptBattlefieldPort(1,1) This.BattlefieldCountdown:Set[60] break case BATTLEFIELD_COUNTDOWN break case BATTLEFIELD_ACTIVE break case BATTLEFIELD_FINISHED WoWScript LeaveBattlefield() break case BATTLEFIELD_NONE break } } method EnterBattlefield(string BattleMaster) { if !${Unit[${BattleMaster}](exists)} { return } Unit[${BattleMaster}]:Use This.EnteringBattlefield:Set[TRUE] } method OnCountdown() { } method Plugin() { Event[CORE_EVENT_PULSE]:AttachAtom[${This.ObjectName}:Pulse] } method Shutdown() { Event[CORE_EVENT_PULSE]:DetachAtom[${This.ObjectName}:Pulse] } }