事件系统.md 6.5 KB

农场模块事件系统

1. 概述

农场模块使用事件系统实现模块间的松耦合通信,通过发布和订阅事件,实现不同模块之间的交互。本文档说明了农场模块中定义的事件类型和监听的事件。

2. 事件类型

2.1 发出的事件

农场模块会在特定操作完成后发出以下事件:

2.1.1 作物种植事件 (CropPlantedEvent)

当用户在土地上种植作物时触发此事件。

属性

  • userId: 用户ID
  • landId: 土地ID
  • seedId: 种子ID
  • cropId: 作物ID

2.1.2 作物收获事件 (CropHarvestedEvent)

当用户收获作物时触发此事件。

属性

  • userId: 用户ID
  • landId: 土地ID
  • cropId: 作物ID
  • seedId: 种子ID
  • outputAmount: 产出数量

2.1.3 土地升级事件 (LandUpgradedEvent)

当用户升级土地时触发此事件。

属性

  • userId: 用户ID
  • landId: 土地ID
  • oldType: 旧土地类型
  • newType: 新土地类型

2.1.4 房屋升级事件 (HouseUpgradedEvent)

当用户升级房屋时触发此事件。

属性

  • userId: 用户ID
  • oldLevel: 旧等级
  • newLevel: 新等级

2.1.5 灾害发生事件 (DisasterOccurredEvent)

当作物遭遇灾害时触发此事件。

属性

  • userId: 用户ID
  • cropId: 作物ID
  • disasterType: 灾害类型

2.2 监听的事件

农场模块会监听以下来自其他模块的事件:

2.2.1 物品变更事件 (ItemChangedEvent)

当用户物品发生变化时,物品模块会触发此事件,农场模块监听此事件以执行相应操作。

来源App\Module\GameItems\Events\ItemChangedEvent

属性

  • userId: 用户ID
  • itemId: 物品ID
  • changeType: 变更类型 (add/remove)
  • amount: 变更数量
  • reason: 变更原因

2.2.2 宠物技能使用事件 (PetSkillUsedEvent)

当用户使用宠物技能时,宠物模块会触发此事件,农场模块监听此事件以执行相应操作。

来源App\Module\Pet\Events\PetSkillUsedEvent

属性

  • userId: 用户ID
  • petId: 宠物ID
  • skillId: 技能ID
  • params: 技能参数

3. 事件列表

以下是农场模块中所有事件的完整列表,包括发出的事件和监听的事件。

3.1 发出的事件列表

事件名称 事件类 触发条件 包含数据 用途
作物种植事件 CropPlantedEvent 用户种植作物 userId, landId, seedId, cropId 通知其他模块用户种植了作物
作物收获事件 CropHarvestedEvent 用户收获作物 userId, landId, cropId, seedId, outputAmount 通知其他模块用户收获了作物,用于计算团队收益等
土地升级事件 LandUpgradedEvent 用户升级土地 userId, landId, oldType, newType 通知其他模块用户升级了土地
房屋升级事件 HouseUpgradedEvent 用户升级房屋 userId, oldLevel, newLevel 通知其他模块用户升级了房屋
灾害发生事件 DisasterOccurredEvent 作物遭遇灾害 userId, cropId, disasterType 通知其他模块作物遭遇了灾害
作物生长阶段变更事件 CropGrowthStageChangedEvent 作物生长阶段变更 userId, cropId, oldStage, newStage 通知其他模块作物生长阶段发生变化
土地状态变更事件 LandStatusChangedEvent 土地状态变更 userId, landId, oldStatus, newStatus 通知其他模块土地状态发生变化
神灵加持激活事件 GodBuffActivatedEvent 用户激活神灵加持 userId, buffType, expireTime 通知其他模块用户激活了神灵加持
神灵加持过期事件 GodBuffExpiredEvent 神灵加持过期 userId, buffType 通知其他模块用户的神灵加持已过期
灾害处理事件 DisasterHandledEvent 用户处理灾害 userId, cropId, disasterType, toolId 通知其他模块用户处理了灾害

3.2 监听的事件列表

事件名称 事件类 来源模块 监听目的 处理逻辑
物品变更事件 ItemChangedEvent GameItems 处理与农场相关的物品变更 处理种子、化肥、工具等物品的变更
宠物技能使用事件 PetSkillUsedEvent Pet 处理与农场相关的宠物技能 处理自动收菜、自动播种、除草等宠物技能
用户注册事件 UserRegisteredEvent User 初始化用户农场 为新注册用户创建农场记录和初始土地
每日重置事件 DailyResetEvent System 处理农场每日重置 重置每日限制、检查房屋降级等
登录成功事件 LoginSuccessEvent AppGame 处理用户登录后的农场相关操作 更新用户登录时间、处理离线收益、检查农场状态

3.3 事件与监听器对应关系

事件类 监听器类 处理方法
ItemChangedEvent ItemChangedListener handle()
PetSkillUsedEvent PetSkillUsedListener handle()
UserRegisteredEvent UserRegisteredListener handle()
DailyResetEvent DailyResetListener handle()
LoginSuccessEvent LoginSuccessListener handle()

4. 模块间服务调用

除了事件系统外,模块间还通过直接的服务调用进行交互,特别是对于核心业务流程。

4.1 被其他模块调用的服务

农场模块提供以下服务接口供其他模块调用:

服务方法 调用模块 用途 参数 返回值
unlockFeature Quest 解锁农场功能 userId, featureType bool
addReward Quest 发放农场奖励 userId, rewardType, amount bool
checkFarmCondition Quest 检查农场条件 userId, conditionType bool

5. 总结

农场模块通过两种方式与其他模块交互:事件系统和服务调用。

事件系统用于处理非核心业务流程,如通知、日志、统计等。模块发出的事件包括作物种植事件、作物收获事件、土地升级事件、房屋升级事件和灾害发生事件;模块监听的事件包括物品变更事件和宠物技能使用事件。

服务调用用于处理核心业务流程,如任务系统调用农场系统的服务来解锁功能或发放奖励。这种方式保持了代码流程的清晰和可控,同时减少了模块间的耦合。

在开发过程中,应该根据具体需求选择合适的交互方式:

  • 对于核心业务流程,优先使用服务调用
  • 对于非核心业务流程,优先使用事件系统