fix: miscalculate item original TP on Tank Transportation - #137
Conversation
|
现在的TP算出来好像还会算多一点点,烦请老师先等下我晚点再去开一把看看检查一下。 |
|
感谢修复,这个 PR 对 regression 的判断和计算结果本身看起来是成立的:member item 只有 1. master data 或许更适合在 adapter 层合并目前 PR 把 能否考虑在这个 adapter 边界把二者规范化一次,例如: const [member, master] = equip ?? []
return member ? { ...master, ...member } : null这里 member 放在后面,避免 master 的 2. 测试中建议明确区分 member item 与 enriched item把最后一个测试里的 建议增加一个类似的 helper: const memberItem = (slotitemId: number) => ({ api_slotitem_id: slotitemId })并考虑把现有 相关的 17 个 transport/view-model 测试和 lint 在 PR head 上都通过了。 |
|
再补充一个仅针对 TP 计算公式结构的建议。 这个 PR 对 regression 的修复是必要的,但在 我建议后续将它重构为一条明确的计算公式: 计算模块可以只接受已经规范化的输入: interface TransportItem {
itemId: number
category: number
}
interface TransportShip {
shipId: number
shipType: number
eligible: boolean
items: readonly TransportItem[]
}普通运输和 Landing Operation 之间的差异则作为模块内部的规则数据,而不是分散在多个 helper 的条件分支里: interface TransportRule {
baseMultiplier: {
numerator: number
denominator: number
}
itemBonusById: Readonly<Record<number, number>>
}唯一的
倍率可以用 Math.floor(
(base * numerator + (itemBonus + fleetBonus) * denominator) /
denominator
)
{
planned: score(ships, rule),
deliverable: score(
ships.filter(ship => ship.eligible),
rule,
),
}这也能消除当前 迁移期间, 这样 TP 的实现结构能够直接对应资料中的计算公式,同时也能把 member/master 数据的整理与业务计算本身分开。 |
|
我可以先把 master data 的部分给整了,先解决漏算的核心问题 |
…eet TP seperately
|
/ai-review |
There was a problem hiding this comment.
Fixes tank-transport TP by merging member+master slot-item data into poi_slot/poi_slot_ex in the two battle adapters (so item api_type[2] supplies base TP instead of 0) and switches combined-fleet TP to floor main and escort fleets separately before summing, removing the sum-then-floor carry that over-counted tank TP. Per-fleet floor math and all new test expectations verified against the tables; 45 tests, tsc, and eslint pass. Only concern: the master-merge itself is untested and the new view-model regression tests bypass it, leaving the core fix unguarded.
| type EquipSlot = [APISlotItem | null | undefined, ...unknown[]] | null | undefined | ||
| type EquipSlot = ProphetEquipEntry | null | undefined | ||
|
|
||
| const mergeEquipSlot = (entry: EquipSlot): ApiSlotItemLike | null => { |
There was a problem hiding this comment.
The fix's core — mergeEquipSlot giving member items api_type/api_name from master so base TP stops being 0 — is never exercised by any test: the new regression tests fabricate the merged shape by hand (battle-view-model.test.ts:56 and :81 put api_type directly into poi_slot) and getTransportPointFromFleets (transport.ts:216) has no master fallback, unlike getTransportPoint. A removed, mis-ordered, or master-undefined merge therefore silently reverts equipment base TP to 0 while the whole suite stays green — exactly the regression this PR claims to fix. Add an adapter-level test asserting transformToLibBattleClass/transformToDazzyDingClass emit api_type into poi_slot/poi_slot_ex (as the maintainer's review comment suggested), or fall back to the $equips store inside getTransportPointFromFleets.
好的,现在是已经可以开始看了的状态了吗,我这边觉得可以了,如果你已经改完的话,我们就 check in |
关于这个BUG的修复我这边看应该已经可以了,后续的那个公式结构的问题以后有机会再做。 |
|
好的,非常感谢,那我先合并了 |
|
好的,感谢,辛苦您了 |
目前的版本因为没有收集master数据,导致在战车运输中漏算了原始装备TP(type不存在所以取到了0),最后显示值仅包含战车增益。