예제 #1
0
        public Packet GetDialogPacket(string text, NPCsConstants.NpcMessageType messageType, params byte[] footer)
        {
            Packet oPacket = new Packet(ServerOperationCode.ScriptMessage);

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

            return(oPacket);
        }
예제 #2
0
        public void Handle(Character talker, Packet iPacket)
        {
            if (talker.LastNpc == null)
            {
                return;
            }

            NPCsConstants.NpcMessageType lastMessageType = (NPCsConstants.NpcMessageType)iPacket.ReadByte();

            byte action = iPacket.ReadByte();

            // TODO: Validate last message type.

            int selection = -1;

            byte endTalkByte;

            switch (lastMessageType)
            {
            case NPCsConstants.NpcMessageType.RequestText:
            case NPCsConstants.NpcMessageType.RequestNumber:
            case NPCsConstants.NpcMessageType.RequestStyle:
            case NPCsConstants.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 == NPCsConstants.NpcMessageType.RequestStyle)
                {
                    //selection = StyleSelectionHelpers[talker][selection];
                }

                if (selection != -1)
                {
                    Scripts[talker].SetResult(selection);
                }
                else
                {
                    Scripts[talker].SetResult(action);
                }
            }
            else
            {
                talker.LastNpc = null;
            }
        }