syncevents.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. class SyncEvents
  2. {
  3. static void RegisterEvents()
  4. {
  5. DayZGame dz_game = DayZGame.Cast( GetGame() );
  6. dz_game.Event_OnRPC.Insert( Event_OnRPC );
  7. Print("SyncEvents -> RegisterEvents");
  8. }
  9. static void Event_OnRPC(PlayerIdentity sender, Object target, int rpc_type, ParamsReadContext ctx)
  10. {
  11. if ( rpc_type == ERPCs.RPC_SYNC_EVENT && GetGame() && GetGame().IsMultiplayer() && GetGame().IsClient() )
  12. {
  13. Param2<ESyncEvent, ref SyncData> event_data = new Param2<ESyncEvent, ref SyncData>( -1, null );
  14. if ( ctx.Read( event_data ) )
  15. {
  16. OnSyncEvent( event_data.param1, event_data.param2, target );
  17. }
  18. }
  19. }
  20. static void OnSyncEvent( ESyncEvent event_type, SyncData data, Object target )
  21. {
  22. switch ( event_type )
  23. {
  24. case ESyncEvent.PlayerList:
  25. {
  26. ClientData.SyncEvent_PreprocessPlayerList(data.m_ServerPlayerList);
  27. ClientData.SyncEvent_OnRecievedPlayerList(data.m_ServerPlayerList);
  28. break;
  29. }
  30. case ESyncEvent.EntityKill:
  31. {
  32. ClientData.SyncEvent_OnEntityKilled( data.m_EntityKill );
  33. break;
  34. }
  35. case ESyncEvent.PlayerIgnateFireplayce:
  36. {
  37. ClientData.SyncEvent_OnPlayerIgnitedFireplace( data.m_SyncInt );
  38. break;
  39. }
  40. }
  41. }
  42. static void SendPlayerList()
  43. {
  44. SyncData data = new SyncData;
  45. data.m_ServerPlayerList = new SyncPlayerList;
  46. data.m_ServerPlayerList.CreatePlayerList();
  47. SendSyncEvent( ERPCs.RPC_SYNC_EVENT, ESyncEvent.PlayerList, data, true );
  48. }
  49. static void SendEntityKilled( EntityAI victim, EntityAI killer, EntityAI source, bool is_headshot )
  50. {
  51. if ( (victim && victim.IsPlayer()) || (killer && killer.IsPlayer()) )
  52. {
  53. SyncData data = new SyncData;
  54. data.m_EntityKill = new SyncEntityKillInfo;
  55. data.m_EntityKill.m_EntityVictim = victim;
  56. data.m_EntityKill.m_EntityKiller = killer;
  57. data.m_EntityKill.m_EntitySource = source;
  58. data.m_EntityKill.m_IsHeadShot = is_headshot;
  59. Man recipient;
  60. if ( killer && killer.IsPlayer() && victim.GetID() != killer.GetID() )
  61. {
  62. recipient = Man.Cast(killer);
  63. }
  64. else if ( victim && victim.IsPlayer() )
  65. {
  66. recipient = Man.Cast(victim);
  67. }
  68. SendSyncEventEx( ERPCs.RPC_SYNC_EVENT, ESyncEvent.EntityKill, data, true, recipient );
  69. }
  70. }
  71. static void SendPlayerIgnatedFireplace( Man player, EFireIgniteType ignite_type )
  72. {
  73. SyncData data = new SyncData;
  74. data.m_SyncInt = ignite_type;
  75. SendSyncEvent( ERPCs.RPC_SYNC_EVENT, ESyncEvent.PlayerIgnateFireplayce, data, true, player.GetIdentity() );
  76. }
  77. private static void SendSyncEvent( ERPCs rpc_event_id, ESyncEvent sync_event_type, SyncData data = null, bool guaranteed = true, PlayerIdentity player_target = null )
  78. {
  79. Param2<ESyncEvent, ref SyncData> event_data = new Param2<ESyncEvent, ref SyncData>( sync_event_type, data );
  80. if ( !player_target )
  81. {
  82. GetGame().RPCSingleParam( null, rpc_event_id, event_data, guaranteed );
  83. }
  84. else
  85. {
  86. GetGame().RPCSingleParam( null, rpc_event_id, event_data, guaranteed, player_target );
  87. }
  88. }
  89. private static void SendSyncEventEx( ERPCs rpc_event_id, ESyncEvent sync_event_type, SyncData data = null, bool guaranteed = true, Man recipient = null )
  90. {
  91. SendSyncEvent(rpc_event_id, sync_event_type, data, guaranteed, recipient.GetIdentity());
  92. }
  93. }