Exemplo n.º 1
0
        public void PlayerAttackMonster(Connection client, AttackTargetRequest atr)
        {
            if (!_monsters.ContainsKey(atr.TargetID))
            {
                LogInterface.Log(string.Format("Character({0}) attacking non existant monster {1} on map {2}", client.Character.ID, atr.TargetID, client.Character.MapID), LogInterface.LogMessageType.Game);
                client.SendPacket(new SeePlayerAttack(atr.TargetID, 0, client.Character, atr, 6));        // Wrong target
            }
            else
            {
                Monster m = _monsters[atr.TargetID];

                client.Character.AttackTarget(m, atr);

                SeePlayerAttack pkt = new SeePlayerAttack(m.ID, m.CurHP, client.Character, atr);
                foreach (Connection c in _players.Values)
                {
                    c.SendPacket(pkt);
                }

                if (m.Dead)
                {
                    // Do loot!
                    m.GiveLoot(client);
                }
            }
        }
Exemplo n.º 2
0
        public void AttackTarget(Monster m, AttackTargetRequest atr)
        {
            bool millena = Millena;
            int  damage  = Program.Server.Rand.Next(millena ? _abilityPMin : _abilityMMin, millena ? _abilityPMax : _abilityMMax);

            bool critical = (Program.Server.Rand.NextDouble() < 0.25);

            if (critical)
            {
                damage *= 2;
            }
            atr.Critical = critical;

            m.TakeDamage((uint)damage, ID);
        }