Example #1
0
        public void Handle(Character talker, Packet iPacket)
        {
            if (talker.LastNpc == null)
            {
                return;
            }

            NpcMessageType lastMessageType = (NpcMessageType)iPacket.ReadByte();
            byte           action          = iPacket.ReadByte();

            // TODO: Validate last message type.

            int selection = -1;

            byte endTalkByte;

            switch (lastMessageType)
            {
            case NpcMessageType.RequestText:
            case NpcMessageType.RequestNumber:
            case NpcMessageType.RequestStyle:
            case NpcMessageType.Choice:
                endTalkByte = 0;
                break;

            default:
                endTalkByte = byte.MaxValue;
                break;
            }

            if (action != endTalkByte)
            {
                if (iPacket.Remaining >= 4)
                {
                    selection = iPacket.ReadInt();
                }
                else if (iPacket.Remaining > 0)
                {
                    selection = iPacket.ReadByte();
                }

                if (lastMessageType == NpcMessageType.RequestStyle)
                {
                    //selection = this.StyleSelectionHelpers[talker][selection];
                }

                if (selection != -1)
                {
                    this.Scripts[talker].SetResult(selection);
                }
                else
                {
                    this.Scripts[talker].SetResult(action);
                }
            }
            else
            {
                talker.LastNpc = null;
            }
        }
Example #2
0
        public Packet GetDialogPacket(string text, NpcMessageType messageType, params byte[] footer)
        {
            Packet oPacket = new Packet(ServerOperationCode.ScriptMessage);

            oPacket
            .WriteByte(4)     // NOTE: Unknown.
            .WriteInt(this.MapleID)
            .WriteByte((byte)messageType)
            .WriteByte()     // NOTE: Speaker.
            .WriteString(text)
            .WriteBytes(footer);

            return(oPacket);
        }
Example #3
0
        private void SendDialog(Character talker, string text, NpcMessageType messageType, byte speaker, int speakerNpc, params byte[] footer)
        {
            using (Packet outPacket = new Packet(MapleServerOperationCode.NpcTalk))
            {
                outPacket.WriteByte(4); // UNK
                outPacket.WriteInt(this.MapleID);
                outPacket.WriteByte((byte)messageType);
                outPacket.WriteByte(speaker);

                if (speaker > 3)
                {
                    outPacket.WriteInt(speakerNpc);
                }

                outPacket.WriteString(Npc.Format(text));
                outPacket.WriteBytes(footer);

                talker.Client.Send(outPacket);
            }
        }
Example #4
0
        public void HandleResult(Character talker, Packet inPacket)
        {
            NpcMessageType lastMessageType = (NpcMessageType)inPacket.ReadByte();
            byte           action          = inPacket.ReadByte();
            int            selection       = -1;

            byte endTalkByte;

            switch (lastMessageType)
            {
            case NpcMessageType.RequestText:
            case NpcMessageType.RequestNumber:
            case NpcMessageType.RequestStyle:
            case NpcMessageType.Choice:
                endTalkByte = 0;
                break;

            default:
                endTalkByte = byte.MaxValue;
                break;
            }

            if (action != endTalkByte)
            {
                if (lastMessageType == NpcMessageType.RequestText)
                {
                    string text = inPacket.ReadString();

                    foreach (KeyValuePair <Character, NpcTextEventHandler> loopPair in this.TextCallbacks)
                    {
                        if (loopPair.Key == talker)
                        {
                            loopPair.Value(talker, new NpcTextEventArgs(action, selection, text));
                            break;
                        }
                    }
                }
                else
                {
                    if (inPacket.Remaining >= 4)
                    {
                        selection = inPacket.ReadInt();
                    }
                    else if (inPacket.Remaining > 0)
                    {
                        selection = inPacket.ReadByte();
                    }

                    if (lastMessageType == NpcMessageType.RequestStyle)
                    {
                        selection = this.StyleSelectionHelpers[talker][selection];
                    }

                    foreach (KeyValuePair <Character, NpcEventHandler> loopPair in this.Callbacks)
                    {
                        if (loopPair.Key == talker)
                        {
                            loopPair.Value(talker, new NpcEventArgs(action, selection));
                            break;
                        }
                    }
                }
            }
            else
            {
                talker.LastNpc = null;
            }
        }