|
|
发表于 2026-8-23 03:38:48
|
显示全部楼层
2026-8-19
1.修复:禁止黑暗武士和缔造者接取转职任务
目标:禁止黑暗武士与缔造者看到、接取或通过直连请求接取转职相关任务。
业务归属:任务可接取性、职业限制、任务列表下发。
2.恢复挑战任务下发、领奖与状态持久化
服务端此前没有完整初始化挑战任务数据,导致客户端挑战任务入口处于锁定状态。即使挑战任务能够显示,任务生成、进度推进、特殊任务、奖励领取、每日重置及领取状态持久化也没有完整接入现有任务系统。
此外,挑战任务进度如果沿用普通任务的 0x0021 SET_QUEST_TRIGGER 请求与 ACK 交互,可能导致客户端与服务端围绕进度同步相互回显,形成高频发包循环。历史反馈中曾出现“一秒近万次 0x0021”并导致客户端卡顿、闪退的问题。
本 MR 完成每日挑战任务的生成、下发、进度、特殊任务、奖励及持久化闭环,并将推荐地下城通关进度接入服务端权威副本结算事件。
3.修复:SP/TP技能书正确增加技能点
目标:修复 SP/TP 技能书使用时报“未知错误,无法使用物品”。
业务归属:技能成长、背包道具使用、技能点同步。
4.修复:金币罐正确发放金币
目标:修复金币罐打开后无效果,正确发放 PVF 中定义的金币并扣除罐子。
业务归属:抽奖道具、角色金币经济、背包事务。
5.修复红字装备入包后没有立刻显示异界气息污染
副本掉落拾取入包时, DungeonCombatHandler.HandleGetItem 仅发送 0x0027 拾取确认包(只含槽位号),未发送 0x000E 物品槽位更新包(含 84 字节完整物品数据,含 AmplifyType / AmplifyValue )。导致:
被异界气息污染的装备(红字)拾取入包瞬间客户端只能按默认模板渲染,不显示污染外观;
客户端要等重新进入角色( 0x000D ITEM_LIST 全量列表)才能拿到 AmplifyType=0x80 正确显示红字,入包未重新选择角色时可正常穿戴装备;
对比翻牌奖励( CardRewardNotificationSender )、商店购买、装备强化等所有其他物品变更路径,均有各自 SendUpdateItemList 调用,副本掉落拾取是唯一遗漏的路径。
修复
opService.PickupResult 新增 bool IsAmplify , TryPickup 返回时从 grant.Core.AmplifyType != 0 提取,避免向 Handler 层透传 byte 原始值与 ListType。
DungeonCombatHandler 拾取成功后,仅当 pickup.IsAmplify 为 true 时补发 0x000E 物品槽位更新(硬编码 InventoryListType.Main ,副本掉落默认进主背包),客户端立即获取完整物品数据,无需重登。
6.修复制作书升级保留装备强化/增幅/锻造/附魔属性
镇魂之封灵武器通过制作书升级为释魂之真灵武器时,强化/增幅等级、增幅属性、锻造等级、附魔卡片与升级次数全部丢失。根因是制作书走通用合成服务 InventoryCompoundItemRecipeService,该服务把源武器当作普通材料销毁后凭空生成全新产物,未复制 ItemCore 上的强化属性。
修复:材料消耗前由 TryResolveUpgradeAttributeSource 识别「唯一装备材料→唯一装备产物」的 1:1 升级场景并快照源武器 ItemCore;BuildRewardRequests 对装备产物改用 Existing 核心传入带属性的新核心(先经 TryCreateCore 取得默认耐久/封印/过期,再由 ApplyUpgradeAttributes覆写 Upgrade/AmplifyType/AmplifyValue/GenuineUpgrade/EnchantCardId/EnchantUpgradeCount 六个字段)。
守卫:仅当「恰好一件装备材料且恰好一件装备产物、数量均为 1」时才转移属性。ExpertJob 珠子合成产物非 KindEquipment,天然排除,不会把材料属性错误写到珠子上。
新增 SelfTests/CompoundRecipeUpgradeSelfTest 覆盖字段复制、守卫拒绝多装备材料/产物/非装备产物、以及端到端 TryPlanBatch+TryApplyPreparedBatch 后授予武器六项属性完整保留。
7.修复无限次使用道具不再被消耗
问题
PVF stackable type 为 [unlimited ...] 的道具(如无限猫头鹰 ID51,[unlimited waste],说明明确"可永久使用")在使用链路中没有任何特殊处理,落入通用消耗逻辑 InventoryDeleteService.TryUseStackableForClient 被无条件减 1。
商城购买的此类道具数量为 1,使用一次即归零删除并写入 SQLite;而使用响应不刷新物品栏(ItemListUpdateBody = null),客户端当场仍显示旧数据,重新选择角色后道具消失。
服务端日志实锤(副本内使用一次):
USE_STACKABLE: consumed 1x item 0x00000033 from slot 7, remaining=0
影响所有 [unlimited ...] 家族的无限次道具,不止猫头鹰。
修复
Handle_ENUM_CMDPACKET_USE_STACKABLE 在通用消耗前新增拦截:IsUnlimitedUseStackable(PVF metadata 判定 unlimited 家族)命中且物品通过存在性校验(CanUseStackableForClient)时,直接回成功 ACK,不扣数量;校验不过仍走原有通用路径。召唤金库等动作是客户端收到成功 ACK 后的本地行为,服务端无需额外处理。
测试
新增 --selftest-unlimited-stackable-use:无限猫头鹰识别、普通消耗品不误判、无效 ID 不误判、存在性校验通过、通用路径在未拦截时会删光单数量道具(固定拦截前提)。
私有部署运行验证:购买猫头鹰后副本内连续使用 3 次,日志均为 acknowledged without consumption,物品完好;同期普通消耗品照常扣减;重选角色后道具仍在。 |
|