Skip to content

Conversation

@TheManyBELL
Copy link

@TheManyBELL TheManyBELL commented Dec 6, 2025

fixes #351
涉及以下战神任务修复,由于问题原因相同一并提交,该修复的有效性已验证:

1、奇怪的情报搜集

问题描述

在击杀弗朗西斯后任务进度不更新

修复方法

问题的本质是第三个参数为int 2,但根据任务配置,infoex 中定义的值是字符串 "2"。setQuestProgress 函数接收的第三个参数是 String 类型,进度匹配是基于字符串比较的,所以任务状态没有更新。

2、人偶师的洞穴

问题描述

在到人偶师洞穴前触发并完成任务后,无法向NPC交付任务。

修复方法

同样的问题,没有正确设置任务进度

涉及以下战神任务修复:
1、奇怪的情报搜集
2、人偶师的洞穴
@TheManyBELL TheManyBELL changed the title 修复:战神任务【奇怪的情报搜集】【人偶师的洞穴】 修复:战神任务【奇怪的情报搜集】【人偶师的洞穴】Fixes #351 Dec 6, 2025
@TheManyBELL TheManyBELL changed the title 修复:战神任务【奇怪的情报搜集】【人偶师的洞穴】Fixes #351 修复:战神任务【奇怪的情报搜集】【人偶师的洞穴】 Dec 6, 2025
@sigeer
Copy link
Collaborator

sigeer commented Dec 7, 2025

1、奇怪的情报搜集
这个我试了不行

    public void setQuestProgress(int id, int infoNumber, int progress) {
        setQuestProgress(id, infoNumber, "" + progress);
    }

    public void setQuestProgress(int id, int infoNumber, String progress) {
        c.getPlayer().setQuestProgress(id, infoNumber, progress);
    }

源码这两种写法效果是一样的
#417 这是我的看法

@TheManyBELL
Copy link
Author

感谢指出问题!

关于文件缺失

结合您的看法,我重新阅读了代码:
1、Check.img.xml是任务校验的核心配置文件,定义了任务完成的各种条件
2、xml中的infoNumber机制允许一个任务引用另一个任务的进度状态
我去查看了wz与wz-zh-CN两版中的Check.img.xml,的确发现wz-zh-CN中缺少了21762的定义:

<int name="infoNumber" value="21762"/>
      <imgdir name="infoex">
        <imgdir name="0">
          <string name="value" value="2"/>
        </imgdir>
      </imgdir>

可能会导致任务系统无法识别进度要求,表现任务永远无法标记为完成。

因为项目代码本身可读性差,多类代码文件之间不能直接跳转,因此这个逻辑是我的推测

关于setQuestProgress本身

之前我并未注意到该函数有重载,这意味着改变入参类型应该是无效的;
但无论是我自身,还是#351评论区中的朋友,都通过该方式让任务变为正常可交付,这个现象目前我尚且不能解释。

一些疑问

我对您在#417中提出的解决方案有些疑问:
我尝试过删除pi.setQuestProgress(21733, 21762, 2),但结果是:(1)NPC显示任务进行中;(2)进入地图弗朗西斯不会再生成,最终表现为任务卡死。
根据我对代码的阅读,删除该行的效果为系统确实不再对21762环节进行检查,但这会导致任务21733无法完成:

# 任务21733完成逻辑
function end(mode, type, selection) {  
    // ... 对话逻辑 ...  
    if (status == 2) {  
        qm.gainExp(8000);  
        qm.teachSkill(21100000, 0, 20, -1);  
        qm.forceCompleteQuest();  // 完成任务  
        qm.dispose();  
    }  
}

但是,如果您确实通过删除该行代码让任务完成,那说明该现象同样超出我的理解(无奈)

我结合您的发现,在PR中补上了Check.img.xml的21762的定义

关于该PR是否合入,考虑到各方说法不一,建议由社区亲自验证。

@sigeer
Copy link
Collaborator

sigeer commented Dec 7, 2025

我尝试过删除pi.setQuestProgress(21733, 21762, 2),但结果是:(1)NPC显示任务进行中;(2)进入地图弗朗西斯不会再生成,最终表现为任务卡死。

可能是你之前的setQuestProgress,导致pi.getQuestProgressInt(21733, 9300345) == 0无法通过
修改portal脚本后,要执行!reloadportals才会生效,
测试任务时,建议放弃任务后重新领取任务,或者!resetquest 重置状态后再进行

@TheManyBELL
Copy link
Author

我尝试过删除pi.setQuestProgress(21733, 21762, 2),但结果是:(1)NPC显示任务进行中;(2)进入地图弗朗西斯不会再生成,最终表现为任务卡死。

可能是你之前的setQuestProgress,导致pi.getQuestProgressInt(21733, 9300345) == 0无法通过 修改portal脚本后,要执行!reloadportals才会生效, 测试任务时,建议放弃任务后重新领取任务,或者!resetquest 重置状态后再进行

确实有这个可能,我在尝试删除这行时没有去重置任务,后面就换了修改方式。
不过核心问题应该还是check.img.xml缺少定义,毕竟原版这行代码是可以正常运行的。

@sigeer
Copy link
Collaborator

sigeer commented Dec 7, 2025

是的 不过wz通常需要与客户端同步更改,这也是我没有尝试提交相关pr的原因😔
我尝试过客户端使用汉化的QuestInfo.img和未汉化的Check,Act,但是会导致闪退,这意味着两者的QuestInfo也有些许差异,这也是我在issue中怀疑zh-cn下的quest并不是简单的汉化文件,而是来自其他CMS版本的wz的替换。
最稳妥的方式是只汉化QuestInfo,其他保持原版,但是这对于替换来说又是个比较大的工作量

@SleepNap
Copy link
Member

SleepNap commented Dec 9, 2025

最终的修改是让zh-CN和en-US保持一致吗

@TheManyBELL
Copy link
Author

最终的修改是让zh-CN和en-US保持一致吗

目前讨论下来,最佳做法是在服务端的zh-CN中补全Check.img.info,但这个方法还没得到验证。

PR先不合入,等我抽空验证下方法是否有效。

@SleepNap
Copy link
Member

SleepNap commented Dec 9, 2025 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 战神职业技能任务

3 participants