All pastes #247334 Raw Edit

Mine

public text v1 · immutable
#247334 ·published 2006-11-13 10:15 UTC
rendered paste body
#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
	}
}