I have this "replay detect engine" that its job is to detect if a game is a game or a replay.
This trigger uses GetLocalPlayer(). The problem comes when i create some units after this trigger has done its job. If the game is a game, i create some units if not then it creates nothing.
But, sometimes, the trigger might fail in detecting the actual game... it sets inGame to false and the units are not created for that player... result = Desync and desconnection :S
Any hint that may help me out here?
(I've tried to get help from hive but ended up in nothing here is the link though http://www.hiveworkshop.com/forums/triggers-scripts-269/why-desyncing-170381/ )
JASS:
//**************************************************************************************
//* *
//* REPLAY DETECT ENGINE V1.30 *
//* CONFIGURATION SETTINGS START HERE *
//* *
//**************************************************************************************
library ReplayDetectEngine
globals
boolean InGame = true
boolean array AMHS_FogDisable
boolean array AMHS_InvisDisable
unit array AMHS_FogDummy
unit array AMHS_InvisDummy
endglobals
//-> IsInGame created by PandaMine with help from Captain Griffen
//This function is what makes it possible for the system not to break replays,
//simply put if your actually playing the game, this function will return false.
//It will return true if the game is being viewed in a replay
private function IsInGame takes nothing returns boolean
local integer counter = 0
local real camerax
local real cameray
local real x
local real y
local boolean output
loop
exitwhen counter > 11
if GetLocalPlayer() == Player(counter) then
set camerax = GetCameraTargetPositionX()
set cameray = GetCameraTargetPositionY()
endif
set counter = counter + 1
endloop
set counter = 0
call PauseGame(true)
call TriggerSleepAction(0)
loop
exitwhen counter > 11
if GetLocalPlayer() == Player(counter) then
call SetCameraPosition(camerax + 1,cameray + 1)
endif
set counter = counter + 1
endloop
call TriggerSleepAction(0)
call PauseGame(false)
set counter = 0
loop
exitwhen counter > 11
if GetLocalPlayer() == Player(counter) then
set x = GetCameraTargetPositionX()
if x == camerax + 1 then
set output = true
else
set output = false
endif
call SetCameraPosition(camerax,cameray)
endif
set counter = counter + 1
endloop
return output
endfunction
function AMHS_ReplayEngine takes nothing returns nothing
call EnableUserControl(false)
call PauseGame(false)
call TriggerSleepAction(.0)
call PauseGame(false)
set InGame = IsInGame()
call EnableUserControl(true)
endfunction
//===========================================================================
function InitTrig_Replay_Detect_Engine takes nothing returns nothing
set gg_trg_Replay_Detect_Engine = CreateTrigger( )
endfunction
endlibrary
This trigger uses GetLocalPlayer(). The problem comes when i create some units after this trigger has done its job. If the game is a game, i create some units if not then it creates nothing.
But, sometimes, the trigger might fail in detecting the actual game... it sets inGame to false and the units are not created for that player... result = Desync and desconnection :S
Any hint that may help me out here?
(I've tried to get help from hive but ended up in nothing here is the link though http://www.hiveworkshop.com/forums/triggers-scripts-269/why-desyncing-170381/ )