public static void handleIngameDirectionEvent(Packet packet) { InGameDirectionEventType type = Util.GetEnumObjectByValue <InGameDirectionEventType>(packet.ReadByte()); int duration = 0, x = 0, y = 0, z = -2, unk1 = 0; String str, unk2 = "False"; Npc npc = null; switch (type) { case ForcedAction: int action = packet.ReadInt(); if (action <= 1895) { duration = packet.ReadInt(); } Parser.getActiveScript().addLine(String.Format("sm.forcedAction({0}, {1})", action, duration)); break; case Delay: Parser.getActiveScript().addLine(String.Format("sm.sendDelay({0})", packet.ReadInt())); Parser.getActiveScript().setWaitForAnswer(true); break; case EffectPlay: str = packet.ReadString(); duration = packet.ReadInt(); x = packet.ReadInt(); y = packet.ReadInt(); if (packet.ReadBool()) { z = packet.ReadInt(); } int npcVal = -2; if (packet.ReadBool()) { npcVal = packet.ReadInt(); npc = LifeStorage.getNpcByObjectID(npcVal); unk2 = packet.ReadBool() ? "False" : "True"; unk1 = packet.ReadByte(); } Parser.getActiveScript().addLine(String.Format("sm.showEffect({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", Util.quotes(str), duration, x, y, z, npc == null ? String.Format("{0}", npcVal) : npc.ObjectName, unk2, unk1)); break; case ForcedInput: Parser.getActiveScript().addLine(String.Format("sm.forcedInput({0})", packet.ReadInt())); break; case PatternInputRequest: str = packet.ReadString(); int act = packet.ReadInt(); int requestCount = packet.ReadInt(); int time = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.patternInputRequest({0}, {1}, {2}, {3})", Util.quotes(str), act, requestCount, time)); break; case CameraMove: bool back = packet.ReadBool(); int speed = packet.ReadInt(); if (!back) { x = packet.ReadInt(); y = packet.ReadInt(); } Parser.getActiveScript().addLine(String.Format("sm.moveCamera({0}, {1}, {2}, {3})", Script.PythonBool(back), speed, x, y)); Parser.getActiveScript().setWaitForAnswer(true); break; case CameraOnCharacter: Parser.getActiveScript().addLine(String.Format("sm.setCameraOnNpc({0})", packet.ReadInt())); break; case CameraZoom: duration = packet.ReadInt(); int scale = packet.ReadInt(); int timePos = packet.ReadInt(); x = packet.ReadInt(); y = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.zoomCamera({0}, {1}, {2}, {3}, {4})", duration, scale, timePos, x, y)); Parser.getActiveScript().setWaitForAnswer(true); break; case VansheeMode: Parser.getActiveScript().addLine(String.Format("sm.hideUser({0})", packet.ReadBoolPy())); break; case FaceOff: Parser.getActiveScript().addLine(String.Format("sm.faceOff({0})", packet.ReadInt())); break; case InGameDirectionEventType.Monologue: str = packet.ReadString(); unk2 = packet.ReadBoolPy(); Parser.getActiveScript().addLine(String.Format("sm.sayMonologue({0}, {1})", Util.quotes(str), unk2)); Parser.getActiveScript().setWaitForAnswer(true); break; case AvatarLookSet: str = "["; x = packet.ReadByte(); for (int i = 0; i < x; i++) { str += String.Format("{0}, ", packet.ReadInt()); } str += "]"; str.Replace(", ]", "]"); Parser.getActiveScript().addLine(String.Format("sm.avatarLookSet({0})", str)); break; case RemoveAdditionalEffect: Parser.getActiveScript().addLine(String.Format("sm.removeAdditionalEffect()")); break; case ForcedMove: str = Script.PythonBool(packet.ReadInt() == 1); x = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.forcedMove({0}, {1})", str, x)); break; case ForcedFlip: str = Script.PythonBool(packet.ReadInt() == -1); Parser.getActiveScript().addLine(String.Format("sm.forcedFlip({0})", str)); break; default: Parser.getActiveScript().addComment(String.Format("Unhandled Ingame Direction Event [{0}] Packet: {1}", type, packet.ToString())); break; } }
public static void handleScriptMessage(Packet packet) { int speakerType = packet.ReadByte(); int speakerID = packet.ReadInt(); if (packet.ReadBool()) { int overrideNpc = packet.ReadInt(); if (overrideNpc != 0) { speakerID = overrideNpc; } } ScriptMessageType type = Util.GetEnumObjectByValue <ScriptMessageType>(packet.ReadByte()); int param = packet.ReadShort(); int color = packet.ReadByte(); switch (type) { case Say: case AskMenu: case AskAccept: case AskYesNo: case AskText: case AskBoxText: case SayIllustration: if (hasParam(param, ParamType.OverrideSpeakerID)) { int overrideNpc = packet.ReadInt(); if (overrideNpc != 0) { speakerID = overrideNpc; } } break; } switch (param) { case 0x24: Parser.getActiveScript().addLine(String.Format("sm.setNpcOverrideBoxChat({0})", speakerID)); break; case 0x25: Parser.getActiveScript().addLine(String.Format("sm.setIntroBoxChat({0})", speakerID)); break; default: Parser.getActiveScript().addLine(String.Format("sm.setSpeakerID({0})", speakerID)); handleScriptMessageParam(param); if (color != 0) { Parser.getActiveScript().addLine(String.Format("sm.setColor({0})", color)); } break; } if (speakerType != 4) { Parser.getActiveScript().addLine(String.Format("sm.setSpeakerType({0})", speakerType)); } String text; bool isPrev, isNext; switch (type) { case Say: text = packet.ReadString(); isPrev = packet.ReadBool(); isNext = packet.ReadBool(); if (text.Contains(Environment.NewLine)) { text.Replace(Environment.NewLine, "\r\n"); } if (isPrev && isNext) { Parser.getActiveScript().addLine(String.Format("sm.sendSay({0})", Util.quotes(text))); } else if (isPrev && !isNext) { Parser.getActiveScript().addLine(String.Format("sm.sendPrev({0})", Util.quotes(text))); } else if (!isPrev && isNext) { Parser.getActiveScript().addLine(String.Format("sm.sendNext({0})", Util.quotes(text))); } else { Parser.getActiveScript().addLine(String.Format("sm.sendSayOkay({0})", Util.quotes(text))); } break; case AskYesNo: text = packet.ReadString(); if (text.Contains(Environment.NewLine)) { text.Replace(Environment.NewLine, "\r\n"); } Parser.getActiveScript().addLine(String.Format("if sm.sendAskYesNo({0}):", Util.quotes(text))); break; case AskAccept: text = packet.ReadString(); if (text.Contains(Environment.NewLine)) { text.Replace(Environment.NewLine, "\r\n"); } Parser.getActiveScript().addLine(String.Format("if sm.sendAskAccept({0}):", Util.quotes(text))); break; case AskMenu: text = packet.ReadString(); if (text.Contains(Environment.NewLine)) { text.Replace(Environment.NewLine, "\r\n"); } Parser.getActiveScript().addLine(String.Format("selection = sm.sendNext({0})", Util.quotes(text))); break; case SayIllustration: text = packet.ReadString(); isPrev = packet.ReadBool(); isNext = packet.ReadBool(); int faceIndex = packet.ReadInt(); String isLeft = packet.ReadBoolPy(); if (isPrev && isNext) { Parser.getActiveScript().addLine(String.Format("sm.sendSayIllustration({0}, {1}, {2})", Util.quotes(text), faceIndex, isLeft)); } else if (isPrev && !isNext) { Parser.getActiveScript().addLine(String.Format("sm.sendSayPrevIllustration({0}, {1}, {2})", Util.quotes(text), faceIndex, isLeft)); } else if (!isPrev && isNext) { Parser.getActiveScript().addLine(String.Format("sm.sendSayNextIllustration({0}, {1}, {2})", Util.quotes(text), faceIndex, isLeft)); } else { Parser.getActiveScript().addLine(String.Format("sm.sendSayOkayIllustration({0}, {1}, {2})", Util.quotes(text), faceIndex, isLeft)); } break; default: Parser.getActiveScript().addComment(String.Format("Unhandled Script Message [{0}] Packet: {1}", type, packet.ToString())); break; } Parser.getActiveScript().setWaitForAnswer(true); }
public static void handleFieldEffect(Packet packet) { FieldEffectType type = Util.GetEnumObjectByValue <FieldEffectType>(packet.ReadByte()); String str; int x, y; switch (type) { case ObjectStateByString: Parser.getActiveScript().addLine(String.Format("sm.objectStateByString({0})", Util.quotes(packet.ReadString()))); break; case Tremble: Parser.getActiveScript().addLine(String.Format("sm.tremble({0}, {1}, {2})", packet.ReadByte(), packet.ReadInt(), packet.ReadShort())); break; case PlaySound: str = packet.ReadString(); x = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.playSound({0}, {1})", Util.quotes(str), x)); break; case ChangeBGM: str = packet.ReadString(); x = packet.ReadInt(); y = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.changeBGM({0}, {1}, {2})", Util.quotes(str), x, y)); break; case SetBGMVolume: Parser.getActiveScript().addLine(String.Format("sm.setBGMVolume({0}, {1})", packet.ReadInt(), packet.ReadInt())); break; case BackScreen: str = packet.ReadString(); x = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.showFieldBackgroundEffect({0}, {1})", Util.quotes(str), x)); break; case ScreenEffect: str = packet.ReadString(); x = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.showFieldEffect({0}, {1})", Util.quotes(str), x)); break; case Blind: int enable = packet.ReadByte(); x = packet.ReadShort(); int color = packet.ReadShort(); int unk1 = packet.ReadShort(); int unk2 = packet.ReadShort(); int time = packet.ReadInt(); int unk3 = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.blind({0}, {1}, {2}, {3}, {4}, {5}, {6})", enable, x, color, unk1, unk2, time, unk3)); break; case OnOffLayer: byte layerType = packet.ReadByte(); int term = packet.ReadInt(); String key = packet.ReadString(); if (layerType == 0) { x = packet.ReadInt(); y = packet.ReadInt(); int z = packet.ReadInt(); String effect = packet.ReadString(); int origin = packet.ReadInt(); int unk4 = packet.ReadByte(); int unk5 = packet.ReadInt(); int unk6 = packet.ReadByte(); Parser.getActiveScript().addLine(String.Format("sm.OnOffLayer_On({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9})", term, Util.quotes(key), x, y, z, Util.quotes(effect), origin, unk4, unk5, unk6)); } else if (layerType == 1) { x = packet.ReadInt(); y = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.OnOffLayer_Move({0}, {1}, {2}, {3})", term, Util.quotes(key), x, y)); } else if (layerType == 2) { x = packet.ReadByte(); Parser.getActiveScript().addLine(String.Format("sm.OnOffLayer_Off({0}, {1}, {2})", term, Util.quotes(key), x)); } break; case OverlapScreen: x = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.showFade({0})", x)); break; case OverlapScreenDetail: int duration = packet.ReadInt(); int fadeInTime = packet.ReadInt(); int fadeOutTime = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.showFadeTransition({0}, {1}, {2})", duration, fadeInTime, fadeOutTime)); break; case RemoveOverlapScreen: x = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.removeOverlapScreen({0})", x)); break; case StageClearExpOnly: x = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.showClearStageExpWindow({0})", x)); break; case SpineScreen: Parser.getActiveScript().addLine(String.Format("sm.spineScreen({0}, {1}, {2}, {3}, {4}, {5}, {6})", packet.ReadBoolPy(), packet.ReadBoolPy(), packet.ReadBoolPy(), packet.ReadInt(), Util.quotes(packet.ReadString()), Util.quotes(packet.ReadString()), packet.ReadBool() ? Util.quotes(packet.ReadString()) : "None")); break; case OffSpineScreen: String layer = packet.ReadString(); int spineType = packet.ReadInt(); if (spineType == 1) { Parser.getActiveScript().addLine(String.Format("sm.offSpineScreenAlpha({0}, {1})", Util.quotes(layer), packet.ReadInt())); } else if (spineType == 2) { Parser.getActiveScript().addLine(String.Format("sm.offSpineScreenAni({0}, {1})", Util.quotes(layer), Util.quotes(packet.ReadString()))); } else { Parser.getActiveScript().addLine(String.Format("sm.offSpineScreenImmediate({0})", Util.quotes(layer))); } break; default: Parser.getActiveScript().addComment(String.Format("Unhandled Field Effect [{0}] Packet: {1}", type, packet.ToString())); break; } }
public static void handleUserEffect(Packet packet) { UserEffectType type = Util.GetEnumObjectByValue <UserEffectType>(packet.ReadByte()); switch (type) { case FadeInOut: Parser.getActiveScript().addLine(String.Format("sm.fadeInOut({0}, {1}, {2}, {3})", packet.ReadInt(), packet.ReadInt(), packet.ReadInt(), packet.ReadByte())); break; case SpeechBalloon: Parser.getActiveScript().addLine(String.Format("sm.speechBalloon({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10})", packet.ReadBoolPy(), packet.ReadInt(), packet.ReadInt(), Util.quotes(packet.ReadString()), packet.ReadInt(), packet.ReadInt(), packet.ReadInt(), packet.ReadInt(), packet.ReadInt(), packet.ReadInt(), packet.ReadInt())); break; case TextEffect: String text = packet.ReadString(); int letterDelay = packet.ReadInt(); int boxDuration = packet.ReadInt(); int clientPos = packet.ReadInt(); int x = packet.ReadInt(); int y = packet.ReadInt(); int align = packet.ReadInt(); int lineSpace = packet.ReadInt(); int enterType = packet.ReadInt(); int leaveType = packet.ReadInt(); int textType = packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.createFieldTextEffect({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10})", Util.quotes(text), letterDelay, boxDuration, clientPos, x, y, align, lineSpace, textType, enterType, leaveType)); break; case ReservedEffect: packet.ReadByte(); packet.ReadInt(); packet.ReadInt(); Parser.getActiveScript().addLine(String.Format("sm.reservedEffect({0})", Util.quotes(packet.ReadString()))); break; case AvatarOriented: Parser.getActiveScript().addLine(String.Format("sm.avatarOriented({0})", Util.quotes(packet.ReadString()))); break; case PlayExclSoundWithDownBGM: Parser.getActiveScript().addLine(String.Format("sm.playExclSoundWithDownBGM({0}, {1})", Util.quotes(packet.ReadString()), packet.ReadInt())); break; // ignored: case Quest: case QuestComplete: break; default: Parser.getActiveScript().addComment(String.Format("Unhandled User Effect [{0}] Packet: {1}", type, packet.ToString())); break; } }