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); }
// 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; } }