server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/CharacterLifetimeStats/TotalMonstersKilledEventHandler.cs
2026-02-10 18:21:30 +01:00

47 lines
No EOL
1.4 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsEmu.Game.Characters;
using WingsEmu.Game.Entities;
using WingsEmu.Game.Mates;
using WingsEmu.Game.Monster.Event;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.CharacterLifetimeStats;
public class TotalMonstersKilledEventHandler : IAsyncEventProcessor<MonsterDeathEvent>
{
public async Task HandleAsync(MonsterDeathEvent e, CancellationToken cancellation)
{
switch (e.Killer)
{
case IPlayerEntity player:
player.LifetimeStats.TotalMonstersKilled++;
break;
case IMateEntity mate:
mate.Owner.LifetimeStats.TotalMonstersKilled++;
break;
case IMonsterEntity monster:
if (!monster.SummonerId.HasValue || monster.IsMateTrainer)
{
break;
}
if (monster.SummonerType != VisualType.Player)
{
break;
}
IClientSession summoner = monster.MapInstance.GetCharacterById(monster.SummonerId.Value)?.Session;
if (summoner == null)
{
break;
}
summoner.PlayerEntity.LifetimeStats.TotalMonstersKilled++;
break;
}
}
}