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));