clientdata.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. class ClientData
  2. {
  3. static ref ScriptInvoker SyncEvent_OnPlayerListUpdate = new ScriptInvoker();
  4. static ref ScriptInvoker SyncEvent_OnEntityKilled = new ScriptInvoker();
  5. static ref ScriptInvoker SyncEvent_OnPlayerIgnitedFireplace = new ScriptInvoker();
  6. static ref array<Man> m_PlayerBaseList = new array<Man>;
  7. static ref SyncPlayerList m_PlayerList;
  8. static ref SyncPlayerList m_LastNewPlayers;
  9. static ref OnlineServices m_OnlineServices;
  10. static void ResetClientData()
  11. {
  12. if ( m_PlayerBaseList )
  13. m_PlayerBaseList.Clear();
  14. if ( m_PlayerList && m_PlayerList.m_PlayerList )
  15. m_PlayerList.m_PlayerList.Clear();
  16. if ( m_LastNewPlayers && m_LastNewPlayers.m_PlayerList )
  17. m_LastNewPlayers.m_PlayerList.Clear();
  18. }
  19. static void AddPlayerBase( Man player )
  20. {
  21. if ( m_PlayerBaseList && player != GetGame().GetPlayer() )
  22. m_PlayerBaseList.Insert( player );
  23. }
  24. static void RemovePlayerBase( Man player )
  25. {
  26. if ( m_PlayerBaseList )
  27. m_PlayerBaseList.RemoveItem( player );
  28. }
  29. static void SyncEvent_PreprocessPlayerList(SyncPlayerList player_list)
  30. {
  31. foreach (auto sync_player : player_list.m_PlayerList)
  32. {
  33. PlayerIdentity identity = sync_player.m_Identity;
  34. if (!identity)
  35. {
  36. ErrorEx("PlayerIdentity not synchronized before SyncPlayer", ErrorExSeverity.WARNING);
  37. continue;
  38. }
  39. sync_player.m_UID = identity.GetPlainId();
  40. sync_player.m_PlayerName = identity.GetPlainName();
  41. }
  42. }
  43. static void SyncEvent_OnRecievedPlayerList( SyncPlayerList player_list )
  44. {
  45. if (m_PlayerList && m_PlayerList.m_PlayerList)
  46. {
  47. //Print("SyncEvent_OnRecievedPlayerList | " + m_PlayerList.m_PlayerList.Count());
  48. }
  49. SyncPlayerList new_players = SyncPlayerList.Compare(m_PlayerList, player_list);
  50. if ( !m_LastNewPlayers )
  51. {
  52. m_LastNewPlayers = player_list;
  53. }
  54. else
  55. {
  56. m_LastNewPlayers = SyncPlayerList.Compare( m_LastNewPlayers, new_players );
  57. }
  58. m_PlayerList = SyncPlayerList.Compare(player_list, null);
  59. #ifdef PLATFORM_CONSOLE
  60. #ifndef PLATFORM_WINDOWS // if app is not on Windows with -XBOX parameter
  61. array<string> newPlayersSimple = GetSimplePlayerList( new_players );
  62. OnlineServices.LoadPermissions( newPlayersSimple );
  63. OnlineServices.m_ClientServices.GetSessionService().OnSessionPlayerListUpdate(newPlayersSimple);
  64. if ( new_players.m_PlayerList.Count() > 0 )
  65. {
  66. OnlineServices.LoadFriends();
  67. }
  68. if ( g_Game.GetGameState() == DayZGameState.IN_GAME )
  69. {
  70. OnlineServices.SetMultiplayState(OnlineServices.GetMultiplayState());
  71. }
  72. #endif
  73. #endif
  74. SyncEvent_OnPlayerListUpdate.Invoke( player_list );
  75. }
  76. static array<string> GetSimplePlayerList()
  77. {
  78. array<string> ids = new array<string>;
  79. if ( m_PlayerList && m_PlayerList.m_PlayerList )
  80. {
  81. for ( int i = 0; i < m_PlayerList.m_PlayerList.Count(); i++ )
  82. {
  83. SyncPlayer player = m_PlayerList.m_PlayerList.Get( i );
  84. ids.Insert( player.m_UID );
  85. }
  86. }
  87. return ids;
  88. }
  89. static array<string> GetSimplePlayerList( SyncPlayerList list )
  90. {
  91. array<string> ids = new array<string>;
  92. if ( list )
  93. {
  94. for ( int i = 0; i < list.m_PlayerList.Count(); i++ )
  95. {
  96. SyncPlayer player = list.m_PlayerList.Get( i );
  97. ids.Insert( player.m_UID );
  98. }
  99. }
  100. return ids;
  101. }
  102. static void SyncEvent_OnEntityKilled( SyncEntityKillInfo entity_killed_data )
  103. {
  104. SyncEvent_OnEntityKilled.Invoke(entity_killed_data.m_EntityVictim, entity_killed_data.m_EntityKiller, entity_killed_data.m_EntitySource, entity_killed_data.m_IsHeadShot );
  105. }
  106. static void SyncEvent_OnPlayerIgnitedFireplace( EFireIgniteType igante_type )
  107. {
  108. SyncEvent_OnPlayerIgnitedFireplace.Invoke(igante_type);
  109. }
  110. }