添加示例项目
This commit is contained in:
11
示例项目/整点在线奖励/Proj.ifo
Normal file
11
示例项目/整点在线奖励/Proj.ifo
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"ProjectName": "整点在线奖励",
|
||||
"ProjectDescribe": "可以设置某一个时间点 全服发放奖励",
|
||||
"ProjectAuthor": "南瓜",
|
||||
"ProjectVersion": 1.3,
|
||||
"ProjectConfig": "整点在线奖励_Lenheart.json",
|
||||
"ProjectFiles": [
|
||||
"整点在线奖励.nut"
|
||||
],
|
||||
"ProjectRunFunc": "_Dps_TimeReward_Main_"
|
||||
}
|
||||
103
示例项目/整点在线奖励/整点在线奖励.nut
Normal file
103
示例项目/整点在线奖励/整点在线奖励.nut
Normal file
@@ -0,0 +1,103 @@
|
||||
// 在线奖励活动入口点
|
||||
function _Dps_TimeReward_Main_() {
|
||||
_Dps_TimeReward_Logic_();
|
||||
}
|
||||
|
||||
// 格式化时间字符串
|
||||
function normalize_time_format(time_str) {
|
||||
local colonPos = time_str.find(":");
|
||||
if (colonPos == null) return null;
|
||||
|
||||
local hour = time_str.slice(0, colonPos).tointeger();
|
||||
local minute = time_str.slice(colonPos + 1).tointeger();
|
||||
|
||||
return format("%02d:%02d", hour, minute);
|
||||
}
|
||||
|
||||
// 在线奖励活动重载入口点
|
||||
function _Dps_TimeReward_Main_Reload_(OldConfig) {
|
||||
// 移除旧配置中的所有定时任务
|
||||
if (OldConfig && "奖励时间和内容" in OldConfig) {
|
||||
foreach(time, reward in OldConfig["奖励时间和内容"]) {
|
||||
local task_id = "TimeRewardTask_" + normalize_time_format(time);
|
||||
Timer.RemoveCronTask(task_id);
|
||||
}
|
||||
}
|
||||
|
||||
// 重新注册
|
||||
_Dps_TimeReward_Logic_();
|
||||
}
|
||||
|
||||
// 在线奖励活动逻辑入口点
|
||||
function _Dps_TimeReward_Logic_() {
|
||||
local Config = GlobalConfig.Get("整点在线奖励_Lenheart.json");
|
||||
|
||||
if(!Config["是否启用在线奖励(true启用/false不启用)"]) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 遍历配置的所有奖励时间
|
||||
foreach(time, reward in Config["奖励时间和内容"]) {
|
||||
local hour = time.slice(0, time.find(":")).tointeger();
|
||||
local minute = time.slice(time.find(":") + 1).tointeger();
|
||||
|
||||
// 为每个时间点创建独立的回调函数
|
||||
local callback = function(originalTime = time) {
|
||||
SendTimeReward(originalTime);
|
||||
}
|
||||
|
||||
// 为每个时间点注册一个定时任务
|
||||
local cronExpression = format("0 %d %d * * *", minute, hour);
|
||||
Timer.SetCronTask(callback, {
|
||||
Cron = cronExpression,
|
||||
Name = "TimeRewardTask_" + normalize_time_format(time)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 发放在线奖励
|
||||
function SendTimeReward(rewardTime) {
|
||||
local Config = GlobalConfig.Get("整点在线奖励_Lenheart.json");
|
||||
local OnlinePlayerList = World.GetOnlinePlayer();
|
||||
|
||||
// 直接使用原始时间格式查找奖励
|
||||
local reward = Config["奖励时间和内容"][rewardTime];
|
||||
if (!reward) return;
|
||||
|
||||
// 发放奖励
|
||||
foreach(SUser in OnlinePlayerList) {
|
||||
// 检查是否为假人
|
||||
local IP = _Dps_TimeReward_api.api_CUser_get_public_ip_address(SUser);
|
||||
if (!Config["是否发放奖励给假人(true发放/false不发放)"] && IP == Config["离线假人IP"]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 准备邮件奖励物品列表
|
||||
local RewardItems = [];
|
||||
foreach(itemR in reward) {
|
||||
RewardItems.append([itemR[0], itemR[1]]);
|
||||
}
|
||||
|
||||
// 发送邮件(显示时使用规范化的时间格式)
|
||||
local title = Config["邮件标题"];
|
||||
local Text = format(Config["邮件内容"], normalize_time_format(rewardTime));
|
||||
SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems);
|
||||
}
|
||||
|
||||
// 发送全服公告(显示时使用规范化的时间格式)
|
||||
World.SendNotiPacketMessage(format(Config["公告"], normalize_time_format(rewardTime)), 14);
|
||||
}
|
||||
|
||||
// API类
|
||||
class _Dps_TimeReward_api {
|
||||
// 获取玩家IP地址
|
||||
function api_CUser_get_public_ip_address(SUser){
|
||||
local s_addr = Sq_CallFunc(S_Ptr("0x084EC90A"), "int", ["pointer"], SUser.C_Object);
|
||||
if(s_addr){
|
||||
local inet_ntoa = Sq_CallFunc(S_Ptr("0x0807DDC0"), "pointer", ["int"], s_addr);
|
||||
return NativePointer(inet_ntoa).readUtf8String();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
19
示例项目/整点在线奖励/整点在线奖励_Lenheart.json
Normal file
19
示例项目/整点在线奖励/整点在线奖励_Lenheart.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"是否启用在线奖励(true启用/false不启用)":true,
|
||||
"是否发放奖励给假人(true发放/false不发放)":false,
|
||||
"离线假人IP":"10.0.0.1",
|
||||
"奖励时间和内容":{
|
||||
"12:00":[
|
||||
[3037,10],
|
||||
[3038,11]
|
||||
],
|
||||
"19:30":[
|
||||
[3037,10],
|
||||
[3038,10]
|
||||
]
|
||||
},
|
||||
"邮件标题":"每日在线福利",
|
||||
"邮件内容":"亲爱的玩家,这是[%s]的在线奖励,请查收!",
|
||||
"公告":"今日 [%s] 的在线奖励已发放,请通过邮件查收",
|
||||
"时间格式(24小时制)":"上午8点整则为08:00,晚上19点30分则为19:30,也可以是8:0来表示,也可08:0表示都是允许的"
|
||||
}
|
||||
Reference in New Issue
Block a user