예제 #1
0
        public void doDamage(ulong GUID)
        {
            int dmg = 0;

            StatManager.CalculateSpellDamage(client.Player, null, spell, out dmg);

            ServerPacket pkg9 = new ServerPacket(SMSG.SPELLNONMELEEDAMAGELOG);

            // Target GUID
            pkg9.Write((ulong)GUID);
            // Caster GUID
            pkg9.Write((ulong)client.Player.GUID);
            // spellID
            pkg9.Write((short)spellId);
            // Fill the hole
            pkg9.Write((UInt16)0);
            // damage done
            pkg9.Write((short)dmg);
            // Fill the hole
            pkg9.Write((UInt16)0);
            // flag?
            pkg9.Write((byte)0x01);
            // damage absorbed
            pkg9.Write((UInt32)0);
            pkg9.Write((byte)0);
            pkg9.Write((byte)0);
            // damage blocked
            pkg9.Write((UInt32)0);
            pkg9.Write((byte)0);
            pkg9.Finish();

            client.Player.MapTile.Map.Send(pkg9, client.Player.Position, 25.0f);
            client.Player.UpdateData();

//			LivingObject targetObject = (LivingObject)ObjectManager.GetWorldObjectByGUID(GUID);
//			if (targetObject.ObjectType==OBJECTTYPE.UNIT)

            UnitBase uobj = (UnitBase)ObjectManager.GetWorldObject(OBJECTTYPE.UNIT, GUID);

            if (uobj != null)
            {
                client.Player.LastPosition = client.Player.Position;;
//				UnitBase uobj = (UnitBase)targetObject;
                if (!uobj.Attacking)
                {
                    uobj.StartCombat(client.Player.GUID);
                }

                uobj.DealDamage(client.Player, dmg);

                if (uobj.Dead && this.player.Selection != null && this.player.Selection.GUID == GUID)
                {
                    this.player.StopCombat();
                }
            }
        }