def onBaseAppReady(isBootstrap): """ KBEngine method. baseapp已经准备好了 @param isBootstrap: 是否为第一个启动的baseapp @type isBootstrap: BOOL """ INFO_MSG('onBaseAppReady: isBootstrap=%s, appID=%s, bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' % \ (isBootstrap, os.getenv("KBE_COMPONENTID"), os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL"))) # 第一个启动的 baseapp 创建实体 Hall if isBootstrap: KBEngine.createBase('Hall', {})
def createPlayer(self, className): ''' 创建 Player, Account 与 Player 会在同一个进程 nick/gold 属性会在这个时候传给 Player, 这样可以在房间中看到自己和其他玩家的属性 ''' assert not self.playerid player = KBEngine.createBase(className, { 'nick': self.nick, 'gold': self.gold, }) # 相互记录 id, 用于相互调用, 避免循环引用 self.playerid = player.id player.accountid = self.id return player
def selectAvatarGame(self, dbid): """ exposed. 客户端选择某个角色进行游戏 """ DEBUG_MSG("Account[%i].selectAvatarGame:%i. self.activeCharacter=%s" % (self.id, dbid, self.activeCharacter)) # 注意:使用giveClientTo的entity必须是当前baseapp上的entity if self.activeCharacter is None: for info in self.avatars: if info["dbid"] == dbid: player = KBEngine.createBase("Avatar", {"name" : info["name"], "spaceUType" : d_avatar_inittab.datas[info["roleType"]]["spaceUType"], "position" : d_avatar_inittab.datas[info["roleType"]]["spawnPos"]}) player.accountEntity = self self.activeCharacter = player self.giveClientTo(player) else: self.giveClientTo(self.activeCharacter)
def selectAvatarGame(self, dbid): """ exposed. 客户端选择某个角色进行游戏 """ DEBUG_MSG("Account[%i].selectAvatarGame:%i. self.activeCharacter=%s" % (self.id, dbid, self.activeCharacter)) # 注意:使用giveClientTo的entity必须是当前baseapp上的entity if self.activeCharacter is None: for info in self.avatars: if info["dbid"] == dbid: player = KBEngine.createBase("Avatar", {"name" : info["name"], \ "headID" : d_avatar_inittab.datas[info["roleType"]]["headResID"], \ "modelID" : d_avatar_inittab.datas[info["roleType"]]["modelResID"], \ "spaceUType" : d_avatar_inittab.datas[info["roleType"]]["spaceUType"], \ "position" : d_avatar_inittab.datas[info["roleType"]]["spawnPos"]}) player.accountEntity = self self.activeCharacter = player self.giveClientTo(player) else: self.giveClientTo(self.activeCharacter)
def _onCheckRoomRobot(self): ''' 定时检查所有房间机器人添加或移除情况 ''' for roomid, room in self._rooms.items(): playerCount = len(room.players) seatMin = cfg_room.game_seat_min[room.className] robotCount = len(room.robots) if playerCount and robotCount < playerCount and playerCount < seatMin: ''' 添加机器人 ''' goldMin = cfg_room.game_level[room.level]['goldMin'] player = KBEngine.createBase( cfg_room.game_player_classname[room.className], { 'isRobot': 1, 'nick': 'robot' + str(random.randint(1, 500)), 'gold': goldMin + random.randint(500, 3000) }) room.robots.append(player) self._doPlayerJoinRoom(player, roomid) elif playerCount and playerCount == robotCount: ''' 移除机器人 ''' robot = room.robots.pop() self.doPlayerLeaveRoom(robot.id) robot.whenLoseCell().then(robot.destroy)