-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdice2000_CompressDatabase.js
More file actions
127 lines (119 loc) · 4.76 KB
/
dice2000_CompressDatabase.js
File metadata and controls
127 lines (119 loc) · 4.76 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
/*:
* @plugindesc 圧縮する (2020/4/29)
* @author NAK
*
* @param Use compressed JSON
* @text 圧縮したJSONを使う
* @type boolean
* @default false
*
* @param Generate compressed JSON
* @text JSON圧縮モード
* @type boolean
* @default false
*
* @param compressd JSON extension
* @text 圧縮したJSONファイルに付ける拡張子
* @type string
* @default .dat
*
* @help !CANTION! At Your Own Risk
* ものすごく使いづらいプラグインです。
* 何をやっているかある程度は見当がつく人向け。
*
* 圧縮モードでゲームを起動するとJSONファイルが圧縮されます。
* 圧縮した方を使いたければオプションを変更してください。
*
* アップロードできるファイルの拡張子が制限されているサイトの場合、
* 1)圧縮する
* 2)圧縮したファイルの拡張子を「.json」にして隔離しておく
* 3)「圧縮したJSONファイルに付ける拡張子」を空文字列にする
* 4)圧縮した「.json」ファイルをdataフォルダに入れる
*
* 画像/音声の暗号化をした上で使いたい場合、
* 「plugins.js」を直接書きかえてJSON圧縮モードでゲームを起動して
* 再度圧縮JSONファイルを作る必要があります。
*
* 2020/4/29:圧縮時の拡張子を指定できるようにした
* 2018/7/22:テストプレイ外でもJSON圧縮可能にした
* 2018/3/25:注意書きを追加
* 2018/3/18:初版
*
*/
(function() {
'use strict';
var pluginName = 'dice2000_CompressDatabase';
var parameters = PluginManager.parameters(pluginName);
var paramUse = (parameters['Use compressed JSON'] === 'true');
var paramGenerate = (parameters['Generate compressed JSON'] === 'true');
var paramExtension = String(parameters['compressd JSON extension']);
//ロード時に強引に生成する
var dice2000CompressDatabase_loadDataFile = DataManager.loadDataFile;
DataManager.loadDataFile = function(name, src) {
if(paramUse && !paramGenerate){
var xhr = new XMLHttpRequest();
var url = 'data/' + src + paramExtension;
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400) {
window[name] = JSON.parse(LZString.decompressFromBase64(xhr.responseText));
DataManager.onLoad(window[name]);
}
};
xhr.onerror = this._mapLoader || function() {
DataManager._errorUrl = DataManager._errorUrl || url;
};
window[name] = null;
xhr.send();
}else if(paramGenerate){
var xhr = new XMLHttpRequest();
var url = 'data/' + src;
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400) {
//通常のロード処理
window[name] = JSON.parse(xhr.responseText);
DataManager.onLoad(window[name]);
//ここで圧縮処理をかけてセーブしてしまう
StorageManager.saveToLocalFile_CompressedJSON(src + paramExtension, xhr.responseText);
}
};
xhr.onerror = this._mapLoader || function() {
DataManager._errorUrl = DataManager._errorUrl || url;
};
window[name] = null;
xhr.send();
}else{
dice2000CompressDatabase_loadDataFile.apply(this, arguments);
}
};
DataManager.createCompressedMapdata = function() {
$dataMapInfos.forEach(function(val){
if(val !== null){
var mapId = val['id'];
var filename = 'Map%1.json'.format(mapId.padZero(3));
DataManager.loadDataFile('$dataMap', filename);
}
});
};
var dice2000_CD_Scene_Title_start = Scene_Title.prototype.start;
Scene_Title.prototype.start = function() {
if (paramGenerate) DataManager.createCompressedMapdata();
dice2000_CD_Scene_Title_start.call(this);
};
//Dataフォルダを指定する
StorageManager.localFileDirectoryPath_CompressedJSON = function() {
var path = require('path');
var base = path.dirname(process.mainModule.filename);
return path.join(base, 'data/');
};
//JSON圧縮する
StorageManager.saveToLocalFile_CompressedJSON = function(filename, json) {
var data = LZString.compressToBase64(json);
var fs = require('fs');
var savename = this.localFileDirectoryPath_CompressedJSON() + filename;
fs.writeFileSync(savename, data);
};
})();