设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 92|回复: 0

[转载发布] Accurate Playtime

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    2026-7-12 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    7959

    主题

    864

    回帖

    3万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    29925
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    38778

    灌水之王

    发表于 3 天前 | 显示全部楼层 |阅读模式
    RPG Maker MV is designed to run generally at 60 fps. As such, it keeps track of the total amount of play time a player has been playing by monitoring the total number of frames that have been run. This is all fine and dandy if the game is always running at 60 fps. If, however, the player is on a machine that is older and cannot run MV games at 60 fps, the accuracy of the total play time way off. If the game is running at 30 fps on average, then the play time recorded by MV will be HALF of the play time played in reality. The inverse is also true if the game was running at higher frame rates, which can happen on 144hz monitors.

    This simple plug-n-play plugin addresses this issue by using real-time to keep track of the total play time played by the player instead of the total number of frames.

    You can also reset the playtime as well, useful for those with games that start a little bit after the new game is launched. You can also pause and resume the playtime if you wish to avoid the game ticking up during cutscenes.

    To use: Simply copy/paste the plugin code below into a text editor and save it as AccuratePlaytime.js (you can call it whatever you want actually as long as you include the .js). To reset the play time, type ResetPlaytime in a plugin command window. To pause the play time, type PausePlaytime and to resume the play time, type ResumePlaytime. Pausing will not persist if the game is saved then reloaded.

    Terms: Use as you like. Free or commercial. Modify or extend as needed. Credit isn't even necessary though you are welcome to.

                    Code:       
    1. /*:
    2. * @plugindesc Counts total playtime accurately regardless of framerate
    3. * @help This plugin is plug-n-play and requires no parameters to set.
    4. * To reset the play time, type ResetPlaytime in a plugin command window
    5. * Version 1.3: Pause and ResumePlaytime commands added, also addressed a bug with doubling playtime
    6. * Version 1.2: ResetPlaytime command
    7. * Version 1.1: Addresses bug fix to saves not storing time correctly after multiple saves
    8. */
    9. (function()
    10. {
    11.    
    12.     var startTime = 0;
    13.     var pausedTime = 0;
    14.     var paused = false;
    15.    
    16.     var _DataManager_setupNewGame = DataManager.setupNewGame;
    17.     var _GameSystem_initialize = Game_System.prototype.initialize;
    18.     var _GameSystem_onBeforeSave = Game_System.prototype.onBeforeSave;
    19.     var _GameSystem_onAfterLoad = Game_System.prototype.onAfterLoad;  
    20.     var _GameInterpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    21.     Game_Interpreter.prototype.pluginCommand = function(command, args)
    22.     {
    23.         _GameInterpreter_pluginCommand.call(this, command, args);
    24.         if (command === 'ResetPlaytime')
    25.         {
    26.             startTime = Date.now();
    27.             $gameSystem._playtime = 0;
    28.         }
    29.         if (command === 'PausePlaytime')
    30.         {
    31.             if (paused) return;
    32.             paused = true;
    33.             pausedTime = Date.now() - startTime;
    34.         }
    35.         if (command === 'ResumePlaytime')
    36.         {
    37.             if (!paused) return;
    38.             paused = false;
    39.             startTime = Date.now() - pausedTime;
    40.         }
    41.     };
    42.     DataManager.setupNewGame = function()
    43.     {
    44.         _DataManager_setupNewGame.call(this);
    45.         startTime = Date.now();
    46.     };
    47.    
    48.     Game_System.prototype.initialize = function()
    49.     {
    50.         _GameSystem_initialize.call(this);
    51.         this._playtime = null;
    52.     };
    53.     Game_System.prototype.onBeforeSave = function()
    54.     {
    55.         _GameSystem_onBeforeSave.call(this);
    56.         var saveTime = Date.now() - startTime;
    57.         this._playtime = paused ? this._playtime + pausedTime : this._playtime + saveTime;
    58.         startTime = Date.now();
    59.         pausedTime = 0;
    60.     };
    61.     Game_System.prototype.onAfterLoad = function()
    62.     {
    63.         _GameSystem_onAfterLoad.call(this);
    64.         startTime = Date.now();
    65.     };
    66.     Game_System.prototype.playtime = function()
    67.     {
    68.         return Math.floor((paused ? (this._playtime + pausedTime) : (Date.now() - startTime + this._playtime)) / 1000);
    69.     };
    70. })();
    复制代码




    本贴来自国际rpgmaker官方论坛作者:ChampX处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/accurate-playtime.104735/
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-8-1 02:36 , Processed in 0.062741 second(s), 52 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表