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(); } } }
public override void FireEvent() { BinWriter pkg2 = new BinWriter(); pkg2.Write(spellId); pkg2.Write((byte)0); pkg2.Write((byte)0); pkg2.Write((byte)8); client.Send(SMSG.CAST_RESULT, pkg2); ServerPacket pkg5 = new ServerPacket(SMSG.SPELL_GO); pkg5.Write((ulong)client.Player.GUID); pkg5.Write((ulong)client.Player.GUID); pkg5.Write((short)spellId); pkg5.Write((UInt32)0); if ((flags & 0x40) > 0) { targetsInRange = client.Player.MapTile.Map.GetObjectsInRange(OBJECTTYPE.UNIT, destinationVector, 25.0f); Console.WriteLine("Targets in range : " + targetsInRange.Count); pkg5.Write((byte)targetsInRange.Count); IEnumerator e = targetsInRange.GetEnumerator(); while (e.MoveNext()) { pkg5.Write(((UnitBase)e.Current).GUID); } } else { pkg5.Write((byte)0x01); if (target == 0) { pkg5.Write(client.Player.GUID); } else { pkg5.Write(target); } } //Missed targets count pkg5.Write((byte)0x00); //Flag pkg5.Write(flags); // If we got a single target spell if ((flags & 0x8802) > 0) { if (target == 0) { pkg5.Write(client.Player.GUID); } else { pkg5.Write(target); Chat.System(client, "Target:" + target); } } // If we got an area spell if ((flags & 0x40) > 0) { pkg5.WriteVector(destinationVector); } pkg5.Finish(); client.Player.MapTile.Map.Send(pkg5, client.Player.Position, 25.0f); DBSpell spell; try { spell = (DBSpell)DBManager.spellsDB[(uint)spellId]; } catch (Exception e) { Console.WriteLine("Spell wasn't found in DB !!! Be sure you got the spell DB!"); Console.WriteLine(e); return; } if (spell == null) { Chat.System(client, "Spell:" + spellId + " not found during fire"); return; } ; if (spell.Description.IndexOf("damage") > -1 && targetsInRange == null) { doDamage(target); } else if (spell.Description.IndexOf("damage") > -1 && targetsInRange != null) { IEnumerator e = targetsInRange.GetEnumerator(); while (e.MoveNext()) { doDamage(((UnitBase)e.Current).GUID); } } else if (spell.Description.IndexOf("heal") > -1 || spell.Description.IndexOf("Heal") > -1) { int dmg = 0; StatManager.CalculateSpellDamage(client.Player, null, spell, out dmg); ServerPacket pkg9 = new ServerPacket(SMSG.SPELLNONMELEEDAMAGELOG); // Target GUID pkg9.Write((ulong)target); // Caster GUID pkg9.Write((ulong)client.Player.GUID); // spellID pkg9.Write((short)spellId); // Fill the hole pkg9.Write((UInt16)0); // damage done pkg9.Write(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); // LivingObject targetObject = (LivingObject)ObjectManager.GetWorldObjectByGUID(target); // if((targetObject is PlayerObject)targetObject.Health += dmg; PlayerObject targetObject = (PlayerObject)ObjectManager.GetWorldObject(OBJECTTYPE.PLAYER, target); if (targetObject != null) { targetObject.Health += dmg; } } client.Player.Power -= (int)spell.ManaCost; client.Player.UpdateData(); }