'integer', 'current_skin_id' => 'integer', 'owned_skins' => 'string', ]; /** * 获取用户信息 * * @return BelongsTo */ public function user(): BelongsTo { return $this->belongsTo(\App\Module\User\Models\User::class, 'user_id', 'id'); } /** * 获取拥有的皮肤数组 * * @return array */ public function getOwnedSkinsArrayAttribute(): array { if (empty($this->owned_skins)) { return [1]; // 默认拥有1号皮肤 } return array_map('intval', explode(',', $this->owned_skins)); } /** * 设置拥有的皮肤数组 * * @param array $skins * @return void */ public function setOwnedSkinsArray(array $skins): void { // 确保包含1号皮肤 if (!in_array(1, $skins)) { $skins[] = 1; } // 去重并排序 $skins = array_unique($skins); sort($skins); $this->owned_skins = implode(',', $skins); } /** * 检查是否拥有指定皮肤 * * @param int $skinId * @return bool */ public function hasSkin(int $skinId): bool { return in_array($skinId, $this->getOwnedSkinsArrayAttribute()); } /** * 添加皮肤 * * @param int $skinId * @return bool 是否成功添加(如果已拥有则返回false) */ public function addSkin(int $skinId): bool { if ($this->hasSkin($skinId)) { return false; // 已经拥有 } $skins = $this->getOwnedSkinsArrayAttribute(); $skins[] = $skinId; $this->setOwnedSkinsArray($skins); return true; } /** * 切换当前皮肤 * * @param int $skinId * @return bool 是否成功切换 */ public function changeSkin(int $skinId): bool { if (!$this->hasSkin($skinId)) { return false; // 不拥有该皮肤 } $this->current_skin_id = $skinId; return true; } /** * 获取皮肤名称 * * @param int $skinId * @return string */ public static function getSkinName(int $skinId): string { $names = \App\Module\Game\Enums\SKIN::getValueDescription(); return $names[$skinId] ?? '未知皮肤'; } /** * 获取所有可用皮肤 * * @return array */ public static function getAllSkins(): array { return \App\Module\Game\Enums\SKIN::getValueDescription(); } /** * 验证皮肤ID是否有效 * * @param int $skinId * @return bool */ public static function isValidSkinId(int $skinId): bool { return $skinId >= 1 && $skinId <= 4; } }