[item_key => ['user_id' => int, 'item_id' => int, 'instance_id' => int, 'quantity' => int]]] * * @var array */ private static array $itemDeducts = []; /** * 代币扣除数据,按用户分组 * 格式:[user_id => [coin_type => ['user_id' => int, 'type' => int, 'quantity' => int]]] * * @var array */ private static array $coinDeducts = []; /** * 添加物品扣除 * * @param int $userId 用户ID * @param int $itemId 物品ID * @param int $instanceId 物品实例ID * @param int $quantity 扣除数量 * @return void */ public static function addItemDeduct(int $userId, int $itemId, int $instanceId, int $quantity): void { $key = "{$itemId}_{$instanceId}"; if (!isset(self::$itemDeducts[$userId])) { self::$itemDeducts[$userId] = []; } if (isset(self::$itemDeducts[$userId][$key])) { // 如果已存在,累加数量 self::$itemDeducts[$userId][$key]['quantity'] += $quantity; } else { // 新增扣除记录 self::$itemDeducts[$userId][$key] = [ 'user_id' => $userId, 'item_id' => $itemId, 'instance_id' => $instanceId, 'quantity' => $quantity, ]; } } /** * 添加代币扣除 * * @param int $userId 用户ID * @param int $coinType 代币类型 * @param int $quantity 扣除数量 * @return void */ public static function addCoinDeduct(int $userId, int $coinType, int $quantity): void { if (!isset(self::$coinDeducts[$userId])) { self::$coinDeducts[$userId] = []; } if (isset(self::$coinDeducts[$userId][$coinType])) { // 如果已存在,累加数量 self::$coinDeducts[$userId][$coinType]['quantity'] += $quantity; } else { // 新增扣除记录 self::$coinDeducts[$userId][$coinType] = [ 'user_id' => $userId, 'type' => $coinType, 'quantity' => $quantity, ]; } } /** * 获取本次请求的所有扣除数据 * * @param int|null $userId 用户ID,如果为null则返回所有用户的数据 * @return array 扣除数据数组,包含items和coins */ public static function getDeducts(?int $userId = null): array { if ($userId !== null) { // 返回指定用户的扣除数据 return [ 'items' => array_values(self::$itemDeducts[$userId] ?? []), 'coins' => array_values(self::$coinDeducts[$userId] ?? []), ]; } // 返回所有用户的扣除数据,合并为一个数组 $allItems = []; $allCoins = []; foreach (self::$itemDeducts as $userItems) { $allItems = array_merge($allItems, array_values($userItems)); } foreach (self::$coinDeducts as $userCoins) { $allCoins = array_merge($allCoins, array_values($userCoins)); } return [ 'items' => $allItems, 'coins' => $allCoins, ]; } /** * 清空本次请求的扣除数据 * * @return void */ public static function clearDeducts(): void { self::$itemDeducts = []; self::$coinDeducts = []; } /** * 检查是否有扣除数据 * * @param int|null $userId 用户ID,如果为null则检查所有用户 * @return bool */ public static function hasDeducts(?int $userId = null): bool { if ($userId !== null) { return !empty(self::$itemDeducts[$userId]) || !empty(self::$coinDeducts[$userId]); } return !empty(self::$itemDeducts) || !empty(self::$coinDeducts); } /** * 获取物品扣除数据 * * @param int|null $userId 用户ID,如果为null则返回所有用户的数据 * @return array */ public static function getItemDeducts(?int $userId = null): array { if ($userId !== null) { return array_values(self::$itemDeducts[$userId] ?? []); } $allItems = []; foreach (self::$itemDeducts as $userItems) { $allItems = array_merge($allItems, array_values($userItems)); } return $allItems; } /** * 获取代币扣除数据 * * @param int|null $userId 用户ID,如果为null则返回所有用户的数据 * @return array */ public static function getCoinDeducts(?int $userId = null): array { if ($userId !== null) { return array_values(self::$coinDeducts[$userId] ?? []); } $allItems = []; foreach (self::$coinDeducts as $userCoins) { $allItems = array_merge($allItems, array_values($userCoins)); } return $allItems; } }