Nestharus
o-o
- Reaction score
- 84
Ok, was tired of waiting for you to write an update, so I did it for u =P.
JASS:
library GetHost initializer Init requires Event, PlayerTracker
/*===================================================================
Name: Host
Version: 2.1
Author: Azlier
-Help from Nestharus
Description:
What it does-
Description
How it does it-
Description
Requirements: Event- URL
PTN- URL
Installation: NA
Usage:
------------------------------------------------------------------
-GetHost takes nothing returns player
Description
-OnHostDetect takes code c returns nothing
Description
-TriggerRegisterHostDetected takes trigger t returns nothing
Description
===================================================================*/
globals
private unit array U
private player Host
private trigger OnDetect
private group Group
private unit Enummed
private Event Ev
private filterfunc findSelected
private player indexedPlayer
private integer playerId
endglobals
constant function GetHost takes nothing returns player
return Host
endfunction
function OnHostDetect takes boolexpr c returns nothing
call TriggerAddCondition(OnDetect, c)
endfunction
function TriggerRegisterHostDetected takes trigger t returns nothing
call Ev.register(t)
endfunction
private function CalculateHost takes nothing returns boolean
if Host == null then
set Host = GetOwningPlayer(GetTriggerUnit())
call TriggerEvaluate(OnDetect)
call Ev.fire()
endif
return false
endfunction
private function FindSelected takes nothing returns boolean
if Enummed == null then
set Enummed = GetFilterUnit()
endif
return false
endfunction
private function RecalculateHost takes nothing returns boolean
local integer i = GetPlayerCount()-1
set Host = null
loop
set indexedPlayer = GetIndexedPlayer(i)
set playerId = GetIndexedPlayerId(i)
set Enummed = null
call GroupEnumUnitsSelected(Group, indexedPlayer, findSelected)
if GetLocalPlayer() == indexedPlayer then
call SelectUnit(Enummed, false)
call SelectUnit(U[playerId], true)
call SelectUnit(U[playerId], false)
call SelectUnit(Enummed, true)
endif
exitwhen i == 0
set i = i - 1
endloop
call TriggerRegisterPlayerEvent(OnDetect, Host, EVENT_PLAYER_LEAVE)
return false
endfunction
private function Init takes nothing returns nothing
local trigger t
local integer i = GetPlayerCount()-1
if i > 0 then
set OnDetect = CreateTrigger()
set Group = CreateGroup()
set t = CreateTrigger()
set Ev = Event.create()
set findSelected = Filter(function FindSelected)
call TriggerAddCondition(t, Condition(function CalculateHost))
call TriggerAddCondition(OnDetect, Condition(function RecalculateHost))
loop
set indexedPlayer = GetIndexedPlayer(i)
set playerId = GetIndexedPlayerId(i)
set U[playerId] = CreateUnit(indexedPlayer, 039;hfoo039;, 10000, 10000, 270)
call PauseUnit(U[playerId], true)
call TriggerRegisterUnitEvent(t, U[playerId], EVENT_UNIT_SELECTED)
set Enummed = null
call GroupEnumUnitsSelected(Group, indexedPlayer, findSelected)
if GetLocalPlayer() == indexedPlayer then
call SelectUnit(Enummed, false)
call SelectUnit(U[playerId], true)
call SelectUnit(U[playerId], false)
call SelectUnit(Enummed, true)
endif
exitwhen i == 0
set i = i - 1
endloop
call TriggerRegisterPlayerEvent(OnDetect, Host, EVENT_PLAYER_LEAVE)
return
endif
set Host = GetIndexedPlayer(0)
endfunction
endlibrary