예제 #1
0
        void HandleNpcTextQuery(QueryNPCText packet)
        {
            NpcText npcText = Global.ObjectMgr.GetNpcText(packet.TextID);

            QueryNPCTextResponse response = new QueryNPCTextResponse();

            response.TextID = packet.TextID;

            if (npcText != null)
            {
                for (byte i = 0; i < SharedConst.MaxNpcTextOptions; ++i)
                {
                    response.Probabilities[i]   = npcText.Data[i].Probability;
                    response.BroadcastTextID[i] = npcText.Data[i].BroadcastTextID;
                    if (!response.Allow && npcText.Data[i].BroadcastTextID != 0)
                    {
                        response.Allow = true;
                    }
                }
            }

            if (!response.Allow)
            {
                Log.outError(LogFilter.Sql, "HandleNpcTextQuery: no BroadcastTextID found for text {0} in `npc_text table`", packet.TextID);
            }

            SendPacket(response);
        }
예제 #2
0
        public static void HandleNpcTextUpdate(Packet packet)
        {
            var npcText = new NpcText();

            var entry = packet.ReadEntry("Entry");

            if (entry.Value) // Can be masked
            {
                return;
            }

            var size    = packet.ReadInt32("Size");
            var data    = packet.ReadBytes(size);
            var hasData = packet.ReadBit();

            if (!hasData)
            {
                return; // nothing to do
            }
            var pkt = new Packet(data, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName);

            npcText.Probabilities = new float[8];
            for (var i = 0; i < 8; ++i)
            {
                npcText.Probabilities[i] = pkt.ReadSingle("Probability", i);
            }
            for (var i = 0; i < 8; ++i)
            {
                pkt.ReadInt32("Broadcast Text Id", i);
            }
        }
예제 #3
0
        public static void HandleNpcTextUpdate(Packet packet)
        {
            var npcText = new NpcText();

            var entry = packet.ReadUInt32("Entry");

            npcText.Probabilities = new float[8];
            npcText.Texts1        = new string[8];
            npcText.Texts2        = new string[8];
            npcText.Languages     = new Language[8];
            npcText.EmoteDelays   = new uint[8][];
            npcText.EmoteIds      = new EmoteType[8][];
            for (var i = 0; i < 8; i++)
            {
                npcText.Probabilities[i] = packet.ReadSingle("Probability", i);

                npcText.Texts1[i] = packet.ReadCString("Text 1", i);

                npcText.Texts2[i] = packet.ReadCString("Text 2", i);

                npcText.Languages[i] = packet.ReadEnum <Language>("Language", TypeCode.Int32, i);

                npcText.EmoteDelays[i] = new uint[3];
                npcText.EmoteIds[i]    = new EmoteType[3];
                for (var j = 0; j < 3; j++)
                {
                    npcText.EmoteDelays[i][j] = packet.ReadUInt32("Emote Delay", i, j);
                    npcText.EmoteIds[i][j]    = packet.ReadEnum <EmoteType>("Emote ID", TypeCode.UInt32, i, j);
                }
            }

            Stuffing.NpcTexts.TryAdd(entry, npcText);
        }
예제 #4
0
        public static void HandleNpcTextUpdate(Packet packet)
        {
            var npcText = new NpcText();

            var hasData = packet.ReadBit("hasData");
            var entry   = packet.ReadEntry("TextID");

            if (entry.Value) // Can be masked
            {
                return;
            }

            if (!hasData)
            {
                return; // nothing to do
            }
            var size = packet.ReadInt32("Size");

            npcText.Probabilities = new float[8];
            for (var i = 0; i < 8; ++i)
            {
                npcText.Probabilities[i] = packet.ReadSingle("Probability", i);
            }
            for (var i = 0; i < 8; ++i)
            {
                packet.ReadInt32("Unknown Id", i);
            }
        }
예제 #5
0
        public static void HandleNpcTextUpdate(Packet packet)
        {
            var entry = packet.ReadEntry("Entry");

            if (entry.Value) // Can be masked
            {
                return;
            }

            NpcText npcText = new NpcText
            {
                ID = (uint)entry.Key
            };

            npcText.Probabilities = new float?[8];
            npcText.Texts0        = new string[8];
            npcText.Texts1        = new string[8];
            npcText.Languages     = new Language?[8];
            npcText.EmoteDelays   = new uint?[8][];
            npcText.Emotes        = new EmoteType?[8][];

            var proto = packet.Holder.NpcTextOld = new() { Entry = npcText.ID.Value };

            for (int i = 0; i < 8; i++)
            {
                var textEntry = new PacketNpcTextOldEntry();
                npcText.Probabilities[i] = textEntry.Probability = packet.ReadSingle("Probability", i);
                npcText.Texts0[i]        = textEntry.Text0 = packet.ReadCString("Text0", i);
                npcText.Texts1[i]        = textEntry.Text1 = packet.ReadCString("Text1", i);
                npcText.Languages[i]     = packet.ReadInt32E <Language>("Language", i);
                textEntry.Language       = (int?)npcText.Languages[i] ?? 0;

                npcText.EmoteDelays[i] = new uint?[3];
                npcText.Emotes[i]      = new EmoteType?[3];
                for (int j = 0; j < 3; j++)
                {
                    var emote = new BroadcastTextEmote();
                    npcText.EmoteDelays[i][j] = emote.Delay = packet.ReadUInt32("EmoteDelay", i, j);
                    npcText.Emotes[i][j]      = packet.ReadUInt32E <EmoteType>("EmoteID", i, j);
                    emote.EmoteId             = (uint?)npcText.Emotes[i][j] ?? 0;
                    textEntry.Emotes.Add(emote);
                }
                proto.Texts.Add(textEntry);
            }

            packet.AddSniffData(StoreNameType.NpcText, entry.Key, "QUERY_RESPONSE");

            Storage.NpcTexts.Add(npcText, packet.TimeSpan);
        }
    }
예제 #6
0
        public static void HandleNpcTextUpdate(Packet packet)
        {
            var entry = packet.ReadEntry("Entry");

            if (entry.Value) // Can be masked
            {
                return;
            }

            NpcText npcText = new NpcText
            {
                ID = (uint)entry.Key
            };

            npcText.Probabilities = new float[8];
            npcText.Texts1        = new string[8];
            npcText.Texts2        = new string[8];
            npcText.Languages     = new Language[8];
            npcText.EmoteDelays   = new uint[8][];
            npcText.EmoteIds      = new EmoteType[8][];
            for (int i = 0; i < 8; i++)
            {
                npcText.Probabilities[i] = packet.ReadSingle("Probability", i);

                npcText.Texts1[i] = packet.ReadCString("Text 1", i);

                npcText.Texts2[i] = packet.ReadCString("Text 2", i);

                npcText.Languages[i] = packet.ReadInt32E <Language>("Language", i);

                npcText.EmoteDelays[i] = new uint[3];
                npcText.EmoteIds[i]    = new EmoteType[3];
                for (int j = 0; j < 3; j++)
                {
                    npcText.EmoteDelays[i][j] = packet.ReadUInt32("Emote Delay", i, j);
                    npcText.EmoteIds[i][j]    = packet.ReadUInt32E <EmoteType>("Emote ID", i, j);
                }
            }

            packet.AddSniffData(StoreNameType.NpcText, entry.Key, "QUERY_RESPONSE");

            Storage.NpcTexts.Add(npcText, packet.TimeSpan);
        }
예제 #7
0
파일: Session.cs 프로젝트: hazzik/uwow2
        private static IPacket GetNpcTextUpdatePkt(NpcTexts texts)
        {
            IPacket      responce = WorldPacketFactory.Create(WMSG.SMSG_NPC_TEXT_UPDATE);
            BinaryWriter writer   = responce.CreateWriter();

            writer.Write(texts.Id);
            for (int i = 0; i < 8; i++)
            {
                NpcText text = texts.Texts[i];
                writer.Write(text.Probability);
                writer.WriteCString(text.Text0);
                writer.WriteCString(text.Text1);
                writer.Write(text.Language);
                for (int j = 0; (j < 3); j++)
                {
                    writer.Write(text.Emote[j, 0]);
                    writer.Write(text.Emote[j, 1]);
                }
            }
            return(responce);
        }