//  On Player Death also adds kills
        public async Task HandleEventAsync(object sender, UnturnedPlayerDeathEvent @event)
        {
            var playerwhodied = @event.Player; // gets the player who died to update there information

            // Gets current Player
            var player = await m_UnturnedLogRepository.FindPlayerAsync(playerwhodied.SteamId.ToString(), UserSearchMode.FindById);

            // Gets current server
            var server = await m_UnturnedLogRepository.GetCurrentServerAsync() ??
                         await m_UnturnedLogRepository.CheckAndRegisterCurrentServerAsync();


            // Constructs EventData object for the death
            var EventDataDeath = EventDatabase.BuildEventData(player, "Death", "Reason: " + @event.DeathCause, server);

            // Adds Event data above to the Database.
            await m_UnturnedLogRepository.AddPlayerEventAsync(EventDataDeath);

            // Gets the instigator from the Event to work out if it was a person that killed them to add a kill to that person.
            var instigator = @event.Instigator;

            // Search the database using the instigator to see if its a valid user
            var instigatorplayer = await m_UnturnedLogRepository.FindPlayerAsync(instigator.ToString(), UserSearchMode.FindById);

            // If it doesnt return null we know it was a player who killed the person which triggered the event.
            if (instigatorplayer != null) // If the event instigator for the Death event, is a player.
            {
                // construct Event data for player kill
                var EventDataKill = EventDatabase.BuildEventData(instigatorplayer, "Player Kill", "Player: " + instigatorplayer.Id, server);

                // Adds event data to the database
                await m_UnturnedLogRepository.AddPlayerEventAsync(EventDataKill);
            }
        }
        internal void TriggerSend(SteamPlayer player, string method, ESteamCall steamCall, ESteamPacket steamPacket, params object[] data)
        {
            try
            {
                if (player == null ||
                    player.player == null ||
                    player.playerID.steamID == CSteamID.Nil ||
                    player.player.transform == null ||
                    data == null)
                {
                    return;
                }

                UnturnedPlayer unturnedPlayer =
                    (UnturnedPlayer)playerManager.GetPlayer(player.playerID.steamID.ToString());

                if (method.StartsWith("tellWear"))
                {
                    //PlayerWearEvent method.Replace("tellWear", ""), (ushort)data[0], data.Count() > 1 ? (byte?)data[1] : null)
                    return;
                }

                IEvent @event = null;
                switch (method)
                {
                case "tellBleeding":
                    @event = new UnturnedPlayerUpdateBleedingEvent(unturnedPlayer, (bool)data[0]);
                    break;

                case "tellBroken":
                    @event = new UnturnedPlayerUpdateBrokenEvent(unturnedPlayer, (bool)data[0]);
                    break;

                case "tellLife":
                    @event = new UnturnedPlayerUpdateLifeEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellFood":
                    @event = new UnturnedPlayerUpdateFoodEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellHealth":
                    @event = new UnturnedPlayerUpdateHealthEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellVirus":
                    @event = new UnturnedPlayerUpdateVirusEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellWater":
                    @event = new UnturnedPlayerUpdateWaterEvent(unturnedPlayer, (byte)data[0]);
                    break;

                case "tellStance":
                    @event = new UnturnedPlayerUpdateStanceEvent(unturnedPlayer, (EPlayerStance)(byte)data[0]);
                    break;

                case "tellGesture":
                    @event = new UnturnedPlayerUpdateGestureEvent(unturnedPlayer, (EPlayerGesture)(byte)data[0]);
                    break;

                case "tellStat":
                    @event = new UnturnedPlayerUpdateStatEvent(unturnedPlayer, (EPlayerStat)(byte)data[0]);
                    break;

                case "tellExperience":
                    @event = new UnturnedPlayerUpdateExperienceEvent(unturnedPlayer, (uint)data[0]);
                    break;

                case "tellRevive":
                    @event = new PlayerRespawnEvent(unturnedPlayer);
                    break;

                case "tellDead":
                    @event = new UnturnedPlayerDeadEvent(unturnedPlayer, ((global::UnityEngine.Vector3)data[0]).ToSystemVector());
                    break;

                case "tellDeath":
                {
                    var deathCause = (EDeathCause)(byte)data[0];
                    var limb       = (ELimb)(byte)data[1];
                    var killerId   = data[2].ToString();

                    playerManager.TryGetOnlinePlayerById(killerId, out var killer);

                    @event = new UnturnedPlayerDeathEvent(unturnedPlayer, limb, deathCause, (killer as UnturnedPlayer)?.Entity);
                    break;
                }
                }

                if (@event != null)
                {
                    eventManager.Emit(this, @event);
                }
            }
            catch (Exception ex)
            {
                logger.LogError("Failed to receive packet \"" + method + "\"", ex);
            }
        }
Beispiel #3
0
        public void HandleEvent(IEventEmitter emitter, UnturnedPlayerDeathEvent @event)
        {
            var player = (UnturnedPlayer)@event.Player;

            UnturnedPlayer killer = ((UnturnedPlayerEntity)@event.Killer).Player;
            var            cause  = @event.DeathCause;
            var            limb   = @event.Limb;

            var deathmessageColor = Color.Red; //ConfigurationInstance.DeathMessagesColor;


            string headshot = Translations.Get("headshot");

            if (cause.ToString() == "SHRED" || cause.ToString() == "ZOMBIE" || cause.ToString() == "ANIMAL" ||
                cause.ToString() == "SPARK" || cause.ToString() == "VEHICLE" || cause.ToString() == "FOOD" ||
                cause.ToString() == "WATER" || cause.ToString() == "INFECTION" || cause.ToString() == "BLEEDING" ||
                cause.ToString() == "LANDMINE" || cause.ToString() == "BREATH" || cause.ToString() == "KILL" ||
                cause.ToString() == "FREEZING" || cause.ToString() == "SENTRY" || cause.ToString() == "CHARGE" ||
                cause.ToString() == "MISSILE" || cause.ToString() == "BONES" || cause.ToString() == "SPLASH" ||
                cause.ToString() == "ACID" || cause.ToString() == "SPIT" || cause.ToString() == "BURNING" ||
                cause.ToString() == "BURNER" || cause.ToString() == "BOULDER" || cause.ToString() == "ARENA" ||
                cause.ToString() == "GRENADE" ||
                (ConfigurationInstance.ShowSuicideMSG && cause.ToString() == "SUICIDE") ||
                cause.ToString() == "ROADKILL" || cause.ToString() == "MELEE" || cause.ToString() == "GUN" ||
                cause.ToString() == "PUNCH")
            {
                if (cause.ToString() != "ROADKILL" && cause.ToString() != "MELEE" && cause.ToString() != "GUN" &&
                    cause.ToString() != "PUNCH")
                {
                    _userManager.BroadcastLocalized(Translations, cause.ToString().ToLower(), deathmessageColor, player.DisplayName);
                }
                else if (cause.ToString() == "ROADKILL")
                {
                    _userManager.BroadcastLocalized(Translations, "roadkill", deathmessageColor, player.DisplayName, killer.DisplayName);
                }
                else if (cause.ToString() == "MELEE" || cause.ToString() == "GUN")
                {
                    if (limb == ELimb.SKULL)
                    {
                        _userManager.BroadcastLocalized(Translations, cause.ToString().ToLower() + "_headshot", deathmessageColor, player.DisplayName, killer.DisplayName, headshot, killer.NativePlayer.equipment.asset.itemName);
                    }
                    else
                    {
                        _userManager.BroadcastLocalized(Translations, cause.ToString().ToLower(), deathmessageColor, player.DisplayName, killer.DisplayName, headshot, killer.NativePlayer.equipment.asset.itemName);
                    }
                }
                else if (cause.ToString() == "PUNCH")
                {
                    _userManager.BroadcastLocalized(Translations,
                                                    limb == ELimb.SKULL ? "punch_headshot" : "punch", deathmessageColor, player.DisplayName, killer.DisplayName, headshot);
                }

                return;
            }

            if (Translations.Get(cause.ToString().ToLower()) != null)
            {
                if (Translations.Get(cause.ToString().ToLower()).Contains("{1}"))
                {
                    _userManager.BroadcastLocalized(Translations, cause.ToString().ToLower(), deathmessageColor, player.DisplayName, killer.DisplayName, headshot);
                }
                else
                {
                    _userManager.BroadcastLocalized(Translations, cause.ToString().ToLower(), deathmessageColor, player.DisplayName, headshot);
                }

                return;
            }

            Logger.LogError("Please add translation for " + cause +
                            " | Parameters for custom translation: {0} = Player , {1} = Killer");
        }