查看: 50|回复: 31

[Lua] 成长型·灵魂共鸣”赞助神器系统。

[复制链接]

31

主题

58

回帖

1020

积分

金牌会员

积分
1020
QQ
发表于 昨天 16:05 | 显示全部楼层 |阅读模式

这个脚本摒弃了传统的“花钱买数值”模式,转而采用 “养成+解锁” 机制。玩家获得神器后初始属性平庸,必须通过击杀特定怪物、完成专属任务或在线时长来积累“灵魂值”,逐步解锁专属外观、隐藏技能和终极特权。这种设计既能保障赞助玩家的长期留存与炫耀资本,又避免了直接破坏新手期的数值平衡。
以下是该系统的核心Lua架构模板:

--[[
    成长型赞助神器 - 灵魂共鸣系统
    核心机制: 杀怪/任务积攒灵魂值 -> 阶段解锁 -> 动态属性与特权
]]--

local SOUL_WEAPON = {
    ITEM_ID = 88888,
    MAX_STAGE = 5, -- 最高觉醒阶段
   
    -- 各阶段升级所需灵魂值及解锁内容
    STAGES = {
        [1] = { req_soul = 0,     title = "沉睡的遗物",   bonus_atk = 1.0, unlock_skill = nil },
        [2] = { req_soul = 1000,  title = "微光之器",     bonus_atk = 1.5, unlock_skill = 60001 },
        [3] = { req_soul = 5000,  title = "共鸣之刃",     bonus_atk = 2.5, unlock_skill = 60002, glow = true },
        [4] = { req_soul = 20000, title = "主宰之威",     bonus_atk = 4.0, unlock_skill = 60003, mount_speed = 1.2 },
        [5] = { req_soul = 50000, title = "★神临·万界归宗★", bonus_atk = 6.0, unlock_skill = 60004, global_notify = true }
    }
}

-- 核心:获取灵魂值逻辑 (以击杀怪物为例)
function OnCreatureKill_SoulWeapon(player, creature)
    local weapon = player:GetEquippedMainHand()
    if not weapon or weapon:GetEntry() ~= SOUL_WEAPON.ITEM_ID then return end
   
    -- 防止满级后继续无效刷怪
    local currentStage = GetPlayerSoulStage(player)
    if currentStage >= SOUL_WEAPON.MAX_STAGE then return end
   
    -- 根据怪物等级动态计算灵魂值 (避免低级怪刷分)
    local levelDiff = creature:GetLevel() - player:GetLevel()
    if levelDiff < -10 then return end
   
    local soulGain = math.max(1, math.floor(creature:GetLevel() / 5))
    AddPlayerSoulPoints(player, soulGain)
   
    -- 检查是否达到下一阶段
    CheckAndPromoteStage(player)
end

-- 核心:阶段晋升与全服通告
function CheckAndPromoteStage(player)
    local stage = GetPlayerSoulStage(player)
    local nextStage = stage + 1
   
    if nextStage > SOUL_WEAPON.MAX_STAGE then return end
   
    local currentSoul = GetPlayerSoulPoints(player)
    local reqSoul = SOUL_WEAPON.STAGES[nextStage].req_soul
   
    if currentSoul >= reqSoul then
        SetPlayerSoulStage(player, nextStage)
        
        -- 应用新阶段属性与技能
        ApplyStageBonuses(player, nextStage)
        
        -- 视觉反馈
        local stageData = SOUL_WEAPON.STAGES[nextStage]
        player:SendBroadcastMessage("|cffFF00FF[神器觉醒]|r 您的神器已晋升为【" .. stageData.title .. "】!")
        
        -- 终极阶段全服广播 (满足赞助玩家情绪价值)
        if stageData.global_notify then
            SendWorldMessage("|cffFFD700【全服通告】|r 恭喜玩家 |Hplayer:" .. player:GetName() .. "|h[" .. player:GetName() .. "]|h|r 成功将赞助神器觉醒至终极形态【" .. stageData.title .. "】!天地变色,万界臣服!")
        end
    end
end

-- 辅助:读取/写入玩家灵魂数据 (需对接你的数据库API)
function GetPlayerSoulPoints(player)
    -- return QueryDB("SELECT soul_points FROM sponsor_weapon WHERE guid = ?", player:GetGUIDLow())
    return player:GetCustomData("soul_points") or 0
end

function AddPlayerSoulPoints(player, amount)
    local newPoints = GetPlayerSoulPoints(player) + amount
    player:SetCustomData("soul_points", newPoints)
    -- SaveToDB(...)
end

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 19:19 | 显示全部楼层
#在这里快速回复#ts = GetPlayerSoulPoints(player

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 19:43 | 显示全部楼层
好资源,感谢楼主!

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 19:43 | 显示全部楼层
感谢分享,学习了!

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 20:01 | 显示全部楼层
收藏了,谢谢分享!

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 20:04 | 显示全部楼层
不错不错,支持一下!

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 20:10 | 显示全部楼层
感谢分享,学习了!

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 20:14 | 显示全部楼层
不错不错,支持一下!

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 20:17 | 显示全部楼层
不错不错,支持一下!

0

主题

105

回帖

1397

积分

金牌会员

积分
1397
发表于 昨天 20:17 | 显示全部楼层
不错不错,支持一下!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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