kingkingyyk3
Visitor (Welcome to the Jungle, Baby!)
- Reaction score
- 216
JASS:
////////////////////////////////////////////
//
// PLAYERS v1.0
// by kingking
//
// This library sorts types of players
// in map.
//
// Functions :
// Players_IsHuman(whichPlayer) -> boolean
// Players_IsComputer(whichPlayer) -> boolean
// Players_IsEmpty(whichPlayer) -> boolean
// Players_IsPlaying(whichPlayer) -> boolean
// Players_IsLeft(whichPlayer) -> boolean
//
// ForHumanPlayers(whichCallback)
// ForComputerPlayers(whichCallback)
// ForEmptyPlayers(whichCallback)
// ForPlayingPlayers(whichCallback)
// ForLeftPlayers(whichCallback)
//
// Players[whichPlayerId] -> player
//
// TriggerRegisterHumanPlayersLeaveEvent(whichTrigger)
//
// Requires :
// Jasshelper 0.A.2.7
// Event
/////////////////////////////////////////
library Players initializer Init requires Event
globals
player array Players
private force HumanPlayers
private force ComputerPlayers
private force EmptyPlayers
private force PlayingPlayers
private force LeftPlayers
private Event HumanPlayersLeaveEvent
endglobals
//! textmacro PLAYERS takes TYPE
public function Is$TYPE$ takes player whichPlayer returns boolean
return IsPlayerInForce(whichPlayer,$TYPE$Players)
endfunction
function For$TYPE$Players takes code whichCallback returns nothing
call ForForce($TYPE$Players, whichCallback)
endfunction
//! endtextmacro
//! runtextmacro PLAYERS ("Human")
//! runtextmacro PLAYERS ("Computer")
//! runtextmacro PLAYERS ("Empty")
//! runtextmacro PLAYERS ("Playing")
//! runtextmacro PLAYERS ("Left")
function TriggerRegisterHumanPlayerLeaveEvent takes trigger whichTrigger returns EventReg
return HumanPlayersLeaveEvent.register(whichTrigger)
endfunction
private function FireEvent takes nothing returns boolean
local player p = GetTriggerPlayer()
call ForceRemovePlayer(HumanPlayers,p)
call ForceRemovePlayer(PlayingPlayers,p)
call ForceAddPlayer(EmptyPlayers,p)
call ForceAddPlayer(LeftPlayers,p)
call HumanPlayersLeaveEvent.fire()
set p = null
return false
endfunction
private function Init takes nothing returns nothing
local integer i = 0
local trigger trig = CreateTrigger()
set HumanPlayersLeaveEvent = Event.create()
set HumanPlayers = CreateForce()
set ComputerPlayers = CreateForce()
set EmptyPlayers = CreateForce()
set LeftPlayers = CreateForce()
set PlayingPlayers = CreateForce()
loop
exitwhen i > bj_MAX_PLAYER_SLOTS
set Players<i> = Player(i)
if GetPlayerController(Players<i>) == MAP_CONTROL_USER then
call ForceAddPlayer(HumanPlayers,Players<i>)
endif
if GetPlayerController(Players<i>) == MAP_CONTROL_COMPUTER then
call ForceAddPlayer(ComputerPlayers,Players<i>)
endif
if GetPlayerController(Players<i>) == MAP_CONTROL_NONE then
call ForceAddPlayer(EmptyPlayers,Players<i>)
endif
if GetPlayerSlotState(Players<i>) == PLAYER_SLOT_STATE_PLAYING then
call ForceAddPlayer(PlayingPlayers,Players<i>)
endif
if GetPlayerSlotState(Players<i>) == PLAYER_SLOT_STATE_EMPTY then
call ForceAddPlayer(EmptyPlayers,Players<i>)
endif
if IsPlayerInForce(Players<i>,HumanPlayers) and IsPlayerInForce(Players<i>,PlayingPlayers) then
call TriggerRegisterPlayerEvent(trig,Players<i>,EVENT_PLAYER_LEAVE)
endif
set i = i + 1
endloop
endfunction
endlibrary
</i></i></i></i></i></i></i></i></i></i></i></i></i></i>