#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[GetBattlefieldWinner()](exists)} { return BATTLEFIELD_FINISHED } if ${WoWScript[GetBattlefieldStatus(1)].Equal["active"]} && ${BattlefieldCountdown} > 0 { return BATTLEFIELD_COUNTDOWN } 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[GetBattlefieldStatus(1)].Equal["active"]} { return BATTLEFIELD_ACTIVE } return BATTLEFIELD_NONE } method Pulse(int Priority) { 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() This:Debug["Selecting battlefield"] break case BATTLEFIELD_OPEN WoWScript SelectGossipOption(1) This.EnteringBattlefield:Set[FALSE] break case BATTLEFIELD_CONFIRM WoWScript AcceptBattlefieldPort(1,1) This.BattlefieldCountdown:Set[60] This:Debug["Entering battlefields"] Event[BATTLEFIELD_EVENT_ENTER]:Execute break case BATTLEFIELD_COUNTDOWN break case BATTLEFIELD_ACTIVE break case BATTLEFIELD_FINISHED This:Debug["Battlefield finished"] Event[BATTLEFIELD_EVENT_LEAVE]:Execute WoWScript LeaveBattlefield() break case BATTLEFIELD_NONE break } } method EnterBattlefield(string BattleMaster) { if !${Unit[${BattleMaster}](exists)} { return } Unit[${BattleMaster}]:Use This.EnteringBattlefield:Set[TRUE] } member InBattlefield() { return ${WoWScript[GetBattlefieldStatus(1)].Equal["active"]} } method OnBattlefieldMessage(string Line, string EventId, string Message) { if ${Message.Find["1 minute"]} { This.BattlefieldCountdown:Set[60] return } if ${Message.Find["30 seconds"]} { This.BattlefieldCountdown:Set[30] return } if ${Message.Find["Let the battle for"]} { This.BattlefieldCountdown:Set[0] This:Debug["Battlefields start"] return } } method Plugin() { Event[CORE_EVENT_PULSE]:AttachAtom[${This.ObjectName}:Pulse] AddTrigger ${This.ObjectName}:OnBattlefieldMessage "[Event:@EVENTID@:CHAT_MSG_BG_SYSTEM_NEUTRAL](\"@message@\",\"@blah@\",\"@blah@\",\"@blah@\",\"@blah@\",\"@blah@\",@blah@,@blah@,\"@blah@\",@blah@)" LavishScript:RegisterEvent[BATTLEFIELD_EVENT_ENTER] LavishScript:RegisterEvent[BATTLEFIELD_EVENT_LEAVE] } method Shutdown() { Event[CORE_EVENT_PULSE]:DetachAtom[${This.ObjectName}:Pulse] Event[BATTLEFIELD_EVENT_ENTER]:Unregister Event[BATTLEFIELD_EVENT_LEAVE]:Unregister } }