Skip to content

Commit a6b67ea

Browse files
authored
Merge pull request rpgtkoolmv#120 from rpgtkoolmv/add_autosave
Add Auto Save System
2 parents 507b459 + d7adebe commit a6b67ea

File tree

5 files changed

+74
-6
lines changed

5 files changed

+74
-6
lines changed

js/rpg_managers/DataManager.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ var $testEvent = null;
4040
DataManager._globalId = 'RPGMV';
4141
DataManager._lastAccessedId = 1;
4242
DataManager._errorUrl = null;
43+
DataManager._autoSaveFileId = 0;
4344

4445
DataManager._databaseFiles = [
4546
{ name: '$dataActors', src: 'Actors.json' },
@@ -451,3 +452,20 @@ DataManager.extractSaveContents = function(contents) {
451452
$gameMap = contents.map;
452453
$gamePlayer = contents.player;
453454
};
455+
456+
DataManager.setAutoSaveFileId = function(autoSaveFileId) {
457+
this._autoSaveFileId = autoSaveFileId;
458+
};
459+
460+
DataManager.isAutoSaveFileId = function(saveFileId) {
461+
return this._autoSaveFileId !== 0 && this._autoSaveFileId === saveFileId;
462+
};
463+
464+
DataManager.autoSaveGame = function() {
465+
if (this._autoSaveFileId !== 0 && !this.isEventTest() && $gameSystem.isSaveEnabled()) {
466+
$gameSystem.onBeforeSave();
467+
if (this.saveGame(this._autoSaveFileId)) {
468+
StorageManager.cleanBackup(this._autoSaveFileId);
469+
}
470+
}
471+
};

js/rpg_objects/Game_Player.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ Game_Player.prototype.performTransfer = function() {
9595
this.locate(this._newX, this._newY);
9696
this.refresh();
9797
this.clearTransferInfo();
98+
DataManager.autoSaveGame();
9899
}
99100
};
100101

js/rpg_scenes/Scene_Save.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ Scene_Save.prototype.firstSavefileIndex = function() {
2727
};
2828

2929
Scene_Save.prototype.onSavefileOk = function() {
30+
if (DataManager.isAutoSaveFileId(this.savefileId())) {
31+
this.onSaveFailure();
32+
return;
33+
}
3034
Scene_File.prototype.onSavefileOk.call(this);
3135
$gameSystem.onBeforeSave();
3236
if (DataManager.saveGame(this.savefileId())) {

js/rpg_windows/Window_SavefileList.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@ Window_SavefileList.prototype.drawItem = function(index) {
5151
};
5252

5353
Window_SavefileList.prototype.drawFileId = function(id, x, y) {
54-
this.drawText(TextManager.file + ' ' + id, x, y, 180);
54+
if (DataManager.isAutoSaveFileId(id)) {
55+
if (this._mode === 'save') {
56+
this.changePaintOpacity(false);
57+
}
58+
this.drawText(TextManager.file + ' ' + id + '(Auto)', x, y, 180);
59+
} else {
60+
this.drawText(TextManager.file + ' ' + id, x, y, 180);
61+
}
5562
};
5663

5764
Window_SavefileList.prototype.drawContents = function(info, rect, valid) {

plugins/Community_Basic.js

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,48 @@
77
* There is no plugin command.
88
*
99
* @param cacheLimit
10+
* @type number
1011
* @desc The upper limit of images' cached size (MPixel)
1112
* @default 10
1213
*
1314
* @param screenWidth
15+
* @type number
1416
* @desc The resolution of screen width
1517
* @default 816
1618
*
1719
* @param screenHeight
20+
* @type number
1821
* @desc The resolution of screen height
1922
* @default 624
2023
*
2124
* @param changeWindowWidthTo
25+
* @type number
2226
* @desc If set, change window width to this value
2327
*
2428
* @param changeWindowHeightTo
29+
* @type number
2530
* @desc If set, change window height to this value
2631
*
2732
* @param renderingMode
33+
* @type select
34+
* @option canvas
35+
* @option webgl
36+
* @option auto
2837
* @desc The rendering mode (canvas/webgl/auto)
2938
* @default auto
3039
*
3140
* @param alwaysDash
41+
* @type boolean
3242
* @desc The initial value whether the player always dashes (on/off)
33-
* @default off
43+
* @default false
44+
*
45+
* @param autoSaveFileId
46+
* @type number
47+
* @desc The file number to auto save when "Transfer Player" (0: off)
48+
* @default 0
3449
*
3550
* @param errorMessage
51+
* @type string
3652
* @desc The message when error occurred
3753
* @default Error occurred. Please ask to the creator of this game.
3854
*/
@@ -46,49 +62,71 @@
4662
* このプラグインにはプラグインコマンドはありません。
4763
*
4864
* @param cacheLimit
65+
* @type number
4966
* @desc 画像のメモリへのキャッシュの上限値 (MPix)
5067
* @default 10
5168
*
5269
* @param screenWidth
70+
* @type number
5371
* @desc 画面サイズの幅
5472
* @default 816
5573
*
5674
* @param screenHeight
75+
* @type number
5776
* @desc 画面サイズの高さ
5877
* @default 624
5978
*
6079
* @param changeWindowWidthTo
80+
* @type number
6181
* @desc 値が設定された場合、ウインドウの幅を指定した値に変更
6282
*
6383
* @param changeWindowHeightTo
84+
* @type number
6485
* @desc 値が設定された場合、ウインドウの高さを指定した値に変更
6586
*
6687
* @param renderingMode
88+
* @type select
89+
* @option canvas
90+
* @option webgl
91+
* @option auto
6792
* @desc レンダリングモード (canvas/webgl/auto)
6893
* @default auto
6994
*
7095
* @param alwaysDash
96+
* @type boolean
7197
* @desc プレイヤーが常時ダッシュするかどうかの初期値 (on/off)
72-
* @default off
98+
* @default false
99+
*
100+
* @param autoSaveFileId
101+
* @type number
102+
* @desc 「場所移動」の際にオートセーブするファイル番号 (0でoff)
103+
* @default 0
73104
*
74105
* @param errorMessage
106+
* @type string
75107
* @desc エラーが発生した際に表示するメッセージ
76108
* @default エラーが発生しました。ゲームの作者にご連絡ください。
77109
*/
78110

79111
(function() {
112+
'use strict';
113+
function isNumber(str) {
114+
return !!str && !isNaN(str);
115+
}
116+
80117
function toNumber(str, def) {
81-
return isNaN(str) ? def : +(str || def);
118+
return isNumber(str) ? +str : def;
82119
}
83120

84121
var parameters = PluginManager.parameters('Community_Basic');
85122
var cacheLimit = toNumber(parameters['cacheLimit'], 10);
86123
var screenWidth = toNumber(parameters['screenWidth'], 816);
87124
var screenHeight = toNumber(parameters['screenHeight'], 624);
88125
var renderingMode = parameters['renderingMode'].toLowerCase();
89-
var alwaysDash = parameters['alwaysDash'].toLowerCase() === 'on';
126+
var alwaysDash = parameters['alwaysDash'].toLowerCase() === 'true';
90127
var windowWidthTo = toNumber(parameters['changeWindowWidthTo'], 0);
91128
var windowHeightTo = toNumber(parameters['changeWindowHeightTo'], 0);
129+
var autoSaveFileId = toNumber(parameters['autoSaveFileId'], 0);
92130
var errorMessage = parameters['errorMessage'];
93131

94132
var windowWidth;
@@ -148,6 +186,6 @@
148186
}
149187
};
150188

151-
189+
DataManager.setAutoSaveFileId(autoSaveFileId);
152190
Graphics.setErrorMessage(errorMessage);
153191
})();

0 commit comments

Comments
 (0)