Esempio n. 1
0
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', {})
Esempio n. 2
0
 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
Esempio n. 3
0
	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)
Esempio n. 4
0
    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)
Esempio n. 5
0
 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)