GetLocalPlayer() problem

Darkrider

Active Member
Reaction score
3
I have this "replay detect engine" that its job is to detect if a game is a game or a replay.

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/ )
 

Darkrider

Active Member
Reaction score
3
I've tried contating him. But he is no longer in wc3 modding thing :/.

As i don't know jass i wandered if there is a way to do this without the GetLocalPlayer()
 

Darkrider

Active Member
Reaction score
3
actually, it is almost the same code... (it only changes in the end of the function) But if GetLocalPlayer() already has different boolean values for IsInGame then when i create the units, the game is gonna crash anyways :(
 

jrhetf4xb

Member
Reaction score
12
Oh, now I see what you meant. But even if it uses GetLocalPlayer() I can't see why it would return "false" for some players... Could it be that if a player slot is empty then the camera position cannot be changed and thus screwing the boolean?
 

Darkrider

Active Member
Reaction score
3
not precisely because GetLocalPlayer() only works if there is actually a player. But perhaps sometimes it bugs and doesn't move the camera for some player which will result in the boolean having a different value for some players and other others.

Thats why i wanted to know if there is a way to have this exact same trigger but using normal player and not GetLocalPlayer()
 

jrhetf4xb

Member
Reaction score
12
Then you can try rescripting this snippet by setting the camera for only 1 player cuz then you can avoid desyncs ... and basically if it works for one player then it would work for all I guess.
 

Darkrider

Active Member
Reaction score
3
the problem of doing it with 1 player is: If it can desync for some of the local players and genrate a desyn, then it can desync for the player im testing it. And i can't rewrite it myself because i don't know JASS.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top