forked from triacontane/RPGMakerMV
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DebtRepayment.js
241 lines (221 loc) · 9.7 KB
/
DebtRepayment.js
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
//=============================================================================
// DebtRepayment.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.2.0 2017/05/25 借金時のウィンドウ文字色を変更できる機能を追加
// 1.1.0 2017/05/25 一定金額までは借金してお店で商品を購入できる機能を追加
// 1.0.0 2016/06/01 初版
// ----------------------------------------------------------------------------
// [Blog] : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================
/*:
* @plugindesc DebtRepaymentPlugin
* @author triacontane
*
* @param UnderLimitCanBuying
* @desc お店で購入可能な下限の金額です。指定する場合はマイナス値を指定してください。制御文字\v[n]が指定可能です。
* @default 0
*
* @param DebtTextColor
* @desc 所持金ウィンドウで借金時の文字色を変更します。システムカラー番号(\c[n])で指定します。
* @default 0
*
* @help 所持金をマイナスにすることができます。
*
* プラグインコマンド詳細
* イベントコマンド「プラグインコマンド」から実行。
* (パラメータの間は半角スペースで区切る)
*
* 所持金をマイナスに設定することを一時的に禁止します。
* DR借金禁止
* DR_DEBT_DISABLE
*
* 所持金をマイナスに設定することを再度許可します。
* DR借金許可
* DR_DEBT_ENABLE
*
* 所持金がマイナスの場合、ゼロに戻します。
* DR借金返済
* DR_REPAY_GOLD
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
/*:ja
* @plugindesc 所持金マイナスプラグイン
* @author トリアコンタン
*
* @param 購入可能下限金額
* @desc お店で購入可能な下限の金額です。指定する場合はマイナス値を指定してください。制御文字\v[n]が指定可能です。
* @default 0
*
* @param 借金文字色
* @desc 所持金ウィンドウで借金時の文字色を変更します。システムカラー番号(\c[n])で指定します。
* @default 0
*
* @help 所持金をマイナスにすることができます。
*
* プラグインコマンド詳細
* イベントコマンド「プラグインコマンド」から実行。
* (パラメータの間は半角スペースで区切る)
*
* 所持金をマイナスに設定することを一時的に禁止します。
* DR借金禁止
* DR_DEBT_DISABLE
*
* 所持金をマイナスに設定することを再度許可します。
* DR借金許可
* DR_DEBT_ENABLE
*
* 所持金がマイナスの場合、ゼロに戻します。
* DR借金返済
* DR_REPAY_GOLD
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(function() {
'use strict';
var pluginName = 'DebtRepayment';
var metaTagPrefix = 'DR';
//=============================================================================
// ローカル関数
// プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
//=============================================================================
var getParamString = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return '';
};
var getParamNumber = function(paramNames, min, max) {
var value = getParamString(paramNames);
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(value) || 0).clamp(min, max);
};
var getArgNumber = function(arg, min, max) {
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(convertEscapeCharacters(arg)) || 0).clamp(min, max);
};
var getCommandName = function(command) {
return (command || '').toUpperCase();
};
var convertEscapeCharacters = function(text) {
if (isNotAString(text)) text = '';
var windowLayer = SceneManager._scene._windowLayer;
return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
};
var isNotAString = function(args) {
return String(args) !== args;
};
//=============================================================================
// パラメータの取得と整形
//=============================================================================
var param = {};
param.underLimitCanBuying = getParamString(['UnderLimitCanBuying', '購入可能下限金額']);
param.debtTextColor = getParamNumber(['DebtTextColor', '借金文字色'], 0);
//=============================================================================
// Game_Interpreter
// プラグインコマンドを追加定義します。
//=============================================================================
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments);
try {
this.pluginCommandDebtRepayment(command, args);
} catch (e) {
if ($gameTemp.isPlaytest() && Utils.isNwjs()) {
var window = require('nw.gui').Window.get();
if (!window.isDevToolsOpen()) {
var devTool = window.showDevTools();
devTool.moveTo(0, 0);
devTool.resizeTo(window.screenX + window.outerWidth, window.screenY + window.outerHeight);
window.focus();
}
}
console.log('プラグインコマンドの実行中にエラーが発生しました。');
console.log('- コマンド名 : ' + command);
console.log('- コマンド引数 : ' + args);
console.log('- エラー原因 : ' + e.stack || e.toString());
}
};
Game_Interpreter.prototype.pluginCommandDebtRepayment = function(command, args) {
switch (getCommandName(command)) {
case metaTagPrefix + '借金禁止' :
case metaTagPrefix + '_DEBT_DISABLE' :
$gameParty.setDebtDisable(true);
break;
case metaTagPrefix + '借金許可' :
case metaTagPrefix + '_DEBT_ENABLE' :
$gameParty.setDebtDisable(false);
break;
case metaTagPrefix + '借金返済' :
case metaTagPrefix + '_REPAY_GOLD' :
$gameParty.repayGold();
break;
}
};
//=============================================================================
// Game_Party
// 所持金を調整します。
//=============================================================================
var _Game_Party_initialize = Game_Party.prototype.initialize;
Game_Party.prototype.initialize = function() {
_Game_Party_initialize.apply(this, arguments);
this._debtDisable = false;
};
var _Game_Party_gainGold = Game_Party.prototype.gainGold;
Game_Party.prototype.gainGold = function(amount) {
if (!this.isDebtEnable()) {
_Game_Party_gainGold.apply(this, arguments);
} else {
this._gold = (this._gold + amount).clamp(-this.maxGold(), this.maxGold());
}
};
Game_Party.prototype.repayGold = function() {
if (this._gold < 0) this._gold = 0;
};
Game_Party.prototype.isDebtEnable = function() {
return !this._debtDisable;
};
Game_Party.prototype.setDebtDisable = function(value) {
this._debtDisable = !!value;
};
Game_Party.prototype.getCanBuyingUnderLimit = function() {
return this.isDebtEnable() ? Math.min(getArgNumber(param.underLimitCanBuying), this.maxGold()) : 0;
};
//=============================================================================
// Scene_Shop
// 購入可能下限金額を調整します。
//=============================================================================
var _Scene_Shop_money = Scene_Shop.prototype.money;
Scene_Shop.prototype.money = function() {
return _Scene_Shop_money.apply(this, arguments) - $gameParty.getCanBuyingUnderLimit();
};
//=============================================================================
// Window_Gold
// 借金時の文字色を変更します。
//=============================================================================
var _Window_Gold_resetTextColor = Window_Gold.prototype.resetTextColor;
Window_Gold.prototype.resetTextColor = function() {
if (param.debtTextColor > 0 && $gameParty.gold() < 0) {
this.changeTextColor(this.textColor(param.debtTextColor));
} else {
_Window_Gold_resetTextColor.apply(this, arguments);
}
};
})();