1- using Microsoft . Extensions . Localization ;
1+ using EvolutionPlugins . Universal . Extras . Broadcast ;
2+ using Microsoft . Extensions . Configuration ;
3+ using Microsoft . Extensions . Localization ;
24using OpenMod . API . Eventing ;
35using OpenMod . API . Users ;
4- using OpenMod . UnityEngine . Extensions ;
6+ using OpenMod . Unturned . Locations ;
57using OpenMod . Unturned . Players . Life . Events ;
68using OpenMod . Unturned . Users ;
7- using SDG . Unturned ;
8- using System . Linq ;
9+ using System . Drawing ;
910using System . Numerics ;
1011using System . Threading . Tasks ;
1112
@@ -16,13 +17,20 @@ public class PlayerDeathEvent : IEventListener<UnturnedPlayerDeathEvent>
1617 private readonly IUnturnedUserDirectory m_UnturnedUserDirectory ;
1718 private readonly IUserManager m_UserManager ;
1819 private readonly IStringLocalizer m_StringLocalizer ;
20+ private readonly IConfiguration m_Configuration ;
21+ private readonly IBroadcastManager m_BroadcastManager ;
22+ private readonly IUnturnedLocationDirectory m_UnturnedLocationDirectory ;
1923
2024 public PlayerDeathEvent ( IUnturnedUserDirectory unturnedUserDirectory , IUserManager userManager ,
21- IStringLocalizer stringLocalizer )
25+ IStringLocalizer stringLocalizer , IConfiguration configuration , IBroadcastManager broadcastManager ,
26+ IUnturnedLocationDirectory unturnedLocationDirectory )
2227 {
2328 m_UnturnedUserDirectory = unturnedUserDirectory ;
2429 m_UserManager = userManager ;
2530 m_StringLocalizer = stringLocalizer ;
31+ m_Configuration = configuration ;
32+ m_BroadcastManager = broadcastManager ;
33+ m_UnturnedLocationDirectory = unturnedLocationDirectory ;
2634 }
2735
2836 public async Task HandleEventAsync ( object ? sender , UnturnedPlayerDeathEvent @event )
@@ -35,29 +43,22 @@ public async Task HandleEventAsync(object? sender, UnturnedPlayerDeathEvent @eve
3543
3644 var instigatorUser = m_UnturnedUserDirectory . FindUser ( @event . Instigator ) ;
3745
38- var provider = victimUser . Provider ?? m_UserManager . UserProviders . FirstOrDefault ( x => x is UnturnedUserProvider ) ;
39- if ( provider == null )
40- {
41- return ;
42- }
46+ var victimPosition = victimUser . Player . Transform . Position ;
4347
44- var deathPositionUVector = @event . DeathPosition . ToUnityVector ( ) ;
45- var distance = Vector3 . Distance ( victimUser . Player . Transform . Position ,
48+ var distance = Vector3 . Distance ( victimPosition ,
4649 instigatorUser ? . Player . Transform . Position ?? victimUser . Player . Transform . Position ) ;
4750
48- var nearNode = LevelNodes . nodes . OfType < LocationNode > ( )
49- . OrderBy ( x => ( x . point - deathPositionUVector ) . sqrMagnitude )
50- . FirstOrDefault ( ) ;
51+ var location = m_UnturnedLocationDirectory . GetNearestLocation ( victimPosition ) ;
5152
52- await provider . BroadcastAsync ( m_StringLocalizer [ $ "deathCause:{ @event . DeathCause . ToString ( ) . ToLower ( ) } ", new
53+ await m_BroadcastManager . BroadcastAsync ( m_StringLocalizer [ $ "deathCause:{ @event . DeathCause . ToString ( ) . ToLower ( ) } ", new
5354 {
5455 Victim = victimUser ,
5556 Instigator = instigatorUser ,
5657 @event . DeathPosition ,
5758 Distance = distance ,
58- Node = nearNode ? . name , // can smartFormat parse fields?
59+ Node = location ? . Name ?? string . Empty ,
5960 Limb = m_StringLocalizer [ $ "limbParse:{ @event . Limb . ToString ( ) . ToLower ( ) } "] . Value
60- } ] ) ;
61+ } ] , m_Configuration [ "iconUrl" ] , ColorTranslator . FromHtml ( m_Configuration [ "color" ] ) ) ;
6162 }
6263 }
6364}
0 commit comments