Conversation
1. 重构情绪恢复计算逻辑,使用浮点值保留恢复余数,跨record调用累积 2. 调整联盟沉船心情扣减规则,仅关卡进入时扣减一次,不再按战斗次数额外扣减 3. 优化record方法,仅在情绪整数变化时更新时间戳并回扣余数秒数 4. 修复情绪显示逻辑,显示实时恢复值而非缓存值
1. 重构情绪恢复计算逻辑,使用浮点值保留恢复余数,跨record调用累积 2. 调整联盟沉船心情扣减规则,仅关卡进入时扣减一次,不再按战斗次数额外扣减 3. 优化record方法,仅在情绪整数变化时更新时间戳并回扣余数秒数 4. 修复情绪显示逻辑,显示实时恢复值而非缓存值 ## 由 Sourcery 提供的摘要 使情绪恢复和联合战役自沉时的情绪扣减与游戏服务器的实际行为保持一致,并提升情绪追踪的精确度。 Bug 修复: - 修复在频繁调用 `record()` 时的情绪恢复问题:通过随时间累积小数部分的恢复量,而不是每次都将其截断。 - 修正联合战役自沉时的情绪扣减逻辑,使情绪只在每次进入关卡时扣减一次,而不是在每场内部战斗或每个战斗评分时都扣减。 - 修复情绪显示问题,使其展示实时恢复后的情绪值,而不是最后一次持久化保存的数值。 功能改进: - 调整情绪记录逻辑,仅在情绪的整数值发生变化时更新时间戳,并在多次更新之间保留(继承)情绪恢复的小数部分。 - 更新联合战役自沉流程,将情绪消耗估算为每个关卡一次战斗,并在统计有效出击次数时不再忽略战舰沉没(shipwreck)结果。 <details> <summary>Original summary in English</summary> ## Summary by Sourcery 使情绪恢复和联盟破坏(coalition scuttle)的情绪消耗行为与游戏服务器保持一致,从而提升情绪追踪的准确性以及阶段成本估算的精度。 Bug Fixes: - 修复在频繁调用 `record()` 时的情绪恢复问题,允许小数恢复值在多次更新中累积。 - 确保联盟破坏阶段在每次进入阶段时只减少一次情绪,而不是在每次内部战斗或评分时都减少。 - 修正情绪显示逻辑,改为展示实时恢复后的情绪值,而不是最后一次持久化的记录值。 Enhancements: - 优化情绪记录的持久化逻辑,仅在整数情绪值发生变化时更新时间戳,并保留累积的小数恢复时间。 - 调整联盟破坏执行逻辑,将情绪成本估算为每个阶段一次战斗,并将所有战斗(包括沉船结果)都视为有效运行。 <details> <summary>Original summary in English</summary> ## Summary by Sourcery Align emotion recovery and coalition scuttle emotion consumption with game server behavior, improving accuracy of mood tracking and stage cost estimation. Bug Fixes: - Fix emotion recovery under frequent record() calls by allowing fractional recovery to accumulate across updates. - Ensure coalition scuttle stages only reduce emotion once per stage entry instead of per internal battle or rating. - Correct emotion display to show the live recovered value rather than the last persisted record. Enhancements: - Refine emotion record persistence to update timestamps only when the integer mood value changes and to carry over fractional recovery time. - Adjust coalition scuttle execution to estimate emotion cost as a single battle per stage and to treat all battles, including shipwreck results, as valid runs. </details> </details>
1. 每日补给合并为使用珍珠采购中的逻辑进入离开好友岛屿, 修复进入较慢时的`Too many click`报错; 2. 访问岛屿添加1s的二次状态检测, 避免加载过程中UI一闪而过时, 被误识别为进入, 同时确保岛屿状态稳定, 避免后续移动丢失; 3. 退出好友岛屿的检测条件`ISLAND_ACCESS_MAP`(好友岛屿)->`ISLAND_GOTO_MAP`(自己岛屿), 超时时间20->30s; 4. 在地图切换成功、补给领取、打开珍珠售卖之后添加额外的等待, 确保状态稳定,避免吞后续触控操作; 5. minitouch的`drag_minitouch()`: 还原疑似在#218, #228 中被误删除的的触摸抬起; [之前提交的diff](b9b4c92#diff-248e172f4a9d9021e4f1ab3b368c73babe15e22ce5da11c4e8ecc8352658d01aR719) 6. minitouch的`island_swipe_hold_minitouch()`: 合并`builder.wait(hold_time)`到前一次操作, 避免重复打印`Command list empty, sending it may cause unexpected behaviour: w {hold_time}`的警告 ## Summary by Sourcery 在每日补给和珍珠购买流程中统一好友岛屿的进入与退出逻辑,并加入更严格的状态检查和等待机制,以提升在低性能设备上的可靠性。 New Features: - 引入共享的好友岛屿访问辅助方法,在继续执行操作前先验证场景是否完全加载。 Bug Fixes: - 修复好友岛屿进入与退出检测不稳定的问题,该问题会在低性能设备上导致超时、错误地将问题归类为访问错误,以及触控操作被吞掉。 - 恢复在 minitouch 拖拽操作中的缺失“触控释放”动作,防止滑动操作卡住或表现不一致。 - 移除多余的 minitouch 滑动按住命令,避免触发“Command list empty”警告。 Enhancements: - 在岛屿地图切换、每日补给交互以及珍珠交易对话框周围加入二次状态校验和更长的超时时间,确保在执行后续操作前 UI 状态稳定。 <details> <summary>Original summary in English</summary> ## Summary by Sourcery Unify friend island visit and exit logic across daily supply and pearl purchasing flows, adding more robust state checks and waits to improve reliability on slower devices. New Features: - Introduce a shared friend island visit helper that validates full scene load before proceeding. Bug Fixes: - Fix unreliable friend island entry and exit detection that caused timeouts, misclassification of access errors, and swallowed touch actions on slower devices. - Restore missing touch release in minitouch drag operations to prevent stuck or inconsistent swipe behaviour. - Eliminate redundant minitouch swipe hold commands that triggered "Command list empty" warnings. Enhancements: - Add secondary state verification and extended timeouts around island map transitions, daily supply interactions, and pearl trade dialogs to ensure UI stability before subsequent actions. </details>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Reviewer's Guide优化 Git-over-CDN 站点元数据生成与 CDN 镜像处理,修正联盟沉船情绪(士气)扣减以匹配游戏服务器行为(包括多战阶段),修复持续情绪恢复数学逻辑以保留小数级恢复值,并合并/修复岛屿好友访问与空投补给的导航逻辑,使用更可靠的进入/退出检测和触控处理。 联盟沉船多战情绪处理的时序图sequenceDiagram
participant CoalitionScuttleRun
participant Emotion as EmotionManager
participant CoalitionScuttleCombat
CoalitionScuttleRun->>Emotion: check_reduce(battle=1)
Emotion-->>CoalitionScuttleRun: [ok or ScriptEnd]
CoalitionScuttleRun->>CoalitionScuttleRun: enter_map(event, stage, mode)
CoalitionScuttleRun->>CoalitionScuttleCombat: coalition_combat()
loop per_battle
CoalitionScuttleCombat->>CoalitionScuttleCombat: combat_preparation(emotion_reduce=False)
CoalitionScuttleCombat->>CoalitionScuttleCombat: auto_search_combat_execute(emotion_reduce=(battle_count==0), fleet_index=1, expected_end=auto_search_combat_end)
alt first_battle
CoalitionScuttleCombat->>Emotion: reduce(fleet_index)
else later_battles
CoalitionScuttleCombat-->>Emotion: [no_reduce]
end
CoalitionScuttleCombat->>CoalitionScuttleCombat: [handle battle result A/B/S/D]
CoalitionScuttleCombat-->>Emotion: [no shipwreck extra reduce]
end
CoalitionScuttleCombat-->>CoalitionScuttleRun: [CampaignEnd or normal]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your Experience访问你的 dashboard 以:
Getting HelpOriginal review guide in EnglishReviewer's GuideRefines Git-over-CDN site metadata generation and CDN mirror handling, corrects coalition scuttle emotion (morale) reduction to match game server behavior including multi-battle stages, fixes continuous emotion recovery math to preserve fractional regeneration, and consolidates/fixes island friend-visit and air-drop supply navigation using more reliable enter/exit detection and touch handling. Sequence diagram for coalition scuttle multi-battle emotion handlingsequenceDiagram
participant CoalitionScuttleRun
participant Emotion as EmotionManager
participant CoalitionScuttleCombat
CoalitionScuttleRun->>Emotion: check_reduce(battle=1)
Emotion-->>CoalitionScuttleRun: [ok or ScriptEnd]
CoalitionScuttleRun->>CoalitionScuttleRun: enter_map(event, stage, mode)
CoalitionScuttleRun->>CoalitionScuttleCombat: coalition_combat()
loop per_battle
CoalitionScuttleCombat->>CoalitionScuttleCombat: combat_preparation(emotion_reduce=False)
CoalitionScuttleCombat->>CoalitionScuttleCombat: auto_search_combat_execute(emotion_reduce=(battle_count==0), fleet_index=1, expected_end=auto_search_combat_end)
alt first_battle
CoalitionScuttleCombat->>Emotion: reduce(fleet_index)
else later_battles
CoalitionScuttleCombat-->>Emotion: [no_reduce]
end
CoalitionScuttleCombat->>CoalitionScuttleCombat: [handle battle result A/B/S/D]
CoalitionScuttleCombat-->>Emotion: [no shipwreck extra reduce]
end
CoalitionScuttleCombat-->>CoalitionScuttleRun: [CampaignEnd or normal]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - 我发现了 3 个问题,并给出了一些高层反馈:
- 在
Emotion.record中,回算record_time使用的是fractional * 360 / fleet.speed;如果fleet.speed有可能为 0(例如恢复被禁用或配置错误),这里会抛出 ZeroDivisionError——建议在应用该调整前,对speed非正值进行保护。 - 在
island_swipe_hold_minitouch中,将builder.send()移动到所有 move 和wait(hold_time)之前,会改变手势的语义(现在是在真正发出任何事件之前就发生了“按住”);如果你的意图是滑动完成后再进行按住,建议在等待 hold 之前先发送 down/move 序列。
面向 AI Agent 的提示
Please address the comments from this code review:
## Overall Comments
- In `Emotion.record`, the back-calculation of `record_time` uses `fractional * 360 / fleet.speed`; if `fleet.speed` can ever be zero (e.g., disabled or misconfigured recovery), this will raise a ZeroDivisionError—consider guarding against non-positive `speed` before applying the adjustment.
- In `island_swipe_hold_minitouch`, moving the `builder.send()` so that all moves and the `wait(hold_time)` happen before the first send changes the semantics of the gesture (the hold now occurs before any events are actually sent); if the intention is to hold after the swipe is applied, consider sending the down/move sequence before the hold wait.
## Individual Comments
### Comment 1
<location path=".github/scripts/build_git_over_cdn_eo_esa.mjs" line_range="149-152" />
<code_context>
if (!Number.isInteger(options.history) || options.history < 1) {
throw new Error(`--history 必须是正整数:${options.history}`);
}
+ options.mirrorUrls = uniqueUrls([
+ options.siteUrl,
+ ...CDN_SITE_URLS,
+ ...parseUrlList(env.GOC_MIRROR_URLS),
+ ]);
</code_context>
<issue_to_address>
**issue (bug_risk):** Guard against invalid URLs in GOC_MIRROR_URLS crashing the build.
`uniqueUrls` currently calls `normalizeSiteUrl`, which does `new URL(...)`. Any malformed value in `GOC_MIRROR_URLS` will throw and terminate the build. Since this comes from user/env config, consider handling this defensively (e.g. try/catch in `uniqueUrls` with logging + skipping invalid entries, or validating in `parseUrlList` before normalization) so a single bad URL doesn’t fail the entire build.
</issue_to_address>
### Comment 2
<location path="module/combat/emotion.py" line_range="176-183" />
<code_context>
- (如联盟沉船每2分钟调用一次),恢复永远无法累积。
- 改为按实际秒数计算恢复量,与游戏服务端行为一致。
- """
- time_diff = int(current_time().timestamp()) - int(self.record.timestamp())
+ 使用连续时间恢复计算,保留浮点恢复量以累积分数部分。
+ 游戏服务端按实际经过时间精确计算恢复,每6分钟恢复speed点。
+ 旧方法用 int() 截断恢复量,每次 record() 重置时间戳后,
+ 未满1点的恢复余数被丢弃,长时间运行导致严重低估。
+ 现改为 floor() 取整保留整数部分,同时 record() 仅在整数变化时
+ 重置时间戳并回扣分数秒,确保余数可跨次累积。
+ """
+ time_diff = current_time().timestamp() - self.record.timestamp()
time_diff = max(time_diff, 0)
# speed 为每360秒的恢复量,换算为每秒恢复 speed/360 点
recovery = self.speed * time_diff / 360
self.current = min(max(self.value, 0) + int(recovery), self.max)
+ # 保留未满1点的恢复余数对应的秒数,用于 record() 回扣
+ self._fractional_seconds = recovery - int(recovery)
def get_recovered(self, expected_reduce=0):
</code_context>
<issue_to_address>
**issue (bug_risk):** Handle `speed == 0` and guard fractional-seconds backoff math.
`record()` later does `timedelta(seconds=fractional * 360 / fleet.speed)`, so a `speed` of 0 (or ≤ 0) will raise `ZeroDivisionError`. Please guard this by short‑circuiting when `fleet.speed <= 0` (e.g., skip fractional backoff and log) or by enforcing a minimum positive speed, so the new fractional logic doesn’t introduce a hard failure in unusual configurations.
</issue_to_address>
### Comment 3
<location path="module/island/island_air_drop.py" line_range="162" />
<code_context>
visit_button = self.calculate_visit_position(
air_drop_button_x, air_drop_button_y
)
- result = self.check_visit(visit_button)
- if result == "skip":
- logger.info("[岛屿-每日补给] 无法访问,跳过当前补给")
+ if not self.check_visit_friend_island(visit_button):
continue
- elif result == "success":
</code_context>
<issue_to_address>
**issue (bug_risk):** Preserve explicit timeout/error handling when visiting air-drop targets.
Previously `check_visit` differentiated `skip` vs `timeout`, and timeouts set `self.island_error = True` and aborted. Now `check_visit_friend_island` collapses all failures into a simple `continue`, so repeated timeouts never raise `island_error` and the loop just keeps scanning. If timeouts still signal a serious issue, have `check_visit_friend_island` return a structured result (e.g. success / cant_access / timeout) so `find_air_drop` can still set `island_error` and exit on timeout as before.
</issue_to_address>帮我变得更有用!请对每条评论点击 👍 或 👎,我会利用这些反馈来改进后续的评审。
Original comment in English
Hey - I've found 3 issues, and left some high level feedback:
- In
Emotion.record, the back-calculation ofrecord_timeusesfractional * 360 / fleet.speed; iffleet.speedcan ever be zero (e.g., disabled or misconfigured recovery), this will raise a ZeroDivisionError—consider guarding against non-positivespeedbefore applying the adjustment. - In
island_swipe_hold_minitouch, moving thebuilder.send()so that all moves and thewait(hold_time)happen before the first send changes the semantics of the gesture (the hold now occurs before any events are actually sent); if the intention is to hold after the swipe is applied, consider sending the down/move sequence before the hold wait.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- In `Emotion.record`, the back-calculation of `record_time` uses `fractional * 360 / fleet.speed`; if `fleet.speed` can ever be zero (e.g., disabled or misconfigured recovery), this will raise a ZeroDivisionError—consider guarding against non-positive `speed` before applying the adjustment.
- In `island_swipe_hold_minitouch`, moving the `builder.send()` so that all moves and the `wait(hold_time)` happen before the first send changes the semantics of the gesture (the hold now occurs before any events are actually sent); if the intention is to hold after the swipe is applied, consider sending the down/move sequence before the hold wait.
## Individual Comments
### Comment 1
<location path=".github/scripts/build_git_over_cdn_eo_esa.mjs" line_range="149-152" />
<code_context>
if (!Number.isInteger(options.history) || options.history < 1) {
throw new Error(`--history 必须是正整数:${options.history}`);
}
+ options.mirrorUrls = uniqueUrls([
+ options.siteUrl,
+ ...CDN_SITE_URLS,
+ ...parseUrlList(env.GOC_MIRROR_URLS),
+ ]);
</code_context>
<issue_to_address>
**issue (bug_risk):** Guard against invalid URLs in GOC_MIRROR_URLS crashing the build.
`uniqueUrls` currently calls `normalizeSiteUrl`, which does `new URL(...)`. Any malformed value in `GOC_MIRROR_URLS` will throw and terminate the build. Since this comes from user/env config, consider handling this defensively (e.g. try/catch in `uniqueUrls` with logging + skipping invalid entries, or validating in `parseUrlList` before normalization) so a single bad URL doesn’t fail the entire build.
</issue_to_address>
### Comment 2
<location path="module/combat/emotion.py" line_range="176-183" />
<code_context>
- (如联盟沉船每2分钟调用一次),恢复永远无法累积。
- 改为按实际秒数计算恢复量,与游戏服务端行为一致。
- """
- time_diff = int(current_time().timestamp()) - int(self.record.timestamp())
+ 使用连续时间恢复计算,保留浮点恢复量以累积分数部分。
+ 游戏服务端按实际经过时间精确计算恢复,每6分钟恢复speed点。
+ 旧方法用 int() 截断恢复量,每次 record() 重置时间戳后,
+ 未满1点的恢复余数被丢弃,长时间运行导致严重低估。
+ 现改为 floor() 取整保留整数部分,同时 record() 仅在整数变化时
+ 重置时间戳并回扣分数秒,确保余数可跨次累积。
+ """
+ time_diff = current_time().timestamp() - self.record.timestamp()
time_diff = max(time_diff, 0)
# speed 为每360秒的恢复量,换算为每秒恢复 speed/360 点
recovery = self.speed * time_diff / 360
self.current = min(max(self.value, 0) + int(recovery), self.max)
+ # 保留未满1点的恢复余数对应的秒数,用于 record() 回扣
+ self._fractional_seconds = recovery - int(recovery)
def get_recovered(self, expected_reduce=0):
</code_context>
<issue_to_address>
**issue (bug_risk):** Handle `speed == 0` and guard fractional-seconds backoff math.
`record()` later does `timedelta(seconds=fractional * 360 / fleet.speed)`, so a `speed` of 0 (or ≤ 0) will raise `ZeroDivisionError`. Please guard this by short‑circuiting when `fleet.speed <= 0` (e.g., skip fractional backoff and log) or by enforcing a minimum positive speed, so the new fractional logic doesn’t introduce a hard failure in unusual configurations.
</issue_to_address>
### Comment 3
<location path="module/island/island_air_drop.py" line_range="162" />
<code_context>
visit_button = self.calculate_visit_position(
air_drop_button_x, air_drop_button_y
)
- result = self.check_visit(visit_button)
- if result == "skip":
- logger.info("[岛屿-每日补给] 无法访问,跳过当前补给")
+ if not self.check_visit_friend_island(visit_button):
continue
- elif result == "success":
</code_context>
<issue_to_address>
**issue (bug_risk):** Preserve explicit timeout/error handling when visiting air-drop targets.
Previously `check_visit` differentiated `skip` vs `timeout`, and timeouts set `self.island_error = True` and aborted. Now `check_visit_friend_island` collapses all failures into a simple `continue`, so repeated timeouts never raise `island_error` and the loop just keeps scanning. If timeouts still signal a serious issue, have `check_visit_friend_island` return a structured result (e.g. success / cant_access / timeout) so `find_air_drop` can still set `island_error` and exit on timeout as before.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| options.mirrorUrls = uniqueUrls([ | ||
| options.siteUrl, | ||
| ...CDN_SITE_URLS, | ||
| ...parseUrlList(env.GOC_MIRROR_URLS), |
There was a problem hiding this comment.
issue (bug_risk): 需要防止 GOC_MIRROR_URLS 中的非法 URL 导致构建崩溃。
uniqueUrls 当前会调用 normalizeSiteUrl,而后者内部执行 new URL(...)。任何在 GOC_MIRROR_URLS 中的非法值都会抛出异常并终止构建。由于这一配置来自用户/环境变量,建议在这里做防御性处理(例如在 uniqueUrls 中用 try/catch 记录日志并跳过非法条目,或者在 parseUrlList 中先做合法性校验再归一化),以避免单个错误 URL 就导致整个构建失败。
Original comment in English
issue (bug_risk): Guard against invalid URLs in GOC_MIRROR_URLS crashing the build.
uniqueUrls currently calls normalizeSiteUrl, which does new URL(...). Any malformed value in GOC_MIRROR_URLS will throw and terminate the build. Since this comes from user/env config, consider handling this defensively (e.g. try/catch in uniqueUrls with logging + skipping invalid entries, or validating in parseUrlList before normalization) so a single bad URL doesn’t fail the entire build.
| time_diff = int(current_time().timestamp()) - int(self.record.timestamp()) | ||
| 使用连续时间恢复计算,保留浮点恢复量以累积分数部分。 | ||
| 游戏服务端按实际经过时间精确计算恢复,每6分钟恢复speed点。 | ||
| 旧方法用 int() 截断恢复量,每次 record() 重置时间戳后, | ||
| 未满1点的恢复余数被丢弃,长时间运行导致严重低估。 | ||
| 现改为 floor() 取整保留整数部分,同时 record() 仅在整数变化时 | ||
| 重置时间戳并回扣分数秒,确保余数可跨次累积。 | ||
| """ | ||
| time_diff = current_time().timestamp() - self.record.timestamp() | ||
| time_diff = max(time_diff, 0) | ||
| # speed 为每360秒的恢复量,换算为每秒恢复 speed/360 点 | ||
| recovery = self.speed * time_diff / 360 | ||
| self.current = min(max(self.value, 0) + int(recovery), self.max) | ||
| # 保留未满1点的恢复余数对应的秒数,用于 record() 回扣 | ||
| self._fractional_seconds = recovery - int(recovery) | ||
|
|
||
| def get_recovered(self, expected_reduce=0): | ||
| """计算情绪恢复到控制阈值的时间。 |
There was a problem hiding this comment.
issue (bug_risk): 需要处理 speed == 0 并保护分数秒回退的计算逻辑。
record() 之后会调用 timedelta(seconds=fractional * 360 / fleet.speed),因此当 speed 为 0(或 ≤ 0)时会抛出 ZeroDivisionError。请在 fleet.speed <= 0 时直接短路返回(例如跳过分数部分回退并记录日志),或者强制保证一个最小的正 speed,以避免新的分数逻辑在异常配置下引入硬错误。
Original comment in English
issue (bug_risk): Handle speed == 0 and guard fractional-seconds backoff math.
record() later does timedelta(seconds=fractional * 360 / fleet.speed), so a speed of 0 (or ≤ 0) will raise ZeroDivisionError. Please guard this by short‑circuiting when fleet.speed <= 0 (e.g., skip fractional backoff and log) or by enforcing a minimum positive speed, so the new fractional logic doesn’t introduce a hard failure in unusual configurations.
| visit_button = self.calculate_visit_position( | ||
| air_drop_button_x, air_drop_button_y | ||
| ) | ||
| result = self.check_visit(visit_button) |
There was a problem hiding this comment.
issue (bug_risk): 访问空投目标时需要保留原有的超时/错误显式处理。
之前的 check_visit 会区分 skip 与 timeout,并且在超时时设置 self.island_error = True 并终止。现在 check_visit_friend_island 将所有失败都折叠为简单的 continue,因此重复的超时不会再触发 island_error,循环只会持续扫描。如果超时仍然意味着严重问题,建议让 check_visit_friend_island 返回结构化结果(例如 success / cant_access / timeout),这样 find_air_drop 仍然可以在超时时设置 island_error 并按之前的行为退出。
Original comment in English
issue (bug_risk): Preserve explicit timeout/error handling when visiting air-drop targets.
Previously check_visit differentiated skip vs timeout, and timeouts set self.island_error = True and aborted. Now check_visit_friend_island collapses all failures into a simple continue, so repeated timeouts never raise island_error and the loop just keeps scanning. If timeouts still signal a serious issue, have check_visit_friend_island return a structured result (e.g. success / cant_access / timeout) so find_air_drop can still set island_error and exit on timeout as before.
Summary by Sourcery
改进 CDN 构建的 SEO 输出,修复连续情绪恢复与联盟“scuttle”情绪处理问题,并优化岛屿好友来访流程和设备输入手势。
New Features:
Bug Fixes:
Enhancements:
Original summary in English
Summary by Sourcery
Improve CDN build SEO outputs, fix continuous emotion recovery and coalition scuttle mood handling, and refine island friend-visit workflows and device input gestures.
New Features:
Bug Fixes:
Enhancements: