农场模块使用事件系统实现模块间的松耦合通信,通过发布和订阅事件,实现不同模块之间的交互。本文档说明了农场模块中定义的事件类型和监听的事件。
农场模块会在特定操作完成后发出以下事件:
当用户在土地上种植作物时触发此事件。
属性:
userId: 用户IDlandId: 土地IDseedId: 种子IDcropId: 作物ID当用户收获作物时触发此事件。
属性:
userId: 用户IDlandId: 土地IDcropId: 作物IDseedId: 种子IDoutputAmount: 产出数量当用户升级土地时触发此事件。
属性:
userId: 用户IDlandId: 土地IDoldType: 旧土地类型newType: 新土地类型当用户升级房屋时触发此事件。
属性:
userId: 用户IDoldLevel: 旧等级newLevel: 新等级当作物遭遇灾害时触发此事件。
属性:
userId: 用户IDcropId: 作物IDdisasterType: 灾害类型农场模块会监听以下来自其他模块的事件:
当用户物品发生变化时,物品模块会触发此事件,农场模块监听此事件以执行相应操作。
来源:App\Module\GameItems\Events\ItemChangedEvent
属性:
userId: 用户IDitemId: 物品IDchangeType: 变更类型 (add/remove)amount: 变更数量reason: 变更原因当用户使用宠物技能时,宠物模块会触发此事件,农场模块监听此事件以执行相应操作。
来源:App\Module\Pet\Events\PetSkillUsedEvent
属性:
userId: 用户IDpetId: 宠物IDskillId: 技能IDparams: 技能参数以下是农场模块中所有事件的完整列表,包括发出的事件和监听的事件。
| 事件名称 | 事件类 | 触发条件 | 包含数据 | 用途 |
|---|---|---|---|---|
| 作物种植事件 | 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 | 通知其他模块用户处理了灾害 |
| 事件名称 | 事件类 | 来源模块 | 监听目的 | 处理逻辑 |
|---|---|---|---|---|
| 物品变更事件 | ItemChangedEvent | GameItems | 处理与农场相关的物品变更 | 处理种子、化肥、工具等物品的变更 |
| 宠物技能使用事件 | PetSkillUsedEvent | Pet | 处理与农场相关的宠物技能 | 处理自动收菜、自动播种、除草等宠物技能 |
| 用户注册事件 | UserRegisteredEvent | User | 初始化用户农场 | 为新注册用户创建农场记录和初始土地 |
| 每日重置事件 | DailyResetEvent | System | 处理农场每日重置 | 重置每日限制、检查房屋降级等 |
| 登录成功事件 | LoginSuccessEvent | AppGame | 处理用户登录后的农场相关操作 | 更新用户登录时间、处理离线收益、检查农场状态 |
| 事件类 | 监听器类 | 处理方法 |
|---|---|---|
| ItemChangedEvent | ItemChangedListener | handle() |
| PetSkillUsedEvent | PetSkillUsedListener | handle() |
| UserRegisteredEvent | UserRegisteredListener | handle() |
| DailyResetEvent | DailyResetListener | handle() |
| LoginSuccessEvent | LoginSuccessListener | handle() |
除了事件系统外,模块间还通过直接的服务调用进行交互,特别是对于核心业务流程。
农场模块提供以下服务接口供其他模块调用:
| 服务方法 | 调用模块 | 用途 | 参数 | 返回值 |
|---|---|---|---|---|
| unlockFeature | Quest | 解锁农场功能 | userId, featureType | bool |
| addReward | Quest | 发放农场奖励 | userId, rewardType, amount | bool |
| checkFarmCondition | Quest | 检查农场条件 | userId, conditionType | bool |
农场模块通过两种方式与其他模块交互:事件系统和服务调用。
事件系统用于处理非核心业务流程,如通知、日志、统计等。模块发出的事件包括作物种植事件、作物收获事件、土地升级事件、房屋升级事件和灾害发生事件;模块监听的事件包括物品变更事件和宠物技能使用事件。
服务调用用于处理核心业务流程,如任务系统调用农场系统的服务来解锁功能或发放奖励。这种方式保持了代码流程的清晰和可控,同时减少了模块间的耦合。
在开发过程中,应该根据具体需求选择合适的交互方式: