Install Steam
login
|
language
简体中文 (Simplified Chinese)
繁體中文 (Traditional Chinese)
日本語 (Japanese)
한국어 (Korean)
ไทย (Thai)
Български (Bulgarian)
Čeština (Czech)
Dansk (Danish)
Deutsch (German)
Español - España (Spanish - Spain)
Español - Latinoamérica (Spanish - Latin America)
Ελληνικά (Greek)
Français (French)
Italiano (Italian)
Bahasa Indonesia (Indonesian)
Magyar (Hungarian)
Nederlands (Dutch)
Norsk (Norwegian)
Polski (Polish)
Português (Portuguese - Portugal)
Português - Brasil (Portuguese - Brazil)
Română (Romanian)
Русский (Russian)
Suomi (Finnish)
Svenska (Swedish)
Türkçe (Turkish)
Tiếng Việt (Vietnamese)
Українська (Ukrainian)
Report a translation problem
之前想太多,与 parent 无关。两 mod 的parent.parent同为 root,彼此可以正常访问。理论上可以同时显示。
更换 parent 的做法可以改善有关问题,但定位逻辑依然有问题,并且可能带来新的问题。
主要原因在于能力勋章hook了widgets/inventorybar的 rebuild 方法,会额外调用RefreshMedalInvPos方法更新融合勋章栏位置。
该方法会更新设置融合勋章的容器的位置:self.medal_inv:SetPosition(x, medal_inv_y, 0)
其中, x 值由 getTotalW方法计算而来,x的计算会导入本地常数W、SEP、INTERSEP。45 格也有这三个常数,但与能力勋章的数值不同。更重要的是 45 格的格子数为45,这会导致计算出的 x 值远大于正常显示位置,使得融合勋章盒子显示在正常屏幕显示范围之外。
其中,medal_inv_y值为 80 或 40,这是兼容默认物品栏的设计。
与本 mod 同时开启时,能力勋章mod 会在本 mod 之后加载,两 mod 都会重写 Inventorybar:Rebuild方法,在本 mod Rebuild方法之后,能力勋章继续 hook,写入特有逻辑。mod 的 rebuild 基础上再次重写 rebuild。在本 mod 中修改 rebuild 方法势必会导致覆盖。
无法第一时间覆写RefreshMedalInvPos,需要手动触发Inventorybar:OnUpdate方法。
每次触发Inventorybar:OnUpdate时会再次判断是否已经覆写有关方法。
五一假期又重新研究了起来,终于找到了比较好的解决方案。
使用 for 循环内执行slot:DropItem()方法丢弃格子内物品时,a 可能动作不及时执行 b 如果两物品相同,并且其他格子有该物品时,使用该方法会有时会将所有同种物品一同丢弃。
·尝试解决 a 问题,研究scheduler,DoTaskInTime,BufferedAction,SendRPCToServer,没效果
·尝试解决 b 问题,使用 PushEvent、ListenForEvent 等方法将该事件关联到 slot.inst,没效果。列队行为学,没学明白
尝试修改 container 组件的 IsEmpty,都无效
简单实现:找到2484725102/main/widgets/inventorybar.lua 的NEW_Rebuild中定义的组件位置,重新定位。
有精力的情况,可以参考该 mod,完成翻页等Control功能。