private int SpecialPowerCostInternal(string sname) { // 基本消費SP値 var SpecialPowerCostRet = Data.SpecialPowerCost(sname); // 特殊能力による消費SP値修正 if (IsSkillAvailable("超能力") || IsSkillAvailable("集中力")) { SpecialPowerCostRet = (int)(0.8d * SpecialPowerCostRet); } if (IsSkillAvailable("知覚強化")) { SpecialPowerCostRet = (int)(1.2d * SpecialPowerCostRet); } // SP消費減少能力 if (Unit is object) { if (Unit.CountPilot() > 0) { if (ReferenceEquals(Unit.MainPilot(), this)) { if (Unit.IsConditionSatisfied("SP消費減少付加") || Unit.IsConditionSatisfied("SP消費減少付加2")) { var adata = SkillData("SP消費減少"); var loopTo = GeneralLib.LLength(adata); for (var i = 2; i <= loopTo; i++) { if ((sname ?? "") == (GeneralLib.LIndex(adata, i) ?? "")) { return((int)((10d - SkillLevel("SP消費減少", "")) * SpecialPowerCostRet / 10L)); } } } } } } foreach (var skill in colSkill.List.Where(x => x.Name == "SP消費減少")) { var adata = skill.StrData; var loopTo2 = GeneralLib.LLength(adata); for (var j = 2; j <= loopTo2; j++) { if ((sname ?? "") == (GeneralLib.LIndex(adata, j) ?? "")) { return((int)((10d - skill.LevelOrDefault(1d)) * SpecialPowerCostRet / 10L)); } } } return(SpecialPowerCostRet); }
// 使い捨てアイテムによる武器かどうかを返す public bool IsItem() { bool IsItemRet = default; var loopTo = GeneralLib.LLength(NecessarySkill); for (int i = 1; i <= loopTo; i++) { if (GeneralLib.LIndex(NecessarySkill, i) == "アイテム") { IsItemRet = true; return(IsItemRet); } } return(IsItemRet); }
// アイテムが使用可能か? public bool IsAvailable(ref Unit u) { bool IsAvailableRet = default; short j, i, k; string iclass; string sname, fdata; IsAvailableRet = false; // イベントコマンド「Disable」 string argvname = "Disable(" + Name + ")"; if (Expression.IsGlobalVariableDefined(ref argvname)) { return(IsAvailableRet); } // 装備個所に適合しているか switch (Part() ?? "") { case "片手": case "両手": case "盾": { object argIndex1 = "装備個所"; if (Strings.InStr(u.FeatureData(ref argIndex1), "腕") == 0) { return(IsAvailableRet); } break; } case "肩": case "両肩": { object argIndex2 = "装備個所"; if (Strings.InStr(u.FeatureData(ref argIndex2), "肩") == 0) { return(IsAvailableRet); } break; } case "体": { object argIndex3 = "装備個所"; if (Strings.InStr(u.FeatureData(ref argIndex3), "体") == 0) { return(IsAvailableRet); } break; } case "頭": { object argIndex4 = "装備個所"; if (Strings.InStr(u.FeatureData(ref argIndex4), "頭") == 0) { return(IsAvailableRet); } break; } } // 武器クラス or 防具クラスに属しているか? switch (Part() ?? "") { case "武器": case "片手": case "両手": { iclass = u.WeaponProficiency() + " 固定 汎用"; var loopTo = GeneralLib.LLength(ref iclass); for (i = 1; i <= loopTo; i++) { if ((Class0() ?? "") == (GeneralLib.LIndex(ref iclass, i) ?? "")) { IsAvailableRet = true; break; } } break; } case "盾": case "体": case "頭": { iclass = u.ArmorProficiency() + " 固定 汎用"; var loopTo1 = GeneralLib.LLength(ref iclass); for (i = 1; i <= loopTo1; i++) { if ((Class0() ?? "") == (GeneralLib.LIndex(ref iclass, i) ?? "")) { IsAvailableRet = true; break; } } break; } default: { // その他のアイテムは常に利用可能 IsAvailableRet = true; break; } } if (!IsAvailableRet) { return(IsAvailableRet); } // 技能チェックが必要? string argfname = "必要技能"; string argfname1 = "不必要技能"; if (!IsFeatureAvailable(ref argfname) & !IsFeatureAvailable(ref argfname1)) { return(IsAvailableRet); } // 必要技能をチェック var loopTo2 = CountFeature(); for (i = 1; i <= loopTo2; i++) { object argIndex15 = i; switch (Feature(ref argIndex15) ?? "") { case "必要技能": { string localFeatureData1() { object argIndex1 = i; var ret = FeatureData(ref argIndex1); return(ret); } bool localIsNecessarySkillSatisfied() { string argnabilities = hs6a6e2af77d324e3587224eb7d4498ee9(); Pilot argp = null; var ret = u.IsNecessarySkillSatisfied(ref argnabilities, p: ref argp); return(ret); } if (!localIsNecessarySkillSatisfied()) { // アイテム自身により必要技能に指定された能力が封印されていた場合は // 必要技能を満たしていると判定させるため、チェックする必要がある。 var loopTo3 = u.CountItem(); for (j = 1; j <= loopTo3; j++) { Item localItem() { object argIndex1 = j; var ret = u.Item(ref argIndex1); return(ret); } if (ReferenceEquals(this, localItem())) { break; } } if (j > u.CountItem()) { // 既に装備しているのでなければ装備しない IsAvailableRet = false; return(IsAvailableRet); } if (u.CountPilot() > 0) { string localFeatureData() { object argIndex1 = i; var ret = FeatureData(ref argIndex1); return(ret); } string argsname = localFeatureData(); sname = u.MainPilot().SkillType(ref argsname); } else { object argIndex5 = i; sname = FeatureData(ref argIndex5); } // 必要技能が「~装備」? if (Strings.Right(sname, 2) == "装備") { if ((Strings.Left(sname, Strings.Len(sname) - 2) ?? "") == (Name ?? "") | (Strings.Left(sname, Strings.Len(sname) - 2) ?? "") == (Class0() ?? "")) { goto NextLoop; } } // 封印する能力が必要技能になっている? var loopTo4 = CountFeature(); for (j = 1; j <= loopTo4; j++) { object argIndex6 = j; switch (Feature(ref argIndex6) ?? "") { case "パイロット能力付加": case "パイロット能力強化": { break; } default: { goto NextLoop1; break; } } // 封印する能力名 object argIndex7 = j; fdata = FeatureData(ref argIndex7); if (Strings.Left(fdata, 1) == "\"") { fdata = Strings.Mid(fdata, 2, Strings.Len(fdata) - 2); } if (Strings.InStr(fdata, "=") > 0) { fdata = Strings.Left(fdata, Strings.InStr(fdata, "=") - 1); } // 必要技能と封印する能力が一致している? if ((fdata ?? "") == (sname ?? "")) { goto NextLoop; } if (u.CountPilot() > 0) { object argIndex9 = fdata; if (SRC.ALDList.IsDefined(ref argIndex9)) { object argIndex8 = fdata; { var withBlock = SRC.ALDList.Item(ref argIndex8); var loopTo5 = withBlock.Count; for (k = 1; k <= loopTo5; k++) { if ((withBlock.get_AliasType(k) ?? "") == (sname ?? "")) { goto NextLoop; } } } } else if ((u.MainPilot().SkillType(ref fdata) ?? "") == (sname ?? "")) { goto NextLoop; } } NextLoop1: ; } // 必要技能が満たされていなかった IsAvailableRet = false; return(IsAvailableRet); } break; } case "不必要技能": { string localFeatureData3() { object argIndex1 = i; var ret = FeatureData(ref argIndex1); return(ret); } string argnabilities = localFeatureData3(); Pilot argp = null; if (u.IsNecessarySkillSatisfied(ref argnabilities, p: ref argp)) { // アイテム自身により不必要技能が満たされている場合は不必要技能を // 無視させるため、チェックする必要がある。 var loopTo6 = u.CountItem(); for (j = 1; j <= loopTo6; j++) { Item localItem1() { object argIndex1 = j; var ret = u.Item(ref argIndex1); return(ret); } if (ReferenceEquals(this, localItem1())) { break; } } if (j > u.CountItem()) { // 既に装備しているのでなければ装備しない IsAvailableRet = false; return(IsAvailableRet); } if (u.CountPilot() > 0) { string localFeatureData2() { object argIndex1 = i; var ret = FeatureData(ref argIndex1); return(ret); } string argsname1 = localFeatureData2(); sname = u.MainPilot().SkillType(ref argsname1); } else { object argIndex10 = i; sname = FeatureData(ref argIndex10); } // 不必要技能が「~装備」? if (Strings.Right(sname, 2) == "装備") { if ((Strings.Left(sname, Strings.Len(sname) - 2) ?? "") == (Name ?? "") | (Strings.Left(sname, Strings.Len(sname) - 2) ?? "") == (Class0() ?? "")) { goto NextLoop; } } // 付加する能力が不必要技能になっている? var loopTo7 = CountFeature(); for (j = 1; j <= loopTo7; j++) { object argIndex11 = j; switch (Feature(ref argIndex11) ?? "") { case "パイロット能力付加": case "パイロット能力強化": { break; } default: { goto NextLoop2; break; } } // 付加する能力名 object argIndex12 = j; fdata = FeatureData(ref argIndex12); if (Strings.Left(fdata, 1) == "\"") { fdata = Strings.Mid(fdata, 2, Strings.Len(fdata) - 2); } if (Strings.InStr(fdata, "=") > 0) { fdata = Strings.Left(fdata, Strings.InStr(fdata, "=") - 1); } // 必要技能と付加する能力が一致している? if ((fdata ?? "") == (sname ?? "")) { goto NextLoop; } if (u.CountPilot() > 0) { object argIndex14 = fdata; if (SRC.ALDList.IsDefined(ref argIndex14)) { object argIndex13 = fdata; { var withBlock1 = SRC.ALDList.Item(ref argIndex13); var loopTo8 = withBlock1.Count; for (k = 1; k <= loopTo8; k++) { if ((withBlock1.get_AliasType(k) ?? "") == (sname ?? "")) { goto NextLoop; } } } } else if ((u.MainPilot().SkillType(ref fdata) ?? "") == (sname ?? "")) { goto NextLoop; } } NextLoop2: ; } // 不必要技能が満たされていた IsAvailableRet = false; return(IsAvailableRet); } break; } } NextLoop: ; } return(IsAvailableRet); }
// Copyright (C) 1997-2012 Kei Sakamoto / Inui Tetsuyuki // 本プログラムはフリーソフトであり、無保証です。 // 本プログラムはGNU General Public License(Ver.3またはそれ以降)が定める条件の下で // 再頒布または改変することができます。 // Flashファイルの再生 public static void PlayFlash(ref string fname, ref short fx, ref short fy, ref short fw, ref short fh, ref string opt) { short i; bool is_VisibleEnd; // FLASHが使用できない場合はエラー if (!GUI.IsFlashAvailable) { string argmsg = "Flashファイルの読み込み中にエラーが発生しました。" + Constants.vbCrLf + "「Macromedia Flash Player」がインストールされていません。" + Constants.vbCrLf + "次のURLから、最新版のFlash Playerをインストールしてください。" + Constants.vbCrLf + "http://www.macromedia.com/shockwave/download/download.cgi?P5_Language=Japanese&Lang=Japanese&P1_Prod_Version=ShockwaveFlash&Lang=Japanese"; GUI.ErrorMessage(ref argmsg); return; } // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Enable の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 if (!My.MyProject.Forms.frmMain.FlashObject.Enable) { string argmsg1 = "Flashファイルの読み込み中にエラーが発生しました。" + Constants.vbCrLf + "「Macromedia Flash Player」がインストールされていません。" + Constants.vbCrLf + "次のURLから、最新版のFlash Playerをインストールしてください。" + Constants.vbCrLf + "http://www.macromedia.com/shockwave/download/download.cgi?P5_Language=Japanese&Lang=Japanese&P1_Prod_Version=ShockwaveFlash&Lang=Japanese"; GUI.ErrorMessage(ref argmsg1); return; } is_VisibleEnd = false; var loopTo = GeneralLib.LLength(ref opt); for (i = 1; i <= loopTo; i++) { switch (GeneralLib.LIndex(ref opt, i) ?? "") { case "保持": { is_VisibleEnd = true; break; } } } { var withBlock = My.MyProject.Forms.frmMain.FlashObject; // 一旦非表示 // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Visible の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.Visible = false; // Flashオブジェクトの位置・サイズ設定 // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Left の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.Left = fx; // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Top の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.Top = fy; // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Width の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.Width = fw; // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Height の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.Height = fh; // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Visible の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.Visible = true; // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.ZOrder の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.ZOrder(); // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.LoadMovie の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.LoadMovie(SRC.ScenarioPath + fname); // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Playing の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 while (withBlock.Playing & !GUI.IsRButtonPressed(true)) { Application.DoEvents(); } // 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(); if (!is_VisibleEnd) { // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.ClearMovie の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.ClearMovie(); // UPGRADE_WARNING: オブジェクト frmMain.FlashObject.Visible の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。 withBlock.Visible = false; } } }
// データファイル fname からデータをロード public void Load(ref string fname) { short FileNumber; short i, ret; int line_num; var line_buf = default(string); string pilot_list; Dialog d; DialogData dd; string err_msg; string pname, msg; ; #error Cannot convert OnErrorGoToStatementSyntax - see comment for details /* Cannot convert OnErrorGoToStatementSyntax, CONVERSION ERROR: Conversion for OnErrorGoToLabelStatement not implemented, please report this issue in 'On Error GoTo ErrorHandler' at character 2594 * * * Input: * * On Error GoTo ErrorHandler * */ FileNumber = (short)FileSystem.FreeFile(); FileSystem.FileOpen(FileNumber, fname, OpenMode.Input, OpenAccess.Read); line_num = 0; while (true) { do { if (FileSystem.EOF((int)FileNumber)) { FileSystem.FileClose((int)FileNumber); return; } GeneralLib.GetLine(ref FileNumber, ref line_buf, ref line_num); }while (Strings.Len(line_buf) == 0); // UPGRADE_NOTE: オブジェクト dd をガベージ コレクトするまでこのオブジェクトを破棄することはできません。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"' をクリックしてください。 dd = null; // パイロット名一覧 if ((int)GeneralLib.LLength(ref line_buf) == 0) { ; #error Cannot convert ErrorStatementSyntax - see comment for details /* Cannot convert ErrorStatementSyntax, CONVERSION ERROR: Conversion for ErrorStatement not implemented, please report this issue in 'Error(0)' at character 3503 * * * Input: * Error(0) * */ } pilot_list = ""; var loopTo = GeneralLib.LLength(ref line_buf); for (i = (short)1; i <= loopTo; i++) { pilot_list = pilot_list + " " + GeneralLib.LIndex(ref line_buf, i); } pilot_list = Strings.Trim(pilot_list); object argIndex2 = (object)pilot_list; if (IsDefined(ref argIndex2)) { object argIndex1 = (object)pilot_list; Delete(ref argIndex1); } dd = Add(ref pilot_list); GeneralLib.GetLine(ref FileNumber, ref line_buf, ref line_num); while (Strings.Len(line_buf) > 0) { // シチューション d = dd.AddDialog(ref line_buf); while (true) { if (FileSystem.EOF((int)FileNumber)) { FileSystem.FileClose((int)FileNumber); return; } GeneralLib.GetLine(ref FileNumber, ref line_buf, ref line_num); // 話者 ret = (short)Strings.InStr(line_buf, ","); if ((int)ret == 0) { break; } pname = Strings.Left(line_buf, (int)ret - 1); // 指定した話者のデータが存在するかチェック。 // ただし合体技のパートナーは場合は他の作品のパイロットであることも // あるので話者チェックを行わない。 if (Strings.Left(pname, 1) != "@") { bool localIsDefined() { object argIndex1 = (object)pname; var ret = SRC.PDList.IsDefined(ref argIndex1); return(ret); } bool localIsDefined1() { object argIndex1 = (object)pname; var ret = SRC.NPDList.IsDefined(ref argIndex1); return(ret); } if (!localIsDefined() & !localIsDefined1() & pname != "システム") { err_msg = "パイロット「" + pname + "」が定義されていません。"; ; #error Cannot convert ErrorStatementSyntax - see comment for details /* Cannot convert ErrorStatementSyntax, CONVERSION ERROR: Conversion for ErrorStatement not implemented, please report this issue in 'Error(0)' at character 4922 * * * Input: * Error(0) * */ } } // メッセージ if (Strings.Len(line_buf) == (int)ret) { err_msg = "メッセージが定義されていません。"; ; #error Cannot convert ErrorStatementSyntax - see comment for details /* Cannot convert ErrorStatementSyntax, CONVERSION ERROR: Conversion for ErrorStatement not implemented, please report this issue in 'Error(0)' at character 5092 * * * Input: * Error(0) * */ } msg = Strings.Trim(Strings.Mid(line_buf, (int)ret + 1)); d.AddMessage(ref pname, ref msg); } } } ErrorHandler: ; if (line_num == 0) { string argmsg = fname + "が開けません。"; GUI.ErrorMessage(ref argmsg); } else { FileSystem.FileClose((int)FileNumber); if (dd is null) { string argdname = ""; GUI.DataErrorMessage(ref err_msg, ref fname, (short)line_num, ref line_buf, ref argdname); } else { GUI.DataErrorMessage(ref err_msg, ref fname, (short)line_num, ref line_buf, ref dd.Name); } } SRC.TerminateSRC(); }
// 「ジャンプ」コマンドを終了 private void FinishJumpCommand() { // MOD END MARGE int ret; GUI.LockGUI(); { var u = SelectedUnit; PrevUnitX = u.x; PrevUnitY = u.y; PrevUnitArea = u.Area; PrevUnitEN = u.EN; // ジャンプ後に着艦or合体する場合はプレイヤーに確認を取る if (!ConfirmMoveFinish(u)) { return; } // メッセージを表示 if (u.IsMessageDefined("ジャンプ(" + u.FeatureName("ジャンプ") + ")")) { GUI.OpenMessageForm(u1: null, u2: null); u.PilotMessage("ジャンプ(" + u.FeatureName("ジャンプ") + ")", msg_mode: ""); GUI.CloseMessageForm(); } else if (u.IsMessageDefined("ジャンプ")) { GUI.OpenMessageForm(u1: null, u2: null); u.PilotMessage("ジャンプ", msg_mode: ""); GUI.CloseMessageForm(); } // アニメ表示 if (u.IsAnimationDefined("ジャンプ", u.FeatureName("ジャンプ"))) { u.PlayAnimation("ジャンプ", u.FeatureName("ジャンプ")); } else if (u.IsSpecialEffectDefined("ジャンプ", u.FeatureName("ジャンプ"))) { u.SpecialEffect("ジャンプ", u.FeatureName("ジャンプ")); } else { Sound.PlayWave("Swing.wav"); } // ENを消費 if (GeneralLib.LLength(u.FeatureData("ジャンプ")) == 2) { u.EN = PrevUnitEN - Conversions.ToInteger(GeneralLib.LIndex(u.FeatureData("ジャンプ"), 2)); } // ユニットを移動 u.Move(SelectedX, SelectedY, true, false, true); GUI.RedrawScreen(); // 移動後に着艦または合体した? if (!ReferenceEquals(Map.MapDataForUnit[SelectedX, SelectedY], SelectedUnit)) { if (Map.MapDataForUnit[SelectedX, SelectedY].IsFeatureAvailable("母艦") && !u.IsFeatureAvailable("母艦") && u.CountPilot() > 0) { // 着艦メッセージ表示 if (u.IsMessageDefined("着艦(" + u.Name + ")")) { GUI.OpenMessageForm(u1: null, u2: null); u.PilotMessage("着艦(" + u.Name + ")", msg_mode: ""); GUI.CloseMessageForm(); } else if (u.IsMessageDefined("着艦")) { GUI.OpenMessageForm(u1: null, u2: null); u.PilotMessage("着艦", msg_mode: ""); GUI.CloseMessageForm(); } u.SpecialEffect("着艦", u.Name); // 収納イベント SelectedTarget = Map.MapDataForUnit[SelectedX, SelectedY]; Event.HandleEvent("収納", u.MainPilot().ID); } else { // 合体後のユニットを選択 SelectedUnit = Map.MapDataForUnit[SelectedX, SelectedY]; // 合体イベント Event.HandleEvent("合体", SelectedUnit.MainPilot().ID, SelectedUnit.Name); } // 移動後の収納・合体イベントでステージが終了することがあるので if (SRC.IsScenarioFinished) { SRC.IsScenarioFinished = false; GUI.UnlockGUI(); return; } if (SRC.IsCanceled) { SRC.IsCanceled = false; Status.ClearUnitStatus(); GUI.RedrawScreen(); CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } // 残り行動数を減少させる SelectedUnit.UseAction(); // 持続期間が「移動」のスペシャルパワー効果を削除 SelectedUnit.RemoveSpecialPowerInEffect("移動"); Status.DisplayUnitStatus(Map.MapDataForUnit[SelectedX, SelectedY]); GUI.RedrawScreen(); CommandState = "ユニット選択"; GUI.UnlockGUI(); return; } // ADD START MARGE SelectedUnitMoveCost = 100; // ADD END MARGE } CommandState = "移動後コマンド選択"; GUI.UnlockGUI(); ProceedCommand(); }
protected override int ExecInternal() { var pname = GetArgAsString(2); if (SRC.PList.IsDefined(pname)) { pname = SRC.PList.Item(pname).ID; } else if (SRC.PDList.IsDefined(pname)) { pname = SRC.PDList.Item(pname).Name; } else { throw new EventErrorException(this, "「" + pname + "」というパイロットが見つかりません"); } var sname0 = GetArgAsString(3); // エリアスが定義されている? var sarray = new List <string>(); if (SRC.ALDList.IsDefined(sname0)) { var alias = SRC.ALDList.Item(sname0); sarray = alias.Elements.Select(x => x.strAliasType).ToList(); } else { sarray.Add(sname0); } foreach (var sname in sarray) { var sname2 = ""; var vname = "Ability(" + pname + "," + sname + ")"; if (GeneralLib.LLength(Expression.GetValueAsString(vname)) >= 2) { // 必要技能用変数を削除 sname2 = GeneralLib.LIndex(Expression.GetValueAsString(vname), 2); var vname2 = "Ability(" + pname + "," + sname2 + ")"; Expression.UndefineVariable(vname2); } // レベル設定用変数を削除 Expression.UndefineVariable(vname); // 特殊能力一覧作成用変数を削除 vname = "Ability(" + pname + ")"; if (Expression.IsGlobalVariableDefined(vname)) { var buf = Expression.GetValueAsString(vname); var slist = ""; var loopTo2 = GeneralLib.LLength(buf); for (var j = 1; j <= loopTo2; j++) { if ((GeneralLib.LIndex(buf, j) ?? "") != (sname ?? "") && (GeneralLib.LIndex(buf, j) ?? "") != (sname2 ?? "")) { slist = slist + " " + GeneralLib.LIndex(buf, j); } } if (GeneralLib.LLength(slist) > 0) { slist = Strings.Trim(slist); Expression.SetVariableAsString(vname, slist); } else { Expression.UndefineVariable(vname); } } } // パイロットやユニットのステータスをアップデート if (SRC.PList.IsDefined(pname)) { { var withBlock1 = SRC.PList.Item(pname); withBlock1.Update(); if (withBlock1.Unit is object) { withBlock1.Unit.Update(); if (withBlock1.Unit.Status == "出撃") { SRC.PList.UpdateSupportMod(withBlock1.Unit); } } } } return(EventData.NextID); }
public static string LoadWepon(string data_name, IUnitDataElements ud, SrcDataReader reader, SRC SRC) { int ret; string buf; string buf2; string line_buf = reader.GetLine(); // アビリティとの区切り文字かアイテムの解説行で終了 while (Strings.Len(line_buf) > 0 && line_buf != "===" && !line_buf.StartsWith("*")) { // 武器名 ret = Strings.InStr(line_buf, ","); if (ret == 0) { throw reader.InvalidDataException(@"武器データの終りには空行を置いてください。", data_name); } string wname = Strings.Trim(Strings.Left(line_buf, ret - 1)); buf = Strings.Mid(line_buf, ret + 1); if (string.IsNullOrEmpty(wname)) { throw reader.InvalidDataException(@"武器名の設定が間違っています。", data_name); } // 武器を登録 WeaponData wd = ud.AddWeapon(wname); // 攻撃力 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "の最小射程が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (Information.IsNumeric(buf2)) { wd.Power = GeneralLib.MinLng(Conversions.ToInteger(buf2), 99999); } else if (buf == "-") { wd.Power = 0; } else { SRC.AddDataError(reader.InvalidData(@wname + "の攻撃力の設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.Power = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } // 最小射程 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "の最大射程の設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (Information.IsNumeric(buf2)) { wd.MinRange = Conversions.ToInteger(buf2); } else { SRC.AddDataError(reader.InvalidData(@wname + "の最小射程の設定が間違っています。", data_name)); wd.MinRange = 1; if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.MinRange = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } // 最大射程 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "の命中率の設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (Information.IsNumeric(buf2)) { wd.MaxRange = GeneralLib.MinLng(Conversions.ToInteger(buf2), 99); } else { SRC.AddDataError(reader.InvalidData(@wname + "の最大射程の設定が間違っています。", data_name)); wd.MaxRange = 1; if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.MaxRange = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } // 命中率 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "の弾数の設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (Information.IsNumeric(buf2)) { int n = Conversions.ToInteger(buf2); if (n > 999) { n = 999; } else if (n < -999) { n = -999; } wd.Precision = n; } else { SRC.AddDataError(reader.InvalidData(@wname + "の命中率の設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.Precision = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } // 弾数 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "の消費ENの設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (buf2 != "-") { if (Information.IsNumeric(buf2)) { wd.Bullet = GeneralLib.MinLng(Conversions.ToInteger(buf2), 99); } else { SRC.AddDataError(reader.InvalidData(@wname + "の弾数の設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.Bullet = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } } // 消費EN ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "の必要気力が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (buf2 != "-") { if (Information.IsNumeric(buf2)) { wd.ENConsumption = GeneralLib.MinLng(Conversions.ToInteger(buf2), 999); } else { SRC.AddDataError(reader.InvalidData(@wname + "の消費ENの設定が間違っています。", data_name)); { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.ENConsumption = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } } // 必要気力 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "の地形適応が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (buf2 != "-") { if (Information.IsNumeric(buf2)) { int n = Conversions.ToInteger(buf2); if (n > 1000) { n = 1000; } else if (n < 0) { n = 0; } wd.NecessaryMorale = n; } else { SRC.AddDataError(reader.InvalidData(@wname + "の必要気力の設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.NecessaryMorale = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } } // 地形適応 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "のクリティカル率が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (Strings.Len(buf2) == 4) { wd.Adaption = buf2; } else { SRC.AddDataError(reader.InvalidData(@wname + "の地形適応の設定が間違っています。", data_name)); wd.Adaption = "----"; if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.Adaption = GeneralLib.LIndex(buf2, 1); } } // クリティカル率 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@wname + "の武器属性が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (Information.IsNumeric(buf2)) { int n = Conversions.ToInteger(buf2); if (n > 999) { n = 999; } else if (n < -999) { n = -999; } wd.Critical = n; } else { SRC.AddDataError(reader.InvalidData(@wname + "のクリティカル率の設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; wd.Critical = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } // 武器属性 buf = Strings.Trim(buf); if (Strings.Len(buf) == 0) { SRC.AddDataError(reader.InvalidData(@wname + "の武器属性の設定が間違っています。", data_name)); } if (Strings.Right(buf, 1) == ")") { // 必要技能 ret = Strings.InStr(buf, "> "); if (ret > 0) { if (ret > 0) { wd.NecessarySkill = Strings.Mid(buf, ret + 2); buf = Strings.Trim(Strings.Left(buf, ret + 1)); ret = Strings.InStr(wd.NecessarySkill, "("); wd.NecessarySkill = Strings.Mid(wd.NecessarySkill, ret + 1, Strings.Len(wd.NecessarySkill) - ret - 1); } } else { ret = Strings.InStr(buf, "("); if (ret > 0) { wd.NecessarySkill = Strings.Trim(Strings.Mid(buf, ret + 1, Strings.Len(buf) - ret - 1)); buf = Strings.Trim(Strings.Left(buf, ret - 1)); } } } if (Strings.Right(buf, 1) == ">") { // 必要条件 ret = Strings.InStr(buf, "<"); if (ret > 0) { wd.NecessaryCondition = Strings.Trim(Strings.Mid(buf, ret + 1, Strings.Len(buf) - ret - 1)); buf = Strings.Trim(Strings.Left(buf, ret - 1)); } } wd.Class = buf; if (wd.Class == "-") { wd.Class = ""; } if (Strings.InStr(wd.Class, "Lv") > 0) { SRC.AddDataError(reader.InvalidData(@wname + "の属性のレベル指定が間違っています。", data_name)); } if (reader.EOT) { return(""); } line_buf = reader.GetLine(); } return(line_buf); }
public static string LoadAbility(string data_name, IUnitDataElements ud, SrcDataReader reader, SRC SRC) { int ret; string buf; string buf2; string line_buf = reader.GetLine(); // アイテムの解説行で終了 while (Strings.Len(line_buf) > 0 && !line_buf.StartsWith("*")) { // アビリティ名 ret = Strings.InStr(line_buf, ","); if (ret == 0) { throw reader.InvalidDataException(@"アビリティデータの終りに空行を置いてください。", data_name); } string sname = Strings.Trim(Strings.Left(line_buf, ret - 1)); buf = Strings.Mid(line_buf, ret + 1); if (string.IsNullOrEmpty(sname)) { throw reader.InvalidDataException(@"アビリティ名の設定が間違っています。", data_name); } // アビリティを登録 AbilityData sd = ud.AddAbility(sname); // 効果 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@sname + "の射程の設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); sd.SetEffect(buf2); // 射程 sd.MinRange = 0; ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@sname + "の回数の設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (Information.IsNumeric(buf2)) { sd.MaxRange = GeneralLib.MinLng(Conversions.ToInteger(buf2), 99); } else if (buf2 == "-") { sd.MaxRange = 0; } else { SRC.AddDataError(reader.InvalidData(@sname + "の射程の設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; sd.MaxRange = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } // 回数 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@sname + "の消費ENの設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (buf2 != "-") { if (Information.IsNumeric(buf2)) { sd.Stock = GeneralLib.MinLng(Conversions.ToInteger(buf2), 99); } else { SRC.AddDataError(reader.InvalidData(@sname + "の回数の設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; sd.Stock = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } } // 消費EN ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@sname + "の必要気力の設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (buf2 != "-") { if (Information.IsNumeric(buf2)) { sd.ENConsumption = GeneralLib.MinLng(Conversions.ToInteger(buf2), 999); } else { SRC.AddDataError(reader.InvalidData(@sname + "の消費ENの設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; sd.ENConsumption = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } } // 必要気力 ret = Strings.InStr(buf, ","); if (ret == 0) { throw reader.InvalidDataException(@sname + "のアビリティ属性の設定が抜けています。", data_name); } buf2 = Strings.Trim(Strings.Left(buf, ret - 1)); buf = Strings.Mid(buf, ret + 1); if (buf2 != "-") { if (Information.IsNumeric(buf2)) { int n = Conversions.ToInteger(buf2); if (n > 1000) { n = 1000; } else if (n < 0) { n = 0; } sd.NecessaryMorale = n; } else { SRC.AddDataError(reader.InvalidData(@sname + "の必要気力の設定が間違っています。", data_name)); if (GeneralLib.LLength(buf2) > 1) { buf = GeneralLib.LIndex(buf2, 2) + "," + buf; sd.NecessaryMorale = GeneralLib.StrToLng(GeneralLib.LIndex(buf2, 1)); } } } // アビリティ属性 buf = Strings.Trim(buf); if (Strings.Len(buf) == 0) { SRC.AddDataError(reader.InvalidData(@sname + "のアビリティ属性の設定が間違っています。", data_name)); } if (Strings.Right(buf, 1) == ")") { // 必要技能 ret = Strings.InStr(buf, "> "); if (ret > 0) { if (ret > 0) { sd.NecessarySkill = Strings.Mid(buf, ret + 2); buf = Strings.Trim(Strings.Left(buf, ret + 1)); ret = Strings.InStr(sd.NecessarySkill, "("); sd.NecessarySkill = Strings.Mid(sd.NecessarySkill, ret + 1, Strings.Len(sd.NecessarySkill) - ret - 1); } } else { ret = Strings.InStr(buf, "("); if (ret > 0) { sd.NecessarySkill = Strings.Trim(Strings.Mid(buf, ret + 1, Strings.Len(buf) - ret - 1)); buf = Strings.Trim(Strings.Left(buf, ret - 1)); } } } if (Strings.Right(buf, 1) == ">") { // 必要条件 ret = Strings.InStr(buf, "<"); if (ret > 0) { sd.NecessaryCondition = Strings.Trim(Strings.Mid(buf, ret + 1, Strings.Len(buf) - ret - 1)); buf = Strings.Trim(Strings.Left(buf, ret - 1)); } } sd.Class = buf; if (sd.Class == "-") { sd.Class = ""; } if (Strings.InStr(sd.Class, "Lv") > 0) { SRC.AddDataError(reader.InvalidData(@sname + "の属性のレベル指定が間違っています。", data_name)); } line_buf = reader.GetLine(); } return(line_buf); }
// 「発進」コマンドを開始 private void StartLaunchCommand() { // 母艦に搭載しているユニットの一覧を作成 var list = SelectedUnit.UnitOnBoards.Select(onBoardUnit => { return(new ListBoxItem { Text = GeneralLib.RightPaddedString(onBoardUnit.Nickname0, 25) + GeneralLib.RightPaddedString(onBoardUnit.MainPilot().get_Nickname(false), 17) + GeneralLib.LeftPaddedString(SrcFormatter.Format(onBoardUnit.MainPilot().Level), 2) + GeneralLib.RightPaddedString(SrcFormatter.Format(onBoardUnit.HP) + "/" + SrcFormatter.Format(onBoardUnit.MaxHP), 12) + " " + GeneralLib.RightPaddedString(SrcFormatter.Format(onBoardUnit.EN) + "/" + SrcFormatter.Format(onBoardUnit.MaxEN), 8), ListItemID = onBoardUnit.ID, ListItemFlag = onBoardUnit.Action <= 0, }); }).ToList(); // どのユニットを発進させるか選択 GUI.TopItem = 1; var ret = GUI.ListBox(new ListBoxArgs { HasFlag = true, Items = list, lb_caption = "ユニット選択", lb_info = "ユニット名 パイロット Lv " + Expression.Term("HP", null, 8) + Expression.Term("EN", null), lb_mode = "カーソル移動", }); // キャンセルされた? if (ret == 0) { CancelCommand(); return; } SelectedCommand = "発進"; // ユニットの発進処理 // XXX 発進後の合体がなんか変だった(バウ(MA)) SelectedTarget = SRC.UList.Item(list[ret - 1].ListItemID); { var launchUnit = SelectedTarget; launchUnit.x = SelectedUnit.x; launchUnit.y = SelectedUnit.y; if (launchUnit.IsFeatureAvailable("テレポート") && (launchUnit.Data.Speed == 0 || GeneralLib.LIndex(launchUnit.FeatureData("テレポート"), 2) == "0")) { // テレポートによる発進 Map.AreaInTeleport(SelectedTarget); } else if (launchUnit.IsFeatureAvailable("ジャンプ") && (launchUnit.Data.Speed == 0 || GeneralLib.LLength(launchUnit.FeatureData("ジャンプ")) < 2 || GeneralLib.LIndex(launchUnit.FeatureData("ジャンプ"), 2) == "0")) { // ジャンプによる発進 Map.AreaInSpeed(SelectedTarget, true); } else { // 通常移動による発進 Map.AreaInSpeed(SelectedTarget); } // 母艦を中央表示 GUI.Center(launchUnit.x, launchUnit.y); // TODO 発進させるユニットを母艦の代わりに表示 //// 発進させるユニットを母艦の代わりに表示 //if (launchUnit.BitmapID == 0) //{ // var withBlock3 = SRC.UList.Item(launchUnit.Name); // if ((SelectedTarget.Party0 ?? "") == (withBlock3.Party0 ?? "") && withBlock3.BitmapID != 0 && (SelectedTarget.get_Bitmap(false) ?? "") == (withBlock3.get_Bitmap(false) ?? "")) // { // SelectedTarget.BitmapID = withBlock3.BitmapID; // } // else // { // SelectedTarget.BitmapID = GUI.MakeUnitBitmap(SelectedTarget); // } //} GUI.MaskScreen(); } if (CommandState == "コマンド選択") { CommandState = "ターゲット選択"; } }