查看: 147|回复: 0
打印 上一主题 下一主题

[交流] [公告]AddEntitySeat接口管理通知

[复制链接]

1

主题

8

回帖

4

积分

Lv.1 新手木匠

UID
5029709
小麦
0
金锭
108
下界之星
0
跳转到指定楼层
楼主
发表于 2025-3-7 18:12:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 IP:上海
尊敬的各位开发者:

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

本版积分规则

返回顶部