[vjass] Where is the desync?

Xorifelse

I'd love to elaborate about discussions...........
Reaction score
87
I'm trying to fix this issue for hours now and I can't seem to find it.
It all works fine, but when a player presses the escape button it just desyncs when its in a cinematic.

Could someone enlighten me of where the desync can be caused?

JASS:
library Cinematic requires UserData, Forces

    struct scene
        
        static  scene       array   i
        static  trigger             t = CreateTrigger()
        static  fogmodifier array   v
        
        private force               f
        
        
        method Fade takes boolean fadeOut, real duration returns nothing
            if IsPlayerInForce( GetLocalPlayer(), .f ) then
                call SetCineFilterTexture( "ReplaceableTextures\\CameraMasks\\Black_mask.blp" )
                call SetCineFilterBlendMode( BLEND_MODE_BLEND )
                call SetCineFilterTexMapFlags( TEXMAP_FLAG_NONE )
                call SetCineFilterStartUV( 0, 0, 1, 1 )
                call SetCineFilterEndUV( 0, 0, 1, 1 )
                call SetCineFilterDuration( duration )
                if fadeOut then
                    if duration == 0 then
                        call SetCineFilterStartColor( 0, 0, 0, 255 )
                    else
                        call SetCineFilterStartColor( 0, 0, 0, 0 )
                    endif
                        call SetCineFilterEndColor( 0, 0, 0, 255 )
                else
                    if duration == 0 then
                        call SetCineFilterStartColor( 0, 0, 0, 0 )
                    else
                        call SetCineFilterStartColor( 0, 0, 0, 255 )
                    endif
                    call SetCineFilterEndColor(0, 0, 0, 0)
                endif

                call DisplayCineFilter( true )
                call TriggerSleepAction( duration )
            endif
        endmethod
        
        method Fog takes boolean enable returns nothing
         local player p = GetLocalPlayer()
            if IsPlayerInForce( p, .f ) then
                if ( enable ) then
                    call FogModifierStart( .v[GetPlayerId( p )] )
                else
                    call FogModifierStop( .v[GetPlayerId( p )] )
                endif
            endif
         set p = null
        endmethod
        
        method ApplyCamera takes camerasetup camera, real duration returns nothing
            if ( IsPlayerInForce( GetLocalPlayer(), .f ) ) then
                call CameraSetupApplyForceDuration( camera, true, duration )
            endif
        endmethod
        
        method PanCamera takes real x, real y returns nothing
            if ( IsPlayerInForce( GetLocalPlayer(), .f ) ) then
                call PanCameraTo( x, y )
            endif
        endmethod
        
        method ResetCamera takes real duration returns nothing
            if ( IsPlayerInForce( GetLocalPlayer(), .f ) ) then
                call ResetToGameCamera( duration )
            endif
        endmethod
        
        method Transmission takes unit u, string title, string message, real sleep returns nothing
            if IsPlayerInForce( GetLocalPlayer(), .f ) then
                call SetCinematicScene( GetUnitTypeId( u ), GetPlayerColor( GetOwningPlayer( u ) ), title, message, 30, 0 )
                call UnitAddIndicator( u, 255, 255, 255, 255 )
                call TriggerSleepAction( sleep )
            endif
        endmethod
        
        method ShakeCamera takes boolean shake, real minsleep, real maxsleep returns nothing
         local force f   = .f
         local player p  
            
            loop
                set p = FirstOfForce( f )
                call ForceRemovePlayer( f, p )
                exitwhen p == null
                
            endloop
            
        endmethod
        
        method Cinematic takes boolean mode, real duration returns nothing
            if IsPlayerInForce( GetLocalPlayer(), .f ) then
                call ShowInterface( not mode, duration )
                call EnableUserControl( not mode )
                call ClearTextMessages()
            endif
            if mode then
                call .Fade( mode, duration )
                call .Fog( mode )  
            else
                call .Fog( mode )  
                call .Fade( mode, duration )
            endif
            
        endmethod
        
        method Sleep takes real duration returns nothing
            if IsPlayerInForce( GetLocalPlayer(), .f ) then
                call TriggerSleepAction( duration )
            endif
        endmethod
        
        
        method PlayerAdd takes player p, integer structId returns nothing
            if .f == null then
                set .f = CreateForce()
            endif
            set .i[GetPlayerId( p )] = structId
            call ForceAddPlayer( .f, p )
        endmethod
        
        method PlayerRemove takes player p returns nothing
            if IsPlayerInForce( p, .f ) then
                call ForceRemovePlayer( .f, p )
            endif
        endmethod
        
        static method PlayerLeavesCinematic takes nothing returns nothing
         local player   p = GetTriggerPlayer()
         local integer  i = GetPlayerId( p )
            call DisplayTimedTextToPlayer( p, 0, 0, 4, "Leaving cinematic.." )
            call .i<i>.PlayerRemove( p )
            if GetLocalPlayer() == p then
                call ShowInterface( true, 5 )
                call EnableUserControl( true )
                call ClearTextMessages()
            endif
            call .i<i>.Fade( true, 5 )
            call .i<i>.Fog( false )
            call .i<i>.Fade( false, 5 )
         set p = null
        endmethod
        
        static method onInit takes nothing returns nothing
         local integer i = 0
            
            loop
                exitwhen i &gt; 11

                call TriggerRegisterPlayerEvent( .t, user<i>.p, EVENT_PLAYER_END_CINEMATIC )
                call TriggerRegisterPlayerEvent( .t, user<i>.p, EVENT_PLAYER_LEAVE )
                
                set .v<i> = CreateFogModifierRect( user<i>.p, FOG_OF_WAR_VISIBLE, GetWorldBounds(), false, true )
                
                set i = i + 1
            endloop
            call TriggerAddAction( .t, function scene.PlayerLeavesCinematic )
            
        endmethod
    
    endstruct


endlibrary</i></i></i></i></i></i></i></i>


This starts the cinematic.
JASS:
    function TestB takes nothing returns nothing
        local scene a = scene.create()
        
        call a.PlayerAdd( user[0].p, a )
        call a.PlayerAdd( user[1].p, a )
        call a.PlayerAdd( user[2].p, a )
               
        call a.Cinematic( true, 0 )

        call a.ApplyCamera( gg_cam_Camera_1, 0 )
        call a.ApplyCamera( gg_cam_Camera_2, 10 )

        call a.Fade( false, 5 )
        call a.Fade( true, 5 )
        
        call a.Cinematic( false, 5 )
        
        call a.PlayerRemove( user[0].p )
        call a.PlayerRemove( user[1].p )
        call a.PlayerRemove( user[2].p )
        
    endfunction
 

Viikuna

No Marlo no game.
Reaction score
265
I quickly readed trought your code and it looks to be good.

Maybe TriggerSleepAction desyncs with GetLocalPlayer ?
This is just an idea, I havent really tested it myself, or heard anything about it.
 

Vestras

Retired
Reaction score
248
You can only use GetLocalPlayer with Hiding/Showing, camera panning, all in all, doing stuff with function calls that can't be called in one player version.
 
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