コード例 #1
0
        private void _ProcessDeath(JToken payload)
        {
            string charID     = payload.Value <string?>("character_id") ?? "0";
            string attackerID = payload.Value <string?>("attacker_character_id") ?? "0";

            _Characters.Cache(attackerID);
            _Characters.Cache(charID);

            KillEvent ev = new KillEvent()
            {
                SourceID        = attackerID,
                TargetID        = charID,
                LoadoutID       = payload.GetInt32("character_loadout_id", -1),
                TargetLoadoutID = payload.GetInt32("attacker_loadout_id", -1),
                Timestamp       = payload.CensusTimestamp("timestamp"),
                IsHeadshot      = (payload.Value <string?>("is_headshot") ?? "0") == "1",
                WeaponID        = payload.GetInt32("attacker_weapon_id", 0),
                WorldID         = payload.GetInt32("world_id", -1),
                ZoneID          = payload.GetInt32("zone_id", -1)
            };

            //_Logger.LogInformation($"{payload}");

            _EventBroadcast.EmitKillEvent(ev);
        }
コード例 #2
0
 public void PlayKillSound(KillEvent e, SelfBattleUserNode battleUser, [JoinByUser] TankNode tank, [JoinAll] SingleNode <SoundListenerComponent> listener)
 {
     if (KillTankSoundEffectBehaviour.CreateKillTankSound(tank.killTankSoundEffect.EffectPrefab))
     {
         base.ScheduleEvent <KillTankSoundEffectCreatedEvent>(listener);
     }
 }
コード例 #3
0
 public Task <bool> WasMet(KillEvent ev, PsItem?item)
 {
     if (ev.LoadoutID == Loadout.NC_ENGINEER || ev.LoadoutID == Loadout.TR_ENGINEER || ev.LoadoutID == Loadout.VS_ENGINEER)
     {
         return(Task.FromResult(true));
     }
     return(Task.FromResult(false));
 }
コード例 #4
0
 public void AddKillEvent(KillEvent kill)
 {
     if (kill != null)
     {
         kill.eventID = GenerateUUID();
         Instance.killList.Add(kill);
     }
 }
コード例 #5
0
ファイル: HeavyWeaponChallenge.cs プロジェクト: Varunda/flash
 public Task <bool> WasMet(KillEvent ev, PsItem?item)
 {
     return(Task.FromResult(
                ev.WeaponID == CHAINGUN || ev.WeaponID == CHAINGUN_AE || ev.WeaponID == CHAINGUN_P ||
                ev.WeaponID == LASHER || ev.WeaponID == LASHER_AE || ev.WeaponID == LASHER_P ||
                ev.WeaponID == JACKHAMMER || ev.WeaponID == JACKHAMMER_AE || ev.WeaponID == JACKHAMMER_P
                ));
 }
コード例 #6
0
        private void _publishKill(IEntity source, IEntity target)
        {
            var killEvent = new KillEvent()
            {
                source = source,
                target = target
            };

            _eventSystem.Publish(killEvent);
        }
コード例 #7
0
ファイル: TeleHandler.cs プロジェクト: AustinJGreen/Fluid
        /// <summary>
        /// Processes the message
        /// </summary>
        /// <param name="connectionBase">The connection base</param>
        /// <param name="message">The playerio message</param>
        /// <param name="handled">Whether the message was already handled</param>
        public void Process(ConnectionBase connectionBase, Message message, bool handled)
        {
            WorldConnection worldCon = (WorldConnection)connectionBase;

            List <WorldPlayer> players = new List <WorldPlayer>();

            bool isWorldReset = message.GetBoolean(0);

            uint index = 1;

            while (index + 2 < message.Count)
            {
                WorldPlayer player = worldCon.Players.GetPlayer(message.GetInt(index));
                if (player != null)
                {
                    if (!handled)
                    {
                        Vector loc = new Vector(message.GetInt(index + 1), message.GetInt(index + 2));
                        player.SetLocationInternal(loc);

                        if (!isWorldReset)
                        {
                            player.Respawn();
                        }
                    }

                    players.Add(player);
                }

                index += 3;
            }

            if (isWorldReset)
            {
                ResetEvent resetEvent = new ResetEvent()
                {
                    Raw = message
                };

                connectionBase.RaiseServerEvent <ResetEvent>(resetEvent);
            }
            else
            {
                for (int i = 0; i < players.Count; i++)
                {
                    KillEvent killEvent = new KillEvent()
                    {
                        Raw    = message,
                        Player = players[i]
                    };

                    connectionBase.RaiseServerEvent <KillEvent>(killEvent);
                }
            }
        }
コード例 #8
0
        public void RedirectEventToTargetOnTargetDeath(KillEvent e, BattleUserNode battleUser, [JoinByUser] UserNode user, BattleUserNode battleUser2Team, [JoinByTeam] Optional <TeamNode> team)
        {
            ShowMessageAfterKilledEvent eventInstance = new ShowMessageAfterKilledEvent {
                KillerUserUid = user.userUid.Uid,
                killerRank    = user.userRank.Rank,
                killerTeam    = this.GetColor(team, battleUser),
                killerItem    = e.KillerMarketItem.Id
            };

            base.ScheduleEvent(eventInstance, e.Target);
        }
コード例 #9
0
ファイル: CombatMutator.cs プロジェクト: apprime/Game
        internal static void Cleanup(Damage damage)
        {
            var poorTarget = damage.Target;

            if (isDead(poorTarget))
            {
                poorTarget.HitPoints.Current = 0;
                var killEvent = new KillEvent(poorTarget.Id, damage.Actor.Id);
                Engine.Instance.Push(killEvent);
            }
        }
コード例 #10
0
        private void _publishKill(Collision2D collision, IEntity entity)
        {
            var entityView   = collision.gameObject.GetComponent <EntityView>();
            var sourceEntity = entityView.Entity;
            var killEvent    = new KillEvent()
            {
                source = sourceEntity,
                target = entity
            };

            _eventSystem.Publish(killEvent);
        }
コード例 #11
0
    public override void OnEvent(KillEvent evnt)
    {
        evnt.attackerEntity.GetComponent <PlayerSubScript>().myKillScore += 1;
        evnt.attackerEntity.GetComponent <PlayerSubScript>().UpdateMyScore();

        foreach (var player in players)
        {
            if (player.GetComponent <PlayerSubScript>().myKillScore > firstPlayerScore)
            {
                firstPlayerScore = player.GetComponent <PlayerSubScript>().myKillScore;
                firstPlayer      = player.GetComponent <PlayerSubScript>().nickname.text;
            }
        }

        foreach (var player in players)
        {
            player.GetComponent <PlayerSubScript>().firstPlayerText.text = firstPlayer;
            player.GetComponent <PlayerSubScript>().firstScoreText.text  = firstPlayerScore.ToString();
        }

        killLogTimer = 0f;
        switch (killLogCount)
        {
        case 0:
            killLogCount++;
            SaveKillLogState(evnt.killer, evnt.victim);
            killLogText.text = preKiller + " Kills " + preVictim;
            break;

        case 1:
            killLogCount++;
            SaveKillLogState(evnt.killer, evnt.victim);
            killLogText.text = preKiller2 + " Kills " + preVictim2 + "\n"
                               + preKiller + " Kills " + preVictim;
            break;

        case 2:
            killLogCount++;
            SaveKillLogState(evnt.killer, evnt.victim);
            killLogText.text = preKiller3 + " Kills " + preVictim3 + "\n"
                               + preKiller2 + " Kills " + preVictim2 + "\n"
                               + preKiller + " Kills " + preVictim;
            break;

        case 3:
            SaveKillLogState(evnt.killer, evnt.victim);
            killLogText.text = preKiller3 + " Kills " + preVictim3 + "\n"
                               + preKiller2 + " Kills " + preVictim2 + "\n"
                               + preKiller + " Kills " + preVictim;
            break;
        }
    }
コード例 #12
0
    //Kill

    public void NewKillEnemiesEvent()
    {
        KillEvent attackEvent = new KillEvent();

        if (player)
        {
            EnemyKillCount++;
            attackEvent.seconds_since_start = timer_since_start;
            attackEvent.enemies_killed      = EnemyKillCount;
        }

        writer.AddKillEvent(attackEvent);
    }
コード例 #13
0
ファイル: PlayerSubScript.cs プロジェクト: H2SU/Project-FPS
    private void Respawn()
    {
        var evnt = KillEvent.Create();

        evnt.killer         = attacker;
        evnt.victim         = nickname.text;
        evnt.attackerEntity = attackerEntity;
        evnt.Send();

        state.health       = 100;
        transform.position = new Vector3(Random.Range(-5, 5), 0, 0);
        transform.rotation = Quaternion.EulerAngles(Vector3.zero);
    }
コード例 #14
0
ファイル: GameManager.cs プロジェクト: SlipinF/TowerDefense
    public void OnKillMethod(GameObject unit)
    {
        int amount = unit.GetComponent <Unit>().unitDescirption.goldRevarde;

        KillEvent?.Invoke(amount);

        if (EndRound() && allUnitsSpawned)
        {
            StopAllCoroutines();
            OnRoundEndEvent?.Invoke();
            FindObjectOfType <UiManager>().counter = 20;
            StartCoroutine(StartCounter());
            StartCoroutine(ContinueGame());
            allUnitsSpawned = false;
        }
    }
コード例 #15
0
ファイル: ScoreCommand.cs プロジェクト: Varunda/flash
        public void Kill(int index)
        {
            TrackedPlayer?player = _Match.GetPlayer(0);

            if (player == null)
            {
                _Logger.LogWarning($"Runner {index} does not exist, got null from manager");
                return;
            }

            KillEvent ev = new KillEvent();

            ev.Timestamp = DateTime.UtcNow;

            player.ValidKills.Add(ev);

            _Match.SetScore(index, player.Score + 1);
        }
コード例 #16
0
ファイル: KillHandler.cs プロジェクト: AustinJGreen/Fluid
        /// <summary>
        /// Processes the message
        /// </summary>
        /// <param name="connectionBase">The connection base</param>
        /// <param name="message">The playerio message</param>
        /// <param name="handled">Whether the message was already handled</param>
        public void Process(ConnectionBase connectionBase, Message message, bool handled)
        {
            int userId = message.GetInt(0);

            WorldConnection worldCon = (WorldConnection)connectionBase;
            WorldPlayer     player   = worldCon.Players.GetPlayer(userId);

            if (!handled && player != null)
            {
                player.m_deaths++;
            }

            KillEvent killEvent = new KillEvent()
            {
                Raw    = message,
                Player = player
            };

            connectionBase.RaiseServerEvent <KillEvent>(killEvent);
        }
コード例 #17
0
    /// <summary>
    /// Do not call RemoveUnit on indexed unit or permaleak.
    /// </summary>
    /// <param name="u"></param>
    private static void AwaitRemoval(NoxUnit u, NoxUnit killer)
    {
        if (!Indexer.ContainsKey(GetHandleId(u)))
        {
            return;                                       // this is a very weird thing to happen, but will happen for Neutrals so yeah
        }
        if (u.Corpse)
        {
            return;
        }
        KillEvent @event = new KillEvent()
        {
            EventInfo = new NoxRaven.Events.Metas.KillMeta()
            {
                Killer = killer,
                Dying  = u
            }
        };

        killer.OnKill(@event);
        u.OnDeath(@event);

        foreach (Status st in u.Statuses.Values)
        {
            st.Remove();
        }
        u.Statuses.Clear();// just in case

        if (GetUnitAbilityLevel(u, FourCC("Aloc")) > 0)
        {
            return;                                             // wat
        }
        if (IsUnitType(u, UNIT_TYPE_HERO))
        {
            return;                                // always leak heroes
        }
        u.Corpse = true;

        Utils.DelayedInvoke(KeepCorpsesFor, () => { u.Remove(); }); // ah shiet, change to let resurrections
        //ue = null;
    }
コード例 #18
0
    public void FillKillEventData(Damageable damageable, DamageMessage enemyData)
    {
        LayerMask enemyMask = LayerMask.NameToLayer("Enemy");

        if (damageable.gameObject.layer == enemyMask)
        {
            KillEvent newKillEvent = new KillEvent();
            newKillEvent.pdata    = playerData;
            newKillEvent.eventID  = ++evendIdCount;
            newKillEvent.position = damageable.gameObject.GetComponent <Transform>().position;
            newKillEvent.rotation = damageable.gameObject.GetComponent <Transform>().rotation;
            if (damageable.gameObject.name == "Spitter")
            {
                newKillEvent.enemyType = "Spitter";
            }
            else if (damageable.gameObject.name == "Chomper")
            {
                newKillEvent.enemyType = "Chomper";
            }
            newKillEvent.timeStamp = Time.time;
            killEvents.events.Add(newKillEvent);
        }
    }
コード例 #19
0
        /// <summary>
        /// Return PositionPoint for each players determined by selection
        /// </summary>
        /// <param name="demo"></param>
        /// <param name="teamSelector"></param>
        /// <param name="selectedPlayer"></param>
        /// <param name="round"></param>
        /// <returns></returns>
        public async Task <List <List <PositionPoint> > > GetPoints(Demo demo, string teamSelector, Player selectedPlayer, Round round)
        {
            List <List <PositionPoint> > points = new List <List <PositionPoint> >();

            if (teamSelector != null)
            {
                switch (teamSelector)
                {
                case "CT":
                    demo.PositionPoints.Reverse();

                    foreach (Player playerExtended in demo.Players)
                    {
                        List <PositionPoint> playerPoints = new List <PositionPoint>();

                        for (int i = demo.PositionPoints.Count - 1; i >= 0; i--)
                        {
                            if (demo.PositionPoints[i].RoundNumber != round.Number)
                            {
                                continue;
                            }

                            // Keep kills from terrorists
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Team == Side.Terrorist &&
                                demo.PositionPoints[i].Event.GetType() == typeof(KillEvent))
                            {
                                KillEvent e = (KillEvent)demo.PositionPoints[i].Event;
                                if (e.KillerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            if (demo.PositionPoints[i].Team != Side.CounterTerrorist)
                            {
                                continue;
                            }

                            // Molotov started
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Event.GetType() == typeof(MolotovFireStartedEvent))
                            {
                                MolotovFireStartedEvent e = (MolotovFireStartedEvent)demo.PositionPoints[i].Event;
                                if (e.ThrowerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            // Molotov ended
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Event.GetType() == typeof(MolotovFireEndedEvent))
                            {
                                MolotovFireEndedEvent e = (MolotovFireEndedEvent)demo.PositionPoints[i].Event;
                                if (e.ThrowerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            if (demo.PositionPoints[i].PlayerSteamId != 0 &&
                                demo.PositionPoints[i].PlayerSteamId == playerExtended.SteamId)
                            {
                                playerPoints.Add(demo.PositionPoints[i]);
                                demo.PositionPoints.RemoveAt(i);
                            }
                        }
                        if (playerPoints.Any())
                        {
                            points.Add(playerPoints);
                        }
                    }
                    break;

                case "T":
                    demo.PositionPoints.Reverse();

                    foreach (Player playerExtended in demo.Players)
                    {
                        List <PositionPoint> playerPoints = new List <PositionPoint>();

                        for (int i = demo.PositionPoints.Count - 1; i >= 0; i--)
                        {
                            if (demo.PositionPoints[i].RoundNumber != round.Number)
                            {
                                continue;
                            }

                            // Keep kills from CT
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Team == Side.CounterTerrorist &&
                                demo.PositionPoints[i].Event.GetType() == typeof(KillEvent))
                            {
                                KillEvent e = (KillEvent)demo.PositionPoints[i].Event;
                                if (e.KilledSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            if (demo.PositionPoints[i].Team != Side.Terrorist)
                            {
                                continue;
                            }

                            // Molotov started
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Event.GetType() == typeof(MolotovFireStartedEvent))
                            {
                                MolotovFireStartedEvent e = (MolotovFireStartedEvent)demo.PositionPoints[i].Event;
                                if (e.ThrowerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            // Molotov ended
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Event.GetType() == typeof(MolotovFireEndedEvent))
                            {
                                MolotovFireEndedEvent e = (MolotovFireEndedEvent)demo.PositionPoints[i].Event;
                                if (e.ThrowerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            if (demo.PositionPoints[i].PlayerSteamId == playerExtended.SteamId)
                            {
                                playerPoints.Add(demo.PositionPoints[i]);
                                demo.PositionPoints.RemoveAt(i);
                            }
                        }
                        if (playerPoints.Any())
                        {
                            points.Add(playerPoints);
                        }
                    }
                    break;

                case "BOTH":
                    points.AddRange(
                        demo.Players.Select(
                            playerExtended => demo.PositionPoints.Where(
                                point => point.RoundNumber == round.Number &&
                                point.PlayerSteamId == playerExtended.SteamId).ToList())
                        .Where(pts => pts.Any()));
                    break;
                }
            }

            if (selectedPlayer != null)
            {
                await Task.Run(delegate
                {
                    List <PositionPoint> pt = demo.PositionPoints.ToList().Where(
                        positionPoint => positionPoint.PlayerSteamId == selectedPlayer.SteamId &&
                        positionPoint.RoundNumber == round.Number ||
                        (positionPoint.Event != null &&
                         positionPoint.Event.GetType() == typeof(KillEvent)) &&
                        positionPoint.RoundNumber == round.Number).ToList();
                    if (pt.Any())
                    {
                        points.Add(pt);
                    }
                });
            }

            // Set players color
            await Task.Run(delegate
            {
                int index = 0;
                foreach (List <PositionPoint> positionPoints in points.ToList())
                {
                    foreach (PositionPoint positionPoint in positionPoints)
                    {
                        positionPoint.X     = MapService.CalculatePointToResolutionX(positionPoint.X);
                        positionPoint.Y     = MapService.CalculatePointToResolutionY(positionPoint.Y);
                        positionPoint.Color = ColorToInt(_colors[index]);
                    }
                    index++;
                }
            });

            return(points);
        }
コード例 #20
0
ファイル: VSChallenge.cs プロジェクト: Varunda/flash
 public Task <bool> WasMet(KillEvent ev, PsItem?item)
 {
     return(Task.FromResult(ev.TargetLoadoutID == Loadout.VS_ENGINEER || ev.TargetLoadoutID == Loadout.VS_HEAVY_ASSAULT ||
                            ev.TargetLoadoutID == Loadout.VS_INFILTRATOR || ev.TargetLoadoutID == Loadout.VS_LIGHT_ASSAULT ||
                            ev.TargetLoadoutID == Loadout.VS_MAX || ev.TargetLoadoutID == Loadout.VS_MEDIC));
 }
コード例 #21
0
ファイル: SmgChallenge.cs プロジェクト: Varunda/flash
 public Task <bool> WasMet(KillEvent ev, PsItem?item)
 {
     return(Task.FromResult(item != null && item.CategoryID == ItemCategory.SMG));
 }
コード例 #22
0
        protected new void HandlePlayerKilled(object sender, PlayerKilledEventArgs e)
        {
            if (!IsMatchStarted || IsFreezetime || e.Victim == null)
            {
                return;
            }
            Weapon weapon = Weapon.WeaponList.FirstOrDefault(w => w.Element == e.Weapon.Weapon);

            if (weapon == null)
            {
                return;
            }
            Player killed = Demo.Players.FirstOrDefault(player => player.SteamId == e.Victim.SteamID);
            Player killer = null;

            KillEvent killEvent = new KillEvent(Parser.IngameTick, Parser.CurrentTime)
            {
                KillerSteamId     = e.Killer?.SteamID ?? 0,
                KillerName        = e.Killer?.Name ?? "World",
                KillerSide        = e.Killer?.Team.ToSide() ?? Side.None,
                Weapon            = weapon,
                KillerVelocityX   = e.Killer?.Velocity.X ?? 0,
                KillerVelocityY   = e.Killer?.Velocity.Y ?? 0,
                KillerVelocityZ   = e.Killer?.Velocity.Z ?? 0,
                KilledSteamId     = e.Victim.SteamID,
                KilledName        = e.Victim.Name,
                KilledSide        = e.Victim.Team.ToSide(),
                RoundNumber       = CurrentRound.Number,
                IsKillerCrouching = e.Killer?.IsDucking ?? false,
                IsHeadshot        = e.Headshot,
                Point             = new KillHeatmapPoint
                {
                    KillerX = e.Killer?.Position.X ?? 0,
                    KillerY = e.Killer?.Position.Y ?? 0,
                    VictimX = e.Victim.Position.X,
                    VictimY = e.Victim.Position.Y
                }
            };

            if (!killed.RoundsLifetime.ContainsKey(CurrentRound.Number))
            {
                killed.RoundsLifetime[CurrentRound.Number] = ((Parser.IngameTick - CurrentRound.Tick) / Parser.TickRate);
            }
            else
            {
                killed.RoundsLifetime[CurrentRound.Number] += ((Parser.IngameTick - CurrentRound.Tick) / Parser.TickRate);
            }

            bool killerIsBot   = e.Killer != null && e.Killer.SteamID == 0;
            bool victimIsBot   = e.Victim.SteamID == 0;
            bool assisterIsBot = e.Assister != null && e.Assister.SteamID == 0;

            if (e.Killer != null)
            {
                killer = Demo.Players.FirstOrDefault(player => player.SteamId == e.Killer.SteamID);
            }
            if (killer != null)
            {
                if (e.Victim.SteamID != killer.SteamId)
                {
                    if (!killer.RoundsMoneyEarned.ContainsKey(CurrentRound.Number))
                    {
                        killer.RoundsMoneyEarned[CurrentRound.Number] = weapon.KillAward;
                    }
                    else
                    {
                        killer.RoundsMoneyEarned[CurrentRound.Number] += weapon.KillAward;
                    }
                }
                else
                {
                    // Player suicide, hack to detect pause forced during a match
                    // Happended during the match SK vs VP on train during Atlanta 2017
                    // All players are killed and the game is paused (freeze time)
                    if (++_suicideCount == 6)
                    {
                        BackupToLastRound();
                    }
                    return;
                }

                killEvent.KillerIsControllingBot = e.Killer.SteamID != 0 && killer.IsControllingBot;
                ProcessTradeKill(killEvent);
            }

            if (killed != null)
            {
                // suicide, probably because he missed the jump from upper B on train :)
                if (e.Killer == null)
                {
                    killed.SuicideCount++;
                }
                killEvent.KilledIsControllingBot = e.Victim.SteamID != 0 && killed.IsControllingBot;
            }

            // Human killed human
            if (!killerIsBot && !victimIsBot)
            {
                if (killer != null && killed != null)
                {
                    killed.IsAlive = false;
                    // TK
                    if (e.Killer.Team == e.Victim.Team)
                    {
                        killer.Kills.Add(killEvent);
                        killed.Deaths.Add(killEvent);
                    }
                    else
                    {
                        // Regular kill
                        if (!killer.IsControllingBot)
                        {
                            killer.Kills.Add(killEvent);
                        }
                        if (!killed.IsControllingBot)
                        {
                            killed.Deaths.Add(killEvent);
                        }
                    }
                }
            }

            // Human killed a bot
            if (!killerIsBot && victimIsBot)
            {
                killer?.Kills.Add(killEvent);
            }

            // A bot killed a human
            if (killerIsBot && !victimIsBot)
            {
                // TK or not we add a death to the human
                killed?.Deaths.Add(killEvent);
            }

            // Add assist if there was one
            if (e.Assister != null && !assisterIsBot && e.Assister.Team != e.Victim.Team)
            {
                Player assister = Demo.Players.FirstOrDefault(player => player.SteamId == e.Assister.SteamID);
                if (assister != null)
                {
                    killEvent.AssisterSteamId          = e.Assister.SteamID;
                    killEvent.AssisterName             = e.Assister.Name;
                    killEvent.AssisterIsControllingBot = e.Assister.SteamID != 0 && assister.IsControllingBot;
                    assister.Assists.Add(killEvent);
                }
            }

            // If the killer isn't a bot we can update individual kill, open and entry kills
            if (e.Killer != null && e.Killer.Team != e.Victim.Team && killer != null && !killer.IsControllingBot)
            {
                if (!KillsThisRound.ContainsKey(e.Killer))
                {
                    KillsThisRound[e.Killer] = 0;
                }
                KillsThisRound[e.Killer]++;

                ProcessOpenAndEntryKills(killEvent);
            }

            ProcessClutches();

            CurrentRound.Kills.Add(killEvent);
            Demo.Kills.Add(killEvent);

            if (AnalyzePlayersPosition)
            {
                PositionPoint positionPoint = new PositionPoint
                {
                    X             = e.Victim.Position.X,
                    Y             = e.Victim.Position.Y,
                    PlayerSteamId = e.Killer?.SteamID ?? 0,
                    PlayerName    = e.Killer?.Name ?? string.Empty,
                    Team          = e.Killer?.Team.ToSide() ?? Side.None,
                    Event         = killEvent,
                    RoundNumber   = CurrentRound.Number
                };
                Demo.PositionPoints.Add(positionPoint);
            }
        }
コード例 #23
0
ファイル: Destroyable.cs プロジェクト: swipswaps/Asteroids
 public void Kill()
 {
     KillEvent?.Invoke();
     gameObject.SetActive(false);
 }
コード例 #24
0
        protected override void HandlePlayerKilled(object sender, PlayerKilledEventArgs e)
        {
            if (!IsMatchStarted)
            {
                return;
            }

            if (e.Killer == null || e.Victim == null)
            {
                return;
            }

            KillEvent killEvent = new KillEvent(Parser.IngameTick)
            {
                Weapon      = new Weapon(e.Weapon),
                Killer      = Demo.Players.FirstOrDefault(p => p.SteamId == e.Killer.SteamID),
                DeathPerson = Demo.Players.FirstOrDefault(p => p.SteamId == e.Victim.SteamID)
            };

            if (killEvent.Killer != null)
            {
                killEvent.Killer.KillsCount++;
                if (e.Headshot)
                {
                    killEvent.Killer.HeadshotCount++;
                }
            }

            if (killEvent.DeathPerson != null)
            {
                killEvent.DeathPerson.DeathCount++;
                killEvent.DeathPerson.IsAlive = false;
            }

            if (e.Assister != null)
            {
                killEvent.Assister = Demo.Players.FirstOrDefault(p => p.SteamId == e.Assister.SteamID);
                if (killEvent.Assister != null)
                {
                    killEvent.Assister.AssistCount++;
                }
            }

            if (!KillsThisRound.ContainsKey(e.Killer))
            {
                KillsThisRound[e.Killer] = 0;
            }
            KillsThisRound[e.Killer]++;

            // TK
            if (killEvent.Killer != null && killEvent.DeathPerson != null)
            {
                if (killEvent.Killer.Team == killEvent.DeathPerson.Team)
                {
                    killEvent.Killer.KillsCount--;
                    killEvent.Killer.TeamKillCount++;
                }
            }

            ProcessClutches();
            ProcessOpenAndEntryKills(killEvent);
            ProcessPlayersRating();

            if (AnalyzeHeatmapPoint)
            {
                killEvent.Point = new HeatmapPoint
                {
                    X      = e.Victim.Position.X,
                    Y      = e.Victim.Position.Y,
                    Round  = CurrentRound,
                    Player = killEvent.Killer,
                    Team   = e.Killer.Team
                };
            }

            CurrentRound.Kills.Add(killEvent);
            Demo.Kills.Add(killEvent);

            if (AnalyzePlayersPosition)
            {
                PositionPoint positionPoint = new PositionPoint
                {
                    X      = e.Victim.Position.X,
                    Y      = e.Victim.Position.Y,
                    Player = Demo.Players.First(p => p.SteamId == e.Killer.SteamID),
                    Team   = e.Killer.Team,
                    Event  = killEvent,
                    Round  = CurrentRound
                };
                Demo.PositionsPoint.Add(positionPoint);
            }
        }
コード例 #25
0
        private async void KillHandler(object?sender, Ps2EventArgs <KillEvent> args)
        {
            if (_State != MatchState.RUNNING)
            {
                return;
            }

            KillEvent ev = args.Payload;

            string sourceFactionID = Loadout.GetFaction(ev.LoadoutID);
            string targetFactionID = Loadout.GetFaction(ev.TargetLoadoutID);

            foreach (KeyValuePair <int, TrackedPlayer> entry in _Players)
            {
                int           index  = entry.Key;
                TrackedPlayer player = entry.Value;

                bool emit = false;

                foreach (Character c in player.Characters)
                {
                    if (ev.SourceID == c.ID && ev.TargetID == c.ID)
                    {
                        _Logger.LogInformation($"Player {index} committed suicide");
                        _MatchMessages.Log($"Team {index}:{player.RunnerName} @{c.Name} SUICIDE");

                        if (player.Streak > 1)
                        {
                            player.Streaks.Add(player.Streak);
                            player.Streak = 0;
                        }

                        player.Deaths.Add(ev);

                        emit = true;
                    }
                    else if (c.ID == ev.SourceID)
                    {
                        if (sourceFactionID == targetFactionID)
                        {
                            _Logger.LogInformation($"Player {index}:{player.RunnerName} on {c.Name} TK");
                            _MatchMessages.Log($"Team {index}:{player.RunnerName} @{c.Name} got a TK");
                        }
                        else
                        {
                            //_Logger.LogInformation($"Player {index}:{player.RunnerName} kill");
                            player.Kills.Add(ev);

                            PsItem?weapon = await _ItemCollection.GetByID(ev.WeaponID);

                            if (weapon != null)
                            {
                                if (ItemCategory.IsValidSpeedrunnerWeapon(weapon) == true)
                                {
                                    player.Streak += 1;
                                    player.ValidKills.Add(ev);

                                    int score = 1;

                                    List <IndexedChallenge> runningChallenges = _Challenges.GetRunning();
                                    foreach (IndexedChallenge challenge in runningChallenges)
                                    {
                                        bool met = await challenge.Challenge.WasMet(ev, weapon);

                                        if (_Challenges.GetMode() == ChallengeMode.MEAN)
                                        {
                                            if (met == false)
                                            {
                                                _Logger.LogTrace($"Team {index}:{player.RunnerName} @{c.Name} failed challenge {challenge.Challenge.ID}/{challenge.Challenge.Name}");
                                                score = 0;
                                            }
                                            else
                                            {
                                                challenge.KillCount += 1;
                                                _ChallengeEvents.EmitChallengeUpdate(challenge);
                                            }
                                        }
                                        else if (_Challenges.GetMode() == ChallengeMode.NICE)
                                        {
                                            if (met == true)
                                            {
                                                challenge.KillCount += 1;
                                                _ChallengeEvents.EmitChallengeUpdate(challenge);
                                                _Logger.LogTrace($"Team {index}:{player.RunnerName} @{c.Name} met challenge {challenge.Challenge.ID}/{challenge.Challenge.Name}, score mult {challenge.Challenge.Multiplier}");
                                                score *= challenge.Challenge.Multiplier;
                                            }
                                        }
                                        else
                                        {
                                            _Logger.LogError($"Unknown challenge mode {_Challenges.GetMode()}");
                                        }

                                        if (challenge.Challenge.DurationType == Code.Challenge.ChallengeDurationType.KILLS && challenge.KillCount >= challenge.Challenge.Duration)
                                        {
                                            _Logger.LogDebug($"Team {index}:{player.RunnerName} @{c.Name} finished challenge {challenge.Challenge.ID}/{challenge.Challenge.Name}");
                                            _Challenges.End(challenge.Index);
                                        }
                                    }

                                    if (score != 0)
                                    {
                                        player.Scores.Add(new ScoreEvent()
                                        {
                                            Timestamp   = ev.Timestamp,
                                            ScoreChange = score,
                                            TotalScore  = player.Score + score
                                        });
                                    }

                                    player.Score += score;

                                    _Logger.LogInformation($"Player {index}:{player.RunnerName} on {c.Name} valid weapon {score} points, {weapon.Name}/{weapon.CategoryID}");
                                    _MatchMessages.Log($"Team {index}:{player.RunnerName} @{c.Name} VALID kill {score} points, {weapon.Name}/{weapon.CategoryID}, faction {targetFactionID}");

                                    if (player.Score >= _Settings.KillGoal)
                                    {
                                        _Logger.LogInformation($"Player {index}:{player.RunnerName} reached goal {_Settings.KillGoal}, ending match");
                                        _MatchMessages.Log($"Team {index}:{player.RunnerName} reached goal {_Settings.KillGoal}, ending match");
                                        StopRound(player.Index);
                                    }
                                }
                                else
                                {
                                    _Logger.LogInformation($"Player {index}:{player.RunnerName} on {c.Name} invalid weapon, {weapon.Name}/{weapon.CategoryID}");
                                    _MatchMessages.Log($"Team {index}:{player.RunnerName} @{c.Name} INVALID kill, {weapon.Name}/{weapon.CategoryID}, faction {targetFactionID}");
                                }
                            }
                            else
                            {
                                _MatchMessages.Log($"Team {index}:{player.RunnerName} @{c.Name} UNKNOWN WEAPON {ev.WeaponID}, faction {targetFactionID}");
                                _Logger.LogInformation($"Null weapon {ev.WeaponID}");
                            }

                            emit = true;
                        }
                    }
                    else if (c.ID == ev.TargetID)
                    {
                        if (player.Streak > 1)
                        {
                            player.Streaks.Add(player.Streak);
                        }
                        player.Streak = 0;

                        player.Deaths.Add(ev);

                        _Logger.LogInformation($"Player {index}:{player.RunnerName} on {c.Name} death");
                        _MatchMessages.Log($"Team {index}:{player.RunnerName} @{c.Name} DEATH, faction {sourceFactionID}");

                        emit = true;
                    }
                    else
                    {
                        //_Logger.LogInformation($"Kill source:{ev.SourceID}, target:{ev.TargetID} was not {player.ID}");
                    }
                }

                if (emit == true)
                {
                    _MatchEvents.EmitPlayerUpdateEvent(index, player);
                }
            }
        }
コード例 #26
0
ファイル: C4Challenge.cs プロジェクト: Varunda/flash
 public Task <bool> WasMet(KillEvent ev, PsItem?item)
 {
     return(Task.FromResult(ev.WeaponID == C4 || ev.WeaponID == C4_ARX || ev.WeaponID == C4_Present));
 }
コード例 #27
0
 private void DequeueEvent(KillEvent evt)
 {
     Pool.Free(ref evt);
     _needsRedraw = true;
 }
コード例 #28
0
 private void PushEvent(KillEvent evt)
 {
     _queue.Enqueue(evt);
     _needsRedraw = true;
     DoProccessQueue();
 }
コード例 #29
0
ファイル: TestChallenge.cs プロジェクト: Varunda/flash
 public Task <bool> WasMet(KillEvent ev, PsItem?item)
 {
     return(Task.FromResult(true));
 }
コード例 #30
0
        protected new void HandlePlayerKilled(object sender, PlayerKilledEventArgs e)
        {
            if (!IsMatchStarted || e.Victim == null)
            {
                return;
            }

            Weapon weapon = Weapon.WeaponList.FirstOrDefault(w => w.Element == e.Weapon.Weapon);

            if (weapon == null)
            {
                return;
            }
            Player killed = Demo.Players.FirstOrDefault(player => player.SteamId == e.Victim.SteamID);
            Player killer = null;

            KillEvent killEvent = new KillEvent(Parser.IngameTick, Parser.CurrentTime)
            {
                KillerSteamId     = e.Killer?.SteamID ?? 0,
                KillerName        = e.Killer?.Name ?? "World",
                KillerSide        = e.Killer?.Team.ToSide() ?? Side.None,
                Weapon            = weapon,
                KillerVelocityX   = e.Killer?.Velocity.X ?? 0,
                KillerVelocityY   = e.Killer?.Velocity.Y ?? 0,
                KillerVelocityZ   = e.Killer?.Velocity.Z ?? 0,
                KilledSteamId     = e.Victim.SteamID,
                KilledName        = e.Victim.Name,
                KilledSide        = e.Victim.Team.ToSide(),
                RoundNumber       = CurrentRound.Number,
                IsKillerCrouching = e.Killer?.IsDucking ?? false,
                IsHeadshot        = e.Headshot,
                Point             = new KillHeatmapPoint
                {
                    KillerX = e.Killer?.Position.X ?? 0,
                    KillerY = e.Killer?.Position.Y ?? 0,
                    VictimX = e.Victim.Position.X,
                    VictimY = e.Victim.Position.Y
                }
            };

            bool killerIsBot   = e.Killer != null && e.Killer.SteamID == 0;
            bool victimIsBot   = e.Victim.SteamID == 0;
            bool assisterIsBot = e.Assister != null && e.Assister.SteamID == 0;

            if (e.Killer != null)
            {
                killer = Demo.Players.FirstOrDefault(player => player.SteamId == e.Killer.SteamID);
            }
            if (killer != null)
            {
                if (e.Victim.SteamID != killer.SteamId)
                {
                    if (!killer.RoundsMoneyEarned.ContainsKey(CurrentRound.Number))
                    {
                        killer.RoundsMoneyEarned[CurrentRound.Number] = weapon.KillAward;
                    }
                    else
                    {
                        killer.RoundsMoneyEarned[CurrentRound.Number] += weapon.KillAward;
                    }
                }

                ProcessTradeKill(killEvent);
            }

            // Human killed human
            if (!killerIsBot && !victimIsBot)
            {
                if (killer != null && killed != null)
                {
                    killed.IsAlive = false;
                    // TK
                    if (e.Killer.Team == e.Victim.Team)
                    {
                        killer.Kills.Add(killEvent);
                        killed.Deaths.Add(killEvent);
                    }
                    else
                    {
                        // Regular kill
                        if (!killer.IsControllingBot)
                        {
                            killer.Kills.Add(killEvent);
                        }
                        if (!killed.IsControllingBot)
                        {
                            killed.Deaths.Add(killEvent);
                        }
                    }
                }
            }

            // Human killed a bot
            if (!killerIsBot && victimIsBot)
            {
                killer?.Kills.Add(killEvent);
            }

            // A bot killed a human
            if (killerIsBot && !victimIsBot)
            {
                // TK or not we add a death to the human
                killed?.Deaths.Add(killEvent);
            }

            // Add assist if there was one
            if (e.Assister != null && !assisterIsBot && e.Assister.Team != e.Victim.Team)
            {
                Player assister = Demo.Players.FirstOrDefault(player => player.SteamId == e.Assister.SteamID);
                if (assister != null)
                {
                    killEvent.AssisterSteamId = e.Assister.SteamID;
                    killEvent.AssisterName    = e.Assister.Name;
                    assister.Assists.Add(killEvent);
                }
            }

            // If the killer isn't a bot we can update individual kill, open and entry kills
            if (e.Killer != null && e.Killer.Team != e.Victim.Team && killer != null && !killer.IsControllingBot)
            {
                if (!KillsThisRound.ContainsKey(e.Killer))
                {
                    KillsThisRound[e.Killer] = 0;
                }
                KillsThisRound[e.Killer]++;

                ProcessOpenAndEntryKills(killEvent);
            }

            ProcessClutches();

            CurrentRound.Kills.Add(killEvent);
            Demo.Kills.Add(killEvent);

            if (AnalyzePlayersPosition)
            {
                PositionPoint positionPoint = new PositionPoint
                {
                    X             = e.Victim.Position.X,
                    Y             = e.Victim.Position.Y,
                    PlayerSteamId = e.Killer?.SteamID ?? 0,
                    PlayerName    = e.Killer?.Name ?? string.Empty,
                    Team          = e.Killer?.Team.ToSide() ?? Side.None,
                    Event         = killEvent,
                    RoundNumber   = CurrentRound.Number
                };
                Demo.PositionPoints.Add(positionPoint);
            }
        }