Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }