Пример #1
0
 private void _onFighterKilled(object sender, KilledEventArgs e)
 {
     if (IsTeamDefeated())
     {
         OnTeamDefeated(new TeamDefeatedEventArgs(this));
     }
 }
Пример #2
0
        void PlayerEntity_Killed(object sender, KilledEventArgs e)
        {
            var dieMenu = new DieMenu((Player)sender);

            AddChild(dieMenu);
            dieMenu.Centre();
        }
Пример #3
0
        public void OnKilledMethod_AppropriatelyFiresKilledEvent()
        {
            _fighter.OnKilled(new KilledEventArgs());

            var logs = _logger.Logs;

            Assert.AreEqual(1, logs.Count);
            Assert.AreEqual(EventType.Killed, logs[0].Type);
            Assert.AreEqual(_fighter, logs[0].Sender);
            KilledEventArgs e = logs[0].E as KilledEventArgs;

            Assert.That(e, Is.Not.Null);
        }
        protected void PrintKilledMessage(object sender, KilledEventArgs e)
        {
            if (Config.ShowDeathMessages)
            {
                IFighter senderAsFighter = sender as IFighter;

                if (senderAsFighter == null)
                {
                    throw new InvalidOperationException("PrintKilledMessage subscribed to something that wasn't an IFighter");
                }

                _output.WriteLine($"{senderAsFighter.DisplayName} has been defeated!");
            }
        }
Пример #5
0
        internal void HandleKilled(ServerPlayer player, MsgKilled msgKilled)
        {
            if (msgKilled == null || player == null)
            {
                return;
            }

            KilledEventArgs args = new KilledEventArgs();

            msgKilled.VictimID = player.PlayerID;
            args.Victim        = player;
            args.Killer        = GetPlayerByID(msgKilled.KillerID);
            args.Shot          = Shots.FindKillableShot(msgKilled.KillerID, msgKilled.ShotID);
            args.KillInfo      = msgKilled;

            KillPlayer(player, args);
        }
Пример #6
0
        private void OnShadeDeath(object sender, KilledEventArgs e)
        {
            Shade senderAsShade = sender as Shade;

            if (senderAsShade == null)
            {
                throw new InvalidOperationException("ShadeFighterGrouping.OnShadeDeath should only subscribe to a Shade fighters' Killed event!");
            }

            List <Shade> stillAliveShades         = _shades.FindAll(s => s.IsAlive());
            int          numberOfShadesStillAlive = stillAliveShades.Count;

            if (numberOfShadesStillAlive > 0)
            {
                int chosenShadeIndex = _chanceService.WhichEventOccurs(numberOfShadesStillAlive);
                stillAliveShades[chosenShadeIndex].AbsorbShade(senderAsShade);
            }
        }
Пример #7
0
        public void AttackMethod_AppropriatelyRaisesEvents_WhenEnemyDies()
        {
            _fighter = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "Ted");
            _logger.SubscribeAll(_fighter);

            _fighter.SetStrength(_enemy.MaxHealth + 1);

            _fighter.Attack(_enemy);

            var logs = _logger.Logs;

            Assert.AreEqual(4, logs.Count);

            //first event, damage taken
            Assert.AreEqual(EventType.DamageTaken, logs[0].Type);
            Assert.AreEqual(_enemy, logs[0].Sender);
            PhysicalDamageTakenEventArgs e1 = logs[0].E as PhysicalDamageTakenEventArgs;

            Assert.NotNull(e1);
            Assert.AreEqual(_fighter.Strength, e1.Damage);

            //second event, killed - fired by enemy
            Assert.AreEqual(EventType.Killed, logs[1].Type);
            Assert.AreEqual(_enemy, logs[1].Sender);
            KilledEventArgs e2 = logs[1].E as KilledEventArgs;

            Assert.That(e2, Is.Not.Null);

            //third event, damageDealt to enemy
            Assert.AreEqual(EventType.AttackSuccessful, logs[2].Type);
            Assert.AreEqual(_fighter, logs[2].Sender);
            AttackSuccessfulEventArgs e3 = logs[2].E as AttackSuccessfulEventArgs;

            Assert.NotNull(e3);
            Assert.AreEqual(_enemy.MaxHealth, e3.DamageDealt);

            //fourth event, killed enemy
            Assert.AreEqual(EventType.EnemyKilled, logs[3].Type);
            Assert.AreEqual(_fighter, logs[3].Sender);
            EnemyKilledEventArgs e4 = logs[3].E as EnemyKilledEventArgs;

            Assert.NotNull(e4);
            Assert.AreEqual(_enemy, e4.Enemy);
        }
Пример #8
0
        public void HandleKilled(NetworkMessage msg)
        {
            MsgKilled killed = msg as MsgKilled;

            KilledEventArgs args = new KilledEventArgs();

            args.Victim       = GetPlayerByID(killed.VictimID);
            args.Killer       = GetPlayerByID(killed.KillerID);
            args.Reason       = killed.Reason;
            args.KilledByFlag = FlagTypeList.GetFromAbriv(killed.FlagAbreviation);
            if (killed.Reason == BlowedUpReasons.DeathTouch)
            {
                args.InstrumentID = killed.PhysicsDriverID;
            }
            else
            {
                args.InstrumentID = killed.ShotID;

                if (killed.ShotID > 0)
                {
                    // kill shot
                    int bzfsShotID = (killed.KillerID * byte.MaxValue) + killed.ShotID;
                    // tell the shot manager to kill that thar shot
                }
            }

            if (args.Victim != null)
            {
                args.Victim.SetTeleport(-1, null, null);
                args.Victim.Active   = false;
                args.Victim.IsRabbit = false;
            }


            if (PlayerKilled != null)
            {
                PlayerKilled.Invoke(this, args);
            }
        }
Пример #9
0
 private void _logKilled(object sender, KilledEventArgs e)
 {
     Logs.Add(new EventLog(EventType.Killed, sender, e));
 }
Пример #10
0
        private void OnEggKilled(object sender, KilledEventArgs e)
        {
            var egg = sender as Egg;

            _eggs.Remove(egg);
        }
Пример #11
0
 private void _setReviveCounter(object sender, KilledEventArgs e)
 {
     ReviveCounter = ChanceService.WhichEventOccurs(3) + 2;
 }
Пример #12
0
        public void CastMethod_AppropriatelyRaisesEvents([Values(false, true)] bool enemyDies)
        {
            var spellDamage = _fireballSpell.Power + _human.MagicStrength;
            int enemyHealth = spellDamage + (enemyDies ? 0 : 1);

            _enemy.SetHealth(enemyHealth);

            _human.SetDeathOnTurnEndEvent();
            _human.AddSpell(_fireballSpell);
            _human.SetMana(_fireballSpell.Cost);
            _human.SetMove(_fireballSpell);
            _human.SetMoveTarget(_enemy);

            _logger.Subscribe(EventType.ManaLost, _human);
            _logger.Subscribe(EventType.SpellSuccessful, _human);
            _logger.Subscribe(EventType.EnemyKilled, _human);

            _logger.Subscribe(EventType.MagicalDamageTaken, _enemy);
            _logger.Subscribe(EventType.Killed, _enemy);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            var logs = _logger.Logs;

            int expectedLogCount = enemyDies ? 5 : 3;

            Assert.AreEqual(expectedLogCount, logs.Count);

            int i = 0;

            //first event, mana spent
            EventLog log = logs[i++];

            Assert.AreEqual(EventType.ManaLost, log.Type);
            Assert.AreEqual(_human, log.Sender);
            ManaLostEventArgs e1 = log.E as ManaLostEventArgs;

            Assert.That(e1, Is.Not.Null);
            if (e1 != null)
            {
                Assert.AreEqual(_fireballSpell.Cost, e1.ManaSpent);
            }

            //second event, magical damage taken
            log = logs[i++];
            Assert.AreEqual(EventType.MagicalDamageTaken, log.Type);
            Assert.AreEqual(_enemy, log.Sender);
            MagicalDamageTakenEventArgs e2 = log.E as MagicalDamageTakenEventArgs;

            Assert.That(e2, Is.Not.Null);
            if (e2 != null)
            {
                Assert.AreEqual(spellDamage, e2.Damage);
                Assert.AreEqual(_fireballSpell.ElementalType, e2.MagicType);
            }

            //killed event sent by enemy, potentially
            if (enemyDies)
            {
                log = logs[i++];
                Assert.AreEqual(EventType.Killed, log.Type);
                Assert.AreEqual(_enemy, log.Sender);
                KilledEventArgs e3 = log.E as KilledEventArgs;
                Assert.That(e3, Is.Not.Null);
            }

            //Spell successful
            log = logs[i++];
            Assert.AreEqual(EventType.SpellSuccessful, log.Type);
            Assert.AreEqual(_human, log.Sender);
            SpellSuccessfulEventArgs e4 = log.E as SpellSuccessfulEventArgs;

            Assert.That(e4, Is.Not.Null);
            if (e4 != null)
            {
                Assert.AreEqual(_fireballSpell, e4.Spell);
                Assert.AreEqual(spellDamage, e4.DamageDealt);
                Assert.AreEqual(_enemy, e4.TargettedFoe);
            }

            //enemy killed, potentially
            if (enemyDies)
            {
                log = logs[i];
                Assert.AreEqual(EventType.EnemyKilled, log.Type);
                Assert.AreEqual(_human, log.Sender);
                EnemyKilledEventArgs e5 = log.E as EnemyKilledEventArgs;
                Assert.That(e5, Is.Not.Null);
                if (e5 != null)
                {
                    Assert.AreEqual(_enemy, e5.Enemy);
                }
            }
        }
Пример #13
0
        public void KillPlayer(ServerPlayer player, KilledEventArgs args)
        {
            if (args == null || player == null)
            {
                return;
            }

            if (!player.Info.Alive)
            {
                Logger.Log0("Player " + player.Callsign + " killed while dead");
            }

            player.Info.Alive = false;

            PlayerKilled?.Invoke(this, args);

            Logger.Log4("Player " + player.Callsign + " killed by " + args.KillInfo.Reason.ToString());

            bool wasFromAFlag = false;

            switch (args.KillInfo.Reason)
            {
            case BlowedUpReasons.GotKilledMsg:
                break;

            case BlowedUpReasons.GotShot:
                wasFromAFlag = true;
                Shots.RemoveShotForDeath(player, args.KillInfo.KillerID, args.KillInfo.ShotID);

                if (args.Shot != null)    // tell the flag it took a hit
                {
                    Flags.HandlePlayerTakeHit(player, args.Killer, args.Shot);
                }
                break;

            case BlowedUpReasons.GotRunOver:
                wasFromAFlag = true;
                break;

            case BlowedUpReasons.GotCaptured:
                break;

            case BlowedUpReasons.GenocideEffect:
                break;

            case BlowedUpReasons.SelfDestruct:
                break;

            case BlowedUpReasons.WaterDeath:
                break;

            case BlowedUpReasons.DeathTouch:
                break;

            case BlowedUpReasons.LastReason:
            case BlowedUpReasons.Unknown:
                Logger.Log0("Player " + player.Callsign + " killed by a method that should not happen");
                break;
            }

            if (wasFromAFlag)   // tell the flag it killed
            {
                Flags.HandlePlayerDoDamage(player, args.Killer, FlagTypeList.GetFromAbriv(args.KillInfo.FlagAbreviation));
            }

            // process any scores
            PlayerInfo.ScoreInfo vicScores    = new PlayerInfo.ScoreInfo();
            PlayerInfo.ScoreInfo killerScores = new PlayerInfo.ScoreInfo();
            if (ComputeScores(args.Victim, ref vicScores, args.Killer, ref killerScores, args.KillInfo.Reason))
            {
                args.Victim.Info.Score.ApplyScore(vicScores);
                if (args.Killer != null)
                {
                    args.Killer.Info.Score.ApplyScore(killerScores);
                }

                MsgScore scoreMessage = new MsgScore();
                if (!vicScores.Empty)
                {
                    Logger.Log3("Player " + player.Callsign + " score updated by " + vicScores.ToString());

                    ScoreUpdated?.Invoke(this, args.Victim);
                    args.Victim.Info.Score.Pack(args.Victim.PlayerID, scoreMessage);
                }

                if (args.Killer != null && !killerScores.Empty)
                {
                    Logger.Log3("Player " + player.Callsign + " score updated by " + killerScores.ToString());

                    ScoreUpdated?.Invoke(this, args.Killer);
                    args.Killer.Info.Score.Pack(args.Killer.PlayerID, scoreMessage);
                }

                if (scoreMessage.Scores.Count > 0)
                {
                    SendToAll(scoreMessage, false);
                }
            }

            MsgKilled killedMessage = new MsgKilled();

            killedMessage.VictimID        = args.Victim.PlayerID;
            killedMessage.KillerID        = args.Killer != null ? args.Killer.PlayerID : PlayerConstants.ServerPlayerID;
            killedMessage.ShotID          = args.Shot != null ? args.Shot.PlayerShotID : -1;
            killedMessage.Reason          = args.KillInfo.Reason;
            killedMessage.FlagAbreviation = (args.Shot != null && args.Shot.SourceFlag != null) ? args.Shot.SourceFlag.FlagAbbv : string.Empty;
            killedMessage.PhysicsDriverID = args.KillInfo.PhysicsDriverID;

            SendToAll(killedMessage, false);
        }
Пример #14
0
 public void TestPrintKilledMessage(object sender, KilledEventArgs e)
 {
     PrintKilledMessage(sender, e);
 }
Пример #15
0
 private void RemoveFromTeamOnDeath(object sender, KilledEventArgs e)
 {
     Team.Remove(this);
 }
Пример #16
0
 public void OnKilled(KilledEventArgs e)
 {
     Killed?.Invoke(this, e);
 }