最后更新时间:2023年12月
宠物暂存系统是 Game 模块提供的一个用于跟踪和记录用户宠物变更的临时存储机制,主要用于优化前端UI更新和提高用户体验。当用户宠物状态发生变化或新宠物被创建时,系统会将变更信息暂时存储,前端可以通过API获取这些变更信息,从而实现宠物变更的实时反馈。
宠物暂存系统由以下几个部分组成:
事件触发:当宠物被创建或状态发生变化时,Pet 模块会触发相应的事件。
事件监听:Game 模块中的监听器监听到事件后,会调用 PetTemp 类的方法处理临时数据。
数据暂存:PetTemp 类将宠物数据临时存储,按用户ID和宠物ID进行存储,同一宠物多次变更会覆盖之前的数据。
数据获取:前端或其他模块可以通过 PetTempService 提供的方法获取用户的宠物临时数据。
数据清理:当不再需要临时数据时,可以通过 PetTempService 提供的方法清除用户的宠物临时数据。
class PetCreatedTempDto
{
public int $petId; // 宠物ID
public string $name; // 宠物名称
public int $grade; // 宠物品阶
public int $level; // 宠物等级
public int $createdAt; // 创建时间戳
}
注意:虽然PetCreatedEvent事件只包含userId和petId属性,但在处理事件时,系统会从数据库中获取宠物的完整信息,并填充到PetCreatedTempDto中。
class PetStatusTempDto
{
public int $petId; // 宠物ID
public int $oldStatus; // 旧状态
public int $newStatus; // 新状态
public string $reason; // 变更原因
public array $data; // 附加数据
public int $updatedAt; // 更新时间戳
}
宠物模型中的重要属性:
experience(经验值):宠物的经验值,用于衡量宠物的成长进度。当经验值达到一定阈值时,宠物可以升级。在喜养操作中,经验值会增加。
stamina(体力值):宠物的体力值,表示宠物可以执行活动的能力。宠物进行某些活动(如战斗、工作等)会消耗体力值,通过喜养等方式可以恢复宠物的体力值。
game:pet:created:,后接用户ID,如 game:pet:created:123。game:pet:status:,后接用户ID,如 game:pet:status:123。$petTempService = new PetTempService();
$petCreated = $petTempService->getUserPetCreated($userId);
// 使用DTO对象的属性
$petId = $petCreated[1]->petId;
$petName = $petCreated[1]->name;
$petGrade = $petCreated[1]->grade;
$petTempService = new PetTempService();
$petCreated = $petTempService->getUserPetCreatedById($userId, $petId);
// 判断宠物是否存在
$petExists = $petCreated !== null;
$petTempService = new PetTempService();
$petStatus = $petTempService->getUserPetStatus($userId);
// 遍历所有宠物状态
foreach ($petStatus as $petId => $statusDto) {
echo "宠物ID: {$statusDto->petId}, 新状态: {$statusDto->newStatus}\n";
}
$petTempService = new PetTempService();
$petStatus = $petTempService->getUserPetStatusById($userId, $petId);
// 获取状态变更原因
$reason = $petStatus ? $petStatus->reason : null;
$petTempService = new PetTempService();
$petTempService->clearUserAllPetTemp($userId);