Exemple #1
0
 public static void parseOutbound(OutboundOpcodes opcode, Packet packet)
 {
     if (packet == null || activeScript == null)
     {
         return;
     }
     if (Program.DEBUG_PACKETS)
     {
         Console.WriteLine("Reading Outbound Packet " + opcode);
     }
     activeScript.handleOutboundPackets(opcode, packet);
 }
Exemple #2
0
        // Recv Opcodes
        public void handleOutboundPackets(OutboundOpcodes opcode, Packet packet)
        {
            switch (opcode)
            {
            case USER_PORTAL_SCRIPT_REQUEST:
                packet.ReadByte();
                String portalName = packet.ReadString();
                String script     = Util.getPortalScriptName(Parser.MAP_ID, portalName);
                if (!script.Equals("Unknown") && !isWaitForScriptAnswer())
                {
                    bool initedLifes = initedLifeObjects;
                    Parser.dispose();
                    Parser.getActiveScript().setPortal(Parser.MAP_ID, script, initedLifes);
                }
                break;

            case OutboundOpcodes.DIRECTION_NODE_COLLISION:
                int key = packet.ReadInt();
                if (!Util.getDirectionScriptName(Parser.MAP_ID, key).Equals("Unknown"))
                {
                    bool initedLifes = initedLifeObjects;
                    Parser.dispose();
                    Parser.getActiveScript().setDirection(Parser.MAP_ID, key, initedLifes);
                }
                break;

            case USER_QUEST_REQUEST:

                int requestType = packet.ReadByte();
                int questID     = packet.ReadInt();
                if (questID == 7707)
                {
                    return;
                }
                if (!isWaitForScriptAnswer())
                {
                    bool inited = initedLifeObjects;
                    // should I check the type and then dispose ?
                    Parser.dispose();
                    Handler.handleUserQuestRequest(requestType, questID, inited);
                    read = true;
                }
                break;

            case USER_SELECT_NPC:
                //if (isDisposed())
                //{
                int objectID = packet.ReadInt();
                Npc npc      = LifeStorage.getNpcByObjectID(objectID);
                if (npc != null)
                {
                    if (Util.hasNpcScript(npc.TemplateID))
                    {
                        bool initedLifes = initedLifeObjects;
                        Parser.dispose();
                        Parser.getActiveScript().setNpcID(npc.TemplateID, initedLifes);
                    }
                }
                //}
                break;

            case USER_SCRIPT_MESSAGE_ANSWER:
                ScriptMessageType scriptMessageType = Util.GetEnumObjectByValue <ScriptMessageType>(packet.ReadByte());
                Console.WriteLine("Script MEssage Type {0}", scriptMessageType);
                if (scriptMessageType == ScriptMessageType.AskYesNo || scriptMessageType == ScriptMessageType.AskAccept)
                {
                    addComment("Response is " + (packet.ReadBool() ? "Yes" : "No"));
                }

                if (scriptMessageType == ScriptMessageType.AskMenu)
                {
                    packet.ReadByte();
                    if (packet.Length >= 4)
                    {
                        addComment(String.Format("if selection == {0}:", packet.ReadInt()));
                    }
                }
                setWaitForAnswer(false);
                break;
            }
        }