1+ using System ;
12using System . Collections . Generic ;
23using System . Threading . Tasks ;
34using AltV . Net . Async . Events ;
@@ -48,10 +49,10 @@ internal readonly AsyncEventHandler<PlayerChangeVehicleSeatAsyncDelegate>
4849
4950 internal readonly AsyncEventHandler < ConsoleCommandAsyncDelegate > ConsoleCommandAsyncDelegateHandlers =
5051 new AsyncEventHandler < ConsoleCommandAsyncDelegate > ( ) ;
51-
52+
5253 internal readonly AsyncEventHandler < MetaDataChangeAsyncDelegate > MetaDataChangeAsyncDelegateHandlers =
5354 new AsyncEventHandler < MetaDataChangeAsyncDelegate > ( ) ;
54-
55+
5556 internal readonly AsyncEventHandler < MetaDataChangeAsyncDelegate > SyncedMetaDataChangeAsyncDelegateHandlers =
5657 new AsyncEventHandler < MetaDataChangeAsyncDelegate > ( ) ;
5758
@@ -79,14 +80,15 @@ public override void OnCheckPointEvent(ICheckpoint checkpoint, IEntity entity, b
7980 {
8081 base . OnCheckPointEvent ( checkpoint , entity , state ) ;
8182 if ( ! CheckpointAsyncEventHandler . HasEvents ( ) ) return ;
82- Task . Run ( ( ) => CheckpointAsyncEventHandler . CallAsync ( @delegate => @delegate ( checkpoint , entity , state ) ) ) ;
83+ Task . Run ( ( ) =>
84+ CheckpointAsyncEventHandler . CallAsyncWithoutTask ( @delegate => @delegate ( checkpoint , entity , state ) ) ) ;
8385 }
8486
8587 public override void OnPlayerConnectEvent ( IPlayer player , string reason )
8688 {
8789 base . OnPlayerConnectEvent ( player , reason ) ;
8890 if ( ! PlayerConnectAsyncEventHandler . HasEvents ( ) ) return ;
89- Task . Run ( ( ) => PlayerConnectAsyncEventHandler . CallAsync ( @delegate => @delegate ( player , reason ) ) ) ;
91+ Task . Run ( ( ) => PlayerConnectAsyncEventHandler . CallAsyncWithoutTask ( @delegate => @delegate ( player , reason ) ) ) ;
9092 }
9193
9294 public override void OnPlayerDamageEvent ( IPlayer player , IEntity attacker , uint weapon , ushort damage )
@@ -96,7 +98,7 @@ public override void OnPlayerDamageEvent(IPlayer player, IEntity attacker, uint
9698 var oldHealth = player . Health ;
9799 var oldArmor = player . Armor ;
98100 Task . Run ( ( ) =>
99- PlayerDamageAsyncEventHandler . CallAsync ( @delegate =>
101+ PlayerDamageAsyncEventHandler . CallAsyncWithoutTask ( @delegate =>
100102 @delegate ( player , attacker , oldHealth , oldArmor , weapon , damage ) ) ) ;
101103 }
102104
@@ -105,7 +107,7 @@ public override void OnPlayerDeathEvent(IPlayer player, IEntity killer, uint wea
105107 base . OnPlayerDeathEvent ( player , killer , weapon ) ;
106108 if ( ! PlayerDeadAsyncEventHandler . HasEvents ( ) ) return ;
107109 Task . Run ( ( ) =>
108- PlayerDeadAsyncEventHandler . CallAsync ( @delegate => @delegate ( player , killer , weapon ) ) ) ;
110+ PlayerDeadAsyncEventHandler . CallAsyncWithoutTask ( @delegate => @delegate ( player , killer , weapon ) ) ) ;
109111 }
110112
111113 public override void OnPlayerChangeVehicleSeatEvent ( IVehicle vehicle , IPlayer player , byte oldSeat ,
@@ -114,7 +116,7 @@ public override void OnPlayerChangeVehicleSeatEvent(IVehicle vehicle, IPlayer pl
114116 base . OnPlayerChangeVehicleSeatEvent ( vehicle , player , oldSeat , newSeat ) ;
115117 if ( ! PlayerChangeVehicleSeatAsyncEventHandler . HasEvents ( ) ) return ;
116118 Task . Run ( ( ) =>
117- PlayerChangeVehicleSeatAsyncEventHandler . CallAsync ( @delegate =>
119+ PlayerChangeVehicleSeatAsyncEventHandler . CallAsyncWithoutTask ( @delegate =>
118120 @delegate ( vehicle , player , oldSeat , newSeat ) ) ) ;
119121 }
120122
@@ -123,7 +125,7 @@ public override void OnPlayerEnterVehicleEvent(IVehicle vehicle, IPlayer player,
123125 base . OnPlayerEnterVehicleEvent ( vehicle , player , seat ) ;
124126 if ( ! PlayerEnterVehicleAsyncEventHandler . HasEvents ( ) ) return ;
125127 Task . Run ( ( ) =>
126- PlayerEnterVehicleAsyncEventHandler . CallAsync ( @delegate =>
128+ PlayerEnterVehicleAsyncEventHandler . CallAsyncWithoutTask ( @delegate =>
127129 @delegate ( vehicle , player , seat ) ) ) ;
128130 }
129131
@@ -132,7 +134,7 @@ public override void OnPlayerLeaveVehicleEvent(IVehicle vehicle, IPlayer player,
132134 base . OnPlayerLeaveVehicleEvent ( vehicle , player , seat ) ;
133135 if ( ! PlayerLeaveVehicleAsyncEventHandler . HasEvents ( ) ) return ;
134136 Task . Run ( ( ) =>
135- PlayerLeaveVehicleAsyncEventHandler . CallAsync ( @delegate =>
137+ PlayerLeaveVehicleAsyncEventHandler . CallAsyncWithoutTask ( @delegate =>
136138 @delegate ( vehicle , player , seat ) ) ) ;
137139 }
138140
@@ -155,7 +157,7 @@ public override void OnPlayerRemoveEvent(IPlayer player)
155157 base . OnPlayerRemoveEvent ( player ) ;
156158 if ( ! PlayerRemoveAsyncEventHandler . HasEvents ( ) ) return ;
157159 Task . Run ( ( ) =>
158- PlayerRemoveAsyncEventHandler . CallAsync ( @delegate =>
160+ PlayerRemoveAsyncEventHandler . CallAsyncWithoutTask ( @delegate =>
159161 @delegate ( player ) ) ) ;
160162 }
161163
@@ -164,7 +166,7 @@ public override void OnVehicleRemoveEvent(IVehicle vehicle)
164166 base . OnVehicleRemoveEvent ( vehicle ) ;
165167 if ( ! VehicleRemoveAsyncEventHandler . HasEvents ( ) ) return ;
166168 Task . Run ( ( ) =>
167- VehicleRemoveAsyncEventHandler . CallAsync ( @delegate =>
169+ VehicleRemoveAsyncEventHandler . CallAsyncWithoutTask ( @delegate =>
168170 @delegate ( vehicle ) ) ) ;
169171 }
170172
@@ -190,14 +192,25 @@ public override void OnClientEventEvent(IPlayer player, string name, ref MValueA
190192 }
191193 }
192194
193- Task . Run ( ( ) =>
195+ Task . Run ( async ( ) =>
194196 {
195197 foreach ( var eventHandler in eventHandlers )
196198 {
197199 var invokeValues = eventHandler . CalculateInvokeValues ( objects , player ) ;
198200 if ( invokeValues != null )
199201 {
200- eventHandler . InvokeNoResult ( invokeValues ) ;
202+ try
203+ {
204+ var task = eventHandler . InvokeTaskOrNull ( invokeValues ) ;
205+ if ( task != null )
206+ {
207+ await task ;
208+ }
209+ }
210+ catch ( Exception e )
211+ {
212+ AltAsync . Log ( $ "Execution of ${ name } threw an error: { e } ") ;
213+ }
201214 }
202215 else
203216 {
@@ -284,14 +297,25 @@ public override void OnServerEventEvent(string name, ref MValueArray args, MValu
284297 }
285298 }
286299
287- Task . Run ( ( ) =>
300+ Task . Run ( async ( ) =>
288301 {
289302 foreach ( var eventHandler in eventHandlers )
290303 {
291304 var invokeValues = eventHandler . CalculateInvokeValues ( objects ) ;
292305 if ( invokeValues != null )
293306 {
294- eventHandler . InvokeNoResult ( invokeValues ) ;
307+ try
308+ {
309+ var task = eventHandler . InvokeTaskOrNull ( invokeValues ) ;
310+ if ( task != null )
311+ {
312+ await task ;
313+ }
314+ }
315+ catch ( Exception e )
316+ {
317+ AltAsync . Log ( $ "Execution of ${ name } threw an error: { e } ") ;
318+ }
295319 }
296320 else
297321 {
@@ -335,7 +359,7 @@ public override void OnConsoleCommandEvent(string name, string[] args)
335359 base . OnConsoleCommandEvent ( name , args ) ;
336360 if ( ! ConsoleCommandAsyncDelegateHandlers . HasEvents ( ) ) return ;
337361 Task . Run ( ( ) =>
338- ConsoleCommandAsyncDelegateHandlers . CallAsync ( @delegate =>
362+ ConsoleCommandAsyncDelegateHandlers . CallAsyncWithoutTask ( @delegate =>
339363 @delegate ( name , args ) ) ) ;
340364 }
341365
@@ -344,7 +368,7 @@ public override void OnMetaDataChangeEvent(IEntity entity, string key, object va
344368 base . OnMetaDataChangeEvent ( entity , key , value ) ;
345369 if ( ! MetaDataChangeAsyncDelegateHandlers . HasEvents ( ) ) return ;
346370 Task . Run ( ( ) =>
347- MetaDataChangeAsyncDelegateHandlers . CallAsync ( @delegate =>
371+ MetaDataChangeAsyncDelegateHandlers . CallAsyncWithoutTask ( @delegate =>
348372 @delegate ( entity , key , value ) ) ) ;
349373 }
350374
@@ -353,7 +377,7 @@ public override void OnSyncedMetaDataChangeEvent(IEntity entity, string key, obj
353377 base . OnSyncedMetaDataChangeEvent ( entity , key , value ) ;
354378 if ( ! SyncedMetaDataChangeAsyncDelegateHandlers . HasEvents ( ) ) return ;
355379 Task . Run ( ( ) =>
356- SyncedMetaDataChangeAsyncDelegateHandlers . CallAsync ( @delegate =>
380+ SyncedMetaDataChangeAsyncDelegateHandlers . CallAsyncWithoutTask ( @delegate =>
357381 @delegate ( entity , key , value ) ) ) ;
358382 }
359383
0 commit comments