修复:自动存点导致有职务用户等级反复升降的循环问题

修复 AutoSaveExp 自动存点指令中,有职务用户的等级处理逻辑:
- 职务等级改为最低要求(不足时补级),不再强制锁定
- 允许职务成员通过经验值超越职务等级
- 与 ChatController::calculateNewLevel 保持一致

之前 AutoSaveExp 每5分钟把蔚蓝的心情(LV.91/金牌聊务员)
强制降到90级,心跳60秒后又升回91并触发升级广播,
导致用户反复看到"升级到91级"的提示。
This commit is contained in:
pllx
2026-06-27 17:54:38 +08:00
parent 2ea84ed93e
commit d1409d16bb
2 changed files with 9 additions and 2 deletions
+1
View File
@@ -18,6 +18,7 @@
/.codex
/.hermes
/.reasonix
/.understand-anything
/auth.json
/node_modules
/public/build
+8 -2
View File
@@ -211,11 +211,17 @@ class AutoSaveExp extends Command
$activeUP = $user->activePosition; // 已在 refresh 后加载
if ($activeUP?->position) {
// 有在职职务:等级锁定为职务设定值,确保不被经验系统覆盖
// 有在职职务:职务等级是最低要求,允许用户通过经验值超越职务等级
$requiredLevel = (int) $activeUP->position->level;
if ($requiredLevel > 0 && $user->user_level !== $requiredLevel) {
if ($requiredLevel > 0 && $user->user_level < $requiredLevel) {
$user->user_level = $requiredLevel;
}
// 职务成员也可以按经验超越职务等级
$expLevel = Sysparam::calculateLevel($user->exp_num);
if ($expLevel > $user->user_level && $expLevel < $superLevel) {
$user->user_level = $expLevel;
$leveledUp = ($expLevel > $oldLevel);
}
} elseif ($oldLevel < $superLevel) {
// 普通用户:按经验计算并更新等级
$newLevel = Sysparam::calculateLevel($user->exp_num);