예제 #1
0
        public void TestMonsterDieCleansMonsterData()
        {
            var client = ServerMocker.GetClient();
            var player = client.FullLoginSequence(_player);

            var skeleton = new Skeleton()
            {
                Position = new Position(0, 1)
            };

            Server.Events.Call(new EntitySpawnEvent()
            {
                Entity   = skeleton,
                Position = skeleton.Position
            });
            skeleton.MovementBehaviour = null;
            skeleton.MovementTick();

            var skeletonMoveTask = GameScheduler.GetTask(skeleton.MovementTaskId);

            Assert.That(skeletonMoveTask != null,
                        "Monster movement task should be created upon spawning");

            player.Atk      = 5;
            player.AtkSpeed = 99999999;
            skeleton.Def    = 0;

            player.TryAttacking(skeleton, singleHit: true);

            Assert.That(skeleton.HP == skeleton.MAXHP - 5,
                        "5 atk on 0 def should deal 5 damage");

            player.Atk = 5000;

            player.TryAttacking(skeleton, singleHit: true);

            var moveTask   = GameScheduler.GetTask(skeleton.MovementTaskId);
            var attackTask = GameScheduler.GetTask(skeleton.AttackTaskId);

            Assert.That(skeleton.HP < 0,
                        "Skeleton should have < 0 hp as he took 5k damage");

            Assert.That(!Server.Map.Monsters.ContainsKey(skeleton.UID),
                        "Server should not contain the skeleton as its dead.");

            Assert.That(moveTask == null,
                        "Skeleton is dead and his move task should have been cancelled");

            Assert.That(attackTask == null,
                        "Skeleton is dead and his move task should have been cancelled");
        }