//=============================================================================
// DailyCheckIn.js 每日签到插件(每天领取一次金币奖励,默认1000)
// 适配 RPG Maker MV / MZ。按"现实世界日期"判定,用 localStorage 持久化。
//=============================================================================
/*:
* @target MZ & MV
* @plugindesc 每日签到:每天可领取一次金币奖励(默认1000),按现实日期刷新。
* @author Assistant
*
* @param gold
* @desc 每次签到奖励的金币数量
* @default 1000
*
* @param storageKey
* @desc localStorage 记录签到日期的键名(建议项目唯一,避免串档)
* @default DailyCheckIn_lastDate
*
* @param checkinCommand
* @desc 触发签到的插件命令名(在事件"插件命令"里填此名)
* @default DailyCheckIn
*
* @param successText
* @desc 签到成功提示。%d=今日日期, %g=金币数
* @default 签到成功!今天是 %d,获得 %g 金币奖励。
*
* @param alreadyText
* @desc 今日已签到提示
* @default 今天已经签过到啦,明天再来吧。
*
* @param autoCheck
* @desc 进入地图/读档后是否自动签到(1=是,0=否,0则仅用插件命令触发)
* @default 0
*/
(function () {
'use strict';
var parameters = PluginManager.parameters('DailyCheckIn');
function num(v, def) { var n = parseInt(v, 10); return isNaN(n) ? def : n; }
function str(v, def) { return (v === undefined || v === null) ? def : String(v); }
var REWARD_GOLD = num(parameters['gold'], 1000);
var STORAGE_KEY = str(parameters['storageKey'], 'DailyCheckIn_lastDate');
var COMMAND_NAME = str(parameters['checkinCommand'], 'DailyCheckIn');
var SUCCESS_TEXT = str(parameters['successText'], '签到成功!今天是 %d,获得 %g 金币奖励。');
var ALREADY_TEXT = str(parameters['alreadyText'], '今天已经签过到啦,明天再来吧。');
var AUTO_CHECK = num(parameters['autoCheck'], 0) === 1;
// 现实世界今日日期 YYYY-MM-DD
function todayString() {
var d = new Date();
var y = d.getFullYear();
var m = ('0' + (d.getMonth() + 1)).slice(-2);
var day = ('0' + d.getDate()).slice(-2);
return y + '-' + m + '-' + day;
}
function readStored() {
try { return window.localStorage.getItem(STORAGE_KEY); }
catch (e) { return null; }
}
function writeStored(value) {
try { window.localStorage.setItem(STORAGE_KEY, value); }
catch (e) { /* 隐私模式禁用 localStorage 时忽略 */ }
}
// 核心:执行一次签到。true=本次成功领取, false=今日已签
function doCheckIn() {
var today = todayString();
if (readStored() === today) {
return false;
}
if (typeof $gameParty !== 'undefined' && $gameParty) {
$gameParty.gainGold(REWARD_GOLD);
}
writeStored(today);
return true;
}
function checkInMessage() {
var today = todayString();
if (doCheckIn()) {
return SUCCESS_TEXT.replace('%d', today).replace('%g', REWARD_GOLD);
}
return ALREADY_TEXT;
}
// 方式一:插件命令触发(推荐)。事件里加"插件命令",文本填 DailyCheckIn
var _alias_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_alias_pluginCommand.call(this, command, args);
if (command === COMMAND_NAME) {
$gameMessage.add(checkInMessage());
}
};
// 方式二:可选自动签到(autoCheck=1 时启用)
if (AUTO_CHECK) {
var _alias_MapStart = Scene_Map.prototype.start;
var _autoChecked = false;
Scene_Map.prototype.start = function () {
_alias_MapStart.call(this);
if (!_autoChecked) {
if (readStored() !== todayString()) {
doCheckIn();
$gameMessage.add(checkInMessage());
}
_autoChecked = true;
}
};
}
// 暴露全局函数,方便其它脚本/控制台手动调用
window.DailyCheckIn = {
checkIn: function () { return doCheckIn(); },
today: function () { return todayString(); }
};
Imported.DailyCheckIn = true;
})();