查看: 16|回复: 2

[脚本发布] VVM2每日签到系统 - Lua脚本

[复制链接]

18

主题

47

回帖

1090

积分

金牌会员

积分
1090
QQ
发表于 昨天 14:05 | 显示全部楼层 |阅读模式
本代码声明

  • 本人仅提供 VVM2 引擎 相关 Lua 代码的设计思路、逻辑框架、参考示例,不提供完整成品代码、安装程序、环境部署、使用教程、运营方案等任何可直接落地使用的内容。
  • 本人不负责安装指导、使用调试、故障修复、运营维护、技术支持等一切后续服务;
  • 不对使用者基于本思路开发、使用、运营过程中产生的任何问题(包括但不限于代码报错、程序故障、合规风险、经济损失等)承担任何法律、民事及经济责任。
  • 使用者需独立判断思路适用性,自行完成开发、安装、使用、运营全流程操作,自愿承担所有相关风险与后果。
  • 使用者必须严格遵守国家法律法规及相关平台规则,因违规使用产生的一切责任由使用者自行承担。
  • 欢迎在下方留言反馈问题~




=====================================================================================
                        VVM2每日签到系统 - Lua脚本
=====================================================================================
功能说明:
    本脚本实现一个完整的每日签到系统,支持每日登录点击签到获取奖励
    奖励包括:元宝、经验丹、绑定金币、材料礼盒
    参与条件:无等级限制,每日1次

作者: 一天三盒半
=====================================================================================

-- ========================================
-- 配置表 - 签到奖励配置
-- ========================================
local SIGN_IN_CONFIG = {
    -- NPC配置
    npc_id = 1002,                    -- NPC配置ID
    npc_name = "签到有礼",             -- NPC显示名称
    
    -- 奖励配置
    rewards = {
        { type = "gamegold", value = 50, name = "元宝" },           -- 元宝奖励
        { type = "exp", value = 10000, name = "经验" },             -- 经验奖励
        { type = "gold", value = 10000, name = "绑定金币" },        -- 绑定金币奖励
        { type = "item", value = 1001, count = 1, name = "经验丹" },-- 经验丹物品
        { type = "item", value = 1002, count = 1, name = "材料礼盒" }-- 材料礼盒物品
    },
    
    -- 签到时间配置
    reset_hour = 0,                   -- 每日重置时间(小时)
    max_sign_days = 30,               -- 最大连续签到天数
    
    -- 连续签到额外奖励
    consecutive_rewards = {
        [7] = { gamegold = 100, item = { id = 1003, count = 1 } },  -- 7天额外奖励
        [14] = { gamegold = 200, item = { id = 1004, count = 1 } }, -- 14天额外奖励
        [30] = { gamegold = 500, item = { id = 1005, count = 1 } }  -- 30天额外奖励
    }
}

-- ========================================
-- 全局变量定义
-- ========================================
local NpcLib = NpcLib or {}

-- ========================================
-- 辅助函数 - 获取今日日期字符串
-- ========================================
local function GetTodayString()
    local timestamp = os.time()
    local date = os.date("*t", timestamp)
    return string.format("%04d%02d%02d", date.year, date.month, date.day)
end

-- ========================================
-- 辅助函数 - 获取玩家最后签到日期
-- ========================================
local function GetLastSignDate(actor)
    local last_date = getplayervalue(actor, 100)  -- 使用玩家变量100存储签到日期
    return last_date or ""
end

-- ========================================
-- 辅助函数 - 设置玩家最后签到日期
-- ========================================
local function SetLastSignDate(actor, date)
    setplayervalue(actor, 100, date)
end

-- ========================================
-- 辅助函数 - 获取连续签到天数
-- ========================================
local function GetConsecutiveDays(actor)
    local days = getplayervalue(actor, 101)  -- 使用玩家变量101存储连续签到天数
    return days or 0
end

-- ========================================
-- 辅助函数 - 设置连续签到天数
-- ========================================
local function SetConsecutiveDays(actor, days)
    setplayervalue(actor, 101, days)
end

-- ========================================
-- 辅助函数 - 判断是否可以签到
-- ========================================
local function CanSignIn(actor)
    local today = GetTodayString()
    local last_date = GetLastSignDate(actor)
    
    -- 如果今天已经签到过,返回false
    if last_date == today then
        return false, "今天已经签到过了"
    end
    
    return true, "可以签到"
end

-- ========================================
-- 辅助函数 - 计算连续签到天数
-- ========================================
local function CalculateConsecutiveDays(actor)
    local today = GetTodayString()
    local last_date = GetLastSignDate(actor)
    local current_days = GetConsecutiveDays(actor)
    
    if last_date == "" then
        -- 第一次签到
        return 1
    end
    
    -- 解析日期
    local last_year = tonumber(last_date:sub(1, 4))
    local last_month = tonumber(last_date:sub(5, 6))
    local last_day = tonumber(last_date:sub(7, 8))
    
    local today_year = tonumber(today:sub(1, 4))
    local today_month = tonumber(today:sub(5, 6))
    local today_day = tonumber(today:sub(7, 8))
    
    -- 计算两个日期之间的天数差
    local last_time = os.time({year=last_year, month=last_month, day=last_day})
    local today_time = os.time({year=today_year, month=today_month, day=today_day})
    local diff_days = (today_time - last_time) / (24 * 60 * 60)
    
    if diff_days == 1 then
        -- 连续签到
        return current_days + 1
    else
        -- 断签,重新计算
        return 1
    end
end

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

15

主题

46

回帖

4万

积分

管理员

积分
41100
发表于 昨天 14:07 | 显示全部楼层
怎么看着像ai写的

18

主题

47

回帖

1090

积分

金牌会员

积分
1090
QQ
楼主 发表于 昨天 14:13 | 显示全部楼层
admin 发表于 2026-5-25 14:07
怎么看着像ai写的

小龙虾~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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