tibaiwan1888 发表于 2026-6-6 10:18:24

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

分享一个升级奖励脚本,适合新区冲级活动、等级礼包、开荒福利。

功能点:
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
    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 = 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 = {
    = {
      money = 100000,
      items = {
            { name = "初级强化石", count = 5 },
            { name = "随机传送石", count = 10 },
      },
    },
    = {
      money = 300000,
      items = {
            { name = "高级强化石", count = 3 },
            { name = "经验卷轴", count = 2 },
      },
    },
    = {
      money = 800000,
      items = {
            { name = "转生证明", count = 1 },
            { name = "稀有材料礼包", count = 1 },
      },
    },
    = {
      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

            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

qq154886255 发表于 2026-6-6 22:03:08

独家版本后期最怕的不是功能少,而是脚本结构乱。

jz9005 发表于 2026-6-6 23:20:22

独家版本后期最怕的不是功能少,而是脚本结构乱。

jz9005 发表于 2026-6-7 11:18:38

精品帖子,论坛需要这种质量的内容

tibaiwan1888 发表于 2026-6-7 11:57:45

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

qq154886255 发表于 2026-6-7 16:39:32

为测试资格而努力啊啊啊
页: [1]
查看完整版本: 升级奖励系统:每档只领一次 + 支持补领