Example #1
0
def sendUserBenefitsIfNeed(gameId, userId, roomId):
    # vip奖励映射表
    vipmap = dizhuconf.getPublic().get('VipBenefits', {}).get('VipMap', {})
    # 玩家vip等级
    userChip = userchip.getChip(userId)
    info = hallvip.userVipSystem.getUserVip(userId)
    uservip = info.vipLevel.level if info else 0
    vipmapitem = vipmap.get(str(uservip))
    sendMinCoin = dizhuconf.getPublic().get('VipBenefits',
                                            {}).get('SendMinCoin', 0)
    if ftlog.is_debug():
        ftlog.debug('sendUserBenefitsIfNeed: vipmapitem', 'userId=', userId,
                    'userChip=', userChip, 'sendMinCoin=', sendMinCoin,
                    'vipmapitem=', vipmapitem)
    if not vipmapitem:
        return
    chip = vipmapitem.get('chip')
    sendCount = vipmapitem.get('sendCount')
    minRoomLevel = vipmapitem.get('minRoomLevel')
    if chip <= 0 or sendCount <= 0 or minRoomLevel <= 0 or userChip >= sendMinCoin:
        return

    # 发送VIP救济金
    ret = sendUserVipBenefits(userId, roomId, minRoomLevel, sendCount, chip)
    if not ret:
        return
    vipmsg = [[{
        'type': 'ttf',
        'font': 'ArialMT',
        'text': 'VIP' + str(uservip),
        'color': 0x482904
    }, {
        'type': 'ttf',
        'font': 'ArialMT',
        'text': '特权,附',
        'color': 0x482904
    }, {
        'type': 'ttf',
        'font': 'ArialMT',
        'text': '+' + str(chip),
        'color': 0xFF0000
    }, {
        'type': 'ttf',
        'font': 'ArialMT',
        'text': '金!',
        'color': 0x482904
    }]]

    if ftlog.is_debug():
        ftlog.debug('sendUserBenefitsIfNeed:', 'userId=', userId, 'uservip=',
                    uservip)

    mo = MsgPack()
    mo.setCmd('table_call')
    mo.setResult('gameId', gameId)
    mo.setResult('userId', userId)
    mo.setResult('action', 'benefits')
    mo.setResult('benefits', 1)
    mo.setResult('message', json.dumps(vipmsg))
    router.sendToUser(mo, userId)
Example #2
0
def buildMatchTimeForDisplay(roomInfo, isFromCoinRoom, timestamp):
    if roomInfo.startType != MatchType.TIMING or not roomInfo.startTime:
        return None

    nextMatchTimeConf = dizhuconf.getPublic().get('nextmatchtime')
    if not nextMatchTimeConf:
        if ftlog.is_debug():
            ftlog.debug(
                'dizhuhallinfo.buildMatchTimeForDisplay NotNextMatchTimeConf roomId=',
                roomInfo.roomId, 'isFromCoinRoom=', isFromCoinRoom,
                'startTime=', roomInfo.startTime)

    nowTime = datetime.fromtimestamp(timestamp)
    startTime = datetime.fromtimestamp(roomInfo.startTime)
    timeFormat = '%H:%M'
    if ftlog.is_debug():
        ftlog.debug('dizhuhallinfo.buildMatchTimeForDisplay roomId=',
                    roomInfo.roomId, 'isFromCoinRoom=', isFromCoinRoom,
                    'startTime=', startTime)

    if isFromCoinRoom and not nextMatchTimeConf.get('coinRoomShowDayInfo'):
        return startTime.strftime(timeFormat)

    # 在此获取日期的显示信息了:今天明天,后天还是显示日期
    dateInfo = getNextMatchDateInfo(nowTime, startTime, nextMatchTimeConf)
    return dateInfo + startTime.strftime(timeFormat)
    def _doMatchQuickStart(self):
        tableInfo = self._match_table_info

        userInfos = tableInfo['userInfos']
        userIds = []
        userSeatList = []

        for i, userInfo in enumerate(userInfos):
            this_seat = self.seats[i]
            userIds.append(userInfo['userId'])
            this_seat.userId = userInfo['userId']
            this_seat.state = TYSeat.SEAT_STATE_WAIT
            this_seat.call123 = -1
            userSeatList.append((userInfo['userId'], i + 1))

        # 初始化用户数据
        for x in xrange(len(self.players)):
            self.players[x].initUser(0, 1)

        ctrlRoomId = self.room.ctrlRoomId
        ctrlRoomTableId = ctrlRoomId * 10000
        for userId, seatId in userSeatList:
            onlinedata.removeOnlineLoc(userId, ctrlRoomId, ctrlRoomTableId)
            onlinedata.addOnlineLoc(userId, self.roomId, self.tableId, seatId)
            if ftlog.is_debug():
                ftlog.debug("|locList:",
                            onlinedata.getOnlineLocList(userId),
                            caller=self)

        # 做一个延迟
        delayConf = dizhuconf.getPublic().get('matchAnimationDelay', '')
        inter = delayConf.get('waitToNextMatch', 3)
        FTTasklet.getCurrentFTTasklet().sleepNb(inter)

        for x in xrange(len(self.seats)):
            this_seat = self.seats[x]
            if this_seat.userId > 0:
                mq = MsgPack()
                mq.setCmd('quick_start')
                mq.setResult('userId', this_seat.userId)
                mq.setResult('gameId', self.gameId)
                mq.setResult('roomId', self.roomId)
                mq.setResult('tableId', self.tableId)
                mq.setResult('seatId', x + 1)
                # 发送用户的quick_start
                router.sendToUser(mq, this_seat.userId)

        # 发送table_info
        self.gamePlay.sender.sendTableInfoResAll()

        delay = self._playAnimation(userInfos)

        if delay > 0:
            FTTasklet.getCurrentFTTasklet().sleepNb(delay)

        for x in xrange(len(self.players)):
            self.gamePlay.doReady(self.players[x], False)

        self._sendRanks(userInfos)
Example #4
0
 def _getWaitToNextMatchInter(self):
     mnotes = self.matchTableInfo['mnotes']
     isStartStep = mnotes.get('isStartStep', False)
     if isStartStep:
         # 第一个阶段不做延迟
         return 0
     delayConf = dizhuconf.getPublic().get('matchAnimationDelay', '')
     return delayConf.get('waitToNextMatch', 3)
Example #5
0
 def _getWaitToNextMatchInter(self):
     tableInfo = self.table.matchTableInfo
     isStartStage = tableInfo.get('stage', {}).get('isStartStage', False)
     if isStartStage:
         # 第一个阶段不做延迟
         return 0
     delayConf = dizhuconf.getPublic().get('matchAnimationDelay', '')
     return delayConf.get('waitToNextMatch', 3)
Example #6
0
def getMatchRankConf():
    timestamp = pktimestamp.getCurrentTimestamp()
    matchRankConfList = dizhuconf.getPublic().get('matchRankConfig1', [])
    for matchRankConf in matchRankConfList:
        periods = matchRankConf.get('periods', [])
        if not periods:
            return matchRankConf.get('ranks')
        for timePeriod in periods:
            if isInTimePeriod(timestamp, timePeriod):
                return matchRankConf.get('ranks')
    return None
Example #7
0
def buildPlayerCountDisplay(roomInfo):
    '''
    返回指定比赛房间的在线人数描述信息
    '''
    if ftlog.is_debug():
        ftlog.debug('dizhuhallinfo.buildPlayerCountDisplay', 'roomId=',
                    roomInfo.roomId, 'playerCount=', roomInfo.playerCount)
    peopleNumber_online = dizhuconf.getPublic().get(
        'match_v3_77', {}).get('peopleNumber_online')
    return strutil.replaceParams(peopleNumber_online,
                                 {'people_number': roomInfo.playerCount})
Example #8
0
def buildSigninCountDisplay(roomInfo):
    '''
    返回指定比赛房间的报名人数描述信息
    '''
    if ftlog.is_debug():
        ftlog.debug('dizhuhallinfo.buildSigninCountDisplay', 'roomId=',
                    roomInfo.roomId, 'signinCount=', roomInfo.signinCount)
    peopleNumber_signup = dizhuconf.getPublic().get(
        'match_v3_77', {}).get('peopleNumber_signup')
    return strutil.replaceParams(peopleNumber_signup,
                                 {'people_number': roomInfo.signinCount})
    def _getAnimationDelay(self, animationType, isStartStep, clientId):
        _, clientVer, _ = strutil.parseClientId(clientId)
        if str(clientVer) < 3.77:
            return self.MSTART_SLEEP

        delayConf = dizhuconf.getPublic().get('matchAnimationDelay')
        if not delayConf:
            return 3
        valKey = 'startStep'
        if not isStartStep:
            valKey = 'type' + str(animationType)
        return delayConf.get(valKey, 3)
Example #10
0
 def __getAnimationInter(self, AnimationType, isStartStep, clientVer):
     if clientVer<3.77:
         return self.MSTART_SLEEP
     
     delayConf = dizhuconf.getPublic().get('matchAnimationDelay', '')
     if not delayConf:
         if isStartStep:
             return 5
         return 3
     valKey = 'startStep'
     if not isStartStep:
         valKey = 'type'+str(AnimationType)
     return delayConf.get(valKey, 3)
Example #11
0
    def _onSitdown(self, event):
        if ftlog.is_debug():
            ftlog.debug('DizhuTableProtoArenaMatch._onSitdown', 'tableId=',
                        event.table.tableId, 'seatId=', event.seat.seatId,
                        'userId=', event.seat.userId)

        if event.table.idleSeatCount == 0:
            delayConf = dizhuconf.getPublic().get('matchAnimationDelay', '')
            inter = delayConf.get('waitToNextMatch', 3)
            FTTasklet.getCurrentFTTasklet().sleepNb(inter)

            for seat in event.table.seats:
                self.sendQuickStartRes(seat, True, TYRoom.ENTER_ROOM_REASON_OK)

            # 所有人都坐下后发tableInfo
            self.sendTableInfoResAll()

            # 向前端发送牌桌动画信息
            delay = self._playAnimation()
            if delay > 0:
                FTTasklet.getCurrentFTTasklet().sleepNb(delay)

            if event.table.runConf.isSitDownAutoReady:
                self._sendRanks()
Example #12
0
def getWarmupSystemConfig():
    '''
    获得热身系统的配置
    '''
    return dizhuconf.getPublic().get('warmupSystem', {})
Example #13
0
def fillMatchInfo(gameId, userId, clientId, room, roomInfo, timestamp):
    # TODO 过滤地主版本
    if ftlog.is_debug():
        ftlog.debug('dizhuhallinfo.fillMatchInfo:', 'userId=', userId, 'room=',
                    room, 'roomInfo=', roomInfo.__dict__, 'roomInf.fees=',
                    roomInfo.fees)
    room['signupState'] = isSignin(userId, roomInfo)
    if roomInfo.startType == MatchType.TIMING:
        room['matchType'] = 'TIMING'
    else:
        room['matchType'] = 'USER_COUNT'

    # 按规则显示人数信息
    roomconf = gdata.getRoomConfigure(roomInfo.roomId)
    tipinfo = roomconf.get('matchListPeopleNumberTip', '暂未开始报名')
    isArena = roomconf.get('typeName') in ('arena_match', 'dizhu_arena_match')
    peopleNumberBase = max(roomInfo.playerCount, roomInfo.signinCount)
    if ftlog.is_debug():
        ftlog.debug('dizhuhallinfo.fillMatchInfo:', 'userId=', userId,
                    'roomId=', roomInfo.roomId, 'isArena=', isArena,
                    'peopleNumberBase=', peopleNumberBase)
    if isArena:
        peopleNumber = str(peopleNumberBase * 9)
        startTime = roomconf.get('matchConf', {}).get('startTime')
        stopTime = roomconf.get('matchConf', {}).get('stopTime')
        if ftlog.is_debug():
            ftlog.debug('dizhuhallinfo.fillMatchInfo:ArenaMatch', 'userId=',
                        userId, 'roomId=', roomInfo.roomId, 'startTime=',
                        startTime, 'stopTime=', stopTime, 'peopleNumber=',
                        peopleNumber)
        if checkTime(startTime, stopTime):
            room['peopleNumber'] = peopleNumber
        else:
            room['peopleNumber'] = tipinfo
    else:
        if roomInfo.startType == MatchType.TIMING:
            peopleNumber = str(roomInfo.playerCount + roomInfo.signinCount)
            curstamp = pktimestamp.getCurrentTimestamp()
            if ftlog.is_debug():
                ftlog.debug('dizhuhallinfo.fillMatchInfo:MatchType.TIMING',
                            'userId=', userId, 'roomId=', roomInfo.roomId,
                            'peopleNumber=', peopleNumber,
                            'roomInfo.startTime=', roomInfo.startTime,
                            'roomInfo.signinTime=', roomInfo.signinTime,
                            'curstamp=', curstamp)
            if not roomInfo.startTime or not roomInfo.signinTime:
                room['peopleNumber'] = peopleNumber
            else:
                if curstamp < roomInfo.signinTime:  # 报名未开始
                    room['peopleNumber'] = tipinfo
                else:
                    room['peopleNumber'] = peopleNumber

        elif roomInfo.startType == MatchType.USER_COUNT:
            peopleNumber = str(peopleNumberBase)
            if ftlog.is_debug():
                ftlog.debug('dizhuhallinfo.fillMatchInfo:MatchType.USER_COUNT',
                            'userId=', userId, 'roomId=', roomInfo.roomId,
                            'peopleNumber=', peopleNumber,
                            'roomInfo.playerCount=', roomInfo.playerCount,
                            'roomInfo.signinCount=', roomInfo.signinCount)
            room[
                'peopleNumber'] = peopleNumber if roomInfo.playerCount > 0 else '0'
        else:
            room['peopleNumber'] = '0'

    if ftlog.is_debug():
        ftlog.debug('dizhuhallinfo.fillMatchInfo:result', 'userId=', userId,
                    'roomId=', roomInfo.roomId, 'room.peopleNumber=',
                    room.get('peopleNumber'))

    ## 报名费自动填充
    # signupFee = room.get('signupFee', {})
    # if not signupFee.get('desc'):
    #     signupFee['desc'] = buildFeeDisplay(room, roomInfo)
    # room['signupFee'] = signupFee

    nextTimeDisplay = buildMatchTimeForDisplay(roomInfo, False, timestamp)
    if nextTimeDisplay:
        room['condition'] = nextTimeDisplay

    if roomInfo.startTime:
        room['matchStamp'] = roomInfo.startTime
        room['nowStamp'] = timestamp

        startTimeDT = datetime.fromtimestamp(roomInfo.startTime)
        ## 格式化比赛时间字符串
        matchCondition = room.get('matchCondition', {})
        matchCondition['bottom'] = startTimeDT.strftime('%H:%M')

        ## 根据配置生成,年月日日期字符串
        conditionType = matchCondition.get('type')
        if conditionType == 'datetime':
            datetimeTopDate = dizhuconf.getPublic().get('datetime_topdate')
            try:
                matchCondition['top'] = startTimeDT.strftime(datetimeTopDate)
            except:
                matchCondition['top'] = startTimeDT.strftime('%m月%d日')
Example #14
0
 def getConf(cls, key, default=None):
     return dizhuconf.getPublic().get('erdayi.misc', {}).get(key, default)
Example #15
0
def sendUserBenefitsIfNeed(gameId, userId, roomId, timestamp):
    benefitsSend, userBenefits = hallbenefits.benefitsSystem.sendBenefits(
        gameId, userId, timestamp)
    ftlog.debug('sendUserBenefitsIfNeed', 'userId=', userId, 'benefitsSend=',
                benefitsSend)
    if benefitsSend:
        ## vip奖励映射表
        vipmap = dizhuconf.getPublic().get('VipBenefits', {}).get('VipMap', {})
        ## 玩家vip等级
        info = hallvip.userVipSystem.getUserVip(userId)
        uservip = info.vipLevel.level if info else 0

        vipmsg = None
        vipmapitem = vipmap.get(str(uservip))
        ftlog.debug('sendUserBenefitsIfNeed: vipmapitem', 'userId=', userId,
                    'vipmapitem=', vipmapitem)
        if vipmapitem:
            chip = vipmapitem.get('chip')
            sendCount = vipmapitem.get('sendCount')
            minRoomLevel = vipmapitem.get('minRoomLevel')
            if chip and chip > 0 and sendCount and minRoomLevel and sendUserVipBenefits(
                    userId, roomId, minRoomLevel, sendCount, chip):
                vipmsg = [[{
                    'type': 'ttf',
                    'font': 'ArialMT',
                    'text': 'VIP' + str(uservip),
                    'color': 0x482904
                }, {
                    'type': 'ttf',
                    'font': 'ArialMT',
                    'text': '特权,附',
                    'color': 0x482904
                }, {
                    'type': 'ttf',
                    'font': 'ArialMT',
                    'text': '+' + str(chip),
                    'color': 0xFF0000
                }, {
                    'type': 'ttf',
                    'font': 'ArialMT',
                    'text': '金!',
                    'color': 0x482904
                }]]

        message = [[{
            'type': 'ttf',
            'font': 'ArialMT',
            'text': '送您%s金币救急,' % (userBenefits.sendChip),
            'color': 0x482904
        }],
                   [{
                       'type': 'ttf',
                       'font': 'ArialMT',
                       'text': '继续努力吧!',
                       'color': 0x482904
                   }],
                   [{
                       'type': 'ttf',
                       'font': 'ArialMT',
                       'text': '(今天第',
                       'color': 0x482904
                   }, {
                       'type': 'ttf',
                       'font': 'ArialMT',
                       'text': userBenefits.times,
                       'color': 0x25E10B
                   }, {
                       'type': 'ttf',
                       'font': 'ArialMT',
                       'text': '次,共%s次)' % (userBenefits.totalMaxTimes),
                       'color': 0x482904
                   }]]

        ftlog.debug('sendUserBenefitsIfNeed:', 'userId=', userId, 'uservip=',
                    uservip)

        mo = MsgPack()
        mo.setCmd('table_call')
        mo.setResult('gameId', gameId)
        mo.setResult('userId', userId)
        mo.setResult('action', 'benefits')
        mo.setResult('benefits', 1)  # 有救济金了
        mo.setResult('message', json.dumps(message))
        if vipmsg:
            mo.setResult('vipmsg', json.dumps(vipmsg))
        router.sendToUser(mo, userId)
    else:
        ftlog.debug('sendUserBenefitsIfNeed: no benefitsSend', 'userId=',
                    userId)
        mo = MsgPack()
        mo.setCmd('table_call')
        mo.setResult('gameId', gameId)
        mo.setResult('userId', userId)
        mo.setResult('action', 'benefits')
        mo.setResult('benefits', 0)  # 没有救济金了
        router.sendToUser(mo, userId)
def doChuPai(self, player, cards, mcrc, tuoGuanType):
    ftlog.debug('doChuPai tid=', self.table.tableId, 'the mcrc=', mcrc,
                'ccrc=', self.table.status.cardCrc, 'cards=', cards, 'mcrc=',
                mcrc, 'tuoGuanType=', tuoGuanType)
    if not player or self.table.status.state != DizhuState.TABLE_STATE_PLAYING:
        ftlog.warn('ERROR !!, doChuPai table.status=', self.table.status,
                   player)
        return
    # 清理超时的次数
    seat = self.table.seats[player.seatIndex]
    #seat.robotCardCount = 0
    # 首先校验出牌的CRC
    if mcrc >= 0 and mcrc != self.table.status.cardCrc:
        ftlog.warn('doChuPai the ccrc error ! mcrc=', mcrc, 'ccrc=',
                   self.table.status.cardCrc)
        self.sender.sendTableInfoRes(player.userId, player.clientId, 0)
        return
    # 托管出牌处理
    ftlog.debug("doChuPai userId=", player.userId, "card=", cards,
                "tuoGuanType=", tuoGuanType)
    if tuoGuanType != DizhuPlayer.TUGUAN_TYPE_USERACT:
        cards = self.punish.doRobotAutoCard(player.seatId, tuoGuanType)
    # 出牌数据校验
    canOutCard, cards = self._doChuPaiVerifyCard(player.seatId, cards)
    ftlog.debug('doChuPai tid=', self.table.tableId, 'canOutCard=', canOutCard,
                'cards=', cards)
    if not canOutCard:
        ftlog.warn('ERROR cardOp verifyCard error')
        return

    if not cards and self.table.status.topSeatId == player.seatId:
        ftlog.warn(
            'ERROR GameTable->doChuPai the top seat must chupai, but cards is none !'
        )
        return
    precard = seat.cards[:]
    # 出牌牌型校验
    validCards = self.card.validateCards(cards, None)
    delayNextStep = False
    if cards:
        if not validCards:
            ftlog.warn('ERROR GameTable->doChuPai the cards is invalid!',
                       'tableId=', self.table.tableId, 'seat=',
                       (player.userId, player.seatId), 'cards=', cards)
            return
        # 如果是管牌,并且(牌型不对或者牌型管不住TOPCARD)则忽略出牌
        if (self.table.status.topSeatId != 0
                and self.table.status.topSeatId != player.seatId
                and (not validCards or not self._isGreaterThan(
                    validCards, self.table.status.topCardList))):
            ftlog.warn('doChuPai seatId=', player.seatId, 'cards=', cards,
                       'topseat=', self.table.status.topSeatId, 'topcards=',
                       self.table.status.topCardList, 'validCards=',
                       validCards)
            cards = []
            validCards = None

    if cards:
        if validCards:
            if validCards.isHuoJian():
                # 火箭, 倍数翻倍
                delayNextStep = True
                self.table.status.bomb += 1
                seat.couponCard[0] += 1
            elif validCards.isZhaDan():
                # 炸弹, 倍数翻倍
                delayNextStep = True
                self.table.status.bomb += 1
                seat.couponCard[1] += 1
            elif validCards.isFeiJiDai1() or validCards.isFeiJiDai2():
                # 飞机
                seat.couponCard[2] += 1
        # 出牌处理
        self._outCard(player, seat, cards)
        # 如果出的是火箭, 那么记录另外两个玩家的ID, 需要进行快速不出牌处理
        if self.card.isDoubleKing(cards):
            for x in xrange(len(self.table.seats)):
                if x != player.seatIndex:
                    self._doubleKingNoCard[x + 1] = 1
        # 记录最后出牌的信息
        seat.outCardCount += 1
        self.table.status.topValidCard = validCards
        self.table.status.topCardList = cards
        self.table.status.topSeatId = player.seatId
    # 清除当前的计时器
    ftlog.debug('doChuPai tid=', self.table.tableId, 'seat.cards=', seat.cards,
                'topSeatId=', player.seatId, 'outCards=', cards)
    self.table.tableTimer.cancel()
    # 刷新上一次出牌
    seat.lastOutCards = seat.outCards
    seat.outCards = cards
    # 发送出牌的响应消息
    self.sender.sendChuPaiRes(player.seatId, player.userId, cards, precard,
                              tuoGuanType)
    # 牌局记录器处理
    self.table.gameRound.outCard(player.seatIndex, cards[:],
                                 self.calcCurTotalMulti())
    # BI日志汇报
    if TYPlayer.isRobot(player.userId):
        player.clientId = 'robot_3.7_-hall6-robot'

    bireport.reportCardEvent('TABLE_CARD', player.userId, self.table.gameId,
                             self.table.roomId, self.table.tableId,
                             self.table.gameRound.number, 0, 0, 0, cards,
                             player.clientId, 0, 0)

    if delayNextStep:
        interval = dizhuconf.getPublic().get('bombNextDelay', 0)
        if interval > 0:
            FTTasklet.getCurrentFTTasklet().sleepNb(interval)
    self.nextStep(player)
Example #17
0
    def _doMatchQuickStart(self):
        '''
        牌桌开始
        初始化牌桌玩家
        
        如果是机器人,根据需求初始化机器人信息
        '''
        robots = [1, 2]
        tableInfo = self._match_table_info
        userInfos = tableInfo['users']
        userIds = []
        userSeatList = []

        for i, userInfo in enumerate(userInfos):
            if userInfo['type'] == 'robot':
                userInfo['userId'] = robots.pop()

            this_seat = self.seats[i]
            userIds.append(userInfo['userId'])
            this_seat.userId = userInfo['userId']
            this_seat.state = TYSeat.SEAT_STATE_WAIT
            this_seat.call123 = -1
            userSeatList.append((userInfo['userId'], i + 1))

        # 初始化用户数据
        from dizhu.wx_resource import wx_resource
        wx_resource.initRobotSetting()
        robotCount = wx_resource.getRobotCount()
        robotRange = range(0, robotCount)
        robots = random.sample(robotRange, 3)
        for x in xrange(len(self.players)):
            self.players[x].initUser(0, 1, robots[x])

        for userId, seatId in userSeatList:
            if TYPlayer.isRobot(userId):
                continue

            onlinedata.addOnlineLoc(userId, self.roomId, self.tableId, seatId)
            if ftlog.is_debug():
                ftlog.debug("|locList:",
                            onlinedata.getOnlineLocList(userId),
                            caller=self)

        # 做一个延迟
        delayConf = dizhuconf.getPublic().get('matchAnimationDelay', '')
        inter = delayConf.get('waitToNextMatch', 3)
        FTTasklet.getCurrentFTTasklet().sleepNb(inter)

        for x in xrange(len(self.seats)):
            this_seat = self.seats[x]
            if TYPlayer.isHuman(this_seat.userId):
                mq = MsgPack()
                mq.setCmd('quick_start')
                mq.setResult('userId', this_seat.userId)
                mq.setResult('gameId', self.gameId)
                mq.setResult('roomId', self.roomId)
                mq.setResult('tableId', self.tableId)
                mq.setResult('seatId', x + 1)
                mq.setResult('isOK', True)
                # 发送用户的quick_start
                router.sendToUser(mq, this_seat.userId)

        # 发送table_info
        self.gamePlay.sender.sendTableInfoResAll()

        delay = self._playAnimation(userInfos)

        if delay > 0:
            FTTasklet.getCurrentFTTasklet().sleepNb(delay)

        for x in xrange(len(self.players)):
            self.gamePlay.doReady(self.players[x], False)

        self._sendRanks(userInfos)
Example #18
0
def getMatchHistoryConfig():
    '''
    获得比赛历时记录的配置
    '''
    return dizhuconf.getPublic().get('match_history', {})
Example #19
0
 def _getWaitToNextMatchInter(self):
     if self.matchTableInfo['step']['stageIndex'] == 0:
         # 第一个阶段不做延迟
         return 0
     delayConf = dizhuconf.getPublic().get('matchAnimationDelay', {})
     return delayConf.get('waitToNextMatch', 3)