找回密码
 register
搜索
查看: 22|回复: 0

洱海月 恶人谷无法参加楼兰寻宝活动

[复制链接]
  • 打卡等级:本地老炮
  • 打卡总天数:533
  • 打卡月天数:22
  • 打卡总奖励:530
  • 最近打卡:2026-06-24 01:45:59
Waylee 发表于 2026-3-28 19:33 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×

楼兰寻宝恶人谷无法参加修复教程

1. 问题

线上反馈新门派 恶人谷 不能进楼兰寻宝。

活动脚本:

  • /home/ubuntu/Game2/services/scripts/event/huodong/seek_treasure.lua

现场表现是:

  1. 队伍人数够
  2. 等级够
  3. 人都在附近
  4. 点进入时还是被拦

实际卡在成员检查这一段,不是副本创建失败,也不是活动时间问题。


2. 先看拦截点

入口流程在 OnDefaultEvent

local ret, msg = self:CheckEnterCondition(selfId)
if ret == 0 then
    self:RetDlg(selfId, targetId, msg)
    return
end
if self:CheckMemberInfo(selfId, targetId) ~= 1 then
    return
end
self:MakeCopyScene(selfId)

真正把人拦掉的是 CheckMemberInfo

原代码里有这一句:

local bXinfaOK = self:CheckXinfaLevel(selfId,40)

这句放在队员循环里,本来就不对。循环里拿到了当前队员 objId,结果这里还是用的 selfId


3. 这次实际查到的两个问题

3.1 队员检查写错对象了

原逻辑:

for i = 1, teamSize do
    local objId = self:GetNearTeamMember(selfId, i)
    local level = self:LuaFnGetLevel(objId)
    local bXinfaOK = self:CheckXinfaLevel(selfId,40)

这里应该检查当前成员 objId,不是队长 selfId

这个问题会带来一个结果:

  • 队伍里谁能进,心法判断有时候看的是队长,不是当前成员

所以这个地方必须先改。

正确写法:

local bXinfaOK = self:CheckXinfaLevel(objId,40)

3.2 恶人谷心法编号不是旧公式那一套

CheckXinfaLevel 旧代码是按门派公式去推心法 ID:

function seek_treasure:CheckXinfaLevel(selfId, level)
    local nMenpai = self:GetMenPai(selfId)
    if nMenpai == 9 then return 0 end
    for i = 1, 6 do
        local xinfa
        if nMenpai < 9 then
            xinfa = nMenpai * 6 + i
        else
            xinfa = nMenpai * 6 + (i + 3)
        end
        local nXinfaLevel = self:LuaFnGetXinFaLevel(selfId, xinfa)
        if nXinfaLevel < level then
            return 0
        end
    end
    return 1
end

这个公式对老门派基本能用,对曼陀也刚好没出问题,但对恶人谷不对。

恶人谷入门脚本在这里:

  • /home/ubuntu/Game2/services/scripts/obj/erengu/erengu_duanyanqing.lua

里面实际发的 6 本基础心法是:

self:LuaFnSetXinFaLevel(selfId,81,10)
self:LuaFnSetXinFaLevel(selfId,82,1)
self:LuaFnSetXinFaLevel(selfId,83,1)
self:LuaFnSetXinFaLevel(selfId,84,10)
self:LuaFnSetXinFaLevel(selfId,85,10)
self:LuaFnSetXinFaLevel(selfId,86,1)

也就是恶人谷实际基础心法是:

81 82 83 84 85 86

但旧公式按门派 ID 11 算出来的是:

70 71 72 73 74 75

所以恶人谷角色一进 CheckXinfaLevel,读的就是一组错误的心法 ID,自然会被判不满足。

这就是这次恶人谷进不了楼兰寻宝的主因。


4. 修改方法

本次只动 seek_treasure.lua,不去改副本其他逻辑。

4.1 先把队员检查对象改对

把:

local bXinfaOK = self:CheckXinfaLevel(selfId,40)

改成:

local bXinfaOK = self:CheckXinfaLevel(objId,40)

4.2 单独给恶人谷返回正确的心法列表

我这里没有继续硬套原公式,而是在这个脚本里补了一个门派心法列表函数:

function seek_treasure:GetMenpaiXinfaList(nMenpai)
    if nMenpai == define.MENPAI_ATTRIBUTE.MATTRIBUTE_ERENGU then
        return {81, 82, 83, 84, 85, 86}
    end

    local xinfaList = {}
    for i = 1, 6 do
        if nMenpai < 9 then
            xinfaList[i] = nMenpai * 6 + i
        else
            xinfaList[i] = nMenpai * 6 + (i + 3)
        end
    end
    return xinfaList
end

然后把 CheckXinfaLevel 改成按列表检查:

function seek_treasure:CheckXinfaLevel(selfId, level)
    local nMenpai = self:GetMenPai(selfId)
    if nMenpai == 9 then return 0 end
    local xinfaList = self:GetMenpaiXinfaList(nMenpai)
    for i = 1, #xinfaList do
        local xinfa = xinfaList[i]
        local nXinfaLevel = self:LuaFnGetXinFaLevel(selfId, xinfa)
        if nXinfaLevel < level then
            return 0
        end
    end
    return 1
end

这样改的好处是:

  1. 恶人谷先单独兜住
  2. 老门派逻辑不动
  3. 改动面小,回归简单

5. 本次改动文件

  • /home/ubuntu/Game2/services/scripts/event/huodong/seek_treasure.lua

实际改了 3 处:

  1. CheckMemberInfo 里把 selfId 改成 objId
  2. 新增 GetMenpaiXinfaList
  3. CheckXinfaLevel 改成读取心法列表

6. 为什么曼陀没报这个问题

顺手说一下,避免后面排查时又绕回去。

曼陀门派虽然也是后加的,但它的基础心法正好是:

64 65 66 67 68 69

旧公式对门派 ID 10 算出来也正好是这组,所以它没暴露。

恶人谷不一样,恶人谷基础心法直接跳到了 81-86,所以旧代码一到这里就挂。


7. 回归怎么测

这个问题不用测太花,按下面几组过一下就够了。

7.1 恶人谷正常进场

条件:

  1. 三人组队
  2. 全员在附近
  3. 恶人谷角色等级 >= 75
  4. 恶人谷 6 本基础心法 81-86>= 40

预期:

可以正常进入楼兰寻宝

7.2 恶人谷心法不足

把任意一本恶人谷基础心法降到 39

预期:

成员检查里显示心法不满足,不能进入

7.3 混合队伍

找一个恶人谷队员,再找两个其他门派角色。

分别测两种情况:

  1. 队长达标,恶人谷队员不达标
  2. 队长不达标,恶人谷队员达标

预期:

谁不达标就拦谁,不再只跟着队长结果走

7.4 老门派回归

至少补测:

  1. 少林
  2. 逍遥
  3. 曼陀

预期:

原来能进的,改完后还是能进

8. 后面如果再碰到同类问题,优先搜这几种写法

如果别的活动也有“新门派进不去”“心法不足误判”这类问题,优先搜下面几种代码:

nMenpai * 6 + i
nMenpai * 6 + (i + 3)
local bXinfaOK = self:CheckXinfaLevel(selfId,...

重点查两件事:

  1. 心法 ID 是不是还在套老公式
  2. 队员循环里是不是又把成员写成队长了

9. 结论

这次不是楼兰寻宝活动本身有问题,是准入校验没跟上新门派。

根因就两条:

  1. 恶人谷基础心法实际是 81-86,旧公式算错了
  2. 成员检查里误用了 selfId

按上面的改法处理后,恶人谷已经可以正常参加楼兰寻宝。

您需要登录后才可以回帖 登录 | register

本版积分规则

QQ|雪舞知识库 ( 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 )|天天打卡

GMT+8, 2026-6-24 05:29 , Processed in 0.067050 second(s), 26 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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