Code:
//=============================================================================
// Window_Statistics.js
//=============================================================================
/*:
* @plugindesc หน้าต่างแสดงสถิติการเล่น (plugin command ดูที่ Help...)
* @author XthemeCore
*
* @param ชื่อหัวหน้าต่าง
* @desc ชื่อที่แสดงบนส่วนหัวของหน้าต่าง
* @default สถิติหลังจบเกม
*
* @param x
* @desc ตำแหน่งแกน x ของหน้าต่างจากจุดศูนย์กลางของจอ
* @default 0
*
* @param y
* @desc ตำแหน่งแกน y ของหน้าต่างจากจุดศูนย์กลางของจอ
* @default 0
*
* @param ความยาวหน้าต่าง
* @desc ความยาวของหน้าต่าง
* @default 420
*
* @param ตัวคั่น
* @desc ตัวคั่นระหว่างชื่อตัวแปรกับค่าของตัวแปร
* @default :
*
* @param ---------------
* @desc
* @default ---------------------------------
*
* @param แสดงจำนวนเงิน
* @desc ให้แสดงจำนวนเงินในหน้าต่างหรือไม่
* @default false
*
* @param ไอคอนจำนวนเงิน
* @desc ไอคอนที่สื่อถึงจำนวนเงิน (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default 220
*
* @param แสดงเวลาในการเล่น
* @desc ให้แสดงเวลาที่ใช้ในการเล่นในหน้าต่างหรือไม่
* @default true
*
* @param ไอคอนเวลาในการเล่น
* @desc ไอคอนที่สื่อถึงเวลาในการเล่น (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default 313
*
* @param ---------------
* @desc
* @default ---------------------------------
*
* @param ตัวแปรที่ 1
* @desc เลขไอดีของตัวแปร ตัวที่ 1 ที่เก็บค่าที่ต้องการแสดง (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default 1
*
* @param ชื่อตัวแปรที่ 1
* @desc ชื่อที่สื่อถึงตัวแปร ตัวที่ 1
* @default จำนวนการตาย
*
* @param ไอคอนตัวแปรที่ 1
* @desc ไอคอนที่สื่อถึงตัวแปร ตัวที่ 1 (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default 1
*
* @param ---------------
* @desc
* @default ---------------------------------
*
* @param ตัวแปรที่ 2
* @desc เลขไอดีของตัวแปร ตัวที่ 2 ที่เก็บค่าที่ต้องการแสดง (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ชื่อตัวแปรที่ 2
* @desc ชื่อที่สื่อถึงตัวแปร ตัวที่ 2
* @default ตัวแปรที่ 2
*
* @param ไอคอนตัวแปรที่ 2
* @desc ไอคอนที่สื่อถึงตัวแปร ตัวที่ 2 (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ---------------
* @desc
* @default ---------------------------------
*
* @param ตัวแปรที่ 3
* @desc เลขไอดีของตัวแปร ตัวที่ 3 ที่เก็บค่าที่ต้องการแสดง (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ชื่อตัวแปรที่ 3
* @desc ชื่อที่สื่อถึงตัวแปร ตัวที่ 3
* @default ตัวแปรที่ 3
*
* @param ไอคอนตัวแปรที่ 3
* @desc ไอคอนที่สื่อถึงตัวแปร ตัวที่ 3 (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ---------------
* @desc
* @default ---------------------------------
*
* @param ตัวแปรที่ 4
* @desc เลขไอดีของตัวแปร ตัวที่ 4 ที่เก็บค่าที่ต้องการแสดง (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ชื่อตัวแปรที่ 4
* @desc ชื่อที่สื่อถึงตัวแปร ตัวที่ 4
* @default ตัวแปรที่ 4
*
* @param ไอคอนตัวแปรที่ 4
* @desc ไอคอนที่สื่อถึงตัวแปร ตัวที่ 4 (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ---------------
* @desc
* @default ---------------------------------
*
* @param ตัวแปรที่ 5
* @desc เลขไอดีของตัวแปร ตัวที่ 5 ที่เก็บค่าที่ต้องการแสดง (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ชื่อตัวแปรที่ 5
* @desc ชื่อที่สื่อถึงตัวแปร ตัวที่ 5
* @default ตัวแปรที่ 5
*
* @param ไอคอนตัวแปรที่ 5
* @desc ไอคอนที่สื่อถึงตัวแปร ตัวที่ 5 (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ---------------
* @desc
* @default ---------------------------------
*
* @param ตัวแปรที่ 6
* @desc เลขไอดีของตัวแปร ตัวที่ 6 ที่เก็บค่าที่ต้องการแสดง (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ชื่อตัวแปรที่ 6
* @desc ชื่อที่สื่อถึงตัวแปร ตัวที่ 6
* @default ตัวแปรที่ 6
*
* @param ไอคอนตัวแปรที่ 6
* @desc ไอคอนที่สื่อถึงตัวแปร ตัวที่ 6 (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ---------------
* @desc
* @default ---------------------------------
*
* @param ตัวแปรที่ 7
* @desc เลขไอดีของตัวแปร ตัวที่ 7 ที่เก็บค่าที่ต้องการแสดง (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @param ชื่อตัวแปรที่ 7
* @desc ชื่อที่สื่อถึงตัวแปร ตัวที่ 7
* @default ตัวแปรที่ 7
*
* @param ไอคอนตัวแปรที่ 7
* @desc ไอคอนที่สื่อถึงตัวแปร ตัวที่ 7 (ถ้ามีค่าน้อยกว่า 1 จะไม่ถูกแสดง)
* @default -1
*
* @help
*
* Plugin Command:
* WindowStats open # แสดงหน้าต่างสถิติ
* WindowStats close # ซ่อนหน้าต่างสถิติ
* WindowStats reset # รีเซ็ตค่าพารามิเตอร์ให้กลับเป็นค่าที่ตั้งไว้ใน Plugin Manager
*
* WindowStats set x n # n: ตำแหน่งแกน x ของหน้าต่างจากจุดศูนย์กลางของจอ
* WindowStats set y n # n: ตำแหน่งแกน y ของหน้าต่างจากจุดศูนย์กลางของจอ
* WindowStats set width w # w: ความยาวของหน้าต่าง
* WindowStats set colon c # c: ตัวคั่น
*
* WindowStats set enabled gold bool # bool: true แสดง, false ไม่แสดง
* WindowStats set enabled playtime bool # bool: true แสดง, false ไม่แสดง
*
* WindowStats set icon gold id # id: ไอดีของไอคอน
* WindowStats set icon playtime id # id: ไอดีของไอคอน
*
* WindowStats set id var n i # n: ตัวแปรที่ n, i: ไอดีของตัวแปร
* WindowStats set title var n name # name: ชื่อที่สื่อถึงตัวแปร
* WindowStats set icon var n icon id # id: ไอดีของไอคอน
*/
var WindowStatistics = {};
(function(WindowStatistics) {
var params = PluginManager.parameters('WindowStatistics');
var param_x;
var param_y;
var param_header;
var param_width;
var param_colon;
var param_goldEnabled;
var param_goldIcon;
var param_playtimeEnabled;
var param_playtimeIcon;
var param_var1;
var param_var1Title;
var param_var1Icon;
var param_var2;
var param_var2Title;
var param_var2Icon;
var param_var3;
var param_var3Title;
var param_var3Icon;
var param_var4;
var param_var4Title;
var param_var4Icon;
var param_var5;
var param_var5Title;
var param_var5Icon;
var param_var6;
var param_var6Title;
var param_var6Icon;
var param_var7;
var param_var7Title;
var param_var7Icon;
resetParameters();
function resetParameters(){
param_x = Number(params['x'] || 0);
param_y = Number(params['y'] || 0);
param_header = String(params['ชื่อหัวหน้าต่าง'] || 'สถิติหลังจบเกม');
param_width = Number(params['ความยาวหน้าต่าง'] || 420);
param_colon = String(params['ตัวคั่น'] || ':');
var text_goldEnabled = String(params['แสดงจำนวนเงิน'], 'false');
if(text_goldEnabled.toLowerCase() === 'true'){
param_goldEnabled = true;}
else if(text_goldEnabled.toLowerCase() === 'false'){
param_goldEnabled = false;}
param_goldIcon = Number(params['ไอคอนจำนวนเงิน'] || 220);
var text_playtimeEnabled = String(params['แสดงเวลาในการเล่น'], 'true');
if(text_playtimeEnabled.toLowerCase() === 'true'){
param_playtimeEnabled = true;}
else if(text_playtimeEnabled.toLowerCase() === 'false'){
param_playtimeEnabled = false;}
param_playtimeIcon = Number(params['ไอคอนเวลาในการเล่น'] || 313);
param_var1 = Number(params['ตัวแปรที่ 1'] || 1);
param_var1Title = String(params['ชื่อตัวแปรที่ 1'] || 'จำนวนการตาย');
param_var1Icon = Number(params['ไอคอนตัวแปรที่ 1'] || 1);
param_var2 = Number(params['ตัวแปรที่ 2'] || -1);
param_var2Title = String(params['ชื่อตัวแปรที่ 2'] || 'ตัวแปรที่ 2');
param_var2Icon = Number(params['ไอคอนตัวแปรที่ 2'] || -1);
param_var3 = Number(params['ตัวแปรที่ 3'] || -1);
param_var3Title = String(params['ชื่อตัวแปรที่ 3'] || 'ตัวแปรที่ 3');
param_var3Icon = Number(params['ไอคอนตัวแปรที่ 3'] || -1);
param_var4 = Number(params['ตัวแปรที่ 4'] || -1);
param_var4Title = String(params['ชื่อตัวแปรที่ 4'] || 'ตัวแปรที่ 4');
param_var4Icon = Number(params['ไอคอนตัวแปรที่ 4'] || -1);
param_var5 = Number(params['ตัวแปรที่ 5'] || -1);
param_var5Title = String(params['ชื่อตัวแปรที่ 5'] || 'ตัวแปรที่ 5');
param_var5Icon = Number(params['ไอคอนตัวแปรที่ 5'] || -1);
param_var6 = Number(params['ตัวแปรที่ 6'] || -1);
param_var6Title = String(params['ชื่อตัวแปรที่ 6'] || 'ตัวแปรที่ 6');
param_var6Icon = Number(params['ไอคอนตัวแปรที่ 6'] || -1);
param_var7 = Number(params['ตัวแปรที่ 7'] || -1);
param_var7Title = String(params['ชื่อตัวแปรที่ 7'] || 'ตัวแปรที่ 7');
param_var7Icon = Number(params['ไอคอนตัวแปรที่ 7'] || -1);
}
var _window;
var WindowStatistics_Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
if (command.toLowerCase() === "windowstats") {
if (args[0].toLowerCase() === "open") {
if(_window === undefined){
_window = new Window_Statistics(0, 0);
_window.x = ((Graphics.boxWidth - _window.width)/2) + param_x;
_window.y = ((Graphics.boxHeight - _window.height)/2) + param_y;
SceneManager._scene.addChild(_window);
_window.open("gl");
}else{
SceneManager._scene.addChild(_window);
_window.refresh();
_window.open("gl");
}
}
else if (args[0].toLowerCase() === "close") {
if(_window !== undefined){
_window.close();
}
}
else if (args[0].toLowerCase() === "reset") {
resetParameters();
}
else if (args[0].toLowerCase() === "set") {
switch(args[1].toLowerCase()){
case 'x': param_x = Number(args[2]);
break;
case 'y': param_y = Number(args[2]);
break;
case 'width': param_width = Number(args[2]);
break;
case 'colon': param_colon = String(args[2]);
break;
case 'enabled': if(args[2].toLowerCase() === 'gold'){
if(args[3].toLowerCase() === 'true')
param_goldEnabled = true;
else if(args[3].toLowerCase() === 'false')
param_goldEnabled = false;
}else if(args[2].toLowerCase() === 'playtime'){
if(args[3].toLowerCase() === 'true')
param_playtimeEnabled = true;
else if(args[3].toLowerCase() === 'false')
param_playtimeEnabled = false;
}
break;
case 'icon': if(args[2].toLowerCase() === 'gold'){
param_goldIcon = Number(args[3]); }
else if(args[2].toLowerCase() === 'playtime'){
param_playtimeIcon = Number(args[3]); }
else if(args[2].toLowerCase() === 'var'){
switch(Number(args[3])){
case 1: param_var1Icon = Number(args[4]); break;
case 2: param_var2Icon = Number(args[4]); break;
case 3: param_var3Icon = Number(args[4]); break;
case 4: param_var4Icon = Number(args[4]); break;
case 5: param_var5Icon = Number(args[4]); break;
case 6: param_var6Icon = Number(args[4]); break;
case 7: param_var7Icon = Number(args[4]); break;
}
}
break;
case 'id': if(args[2].toLowerCase() === 'var'){
switch(Number(args[3])){
case 1: param_var1 = Number(args[4]); break;
case 2: param_var2 = Number(args[4]); break;
case 3: param_var3 = Number(args[4]); break;
case 4: param_var4 = Number(args[4]); break;
case 5: param_var5 = Number(args[4]); break;
case 6: param_var6 = Number(args[4]); break;
case 7: param_var7 = Number(args[4]); break;
}
}
break;
case 'title': if(args[2].toLowerCase() === 'var'){
switch(Number(args[3])){
case 1: param_var1Title = String(args[4]);
var i = 5;
while(i < args.length){
param_var1Title += ' ' + String(args[i]);
i++;
}
break;
case 2: param_var2Title = String(args[4]);
var i = 5;
while(i < args.length){
param_var2Title += ' ' + String(args[i]);
i++;
}
break;
case 3: param_var3Title = String(args[4]);
var i = 5;
while(i < args.length){
param_var3Title += ' ' + String(args[i]);
i++;
}
break;
case 4: param_var4Title = String(args[4]);
var i = 5;
while(i < args.length){
param_var4Title += ' ' + String(args[i]);
i++;
}
break;
case 5: param_var5Title = String(args[4]);
var i = 5;
while(i < args.length){
param_var5Title += ' ' + String(args[i]);
i++;
}
break;
case 6: param_var6Title = String(args[4]);
var i = 5;
while(i < args.length){
param_var6Title += ' ' + String(args[i]);
i++;
}
break;
case 7: param_var7Title = String(args[4]);
var i = 5;
while(i < args.length){
param_var7Title += ' ' + String(args[i]);
i++;
}
break;
}
}
break;
}
}
}
WindowStatistics_Game_Interpreter_pluginCommand.call(this, command, args);
}
function Window_Statistics() {
this.initialize.apply(this, arguments);
};
Window_Statistics.prototype = Object.create(Window_Base.prototype);
Window_Statistics.prototype.constructor = Window_Statistics;
Window_Statistics.prototype.initialize = function(x, y) {
var width = this.windowWidth();
var height = this.windowHeight();
Window_Base.prototype.initialize.call(this, x, y, width, height);
this.refresh();
};
Window_Statistics.prototype.update = function() {
Window_Base.prototype.update.call(this);
this.redrawContent();
};
Window_Statistics.prototype.windowWidth = function() {
return param_width;
};
Window_Statistics.prototype.windowHeight = function() {
return this.getContentsHeight() + 15;
};
Window_Statistics.prototype.getContentsHeight = function() {
return this.fittingHeight( 1 + this.getItemAmount());
};
Window_Statistics.prototype.getItemAmount = function(){
return Number(param_goldEnabled) + Number(param_playtimeEnabled)
+ ((param_var1 >= 1)? 1:0) + ((param_var2 >= 1)? 1:0) + ((param_var3 >= 1)? 1:0)
+ ((param_var4 >= 1)? 1:0) + ((param_var5 >= 1)? 1:0) + ((param_var6 >= 1)? 1:0)
+ ((param_var7 >= 1)? 1:0);
}
Window_Statistics.prototype.updateWindow = function() {
this.width = this.windowWidth();
this.height = this.windowHeight();
this.x = ((Graphics.boxWidth - this.width)/2) + param_x;
this.y = ((Graphics.boxHeight - this.height)/2) + param_y;
this.createContents();
};
Window_Statistics.prototype.refresh = function() {
this.openness = 0;
this.redrawContent();
};
Window_Statistics.prototype.redrawContent = function() {
this.updateWindow();
var index = 1;
var x = this.textPadding();
var width = this.contents.width - this.textPadding() * 2;
var height = this.getContentsHeight()/(this.getItemAmount() + 1);
this.contents.clear();
//แสดงหัวของหน้าต่าง
var headerWidth = this.textWidth(param_header);
this.drawText(param_header, x, 0, headerWidth, 'right');
//แสดงรายการสถิติ
if(param_goldEnabled){
this.drawCurrencyValue(x, height*index - x*(index - 1), width);
index++;
}
if(param_playtimeEnabled){
this.drawCurrentPlaytimeValue(x, height*index - x*(index - 1), width);
index++;
}
if(param_var1 >= 1){
this.drawValue(param_var1Icon, param_var1Title, param_var1,x, height*index - x*(index - 1), width);
index++;
}
if(param_var2 >= 1){
this.drawValue(param_var2Icon, param_var2Title, param_var2,x, height*index - x*(index - 1), width);
index++;
}
if(param_var3 >= 1){
this.drawValue(param_var3Icon, param_var3Title, param_var3,x, height*index - x*(index - 1), width);
index++;
}
if(param_var4 >= 1){
this.drawValue(param_var4Icon, param_var4Title, param_var4,x, height*index - x*(index - 1), width);
index++;
}
if(param_var5 >= 1){
this.drawValue(param_var5Icon, param_var5Title, param_var5,x, height*index - x*(index - 1), width);
index++;
}
if(param_var6 >= 1){
this.drawValue(param_var6Icon, param_var6Title, param_var6,x, height*index - x*(index - 1), width);
index++;
}
if(param_var7 >= 1){
this.drawValue(param_var7Icon, param_var7Title, param_var7,x, height*index - x*(index - 1), width);
index++;
}
};
Window_Statistics.prototype.drawCurrencyValue = function(x, y, width) {
var unit = TextManager.currencyUnit;
var unitWidth = this.textWidth(unit);
this.drawStatistic(313,'จำนวนเงิน', $gameParty.gold(), x, y, width - unitWidth);
this.changeTextColor(this.systemColor());
this.drawText(TextManager.currencyUnit, x + width - unitWidth, y, unitWidth, 'right');
};
Window_Statistics.prototype.drawValue = function(param_icon,param_title,param_id,x, y, width) {
this.drawStatistic(param_icon,param_title, String($gameVariables.value(param_id)), x, y, width);
};
Window_Statistics.prototype.drawCurrentPlaytimeValue = function(x, y, width) {
this.drawStatistic(220,'เวลาที่ใช้', $gameSystem.playtimeText(), x, y, width);
};
Window_Statistics.prototype.drawStatistic = function(iconIndex,title, value, x, y, width) {
var titleWidth = this.textWidth(title);
var valueWidth = this.textWidth(value);
if(iconIndex >= 0){
this.drawIcon(iconIndex, x, y);
}
this.changeTextColor(this.systemColor());
this.drawText(title, x + ((iconIndex >=0)? Window_Base._iconWidth + 8:0), y, titleWidth, 'right');
this.drawText(param_colon, x + ((iconIndex >=0)? Window_Base._iconWidth + 8:0) + titleWidth,
y, this.textWidth(param_colon), 'right');
this.resetTextColor();
this.drawText(value, width - valueWidth, y, valueWidth, 'right');
};
Window_Statistics.prototype.open = function() {
this.refresh();
Window_Base.prototype.open.call(this);
};
}(WindowStatistics));