mod

Last-modified: 2025-04-12 (土) 14:43:07

modについてのページです
原作にはない機能をもたせるものであることに注意してください


souko

ダンテのそうこ内のアイテムを拡張ストレージと入れ替えるmodです

  • このmodは100個の倉庫を切り替えることで合計で10000個のアイテムを収納できます。(maxslotを変更することで上限を変更可能)
  • セーブデータは100KB以上になるとローカルストレージの拡張の許可を求められる可能性があります
  • 一通りテストは行いましたが念のためセーブデータをバックアップしてください
  • soukoでそうこに入っているすべてのアイテムをそうこスロットと入れ替える
    • コードにsoukoの後に0から99までの数字を入れる(例:souko0)
  • soukoresetでそうこスロットをリセットする(空になる)
    • コードにsoukoresetの後に0から99までの数字を入れる(例:soukoreset0)
  • soukoslotで全てのそうこスロットに入っているアイテムの数を確認する
  • soukodeleteでセーブデータからsoukoitemストレージを撤去する
    • そうこスロットの全てを削除するので注意してください

導入方法
1. AccessClassのsetCode関数の中に↓を追加

開く
        if(code.substr(0,5) == "souko")
        {
           var maxslot:int = 100;
           if(code == "soukodelete")
           {
              delete this.Main.mso.data.soukoitem;
              return [[],"soukoitemストレージをさくじょしました"];
           }
           var soukoList:* = this.Main.mso.data.soukoitem == undefined || this.Main.mso.data.soukoitem == "" ? [] : this.Main.mso.data.soukoitem.split("<>");
           if(code.substr(0,9) == "soukoslot")
           {
              var text:* = "";
              var i:int = 0;
              while(i < maxslot)
              {
                 text += (soukoList[i] == undefined || soukoList[i] == "" ? "0" : soukoList[i].split("/").length) + (i % 15 == 14 ? "\r" : ",");
                 i++;
              }
              return [[],text];
           }
           var codeData:* = code.match(/[souko|soukoreset](\d+)/);
           if(codeData == null || codeData.length < 2)
           {
              return [[],"コードのうしろにすうじがひつよう"];
           }
           var slot:int = int(codeData[1] | 0);
           if(slot < 0 || slot >= maxslot)
           {
              return [[],"スロットは 0 から " + (maxslot - 1) + " のあいだだけです"];
           }
           if(soukoList[slot] == undefined)
           {
              soukoList[slot] = "";
           }
           if(code.substr(0,10) == "soukoreset")
           {
              soukoList[slot] = "";
              this.Main.mso.data.soukoitem = soukoList.join("<>");
              return [[],"そうこスロット " + slot + " をリセットしました"];
           }
           var items:* = this.Main.mso.data.item.split("/");
           var souko:* = soukoList[slot].split("/");
           var charaItems:* = [];
           var soukoItems:* = [];
           var i:int = 0;
           while(i < items.length)
           {
              var item:* = items[i].split(",");
              if(item.length >= 6)
              {
                 (item[4] == 2 ? soukoItems : charaItems).push(items[i]);
              }
              i++;
           }
           text = "そうこのいれかえはせいこう\rそうこに " + (soukoList[slot].length == 0 ? 0 : souko.length) + "こ のアイテムがあり、\rスロット " + slot + " に " + soukoItems.length + "こ のアイテムがある";
           this.Main.mso.data.item = charaItems.concat(souko).join("/");
           soukoList[slot] = soukoItems.join("/");
           this.Main.mso.data.soukoitem = soukoList.join("<>");
           return [[],text];
        }

chara

プレイヤーキャラを拡張ストレージと入れ替えるmodです

  • このmodは最大で1000体のプレイヤーキャラを収納できます。(maxslotを変更することで上限を変更可能)
  • プレイヤーキャラの位置を変えることが可能
  • セーブデータは100KB以上になるとローカルストレージの拡張の許可を求められる可能性があります
  • 一通りテストは行いましたが念のためセーブデータをバックアップしてください
  • chara[slot1]a[slot2]でslot1のプレイヤーキャラをslot2の拡張ストレージと入れ替える
    • コードにcharaの後にアルファベットで区切られた二つの数字を入れる(例:chara0a0)
    • 数字の間にあるaの代わりに[a-z|A-Z]+の条件でマッチすれば何ても構わない
  • charaslotで"キャラそうこのいちらん"が書かれたギフトが送信されます
    • ギフトのログは文字列の制限はほぼありませんが、表示上の問題が起きるかもしれません
  • charadeleteでセーブデータからsoukocharaストレージを撤去する

導入方法
1. AccessClassのsetCode関数の中に↓を追加

開く
        if(code.substr(0,5) == "chara")
        {
           var maxslot:int = 1000;
           if(code == "charadelete")
           {
              delete this.Main.mso.data.soukochara;
              return [[],"soukocharaストレージをさくじょしました"];
           }
           var soukochara:* = this.Main.mso.data.soukochara == undefined || this.Main.mso.data.soukochara == "" ? [] : this.Main.mso.data.soukochara.split("[]");
           if(code.substr(0,9) == "charaslot" && this.Main.myTitleScreen != null)
           {
              var text2:* = new Vector.<String>();
              text2.push("キャラそうこのいちらん");
              var i:int = 0;
              while(i < soukochara.length && i < maxslot)
              {
                 if(soukochara[i] != undefined && soukochara[i] != "")
                 {
                    var chara3:* = soukochara[i].split(",");
                    text2.push(i + ": Lv" + chara3[5] + " " + this.Main.myTitleScreen.JOBnames[chara3[3]] + " " + chara3[2]);
                 }
                 i++;
              }
              return [["1///" + text2.join(" ")],"ギフトにキャラそうこの\rいちらんがかいてあります"];
           }
           var codeData:* = code.match(/chara(\d+)[a-z|A-Z]+(\d+)/);
           if(codeData == null || codeData.length < 3)
           {
              return [[],"charaのうしろにすうじがひつよう"];
           }
           var slot1:int = int(codeData[1] | 0);
           if(slot1 < 0 || slot1 >= 11)
           {
              return [[],"キャラスロットは 0 から 11 のあいだだけです"];
           }
           var slot2:int = int(codeData[2] | 0);
           if(slot2 < 0 || slot2 >= maxslot)
           {
              return [[],"キャラそうこスロットは 0 から " + (maxslot - 1) + " のあいだだけです"];
           }
           var charas:* = this.Main.mso.data.chara.split("/");
           if(charas[slot1] == undefined)
           {
              charas[slot1] = "";
           }
           if(soukochara[slot2] == undefined)
           {
              soukochara[slot2] = "<>";
           }
           var items:* = this.Main.mso.data.item.split("/");
           var chara1:* = charas[slot1].split(",");
           var charaitem1:* = [];
           var chara2:* = soukochara[slot2].split("<>")[0].split(",");
           var charaitem2:* = soukochara[slot2].split("<>")[1].split("/");
           if(chara1.length >= 15)
           {
              chara1[0] = "cID" + slot2;
              chara1[1] = slot2;
           }
           var i:int = 0;
           while(i < items.length)
           {
              var item:* = items[i].split(",");
              if(item.length >= 6 && item[3] == "cID" + slot1)
              {
                 item[3] = "cID" + slot2;
                 charaitem1.push(item.join(","));
                 items.splice(i,1);
                 i--;
              }
              i++;
           }
           if(chara2.length >= 15)
           {
              chara2[0] = "cID" + slot1;
              chara2[1] = slot1;
           }
           i = 0;
           while(i < charaitem2.length)
           {
              var item:* = charaitem2[i].split(",");
              if(item.length >= 6)
              {
                 item[3] = "cID" + slot1;
              }
              charaitem2[i] = item.join(",");
              i++;
           }
           var text:* = "いれかえにせいこうしました\rがめんはこうしんされません\rセーブがこわれるおそれがあるため\rそうさはSTARTのみにしてください!";
           soukochara[slot2] = [chara1.join(","),charaitem1.join("/")].join("<>");
           charas[slot1] = chara2.join(",");
           this.Main.mso.data.item = items.concat(charaitem2).join("/");
           this.Main.mso.data.chara = charas.join("/");
           this.Main.mso.data.soukochara = soukochara.join("[]");
           this.Main.mso.flush();
           return [[],text];
        }

questreset

クエスト状況をリセットするmodです

  • クエストのフラグを部分的にリセットするため、何かが進行不能になったり、
  • 予期しない不具合が発生する可能性が高いです。注意してください!
  • 5つのリセットモードがあり、何をリセットしたいか段階別で選択できます
  • 0:リセットしない(パーティーはまちへ移動する)
  • 1:攻略したフロアの最大深度とフロアボスを除く(一部例外あり)
  • 2:ストーリークエストを除く(一部例外あり)
  • 3:実績に関わるカウンターを除く
  • 4:実績を除く
  • 5:アップグレードを除く
  • 6:全てをリセット

導入方法
1. AccessClassのsetCode関数の中に↓を追加

開く
        if(code.substr(0,10) == "questreset")
        {
           var codeData:* = code.match(/[questreset](\d+)/);
           if(codeData == null || codeData.length < 2)
           {
              return [[],"コードのうしろにすうじがひつよう"];
           }
           var mode:int = int(codeData[1] | 0);
           var qreset:* = [[4,1],[4,3],[5,0],[5,0],[5,0],[5,0],[5,0],[4,3],[2,2],[5,0],[5,0],[5,0],[4,3],[5,0],[5,5],[5,5],[2,2],[2,2],[2,2],[2,2],[2,2],[5,0],[5,0],[3,2],[0,1],[0,2],[5,5],[0,5],[0,3],[0,0],[5,0],[0,5],[4,3],[4,3],[0,0],[2,2],[0,0],[5,0],[5,0],[0,0]];
           if(mode < 0 || mode > 6)
           {
              return [[],"モードは 0 から 6 のあいだだけです"];
           }
           var questData:* = this.Main.mso.data.quest.split("/");
           var i:int = 0;
           while(i < questData.length && i < qreset.length)
           {
              var quest:* = questData[i].split(",");
              quest[0] = mode > qreset[i][0] ? 0 : quest[0];
              quest[1] = mode > qreset[i][0] ? 0 : quest[1];
              questData[i] = quest.join(",");
              i++;
           }
           this.Main.mso.data.quest = questData.join("/");
           this.Main.mso.data.party = "0,0,29,51," + Math.floor(Math.random() * 2147483647) + ",0000000000<>" + this.Main.mso.data.party.split("<>")[1];
           return [[],"せいこうしました!"];
        }


namechange

キャラの名前を変更するmodです

導入方法
1. AccessClassのsetCode関数の中に↓を追加

        if(code == "namechange")
        {
           var charaList:* = this.Main.mso.data.chara.split("/");
           var chara:* = charaList[xml.mods.namechange.charaslot];
           if(0 <= xml.mods.namechange.charaslot && xml.mods.namechange.charaslot <= 11 && charaList[xml.mods.namechange.charaslot] != "")
           {
              var charas:* = chara.split(",");
              charas[2] = xml.mods.namechange.charaname;
              charaList[xml.mods.namechange.charaslot] = charas.join(",");
              this.Main.mso.data.chara = charaList.join("/");
              return [[],"name change comp"];
           }
           return [[],"name change error"];
        }

2. inishieXML.xmlの中のdata要素の中にmods要素↓を追加(既にmods要素がある場合は中のnamechange要素だけ追加)

   <mods>
       <namechange>
           <charaslot>0</charaslot>
           <charaname>なまえ</charaname>
       </namechange>
   </mods>

使い方
1. 名前を変えたいキャラのスロット位置(0始まり)を<charaslot>に、名前を<charaname>に入れる
2. ひみつのコードで namechange と入れる

slotchange

キャラのスロット位置を変更するmodです

導入方法
1. AccessClassのsetCode関数の中に↓を追加

        if(code == "slotchange")
        {
           charaList = this.Main.mso.data.chara.split("/");
           if(0 <= xml.mods.slotchange.slot1 && xml.mods.slotchange.slot1 <= 11 && 0 <= xml.mods.slotchange.slot2 && xml.mods.slotchange.slot2 <= 11 && charaList[xml.mods.slotchange.slot1] != "" && charaList[xml.mods.slotchange.slot2] != "")
           {
              var chara1:* = charaList[xml.mods.slotchange.slot1].split(",");
              var chara2:* = charaList[xml.mods.slotchange.slot2].split(",");
              chara1[0] = "cID" + xml.mods.slotchange.slot2;
              chara1[1] = xml.mods.slotchange.slot2;
              chara2[0] = "cID" + xml.mods.slotchange.slot1;
              chara2[1] = xml.mods.slotchange.slot1;
              charaList[xml.mods.slotchange.slot2] = chara1.join(",");
              charaList[xml.mods.slotchange.slot1] = chara2.join(",");
              this.Main.mso.data.chara = charaList.join("/");
              return [[],"slot change comp"];
           }
           return [[],"slot change error"];
        }

2. inishieXML.xmlの中のdata要素の中にmods要素↓を追加(既にmods要素がある場合は中のslotchange要素だけ追加)

   <mods>
       <slotchange>
           <slot1>0</slot1>
           <slot2>1</slot2>
       </slotchange>
   </mods>

使い方
1. スロット位置を入れ替えたいキャラのスロット位置を<slot1>と<slot2>に入れる
2. ひみつのコードで slotchange と入れる

checkcount

キャラのプレイ回数を確認するmodです

導入方法
AccessClassのsetCode関数の中に↓を追加

        if(code == "checkcount")
        {
           charaList = this.Main.mso.data.chara.split("/");
           var count:* = [];
           int;
           j = 0;
           i = 0;
           while(i < charaList.length)
           {
              if(charaList[i] != "")
              {
                 if(j % 3 == 0)
                 {
                    count.push("\r");
                 }
                 else
                 {
                    count.push(",");
                 }
                 chara = charaList[i].split(",");
                 count.push(chara[2] + "(" + chara[1] + "):" + chara[14]);
                 j++;
              }
              i++;
           }
           return [[],count.join("")];
        }

使い方
ひみつのコードで checkcount と入れる

コメント

  • これってすごく面白いと思いますし、スクリプトなんて分からない人間にはとてもすごいと思いますし、ゲーム内で完結させられる仕様を追加するという部分には、クローンとしてとても夢があると思うんですけど、現状どうしても直接セーブデータを書き換えたくない人向けの3段階右折くらいする方法みたいなものですよね。 -- 2025-04-12 (土) 14:43:07