public static void HandleAction(IRealmClient client, RealmPacketIn packet) { EntityId id = packet.ReadEntityId(); Character activeCharacter = client.ActiveCharacter; NPC npc = activeCharacter.Map.GetObject(id) as NPC; if (npc == null || npc != activeCharacter.ActivePet || (!npc.IsAlive || npc.PetRecord == null)) { return; } PetActionEntry petActionEntry = packet.ReadUInt32(); switch (petActionEntry.Type) { case PetActionType.SetMode: npc.SetPetAttackMode(petActionEntry.AttackMode); break; case PetActionType.SetAction: PetAction action = petActionEntry.Action; npc.SetPetAction(action); break; default: WorldObject target = activeCharacter.Map.GetObject(packet.ReadEntityId()); npc.CastPetSpell(petActionEntry.SpellId, target); break; } }
public static void SendPlayerPossessedPetSpells(Character owner, Character possessed) { using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_PET_SPELLS, 62)) { packet.Write(possessed.EntityId); packet.Write((ushort)0); packet.Write(0); packet.Write((byte)0); packet.Write((byte)0); packet.Write((ushort)0); uint raw1 = new PetActionEntry { Action = PetAction.Attack, Type = PetActionType.SetAction }.Raw; packet.Write(raw1); for (int index = 1; index < 10; ++index) { uint raw2 = new PetActionEntry { Type = PetActionType.SetAction }.Raw; packet.Write(raw2); } packet.Write((byte)0); packet.Write((byte)0); owner.Send(packet, false); } }
public static void SendPlayerPossessedPetSpells(Character owner, Character possessed) { using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_PET_SPELLS, 20 + (PetConstants.PetActionCount * 4) + 1 + (0) + 1 + (0))) { packet.Write(possessed.EntityId); packet.Write((ushort)CreatureFamilyId.None); packet.Write(0); // duration packet.Write((byte)PetAttackMode.Passive); packet.Write((byte)PetAction.Stay); packet.Write((ushort)PetFlags.None); var action = new PetActionEntry { Action = PetAction.Attack, Type = PetActionType.SetAction }.Raw; packet.Write(action); for (var i = 1; i < PetConstants.PetActionCount; i++) { action = new PetActionEntry { Type = PetActionType.SetAction }.Raw; packet.Write(action); } packet.Write((byte)0); // No Spells packet.Write((byte)0); // No Cooldowns owner.Send(packet); } }
private static void ReadButton(NPC pet, RealmPacketIn packet) { uint num = packet.ReadUInt32(); PetActionEntry petActionEntry = packet.ReadUInt32(); PermanentPetRecord permanentPetRecord = pet.PermanentPetRecord; if (num > permanentPetRecord.ActionButtons.Length) { return; } permanentPetRecord.ActionButtons[num] = petActionEntry; }
public uint[] BuildVehicleActionBar() { var bar = new uint[PetConstants.PetActionCount]; var i = 0; byte j = 0; if (Entry.Spells != null) { var spells = Entry.Spells.GetEnumerator(); for (; j < PetConstants.PetSpellCount; j++) { if (!spells.MoveNext()) { bar[i++] = new PetActionEntry { Type = PetActionType.CastSpell2 + j }.Raw; } else { var spell = spells.Current; var actionEntry = new PetActionEntry(); if (spell.Value.IsPassive) { var cast = SpellCast; if (cast != null) { cast.TriggerSelf(spell.Value); } actionEntry.Type = PetActionType.CastSpell2 + j; } else { actionEntry.SetSpell(spell.Key, PetActionType.CastSpell2 + j); } bar[i++] = actionEntry.Raw; } } } for (; j < PetConstants.PetActionCount; j++) { bar[i++] = new PetActionEntry { Type = PetActionType.CastSpell2 + j }.Raw; } return(bar); }
public uint[] BuildPetActionBar() { var bar = new uint[PetConstants.PetActionCount]; var i = 0; bar[i++] = new PetActionEntry { Action = PetAction.Attack, Type = PetActionType.SetAction }.Raw; bar[i++] = new PetActionEntry { Action = PetAction.Follow, Type = PetActionType.SetAction }.Raw; bar[i++] = new PetActionEntry { Action = PetAction.Stay, Type = PetActionType.SetAction }.Raw; if (Entry.Spells != null) { var spells = Entry.Spells.GetEnumerator(); for (byte j = 0; j < PetConstants.PetSpellCount; j++) { if (!spells.MoveNext()) { bar[i++] = new PetActionEntry { Type = PetActionType.CastSpell2 + j }.Raw; } else { var spell = spells.Current; var actionEntry = new PetActionEntry(); actionEntry.SetSpell(spell.Key, PetActionType.DefaultSpellSetting); bar[i++] = actionEntry.Raw; } } } else { for (byte j = 0; j < PetConstants.PetSpellCount; j++) { bar[i++] = new PetActionEntry { Type = PetActionType.CastSpell2 + j }.Raw; } } bar[i++] = new PetActionEntry { AttackMode = PetAttackMode.Aggressive, Type = PetActionType.SetMode }.Raw; bar[i++] = new PetActionEntry { AttackMode = PetAttackMode.Defensive, Type = PetActionType.SetMode }.Raw; bar[i++] = new PetActionEntry { AttackMode = PetAttackMode.Passive, Type = PetActionType.SetMode }.Raw; return(bar); }