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); }
public void PlayKillSound(KillEvent e, SelfBattleUserNode battleUser, [JoinByUser] TankNode tank, [JoinAll] SingleNode <SoundListenerComponent> listener) { if (KillTankSoundEffectBehaviour.CreateKillTankSound(tank.killTankSoundEffect.EffectPrefab)) { base.ScheduleEvent <KillTankSoundEffectCreatedEvent>(listener); } }
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)); }
public void AddKillEvent(KillEvent kill) { if (kill != null) { kill.eventID = GenerateUUID(); Instance.killList.Add(kill); } }
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 )); }
private void _publishKill(IEntity source, IEntity target) { var killEvent = new KillEvent() { source = source, target = target }; _eventSystem.Publish(killEvent); }
/// <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); } } }
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); }
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); } }
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); }
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; } }
//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); }
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); }
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; } }
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); }
/// <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); }
/// <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; }
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); } }
/// <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); }
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)); }
public Task <bool> WasMet(KillEvent ev, PsItem?item) { return(Task.FromResult(item != null && item.CategoryID == ItemCategory.SMG)); }
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); } }
public void Kill() { KillEvent?.Invoke(); gameObject.SetActive(false); }
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); } }
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); } } }
public Task <bool> WasMet(KillEvent ev, PsItem?item) { return(Task.FromResult(ev.WeaponID == C4 || ev.WeaponID == C4_ARX || ev.WeaponID == C4_Present)); }
private void DequeueEvent(KillEvent evt) { Pool.Free(ref evt); _needsRedraw = true; }
private void PushEvent(KillEvent evt) { _queue.Enqueue(evt); _needsRedraw = true; DoProccessQueue(); }
public Task <bool> WasMet(KillEvent ev, PsItem?item) { return(Task.FromResult(true)); }
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); } }