protected override int ExecInternal() { var msg = GeneralLib.ListTail(EventData.Data, 2); if (GeneralLib.ListLength(msg) == 1) { msg = Expression.GetValueAsString(msg); } Expression.FormatMessage(ref msg); var BGM = Sound.SearchMidiFile(Sound.BGMName("Subtitle")); if (Strings.Len(BGM) > 0) { Sound.StartBGM(BGM, false); if (!GUI.IsRButtonPressed()) { GUI.Sleep(1000); } GUI.DisplayTelop(msg); if (!GUI.IsRButtonPressed()) { GUI.Sleep(2000); } } else { GUI.DisplayTelop(msg); } return(EventData.NextID); }
protected override int ExecInternal() { string fname = GeneralLib.ToList(EventData.Data).Skip(1).FirstOrDefault(); if (GeneralLib.ListLength(fname) == 1) { fname = Expression.GetValueAsString(fname); } Sound.PlayWave(fname); return(EventData.NextID); }
protected override ValueType InvokeInternal(SRC SRC, ValueType etype, string[] @params, int pcount, bool[] is_term, out string str_result, out double num_result) { str_result = ""; num_result = GeneralLib.ListLength(SRC.Expression.GetValueAsString(@params[1], is_term[1])); if (etype == ValueType.StringType) { str_result = GeneralLib.FormatNum(num_result); return(ValueType.StringType); } else { return(ValueType.NumericType); } }
// Flashファイルからイベントを取得 // Flashのアクションの「GetURL」で // 1.「URL」に"FSCommand:" // 2.「ターゲット」に「サブルーチン名 [引数1 [引数2 […]]」 // を指定すると、そのアクションが実行されたときに // ターゲットのサブルーチンが実行される。 // サブルーチンを実行している間、Flashの再生は停止する。 public static void GetEvent(string fpara) { var buf = default(string); short i, j; string funcname, funcpara; var etype = default(Expression.ValueType); var str_result = default(string); var num_result = default(double); // 再生を一時停止 // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.StopMovie の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 My.MyProject.Forms.frmMain.FlashObject.StopMovie(); funcname = ""; funcpara = ""; // 念のためにFlashから渡されたパラメータ全てを解析 // 一番最初に見つかった文字列を、呼び出すサブルーチン名とする if (string.IsNullOrEmpty(funcname)) { funcname = GeneralLib.ListIndex(ref fpara, 1); buf = GeneralLib.ListTail(ref fpara, 2); } // サブルーチンの引数を記録 var loopTo = GeneralLib.ListLength(ref buf); for (j = 1; j <= loopTo; j++) { funcpara = funcpara + ", " + GeneralLib.ListIndex(ref buf, j); } // サブルーチン名と引数から、Call関数の呼び出しの文字列を生成 buf = "Call(" + funcname + funcpara + ")"; // 式として生成した文字列を実行 Expression.CallFunction(ref buf, ref etype, ref str_result, ref num_result); // 再生を再開 // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.PlayMovie の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 My.MyProject.Forms.frmMain.FlashObject.PlayMovie(); }
protected override ValueType InvokeInternal(SRC SRC, ValueType etype, string[] @params, int pcount, bool[] is_term, out string str_result, out double num_result) { str_result = ""; num_result = 0d; var buf = SRC.Expression.GetValueAsString(@params[1], is_term[1]); var buf2 = SRC.Expression.GetValueAsString(@params[2], is_term[2]); var num = pcount < 3 ? 1 : SRC.Expression.GetValueAsLong(@params[3], is_term[3]); var num2 = GeneralLib.ListLength(buf); for (var i = num; i <= num2; i++) { if (GeneralLib.ListIndex(buf, i) == buf2) { if (etype == ValueType.StringType) { str_result = SrcFormatter.Format(i); return(ValueType.StringType); } else { num_result = i; return(ValueType.NumericType); } } } if (etype == ValueType.StringType) { str_result = "0"; return(ValueType.StringType); } else { num_result = 0d; return(ValueType.NumericType); } }
// アビリティに効果を追加 public void SetEffect(ref string elist) { short j, i, k; string buf; AbilityEffect dat; string elevel, etype, edata; GeneralLib.TrimString(ref elist); var loopTo = GeneralLib.ListLength(ref elist); for (i = 1; i <= loopTo; i++) { dat = NewAbilityEffect(); buf = GeneralLib.ListIndex(ref elist, i); j = (short)Strings.InStr(buf, "Lv"); k = (short)Strings.InStr(buf, "="); if (j > 0 & (k == 0 | j < k)) { // レベル指定のある効果(データ指定があるものを含む) dat.Name = Strings.Left(buf, j - 1); if (k > 0) { // データ指定があるもの dat.Level = Conversions.ToDouble(Strings.Mid(buf, j + 2, k - (j + 2))); buf = Strings.Mid(buf, k + 1); if (Strings.Left(buf, 1) == "\"") { buf = Strings.Mid(buf, 2, Strings.Len(buf) - 2); } j = (short)Strings.InStr(buf, "Lv"); k = (short)Strings.InStr(buf, "="); if (j > 0 & (k == 0 | j < k)) { // データ指定内にレベル指定がある etype = Strings.Left(buf, j - 1); if (k > 0) { elevel = Strings.Mid(buf, j + 2, k - (j + 2)); edata = Strings.Mid(buf, k + 1); } else { elevel = Strings.Mid(buf, j + 2); edata = ""; } } else if (k > 0) { // データ指定内にデータ指定がある etype = Strings.Left(buf, k - 1); elevel = ""; edata = Strings.Mid(buf, k + 1); } else { // 単純なデータ指定 etype = buf; elevel = ""; edata = ""; } if (dat.Name == "付加" & string.IsNullOrEmpty(elevel)) { elevel = Microsoft.VisualBasic.Compatibility.VB6.Support.Format(SRC.DEFAULT_LEVEL); } dat.Data = Strings.Trim(etype + " " + elevel + " " + edata); } else { // データ指定がないもの dat.Level = Conversions.ToDouble(Strings.Mid(buf, j + 2)); } } else if (k > 0) { // データ指定を含む効果 dat.Name = Strings.Left(buf, k - 1); buf = Strings.Mid(buf, k + 1); if (Strings.Asc(buf) == 34) // " { buf = Strings.Mid(buf, 2, Strings.Len(buf) - 2); } j = (short)Strings.InStr(buf, "Lv"); k = (short)Strings.InStr(buf, "="); if (dat.Name == "解説") { // 解説の指定 etype = buf; elevel = ""; edata = ""; } else if (j > 0) { // データ指定内にレベル指定がある etype = Strings.Left(buf, j - 1); if (k > 0) { elevel = Strings.Mid(buf, j + 2, k - (j + 2)); edata = Strings.Mid(buf, k + 1); } else { elevel = Strings.Mid(buf, j + 2); edata = ""; } } else if (k > 0) { // データ指定内にデータ指定がある etype = Strings.Left(buf, k - 1); elevel = ""; edata = Strings.Mid(buf, k + 1); } else { // 単純なデータ指定 etype = buf; elevel = ""; edata = ""; } if (dat.Name == "付加" & string.IsNullOrEmpty(elevel)) { elevel = Microsoft.VisualBasic.Compatibility.VB6.Support.Format(SRC.DEFAULT_LEVEL); } dat.Data = Strings.Trim(etype + " " + elevel + " " + edata); } else { // 効果名のみ dat.Name = buf; } j = 1; foreach (AbilityEffect dat2 in colEffects) { if ((dat.Name ?? "") == (dat2.Name ?? "")) { j = (short)(j + 1); } } if (j == 1) { colEffects.Add(dat, dat.Name); } else { colEffects.Add(dat, dat.Name + Microsoft.VisualBasic.Compatibility.VB6.Support.Format(j)); } } }
protected override int ExecInternal() { if (ArgNum == 1) { throw new EventErrorException(this, "Printコマンドの引数の数が違います"); } // TODO ファイル出力例外処理 var f = SRC.FileHandleManager.Get(GetArgAsLong(2)); var msg = GeneralLib.ListTail(EventData.Data, 3); if (Strings.Right(msg, 1) != ";") { if (Strings.Left(msg, 1) != "`" || Strings.Right(msg, 1) != "`") { if (Strings.Left(msg, 2) == "$(") { if (Strings.Right(msg, 1) == ")") { msg = Expression.GetValueAsString(Strings.Mid(msg, 3, Strings.Len(msg) - 3)); } } else if (GeneralLib.ListLength(msg) == 1) { msg = Expression.GetValueAsString(msg); } Expression.ReplaceSubExpression(ref msg); } else { msg = Strings.Mid(msg, 2, Strings.Len(msg) - 2); } f.Writer.WriteLine(msg); } else { msg = Strings.Left(msg, Strings.Len(msg) - 1); if (Strings.Left(msg, 1) != "`" || Strings.Right(msg, 1) != "`") { if (Strings.Left(msg, 2) == "$(") { if (Strings.Right(msg, 1) == ")") { msg = Expression.GetValueAsString(Strings.Mid(msg, 3, Strings.Len(msg) - 3)); } } else if (GeneralLib.ListLength(msg) == 1) { msg = Expression.GetValueAsString(msg); } Expression.ReplaceSubExpression(ref msg); } else { msg = Strings.Mid(msg, 2, Strings.Len(msg) - 2); } f.Writer.WriteLine(msg); } return(EventData.NextID); }