// 特殊能力を追加 public void AddSkill(string sname, double slevel, string sdata, int lv) { // データ定義が省略されている場合は前回と同じ物を使う if ((last_sname ?? "") == (sname ?? "") && Strings.Len(sdata) == 0) { sdata = last_sdata; } last_sname = sname; last_sdata = sdata; // エリアスが定義されている? if (SRC.ALDList.IsDefined(sname)) { if (GeneralLib.LIndex(sdata, 1) != "解説") { RegisterAlias(sname, slevel, sdata, lv); return; } } // 特殊能力を登録 { var sd = new SkillData(); sd.Name = sname; sd.Level = slevel; sd.StrData = sdata; sd.NecessaryLevel = lv; colSkill.Add(sd, sname + SrcFormatter.Format(colSkill.Count)); } }
// 地形効果を追加 public void AddFeature(string fdef) { FeatureData fd; string ftype, fdata = default; double flevel; int i, j; string buf; buf = fdef; // 地形効果の種類、レベル、データを切り出し flevel = Constants.DEFAULT_LEVEL; i = Strings.InStr(buf, "Lv"); j = Strings.InStr(buf, "="); if (i > 0 && j > 0 && i > j) { i = 0; } if (i > 0) { ftype = Strings.Left(buf, i - 1); if (j > 0) { flevel = Conversions.ToDouble(Strings.Mid(buf, i + 2, j - (i + 2))); fdata = Strings.Mid(buf, j + 1); } else { flevel = Conversions.ToDouble(Strings.Mid(buf, i + 2)); } } else if (j > 0) { ftype = Strings.Left(buf, j - 1); fdata = Strings.Mid(buf, j + 1); } else { ftype = buf; } // 地形効果を登録 fd = new FeatureData(); fd.Name = ftype; fd.Level = flevel; fd.StrData = fdata; if (IsFeatureAvailable(ftype)) { colFeature.Add(fd, ftype + SrcFormatter.Format(CountFeature())); } else { colFeature.Add(fd, ftype); } }
private void AddDummyData() { var pd = new PilotData(SRC); // ユニットステータスコマンドの無人ユニット用 pd.Name = "ステータス表示用ダミーパイロット(ザコ)"; pd.Nickname = "パイロット不在"; pd.Adaption = "AAAA"; pd.Bitmap = ".bmp"; colPilotDataList.Add(pd, pd.Name); }
public NonPilotDataList(SRC src) { SRC = src; // Talkコマンド用 var npd = new NonPilotData(); npd.Name = "ナレーター"; npd.Nickname = "ナレーター"; npd.Bitmap = ".bmp"; colNonPilotDataList.Add(npd, npd.Name); }
private void AddDummyData() { var ud = new UnitData(); ud.Name = "ステータス表示用ダミーユニット"; ud.Nickname = "ユニット無し"; ud.PilotNum = 1; ud.Transportation = "陸"; ud.Adaption = "AAAA"; ud.Bitmap = ".bmp"; ud.AddFeature("ダミーユニット=システム用非表示能力"); colUnitDataList.Add(ud, ud.Name); }
// バトルコンフィグデータリストにデータを追加 public BattleConfigData Add(string cname) { var cd = new BattleConfigData(SRC); cd.Name = cname; colBattleConfigData.Add(cd, cname); return(cd); }
// エリアスデータリストにデータを追加 public AliasDataType Add(string aname) { var ad = new AliasDataType(); ad.Name = aname; colAliasDataList.Add(ad, aname); return(ad); }
// メッセージデータの追加 public MessageData Add(string mname) { var new_md = new MessageData(SRC); new_md.Name = mname; colMessageDataList.Add(new_md, mname); return(new_md); }
// スペシャルパワーデータリストにデータを追加 public SpecialPowerData Add(string sname) { var new_data = new SpecialPowerData(SRC); new_data.Name = sname; colSpecialPowerDataList.Add(new_data, sname); return(new_data); }
// アイテムデータリストにデータを追加 public ItemData Add(string new_name) { var new_Item_data = new ItemData(); new_Item_data.Name = new_name; colItemDataList.Add(new_Item_data, new_name); return(new_Item_data); }
// ダイアログデータを追加 public DialogData Add(string dname) { var new_dd = new DialogData(SRC); new_dd.Name = dname; colDialogDataList.Add(new_dd, dname); return(new_dd); }
// リストにアイテムを追加 public Item Add(string Name) { if (!SRC.IDList.IsDefined(Name)) { return(null); } var new_item = new Item(SRC); new_item.Name = Name; new_item.ID = CreateID(Name); colItems.Add(new_item, new_item.ID); return(new_item); }
// アビリティに効果を追加 public void SetEffect(string elist) { elist = (elist ?? "").Trim(); foreach (var eelm in GeneralLib.ToList(elist)) { var dat = new AbilityEffect(); var buf = eelm; var j = Strings.InStr(buf, "Lv"); var k = Strings.InStr(buf, "="); string etype; string elevel; string edata; 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 = Strings.InStr(buf, "Lv"); k = 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 = SrcFormatter.Format(Constants.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 = Strings.InStr(buf, "Lv"); k = 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 = SrcFormatter.Format(Constants.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 = (j + 1); } } if (j == 1) { colEffects.Add(dat, dat.Name); } else { colEffects.Add(dat, dat.Name + SrcFormatter.Format(j)); } } }
// パイロットを追加 public Pilot Add(string pname, int plevel, string pparty, string gid = null) { Pilot AddRet = default; string key; int i; var new_pilot = new Pilot(SRC, SRC.PDList.Item(pname)); new_pilot.Level = plevel; new_pilot.Party = pparty; new_pilot.FullRecover(); new_pilot.Alive = true; new_pilot.Unit = null; if (string.IsNullOrEmpty(gid)) { // グループIDが指定されていない場合 if (Strings.InStr(new_pilot.Name, "(ザコ)") == 0 && Strings.InStr(new_pilot.Name, "(汎用)") == 0) { key = new_pilot.Name; if (SRC.PList.IsDefined2(key)) { var p = SRC.PList.Item2(key); if ((p.ID ?? "") == (key ?? "")) { // 一度作成されたパイロットを復活させる場合 if (!p.Alive) { p.Level = plevel; p.Party = pparty; p.FullRecover(); p.Alive = true; return(p); } GUI.ErrorMessage(key + "というパイロットは既に登録されています"); return(null); } } } else { i = colPilots.Count; do { i = (i + 1); key = new_pilot.Name + "_" + SrcFormatter.Format(i); }while (SRC.PList.IsDefined2(key)); } } else { // グループIDが指定されている場合 key = gid; i = 1; while (SRC.PList.IsDefined2(key)) { i = (i + 1); key = gid + ":" + SrcFormatter.Format(i); } } new_pilot.ID = key; colPilots.Add(new_pilot, key); return(new_pilot); }
// ユニットリストに新しいユニットを追加 public Unit Add(string uname, int urank, string uparty) { // ユニットデータが定義されている? if (!SRC.UDList.IsDefined(uname)) { return(null); } var ud = SRC.UDList.Item(uname); var new_unit = new Unit(SRC) { Name = ud.Name, Rank = urank, Party = uparty, ID = CreateID(ud.Name), }; new_unit.FullRecover(); colUnits.Add(new_unit, new_unit.ID); // これ以降は本体以外の形態の追加 var other_forms = new List <string>(); // 変形先の形態 { var fd = ud.Feature("変形"); if (fd != null) { foreach (var uname2 in fd.DataL.Skip(1)) { if (!SRC.UDList.IsDefined(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」の変形先形態「" + uname2 + "」が見つかりません"); return(null); } other_forms.Add(uname2); } } } // ハイパーモード先の形態 if (ud.IsFeatureAvailable("ハイパーモード")) { var fd = ud.Feature("ハイパーモード"); var uname2 = fd.DataL.Skip(1).FirstOrDefault(); if (string.IsNullOrEmpty(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」のハイパーモード先形態が指定されていません"); return(null); } else if (!SRC.UDList.IsDefined(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」のハイパーモード先形態「" + uname2 + "」が見つかりません"); return(null); } other_forms.Add(uname2); } // ノーマルモード先の形態 if (ud.IsFeatureAvailable("ノーマルモード")) { var fd = ud.Feature("ノーマルモード"); var uname2 = fd.DataL.FirstOrDefault(); if (string.IsNullOrEmpty(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」のノーマルモード先形態が指定されていません"); return(null); } else if (!SRC.UDList.IsDefined(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」のノーマルモード先形態「" + uname2 + "」が見つかりません"); return(null); } other_forms.Add(uname2); } // パーツ分離先の形態 if (ud.IsFeatureAvailable("パーツ分離")) { var fd = ud.Feature("パーツ分離"); var uname2 = fd.DataL.Skip(1).FirstOrDefault(); if (string.IsNullOrEmpty(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」のパーツ分離先形態が指定されていません"); return(null); } else if (!SRC.UDList.IsDefined(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」のパーツ分離先形態「" + uname2 + "」が見つかりません"); return(null); } other_forms.Add(uname2); } // パーツ合体先の形態 if (ud.IsFeatureAvailable("パーツ合体")) { var fd = ud.Feature("パーツ合体"); var uname2 = fd.DataL.FirstOrDefault(); if (string.IsNullOrEmpty(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」のパーツ合体先形態が指定されていません"); return(null); } else if (!SRC.UDList.IsDefined(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」のパーツ合体先形態「" + uname2 + "」が見つかりません"); return(null); } other_forms.Add(uname2); } // 変形技の変形先の形態 foreach (var fd in ud.Features.Where(x => x.Name == "変形技")) { var uname2 = fd.DataL.Skip(1).FirstOrDefault(); if (string.IsNullOrEmpty(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」の変形技使用後形態が指定されていません"); return(null); } else if (!SRC.UDList.IsDefined(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」の変形技使用後形態「" + uname2 + "」が見つかりません"); return(null); } other_forms.Add(uname2); } // 換装先の形態 { var fd = ud.Feature("換装"); if (fd != null) { foreach (var uname2 in fd.DataL.Skip(1)) { if (!SRC.UDList.IsDefined(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」の換装先形態「" + uname2 + "」が見つかりません"); return(null); } other_forms.Add(uname2); } } } // 他形態で指定された形態 { var fd = ud.Feature("他形態"); if (fd != null) { foreach (var uname2 in fd.DataL.Skip(1)) { if (!SRC.UDList.IsDefined(uname2)) { GUI.ErrorMessage("ユニットデータ「" + uname + "」の他形態「" + uname2 + "」が見つかりません"); return(null); } other_forms.Add(uname2); } } } // 形態を追加 foreach (var other_form in other_forms) { if (!new_unit.IsOtherFormDefined(other_form)) { var new_form = new Unit(SRC); new_form.Name = other_form; new_form.Rank = urank; new_form.Party = uparty; new_form.ID = CreateID(ud.Name); new_form.FullRecover(); new_form.Status = "他形態"; colUnits.Add(new_form, new_form.ID); new_unit.AddOtherForm(new_form); } } // 追加した形態に対して自分自身を追加しておく foreach (var of1 in new_unit.OtherForms) { of1.AddOtherForm(new_unit); foreach (var of2 in new_unit.OtherForms.Where(x => x != of1)) { of1.AddOtherForm(of2); } } // 既に合体先 or 分離先のユニットが作成されていれば自分は他形態 foreach (var fd in ud.Features) { if (fd.Name == "合体") { if (SRC.UList.IsDefined(fd.DataL.Skip(1).FirstOrDefault() ?? "")) { new_unit.Status = "他形態"; break; } } if (fd.Name == "分離") { foreach (var ofname in fd.DataL.Skip(1)) { if (SRC.UList.IsDefined(ofname)) { new_unit.Status = "他形態"; break; } } } } return(new_unit); }