- 回帖
- 8
- 主题
- 1
- 积分
- 4
- 精华
- 0
- 注册时间
- 2018-2-8
- 最后登录
- 2025-3-7
- 在线时间
- 45 小时
- MC游龄
- 3年以上
Lv.1 新手木匠
- UID
- 5029709
- 小麦
- 0
- 金锭
- 108
- 下界之星
- 0
|
尊敬的各位开发者:
AddEntitySeat接口为实体添加座位时会存档,给实体新增的座位并不会在退出游戏时自动清除。若您的组件使用了AddEntitySeat接口,如果未做生命周期管理,会导致为一个实体添加过多座位,造成玩家无法进入存档等问题。为给各位玩家一个更加良好的游戏体验,使您在维护作品的过程中减少不必要的成本,现建议您参照以下代码进行接口生命周期管理:
- # 注,该装饰器代表监听OnMobHitMobServerEvent事件,且名称和回调函数一致,具体请参考内容库《快速mod开发模板》
- # 假设最大座位号是self.seatCount
- @Listen
- def OnMobHitMobServerEvent(self, args):
- mobId = args['mobId']
- for entityId in args['hittedMobList']:
- if CF.CreateEngineType(entityId).GetEngineTypeStr() == 'minecraft:player':
- # 循环会一直调用DeleteEntitySeat方法,直到返回False为止,即没有座位可删除时才会退出循环
- while CF.CreateRide(entityId).DeleteEntitySeat(self.seatCount):
- self.seatCount -= 1
- # 删完后再添加座位
- seatIndex = CF.CreateRide(entityId).AddEntitySeat((0, 1, 0), 0, 359)
- # 把最大座位号存入全局变量
- self.seatCount = seatIndex
- CF.CreateRide(mobId).SetRiderRideEntity(mobId, entityId, seatIndex)
- CF.CreatePlayer(mobId).ClosePlayerHitMobDetection()
复制代码 |
|