查看: 8|回复: 4

[Lua] 升级奖励系统:每档只领一次 + 支持补领

[复制链接]

46

主题

42

回帖

1212

积分

金牌会员

积分
1212
发表于 昨天 10:18 | 显示全部楼层 |阅读模式
分享一个升级奖励脚本,适合新区冲级活动、等级礼包、开荒福利。

功能点:
1. 按等级档位发奖励。
2. 每个档位每个角色只能领取一次。
3. 支持补领,比如玩家已经 80 级,可以一次性领取 30/50/70 档。
4. 奖励配置集中在表里,后续加档位很方便。

把 LevelReward.claim(player) 绑定到 NPC 按钮即可。

-- LevelReward.lua
-- 升级奖励:按等级档位领取,每档只领一次,支持补领

local VvApi = {}

function VvApi.getPlayerName(player)
    return player.name
end

function VvApi.getPlayerLevel(player)
    return player.level or 0
end

function VvApi.getVar(key, default)
    _G.__vv_vars = _G.__vv_vars or {}
    local v = _G.__vv_vars[key]
    if v == nil then return default end
    return v
end

function VvApi.setVar(key, value)
    _G.__vv_vars = _G.__vv_vars or {}
    _G.__vv_vars[key] = value
end

function VvApi.addItem(player, itemName, count)
    print("add item", VvApi.getPlayerName(player), itemName, count)
end

function VvApi.addMoney(player, amount)
    print("add money", VvApi.getPlayerName(player), amount)
end

function VvApi.sendMsg(player, msg)
    print(msg)
end

local LevelReward = {}

LevelReward.rewards = {
    [30] = {
        money = 100000,
        items = {
            { name = "初级强化石", count = 5 },
            { name = "随机传送石", count = 10 },
        },
    },
    [50] = {
        money = 300000,
        items = {
            { name = "高级强化石", count = 3 },
            { name = "经验卷轴", count = 2 },
        },
    },
    [70] = {
        money = 800000,
        items = {
            { name = "转生证明", count = 1 },
            { name = "稀有材料礼包", count = 1 },
        },
    },
    [90] = {
        money = 2000000,
        items = {
            { name = "神铸石", count = 2 },
            { name = "高级技能残页", count = 5 },
        },
    },
}

local function sortedLevels()
    local levels = {}
    for level in pairs(LevelReward.rewards) do
        table.insert(levels, level)
    end
    table.sort(levels)
    return levels
end

local function rewardKey(playerName, level)
    return "levelreward:" .. playerName .. ":" .. level
end

function LevelReward.claim(player)
    local name = VvApi.getPlayerName(player)
    local level = VvApi.getPlayerLevel(player)
    local claimed = 0

    for _, needLevel in ipairs(sortedLevels()) do
        if level >= needLevel and VvApi.getVar(rewardKey(name, needLevel), 0) == 0 then
            local reward = LevelReward.rewards[needLevel]

            if reward.money and reward.money > 0 then
                VvApi.addMoney(player, reward.money)
            end

            for _, item in ipairs(reward.items or {}) do
                VvApi.addItem(player, item.name, item.count)
            end

            VvApi.setVar(rewardKey(name, needLevel), 1)
            claimed = claimed + 1
        end
    end

    if claimed == 0 then
        VvApi.sendMsg(player, "当前没有可领取的升级奖励。")
        return false
    end

    VvApi.sendMsg(player, "领取成功,共领取 " .. claimed .. " 档升级奖励。")
    return true
end

return LevelReward

0

主题

158

回帖

1082

积分

金牌会员

积分
1082
发表于 昨天 22:03 | 显示全部楼层
独家版本后期最怕的不是功能少,而是脚本结构乱。

16

主题

84

回帖

1043

积分

金牌会员

积分
1043
发表于 昨天 23:20 | 显示全部楼层
独家版本后期最怕的不是功能少,而是脚本结构乱。

16

主题

84

回帖

1043

积分

金牌会员

积分
1043
发表于 1 小时前 | 显示全部楼层
精品帖子,论坛需要这种质量的内容

46

主题

42

回帖

1212

积分

金牌会员

积分
1212
楼主 发表于 1 小时前 | 显示全部楼层
功能点:
1. 按等级档位发奖励。
2. 每个档位每个角色只能领取一次。
3. 支持补领,比如玩家已经 80 级,可以一次性领取 30/50/70 档。
4. 奖励配置集中在表里,后续加档位很方便。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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