復活の呪文 - SavedataEncoder.js
シェア用テキスト:
▼復活の呪文(フェルミウム湾様作) - SavedataEncoder.js
https://plugin.fungamemake.com/archives/23524
ドラクエの「ふっかつのじゅもん」を作ります。
ふりがな:ふっかつのじゅもん
機能概要: ドラクエの「ふっかつのじゅもん」を作ります。
利用規約(ライセンス):
パブリックドメイン
・著作権:放棄
作者:フェルミウム湾
作者サイト:https://fermiumbay13.hatenablog.com/
直接ダウンロード:Zipファイルダウンロードページ:https://fermiumbay13.hatenablog.com/entry/2017/12/03/11…
ファイル名:SavedataEncoder.js
プラグインのヘルプ:
/*: * @plugindesc 復活の呪文プラグイン * ドラクエの「ふっかつのじゅもん」を作ります。 * @author フェルミウム湾 * * @help ドラクエの「ふっかつのじゅもん」を作ります。 * 複数のデータをもとに文字列を生成し、その文字列を用いて * データを復元出来るようにすることが出来ます。 * 詳細は以下のプラグインコマンド「エンコード」「デコード」の * 説明を参照ください。 * ランダムな文字列でデータを復元出来ないように * 「ハッシュ設定」をすることも可能です。 * 復活の呪文の入力には「暗号入力」画面を利用すると便利です。 * * 本プラグインでは巨大数(任意精度整数)の四則演算を行う * BigNumberオブジェクトを定義しております。 * ぜひ何か別のことにも利用してください。 * * 呪文に使用する文字を変更する場合は、プラグインを直接開いて * SavedataEncoderのコンストラクタ内のcharsを変更してください。 * * ====================================================================== * コマンド『暗号入力』 * コマンド『CodeInput』 * -------------------------------------------------------- * 暗号入力画面を開きます。名前の入力画面の改変です。 * -------------------------------------------------------- * 引数1)文字列を格納するアクターID * 引数2)最大文字数 * 引数3)一行に表示する文字数(省略すると10) * 引数4)一行につき挿入する半角スペースの個数(省略すると0) * ====================================================================== * コマンド『エンコード』 * コマンド『Encode』 * -------------------------------------------------------- * データをエンコードして、復活の呪文として出力します。 * -------------------------------------------------------- * 引数1)データの変数番号初め * 引数2)データの変数番号終わり * 引数3)最大データ値の変数番号初め * 引数4)最大データ値の変数番号終わり * 引数5)出力を名前に設定するアクター番号 * -------------------------------------------------------- * 例) * 変数1, 2, 3番がそれぞれ12345, 6789, 555であり、これを暗号化したいとします。 * 暗号化する各値は0以上の整数であり、さらに各値の上限値が必要になります。 * すなわち、データの値の範囲は次のようになります。 * 0 ≦ (データの値) ≦ (最大データ値) * ここではそれぞれ15000, 10000, 777とし、これらを変数4, 5, 6番に入れます。 * すなわち例えばデータ1番はいま12345ですが、 * この部分には0~15000の好きな値を選択出来るということです。 * 結果をアクター1番の名前に出力する場合は、 * 次のようなプラグインコマンドを入力します。 * プラグインコマンド「エンコード 1 3 4 6 1」 * 結果として、アクター1番の名前が「ぶけかわそが」となります。 * ハッシュ値として「12345, 7777」を選択していた場合は * 「つおべぱはぽろんあ」となります。 * 生成される呪文の文字数は、最大データ値とハッシュ設定によってのみ決まります。 * ====================================================================== * コマンド『デコード』 * コマンド『Decode』 * -------------------------------------------------------- * 復活の呪文をデコードして、データを取り出します。 * -------------------------------------------------------- * 引数1)出力先のデータの変数番号初め * 引数2)出力先のデータの変数番号終わり * 引数3)最大データ値の変数番号初め * 引数4)最大データ値の変数番号終わり * 引数5)復活の呪文として入力する名前のアクター番号 * 引数6)成功フラグ(成功:1 失敗:0) * -------------------------------------------------------- * 例) * データの上限値がそれぞれ15000, 10000, 777であるとき * これらを変数4, 5, 6番に入れ、アクター1番の名前に * 呪文「ぶけかわそが」を入れてデコードするものとします。 * 結果を変数1, 2, 3番に入れ、成功フラグを変数7番に入れるとき、 * 次のようなプラグインコマンドを入力します。 * プラグインコマンド「デコード 1 3 4 6 1 7」 * この呪文は正しいので変数7番には成功を意味する1が入り、 * 変数1, 2, 3番にそれぞれ12345, 6789, 555が入ります。 * ハッシュ値として「12345, 7777」を選択していた場合は * 「つおべぱはぽろんあ」を入力すれば上記の値が返ります。 * 誤った呪文を入力すると、成功フラグが0になります。 * ====================================================================== * コマンド『ハッシュ設定』 * コマンド『HashSetting』 * -------------------------------------------------------- * エンコード・デコードにハッシュ値を設定し、呪文を複雑にします。 * -------------------------------------------------------- * 引数1)ハッシュ上限値(0でハッシュ設定解除) * 引数2)ハッシュ計算時の乗算もと * -------------------------------------------------------- * 例) * ハッシュ値を設定しないと、てきとうな呪文を入力しても * 適当なデータとしてデコード出来てしまいます。 * これを防ぐため、エンコードするデータから決まる新しい値「ハッシュ」を * データに追加してエンコードすることが出来ます。 * ハッシュ値は次の計算式で決まります。 * * (ハッシュ値) = * {(データ1) * (引数2) * + (データ2) * (引数2) * 2 * + (データ3) * (引数2) * 3 * + …… * + (最後のデータ) * (引数2) * (データ数) * + (引数2)} mod (引数1) * * 例えばデータが12345, 6789, 555のときに * プラグインコマンド「ハッシュ設定 12345 7777」 * を入力してからエンコードすると、 * (12345×7777+6789×7777×2+555×7777×3+7777) mod 12345=3553 * が新しくデータとして追加された状態でエンコードされます。 * データ数が増えるので呪文も若干長くなります。 * * デコード時に同様のハッシュ設定をしてからデコードすると、 * 入力された呪文から得られるハッシュが正しく計算して得られるものか * チェックされ、正しければ成功フラグが立つようになります。 * ハッシュ設定をしていたからといって、デコードで返るデータ数が * 増えるということはありません。 * * この設定により、てきとうな文字列を入力してデコードした際に * 偶然デコードに成功してしまう確率が1/(引数1)になります。 * 引数1を大きな数にすれば確率が小さくなる反面、呪文が長くなります。 * 引数2はなんでもいいですが、引数1と同じぐらい大きな数にし、 * 引数1とは互いに素になるようにすると良いと思います。 * * ハッシュ設定を解除するには、 * プラグインコマンド「ハッシュ設定 0」 * と入力してください。 * ====================================================================== * * 【利用規約】 * どうでもいいです。著作権を放棄するので勝手にぐちゃぐちゃにしてください。 * 改変も再配布も、アダルト利用も構いません。連絡も不要です。 * */