-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathMano_SaveLoadMessage.js
More file actions
269 lines (257 loc) · 8.52 KB
/
Mano_SaveLoadMessage.js
File metadata and controls
269 lines (257 loc) · 8.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
//=============================================================================
// Mano_PartyRotate.js
// ----------------------------------------------------------------------------
// Copyright (c) 2022-2022 Sigureya
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.0 2022/09/21
// ----------------------------------------------------------------------------
// [Twitter]: https://twitter.com/Sigureya/
//=============================================================================
/*:
* @plugindesc セーブデータの読み書き時にメッセージを表示します。
* @author しぐれん
* @url https://github.com/Sigureya/RPGmakerMZ/blob/master/Mano_SaveLoadMessage.js
* @target MZ
*
* @command SaveWithMessage
* @text セーブ画面を開く(メッセージ付き)
* @desc セーブの実行結果に応じてメッセージを表示します。
* 表示文章はプラグインパラメータで設定します。
*
* @command SaveWithCustomMessage
* @text セーブ画面を開く(特殊メッセージ)
* @desc セーブの実行結果に応じてメッセージを表示します。
* 追加パラメータで文章を変更できます。
*
* @arg messageWhenLoad
* @text メッセージ:読み込み時
* @desc 空欄の場合、プラグインパラメータを参照します。
* @type mulitline_string
*
* @arg messageWhenSave
* @text メッセージ:セーブした
* @desc 空欄の場合、プラグインパラメータを参照します。
* @type mulitline_string
*
* @arg messageWhenDidNotSave
* @text メッセージ:セーブしなかった
* @desc 空欄の場合、プラグインパラメータを参照します。
* @type mulitline_string
*
* @command SaveWithStateCheck
* @text セーブ画面を開く(結果を変数に書き込む)
* @desc このコマンドの下に条件分岐を入れてください。
* 読み込み成功:1,セーブ成功:2,セーブ失敗:3
*
*
* @param saveStateVariable
* @text セーブ状態検出変数
* @desc セーブの直後に変数に以下の値を書き込みます。
* 読み込み成功:1,セーブ成功:2,セーブ失敗:3
* @type variable
* @default 0
*
* @param whenLoadMessage
* @text メッセージ:読み込み時
* @type mulitline_string
* @default セーブデータを読み込み再開しました。
*
* @param whenSaveMessage
* @text メッセージ:セーブした
* @type mulitline_string
* @default セーブを行いました。
*
* @param whenDidNotSaveMessage
* @text メッセージ:セーブしなかった
* @type mulitline_string
* @default セーブを行いませんでした。
*
* @help
* セーブの読み書きの際に、専用のメッセージを表示します。
* 表示する文章はプラグインパラメータで設定します。
* セーブ画面を開くにはプラグインコマンドを使います。
*
*/
(function(){
/**
* @typedef {object} EventCommand
* @property {number} code
* @property {number} indent
* @property {any[]} parameters
*/
/**
* @typedef {[string,number,number,number,string]} ShotTextParamator101
*/
/**
* @type {String}
*/
const PLUGIN_NAME= ('Mano_SaveLoadMessage');
function getParam(){ return PluginManager.parameters(PLUGIN_NAME); }
const setting = (function(){
const param =getParam();
const result ={
saveStateVariable:Number(param.saveStateVariable),
messageWhenLoad:String(param.whenLoadMessage),
messageWhenSave:String(param.whenSaveMessage),
messageWhenDidNotSave:String(param.whenDidNotSaveMessage),
};
return result;
})();
//const SAVEDATALOADED_MAGIC_NUMBER =-5861;
const ON_SAVEDATA_LOAD=1;
const ON_SAVEDATA_SAVE =2;
const ON_SAVEDATA_DIDNOT_SAVE =3;
const DataManager_extractSaveContents =DataManager.extractSaveContents;
DataManager.extractSaveContents =function(contents){
DataManager_extractSaveContents.call(this,contents);
$gameVariables.setValue(setting.saveStateVariable,ON_SAVEDATA_LOAD);
};
/**
* @typedef {object} MSG_BRANCH_ARG
* @property {string} msg1
* @property {string} msg2
* @property {string} msg3
*/
const MSG_BRANCH ="MSG_BRANCH";
const SAVE_WITH_STATE_CHECK ="SaveWithStateCheck";
PluginManager.registerCommand(PLUGIN_NAME,MSG_BRANCH,(/** @type {MSG_BRANCH_ARG}} */ arg)=>{
$gameMessage.clear();
const value =$gameVariables.value(setting.saveStateVariable);
switch (value) {
case ON_SAVEDATA_LOAD:
$gameMessage.add(arg.msg1);
break;
case ON_SAVEDATA_SAVE:
$gameMessage.add(arg.msg2);
break;
case ON_SAVEDATA_DIDNOT_SAVE:
$gameMessage.add(arg.msg3);
break;
default:
return;
}
});
/**
* @returns {EventCommand[]}
* @param {MSG_BRANCH_ARG} arg
*/
function createSaveMessageCodeV2(arg){
return [
{
//セーブ画面を開く、プラグインコマンドを呼び出し
code:357,
indent:0,
parameters:[PLUGIN_NAME,SAVE_WITH_STATE_CHECK,"内部から呼び出し",{}],
},
{
//セーブ状態を確認して文章を表示するプラグインコマンドを呼び出し
code:357,
indent:0,
parameters:[PLUGIN_NAME,MSG_BRANCH,"内部から呼び出し",arg],
}
];
}
function createSaveStateCode(){
const variableId =setting.saveStateVariable;
const lastSaveCount = $gameSystem.saveCount();
/**
* @type {EventCommand[]}
*/
const code=[
{
//セーブ画面を開く
code:352,
indent:0,
parameters:[],
},
{
//セーブデータが読み込まれた場合
code:111,
indent:0,
parameters:[1,variableId,0,ON_SAVEDATA_LOAD,0],
},
{
//分岐モードを「読み込み」に
code:122,
indent:1,
parameters:[variableId,variableId,0,0,ON_SAVEDATA_LOAD],
},
{
//イベント処理の中断
code:115,
indent:1,
parameters:[],
},
{
code:0,
indent:1,
parameters:[],
},
{
//変数に最新のセーブ回数を書き込む
code:122,
indent:0,
parameters:[variableId,variableId,0,3,7,6],
},
{
//記録していたセーブ回数と異なる場合(書き込みした場合)
code:111,
indent:0,
parameters:[1,variableId,0,lastSaveCount,5],
},
{
//分岐モードを「書き込み」に
code:122,
indent:1,
parameters:[variableId,variableId,0,0,ON_SAVEDATA_SAVE],
},
{
//イベント処理の中断
code:115,
indent:1,
parameters:[],
},
{
code:0,
indent:1,
parameters:[],
},
{
//分岐モードを「何もしなかった」に
code:122,
indent:0,
parameters:[variableId,variableId,0,0,ON_SAVEDATA_DIDNOT_SAVE],
},
{
code:0,
indent:0,
parameters:[],
}
];
return code;
}
PluginManager.registerCommand(PLUGIN_NAME,SAVE_WITH_STATE_CHECK,function(){
$gameVariables.setValue(setting.saveStateVariable,0);
const code =createSaveStateCode();
this.setupChild(code,0);
});
PluginManager.registerCommand(PLUGIN_NAME,"SaveWithMessage",function(){
const code = createSaveMessageCodeV2({
msg1:setting.messageWhenLoad,
msg2:setting.messageWhenSave,
msg3:setting.messageWhenDidNotSave,
});
this.setupChild(code,0);
});
PluginManager.registerCommand(PLUGIN_NAME,"SaveWithCustomMessage",function(arg){
const code = createSaveMessageCodeV2({
msg1:arg.messageWhenLoad || setting.messageWhenLoad,
msg2:arg.messageWhenSave || setting.messageWhenSave,
msg3:arg.messageWhenDidNotSave || setting.messageWhenDidNotSave,
});
this.setupChild(code,0);
});
}())