Wrda
Spell Reviewer
- Joined
- Nov 18, 2012
- Messages
- 2,012
Works as expected.
Approved
Approved
if Debug then Debug.beginFile "GetGameHost" end
do
--=============================================================================================================================================================
--Retrieves the game host and stores it in the global GameHost. The game host is not available directly after map initialization, but only after one sync cycle.
--=============================================================================================================================================================
local startTime = os.clock()
local timeDeltas = {}
local function SyncTimeDelta()
if BlzGetTriggerSyncPrefix() ~= "SyncTimeDelta" then
return
end
local data = BlzGetTriggerSyncData()
local playerId, delta = data:match("(\x25d+),(.+)")
timeDeltas[tonumber(playerId)] = delta
local player
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
player = Player(i)
if not timeDeltas[i] and GetPlayerSlotState(player) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController(player) == MAP_CONTROL_USER then
return
end
end
local highestDelta
local highestId
for playerId, delta in pairs(timeDeltas) do
if not highestDelta or delta > highestDelta then
highestDelta = delta
highestId = playerId
end
end
GameHost = Player(highestId)
DestroyTrigger(GetTriggeringTrigger())
end
local old = MarkGameStarted
MarkGameStarted = function()
old()
local trig = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
BlzTriggerRegisterPlayerSyncEvent(trig, Player(i), "SyncTimeDelta", false)
end
TriggerAddAction(trig, SyncTimeDelta)
local endTime = os.clock()
local delta = endTime - startTime
BlzSendSyncData("SyncTimeDelta", GetPlayerId(GetLocalPlayer()) .. ",".. tostring(delta))
end
end