Ejemplo n.º 1
0
        public static void SendPageText(Character chr, uint pageId)
        {
            PageTextEntry entry = PageTextEntry.GetEntry(pageId);

            if (entry != null)
            {
                do
                {
                    QueryHandler.SendPageText(chr, entry);
                    entry = entry.NextPageEntry;
                } while (entry != null);
            }
            else
            {
                using (RealmPacketOut packet =
                           new RealmPacketOut((PacketId)RealmServerOpCode.SMSG_PAGE_TEXT_QUERY_RESPONSE, 100))
                {
                    packet.Write("-page is missing-");
                    packet.Write(0);
                    chr.Send(packet, false);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>Sends a page to the character</summary>
        /// <param name="chr">recieving character</param>
        /// <param name="owner">EntityID of sender</param>
        public static void SendPageToCharacter(GossipConversation convo, IList <QuestMenuItem> questItems)
        {
            WorldObject speaker     = convo.Speaker;
            Character   character   = convo.Character;
            GossipMenu  currentMenu = convo.CurrentMenu;
            IList <GossipMenuItemBase> gossipItems = currentMenu.GossipItems;
            IGossipEntry gossipEntry = currentMenu.GossipEntry;

            if (gossipEntry.IsDynamic)
            {
                QueryHandler.SendNPCTextUpdate(character, gossipEntry);
            }
            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_GOSSIP_MESSAGE))
            {
                packet.Write(speaker.EntityId);
                packet.Write(0);
                packet.Write(gossipEntry.GossipId);
                long position = packet.Position;
                packet.Position += 4L;
                int num = 0;
                if (gossipItems != null)
                {
                    for (int index = 0; index < gossipItems.Count; ++index)
                    {
                        GossipMenuItemBase gossipMenuItemBase = gossipItems[index];
                        if (gossipMenuItemBase.Action == null || gossipMenuItemBase.Action.CanUse(convo))
                        {
                            packet.Write(index);
                            packet.Write((byte)gossipMenuItemBase.Icon);
                            packet.Write(gossipMenuItemBase.Input);
                            packet.Write((uint)gossipMenuItemBase.RequiredMoney);
                            packet.WriteCString(gossipMenuItemBase.GetText(convo));
                            packet.WriteCString(gossipMenuItemBase.GetConfirmText(convo));
                            ++num;
                        }
                    }
                }

                if (questItems != null)
                {
                    packet.WriteUInt(questItems.Count);
                    for (int index = 0; index < questItems.Count; ++index)
                    {
                        QuestMenuItem questItem = questItems[index];
                        packet.Write(questItem.ID);
                        packet.Write(questItem.Status);
                        packet.Write(questItem.Level);
                        packet.Write(0);
                        packet.Write((byte)0);
                        packet.WriteCString(questItem.Text);
                    }
                }
                else
                {
                    packet.Write(0);
                }

                packet.Position = position;
                packet.Write(num);
                character.Client.Send(packet, false);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sends a page to the character
        /// </summary>
        /// <param name="chr">recieving character</param>
        /// <param name="owner">EntityID of sender</param>
        public static void SendPageToCharacter(GossipConversation convo,
                                               IList <QuestMenuItem> questItems)
        {
            var speaker = convo.Speaker;
            var chr     = convo.Character;

            var menu        = convo.CurrentMenu;
            var gossipItems = menu.GossipItems;
            var gossipEntry = menu.GossipEntry;

            if (gossipEntry.IsDynamic)
            {
                // not cached
                QueryHandler.SendNPCTextUpdate(chr, gossipEntry);
            }

            using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_GOSSIP_MESSAGE))
            {
                packet.Write(speaker.EntityId);
                packet.Write(0);                                                // new Flag field since 2.4.0 - menu id
                packet.Write(gossipEntry.GossipId);

                var countPos = packet.Position;
                packet.Position += 4;
                var count = 0;
                if (gossipItems != null)
                {
                    for (var i = 0; i < gossipItems.Count; i++)
                    {
                        var item = gossipItems[i];
                        if (item.Action != null && !item.Action.CanUse(convo))
                        {
                            continue;
                        }

                        packet.Write(i);
                        packet.Write((byte)item.Icon);
                        packet.Write(item.Input);
                        packet.Write((uint)item.RequiredMoney);
                        packet.WriteCString(item.GetText(convo));
                        packet.WriteCString(item.GetConfirmText(convo));
                        count++;
                    }
                }

                if (questItems != null)
                {
                    packet.WriteUInt(questItems.Count);
                    for (int i = 0; i < questItems.Count; i++)
                    {
                        var item = questItems[i];
                        packet.Write(item.ID);
                        packet.Write(item.Status);
                        packet.Write(item.Level);
                        packet.Write(0);                     // quest flags
                        packet.Write((byte)0);               // 3.3.3 flag (blue question or yelloe exclamation mark)
                        packet.WriteCString(item.Text);
                    }
                }
                else
                {
                    packet.Write(0);
                }

                packet.Position = countPos;
                packet.Write(count);

                chr.Client.Send(packet);
            }
        }
Ejemplo n.º 4
0
 /// <summary>Handles an incoming time query.</summary>
 /// <param name="client">the Session the incoming packet belongs to</param>
 /// <param name="packet">the full packet</param>
 public static void QueryTimeRequest(IRealmClient client, RealmPacketIn packet)
 {
     QueryHandler.SendQueryTimeReply(client);
 }
Ejemplo n.º 5
0
        public static void HandlePageTextQuery(IRealmClient client, RealmPacketIn packet)
        {
            uint pageId = packet.ReadUInt32();

            QueryHandler.SendPageText(client.ActiveCharacter, pageId);
        }