def __init__(self, table): super(DizhuGroupMatchSender, self).__init__(table) if not self.table : from dizhu.gametable.dizhu_table import DizhuTable self.table = DizhuTable() self._logger = Logger() self._logger.add('roomId', self.table.roomId) self._logger.add('tableId', self.table.tableId)
def newTable(self, room, tableId): ''' 此方法由系统进行调用 更具给出的房间的基本定义信息, 创建一个TYTable的实例 其必须是 poker.entity.game.table.TYTable的子类 room 桌子所属的房间的TYRoom实例 tableId 新桌子实例的ID ''' if isinstance(room, DizhuRoom): return room.newTable(tableId) else: from dizhu.gametable.dizhu_table import DizhuTable if room.roomConf['typeName'] == tyRoomConst.ROOM_TYPE_NAME_BIG_MATCH : return DizhuBigMatchTable(room, tableId) elif room.roomConf['typeName'] == tyRoomConst.ROOM_TYPE_NAME_ARENA_MATCH: return DizhuArenaMatchTable(room, tableId) elif room.roomConf['typeName'] == tyRoomConst.ROOM_TYPE_NAME_GROUP_MATCH: return DizhuGroupMatchTable(room, tableId) elif room.roomConf['typeName'] == tyRoomConst.ROOM_TYPE_NAME_ERDAYI_MATCH: from dizhu.gametable.dizhu_erdayi_match_table import DizhuErdayiMatchTable return DizhuErdayiMatchTable(room, tableId) elif room.roomConf['typeName'] == tyRoomConst.ROOM_TYPE_ASYNC_UPGRADE_HERO_MATCH: from dizhu.gametable.dizhu_hero_match_table import DizhuMillionHeroMatchTable return DizhuMillionHeroMatchTable(room, tableId) if room.roomConf['typeName'] == 'dizhuFT': return DizhuFriendTable(room, tableId) return DizhuTable(room, tableId)
def isWaitPigTable(userId, killPigLevel, room, tableId): ftlog.info('isWaitPigTable->', userId, killPigLevel, tableId) roomId = strutil.getTableRoomId(tableId) uids = DizhuTable.getSavedSeatUserId(room.tableConf['maxSeatN'], roomId, tableId) alist = [userId] for uid in uids: if uid > 0 and uid not in alist: alist.append(uid) ftlog.debug('isWaitPigTable->uids=', alist) return checkIsKillPig(tableId, killPigLevel, alist)
def __init__(self, room, tableId): DizhuTable.__init__(self, room, tableId) self.__doMatchTableClear()
def __init__(self, table): super(DizhuSender, self).__init__(table) if not self.table: from dizhu.gametable.dizhu_table import DizhuTable self.table = DizhuTable()
class DizhuSender(TYTableSender): HIDE_CARD_VER = 3.815 def __init__(self, table): super(DizhuSender, self).__init__(table) if not self.table: from dizhu.gametable.dizhu_table import DizhuTable self.table = DizhuTable() def fillCardNote(self, cardNote, cards): for card in cards: point = self.table.gamePlay.card.rule.cardToPoint(card) if point < 13: point = self.table.gamePlay.card.rule.pointToCard(point) cardNote[point] += 1 return cardNote def buildCardNote(self, seatIndex): ret = [0 for _ in xrange(15)] for i, seat in enumerate(self.table.seats): if i != seatIndex: self.fillCardNote(ret, seat.cards) if self.table.status.state < DizhuState.TABLE_STATE_PLAYING: self.fillCardNote(ret, self.table.status.baseCardList) if self.table.status.kickOutCardList: self.fillCardNote(ret, self.table.status.kickOutCardList) if self.table.gamePlay.getPlayMode() == dizhuconf.PLAYMODE_ERDOU: ret[2] = ret[3] = 0 return ret def buildStatusInfoDict(self, player): ret = self.table.status.toInfoDict() self.filterTableStat(player, ret) return ret def buildSeatInfo(self, player, seat): ret = seat.toInfoDict() if player.userId != seat.userId: return self.filterSeatInfo(player, ret) return ret # ['uid', 'state', 'robot', 'call', 'call2', 'card', # 'outcnt', 'timeoutcnt', 'show', 'couponcard', # 'voice', 'robotcards'] def filterSeatInfo(self, player, seatInfo): if (player.gameClientVer >= DizhuSender.HIDE_CARD_VER and self.table.state < DizhuState.TABLE_STATE_PLAYING): seatInfo['card'] = [-1 for _ in len(seatInfo['card'])] seatInfo['hpIn'] = [-1 for _ in len(seatInfo['hpIn'])] seatInfo['hpOut'] = [-1 for _ in len(seatInfo['hpOut'])] return seatInfo def filterTableStat(self, player, stat): if (player.gameClientVer >= DizhuSender.HIDE_CARD_VER and self.table.state < DizhuState.TABLE_STATE_PLAYING): stat['basecard'] = [-1 for _ in len(stat['basecard'])] return stat def sendRobotNotifyCallUp(self, params): hasrobot = self.table.runConfig.hasrobot ftlog.debug("|hasrobot, params", hasrobot, params, caller=self) if hasrobot: ucount, uids = self.table.getSeatUserIds() mo = self.createMsgPackRequest("robotmgr") if params: mo.updateParam(params) mo.setAction('callup') mo.setParam('userCount', ucount) mo.setParam('seatCount', len(uids)) mo.setParam('users', uids) router.sendRobotServer(mo, self.table.tableId) def sendRobotNotifyShutDown(self, params): hasrobot = self.table.runConfig.hasrobot ftlog.debug("|hasrobot, params", hasrobot, params, caller=self) if hasrobot: ucount, uids = self.table.getSeatUserIds() mo = self.createMsgPackRequest("robotmgr") if params: mo.updateParam(params) mo.setAction('shutdown') mo.setParam('userCount', ucount) mo.setParam('seatCount', len(uids)) mo.setParam('users', uids) router.sendRobotServer(mo, self.table.tableId) def sendOnlineChanged(self, player): mo = self.createMsgPackRes('table_call', 'online_changed') mo.setResult('seatId', player.seatId) mo.setResult('userId', player.userId) mo.setResult('online', 1 if self.table.seats[player.seatIndex].online else 0) for p in self.table.players: if p != player and p.userId > 0: router.sendToUser(mo, p.userId) def sendQuickStartRes(self, userId, clientId, result): ftlog.debug("|params", userId, clientId, result, caller=self) mpSitRes = self.createMsgPackRes("quick_start") mpSitRes.updateResult(result) router.sendToUser(mpSitRes, userId) def sendSitRes(self, userId, clientId, result): ftlog.debug("|params", userId, clientId, result, caller=self) _, clientVer, _ = strutil.parseClientId(clientId) mpSitRes = self.createMsgPackRes("sit") mpSitRes.updateResult(result) router.sendToUser(mpSitRes, userId) def sendTableLeaveRes(self, userId, clientId, result): ftlog.debug("|params", userId, clientId, result, caller=self) _, clientVer, _ = strutil.parseClientId(clientId) mpSitRes = self.createMsgPackRes("table_leave") mpSitRes.updateResult(result) router.sendToUser(mpSitRes, userId) def sendTableInfoResAll(self, isrobot=0): ftlog.debug('sendTableInfoResAll !! len players=', self.table.playersNum, 'len observers=', self.table.observers) for p in self.table.players: if p.userId > 0: self.sendTableInfoRes(p.userId, p.clientId, isrobot) for p in self.table.observers: if p.userId > 0: self.sendTableInfoRes(p.userId, p.clientId, isrobot) def sendTableInfoRes(self, userId, clientId, isrobot): ftlog.debug('userId', userId, "|clientId", clientId, 'isrobot=', isrobot, caller=self) player = self.table.getPlayer(userId) if not player: ftlog.warn('DizhuSender.sendTableInfoRes NotPlayer tableId=', self.table.tableId, 'userId=', userId) return baseinfo = self.table.buildBasicInfo(False, userId, clientId) _, clientVer, _ = strutil.parseClientId(clientId) mo = self.createMsgPackRes("table_info") playMode = self.table.gamePlay.getPlayMode() if clientVer <= 3.7: if playMode == dizhuconf.PLAYMODE_HAPPY or playMode == dizhuconf.PLAYMODE_123: playMode = 'normal' # FIX, 客户端happy和123都是normal, grab=1就是欢乐 isMatch = self.table.isMatch mo.setResult('isrobot', isrobot) mo.setResult('playMode', playMode) roomLevel = gdata.roomIdDefineMap()[self.table.roomId].configure.get( 'roomLevel', 1) mo.setResult('roomLevel', roomLevel) roomName = self.table.room.roomConf['name'] if self.table.room else '' mo.setResult('roomName', roomName) mo.setResult('isMatch', isMatch) mo.setResult('info', baseinfo['info']) mo.setResult('config', baseinfo['config']) mo.setResult('stat', self.buildStatusInfoDict(player)) mo.setResult('myCardNote', self.buildCardNote(player.seatIndex)) if self.table.gameRound: mo.setResult('roundId', self.table.gameRound.roundId) if self.table._complain_open: clientIdVer = sessiondata.getClientIdVer(userId) clientIdLimit = dizhuconf.getAllComplainInfo().get( "clientIdLimit", 3.72) if clientIdVer >= clientIdLimit: mo.setResult('complain', self.table._complain) ftlog.debug("before getMatchTableInfo:", mo) if isMatch: self.table.room.matchPlugin.getMatchTableInfo( self.table.room, self.table, mo) ftlog.debug("after getMatchTableInfo:", mo) # 当前table的奖券任务奖励 wuyangwei bigRoomId = self.table.bigRoomId _, itemCount = treasurebox.getTreasureRewardItem(bigRoomId) for i in xrange(len(self.table.seats)): seat = self.table.seats[i] oseat = self.buildSeatInfo(player, seat) seatuid = seat.userId if seatuid: seatPlayer = self.table.players[i] oseat.update(seatPlayer.datas) oseat['cardNote'] = seatPlayer.getCardNoteCount() seatPlayer.cleanDataAfterFirstUserInfo() # 当前table的奖券任务奖励 wuyangwei oseat['count'] = itemCount if isMatch: self.table.room.matchPlugin.getMatchUserInfo( self.table.room, self.table, seatuid, oseat) else: oseat['uid'] = 0 mo.setResult('seat' + str(i + 1), oseat) tmpobsr = [] for _, obuser in self.table.observers.items(): if obuser: tmpobsr.append((obuser.userId, obuser.name)) mo.setResult('obsr', tmpobsr) mo.setResult('betpoolClose', 1) ftlog.debug("cardNote test come to assemble cardNote info, userId = ", userId) if player: ftlog.debug("cardNote test player cardNoteCount = ", player.getCardNoteCount()) else: ftlog.debug("cardNote test player is None ") if player and player.getCardNoteCount() < 1: tableConf = self.table.room.roomConf.get( 'tableConf') if self.table.room else None cardNoteChip = tableConf.get('cardNoteChip', 0) cardNoteDiamod = tableConf.get('cardNoteDiamond', 0) cardNote = dizhuconf.getCardNoteTips(userId, player.datas.get('chip', 0), clientId, cardNoteChip, cardNoteDiamod) if cardNote: mo.setResult('cardNote', cardNote) if isMatch: step = mo.getResult('step') if step and self.table._match_table_info: # 比赛的当前提示信息 step['note'] = self.table._buildNote( userId, self.table._match_table_info) # 发送消息至客户端 router.sendToUser(mo, userId) else: # 桌面充值商品 player = self.table.getPlayer(userId) if not player: player = self.table.getObserver(userId) if player and player.userId: mo.setResult( 'products', tablepay.getProducts(userId, self.table.roomId, player.clientId)) # 互动表情配置 mo.setResult('smiliesConf', smilies.getConfDict(self.table.bigRoomId, userId)) # 发送消息至客户端 router.sendToUser(mo, userId) def sendToAllTableUser(self, mo): ftlog.debug('sendToAllTableUser !! len players=', len(self.table.players), 'len observers=', self.table.observers) if isinstance(mo, MsgPack): mo = mo.pack() for p in self.table.players: if p.userId > 0: router.sendToUser(mo, p.userId) for p in self.table.observers: if p.userId > 0: router.sendToUser(mo, p.userId) def sendUserReadyRes(self, player): mo = self.createMsgPackRes('table_call', 'ready') mo.setResult('seatId', player.seatId) mo.setResult('userId', player.userId) self.sendToAllTableUser(mo) def sendShowCardRes(self, player): mo = self.createMsgPackRes('table_call', 'show') mo.setResult('seatId', player.seatId) mo.setResult('userId', player.userId) mo.setResult('stat', self.buildStatusInfoDict(player)) mo.setResult( 'seatCards', self.buildSeatCards(player, self.table.seats[player.seatIndex])) self.sendToAllTableUser(mo) def sendGameReadyRes(self): for i in xrange(len(self.table.seats)): self.sendGameReadyResForSeat(i) def sendGameReadyResForSeat(self, seatIndex): mo = self.createMsgPackRes('table_call', 'game_ready') for i, seat in enumerate(self.table.seats): cards = seat.cards if (self.table.players[seatIndex].gameClientVer >= DizhuSender.HIDE_CARD_VER and i != seatIndex and not seat.isShow): # 隐藏没有明牌人的牌的牌 cards = [-1 for _ in xrange(len(seat.cards))] mo.setResult('cards' + str(i), cards) basecard = self.table.status.baseCardList kickoutCard = self.table.status.kickOutCardList if self.table.players[ seatIndex].gameClientVer >= DizhuSender.HIDE_CARD_VER: # 隐藏底牌,剔除的牌 basecard = [-1 for _ in xrange(len(basecard))] kickoutCard = [-1 for _ in xrange(len(kickoutCard))] mo.setResult('basecard', basecard) mo.setResult('kickoutCard', kickoutCard) mo.setResult('rangpai', self.table.status.rangPai) mo.setResult('grabCard', self.table.status.grabCard) mo.setResult('myCardNote', self.buildCardNote(seatIndex)) if self.table.gameRound: mo.setResult('roundId', self.table.gameRound.roundId) if self.table._complain: mo.setResult('gameNum', self.table.gameRound.roundId) router.sendToUser(mo, self.table.seats[seatIndex].userId) def sendCallNextRes(self, nextSid, grab): mo = self.createMsgPackRes('table_call', 'next') mo.setResult('seatId', nextSid) mo.setResult('next', nextSid) mo.setResult('grab', grab) mo.setResult('stat', self.table.status.toInfoDict()) mo.setResult('opTime', self.table.runConfig.optime) self.sendToAllTableUser(mo) def sendCallRes(self, seatId, userId, call): mo = self.createMsgPackRes('table_call', 'call') mo.setResult('seatId', seatId) mo.setResult('userId', userId) mo.setResult('call', call) self.sendToAllTableUser(mo) def sendWildCardRes(self, wildCard, wildCardBig): mo = self.createMsgPackRes('table_call', 'wild_card') mo.setResult('wildcard', wildCard) mo.setResult('wildCardBig', wildCardBig) self.sendToAllTableUser(mo) def sendGameStartRes(self): mo = self.createMsgPackRes('table_call', 'game_start') mo.setResult('action', 'game_start') mo.setResult('stat', self.table.status.toInfoDict()) # 发送每个座位的tbc,tbt seatTBBoxInfoList = [] bigRoomId = self.table.bigRoomId for p in self.table.players: itemId, itemCount = treasurebox.getTreasureRewardItem(bigRoomId) if itemId: itemId = hallconf.translateAssetKindIdToOld(itemId) seatTBBoxInfoList.append({ 'tbc': p.datas['tbc'], 'tbt': p.datas['tbt'], 'item': itemId, 'count': itemCount }) mo.setResult('seattb', seatTBBoxInfoList) for p in self.table.players: mo.setResult('myCardNote', self.buildCardNote(p.seatIndex)) router.sendToUser(mo, p.userId) def sendPunishTipRes(self, seatId, userId, punishTip): mo = self.createMsgPackRes('table_call', 'note') mo.setResult('seatId', seatId) mo.setResult('userId', userId) mo.setResult('bgcolor', 'FF0000') # 文字背景色 mo.setResult('fgcolor', '00FF00') # 文字字体颜色 mo.setResult('seconds', 3) # 提示显示的时间,秒 mo.setResult('info', punishTip) router.sendToUser(mo, userId) def sendTuoGuanRes(self, seatId): robots = [] for seat in self.table.seats: robots.append(seat.isRobot) mo = self.createMsgPackRes('table_call', 'rb') mo.setResult('robots', robots) mo.setResult('seatId', seatId) ccount = len(self.table.seats[seatId - 1].cards) if ccount > 2: mo.setResult('tuoguantip', "我托管,我包赔!有钱就是这么任性!!") self.sendToAllTableUser(mo) def sendTuoGuanErrorRes(self, userId): robots = [] for seat in self.table.seats: robots.append(seat.isRobot) mo = self.createMsgPackRes('table_call', 'rb') mo.setResult('robots', robots) mo.setResult('tips', '托管太频繁,禁止托管操作') router.sendToUser(mo, userId) def sendChuPaiRes(self, seatId, userId, cards, precard, tuoGuanType): for i in xrange(len(self.table.seats)): self.sendChuPaiResToSeat(seatId - 1, cards, precard, tuoGuanType, i) def sendChuPaiResToSeat(self, seatIndex, cards, precard, tuoGuanType, toSeatIndex): mo = self.createMsgPackRes('table_call', 'card') mo.setResult('precard', precard) mo.setResult('seatId', seatIndex + 1) mo.setResult('userId', self.table.seats[seatIndex].userId) mo.setResult('cards', cards) mo.setResult('lastOutCards', self.table.seats[seatIndex].lastOutCards) mo.setResult('myCardNote', self.buildCardNote(toSeatIndex)) if self.table.players[toSeatIndex].gameClientVer >= self.HIDE_CARD_VER: if seatIndex == toSeatIndex or self.table.seats[seatIndex].isShow: mo.setResult('handCards', self.table.seats[seatIndex].cards) else: mo.setResult('handCards', [ -1 for _ in xrange(len(self.table.seats[seatIndex].cards)) ]) mo.setResult('topcard', self.table.status.topCardList) mo.setResult( 'issvr', 1 if tuoGuanType != DizhuPlayer.TUGUAN_TYPE_USERACT else 0) router.sendToUser(mo, self.table.seats[toSeatIndex].userId) def sendChuPaiNextRes(self, seatId, opTime): mo = self.createMsgPackRes('table_call', 'next') mo.setResult('next', seatId) mo.setResult('seatId', seatId) mo.setResult('stat', self.table.status.toInfoDict()) mo.setResult('opTime', opTime) self.sendToAllTableUser(mo) def sendWinLoseAbortRes(self): mo = self.createMsgPackRes('table_call', 'game_win') mo.setResult('stat', self.table.status.toInfoDict()) mo.setResult('dizhuwin', 0) mo.setResult('nowin', 1) mo.setResult('slam', 0) mo.setResult('windoubles', 0) mo.setResult('save', 0) mo.setResult('cards', [seat.cards for seat in self.table.seats]) slen = len(self.table.players) win_streak = [] for x in xrange(slen): p = self.table.players[x] win_streak.append(p.datas['winstreak']) mo.setResult('seat' + str(x + 1), [ 0, p.datas['chip'], 0, 15, p.datas['tbt'], p.datas['tbc'], p.datas['level'], p.datas['exp'], 0, p.datas['nextexp'], p.datas['title'] ]) mo.setResult('winStreak', win_streak) self.sendToAllTableUser(mo) def sendWinLoseRes(self, result): mo = self.createMsgPackRes('table_call', 'game_win') mo.setResult('stat', self.table.status.toInfoDict()) mo.setResult('dizhuwin', result['dizhuwin']) mo.setResult('slam', result['winslam']) mo.setResult('windoubles', result['windoubles']) mo.setResult('winStreak', result['winStreak']) mo.setResult('luckyItemArgs', result['luckyItemArgs']) mo.setResult('save', 1) mo.setResult('skillScoreInfos', result['skillScoreInfos']) mo.setResult('gameNum', self.table.gameRound.roundId) mo.setResult('cards', [seat.cards for seat in self.table.seats]) seat_delta = result['seat_delta'] seat_coin = result['seat_coin'] addcoupons = result['addcoupons'] seat_exps = result['seat_exps'] table_task = result['table_task'] final_acc_chips = result['final_acc_chips'] tb_infos = result['tb_infos'] plen = len(self.table.players) seatInfos = [] for x in xrange(plen): sp = self.table.players[x] # sp.initUser(0, 0) # 重新取得数据库的数据 chip = seat_coin[x] if sp.isSupportBuyin: chip += final_acc_chips[x] waitTime = self.table.runConfig.optime if seat_coin[x] < self.table.runConfig.minCoin: waitTime = int(waitTime / 3) # tbplaytimes, tbplaycount = treasurebox.getTreasureBoxState(sp.userId, self.table.bigRoomId) tbplaytimes, tbplaycount = tb_infos[x] seat_exp = seat_exps[x] mo.setResult('seat' + str(x + 1), [ seat_delta[x], chip, addcoupons[x], waitTime, tbplaytimes, tbplaycount, seat_exp[0], seat_exp[1], seat_exp[2], seat_exp[3], seat_exp[4], seat_coin[x] ]) if result.get('pfIndex') == x: seatInfos.append({'punished': 1}) else: seatInfos.append({}) mo.setResult('seats', seatInfos) for x in xrange(plen): player = self.table.players[x] userId = player.userId # TODO 设定当前玩家的桌面任务 tasks = table_task[x] # tasks = self.fillUserTasks(userId) mo.setResult('tasks', tasks) # 投诉判断 if self.table._complain_open: _, clientIdVer, _ = strutil.parseClientId( player.clientId) # sessiondata.getClientIdVer(userId) clientIdLimit = dizhuconf.getAllComplainInfo().get( "clientIdLimit", 3.72) if clientIdVer >= clientIdLimit: mo.setResult('complain', self.table._complain) # 地主v3.773特效需要知道上一个大师分等级图标 # 传两个大图 skilscoreinfo = result['skillScoreInfos'][x] masterlevel = skilscoreinfo['level'] curlevelpic = skillscore.get_skill_score_big_level_pic(masterlevel) lastlevelpic = skillscore.get_skill_score_big_level_pic( masterlevel - 1) skilscoreinfo['lastbiglevelpic'] = lastlevelpic skilscoreinfo['curbiglevelpic'] = curlevelpic router.sendToUser(mo, userId) def sendToDoTask(self, userId, todotasks): mo = TodoTaskHelper.makeTodoTaskMsg(DIZHU_GAMEID, userId, todotasks) router.sendToUser(mo, userId) def sendSmilesResError(self, userId, errInfo): mo = self.createMsgPackRes('table_call', 'smilies') mo.setResult('userId', userId) mo.setError(1, errInfo) router.sendToUser(mo, userId) def sendSmilesResOk(self, fromseat, member, toseat, price, smilie, self_charm, other_charm, tip, rcount=1): mo = self.createMsgPackRes('table_call', 'smilies') mo.setResult('fromseat', fromseat) mo.setResult('member', member) mo.setResult('toseat', toseat) mo.setResult('price', price) mo.setResult('smilies', smilie) mo.setResult('from_charm', self_charm) mo.setResult('to_charm', other_charm) mo.setResult('tip', tip) mo.setResult('count', rcount) # 新版本客户端才支持发送次数 allplayers = [] allplayers.extend(self.table.players) allplayers.extend(self.table.observers) newclient_uids = [] # 使用新版本的uid for p in allplayers: if p.userId <= 0: continue newclient_uids.append(int(p.userId)) ftlog.debug('sendSmilesResOk', 'smilie=', smilie, 'rcount=', rcount, 'newclient_uids=', newclient_uids) # 新版本只发送一次协议 for uid in newclient_uids: if uid <= 0: continue router.sendToUser(mo.pack(), uid) def sendTableChat(self, player, isFace, voiceIdx, chatMsg, toUserId, toUserName): mo = self.createMsgPackRes('table_chat') mo.setResult('userId', player.userId) mo.setResult('msg', chatMsg) mo.setResult('isFace', isFace) mo.setResult('seatId', player.seatId) mo.setResult('userName', toUserName) if voiceIdx != -1: mo.setResult('voiceIdx', voiceIdx) router.sendToUser(mo, toUserId) def sendWaitJiabei(self, optime): if self.table.status.playingState == DizhuState.PLAYING_STATE_NM_JIABEI: mo = self.createMsgPackRes('table_call', 'wait_nm_jiabei') elif self.table.status.playingState == DizhuState.PLAYING_STATE_DZ_JIABEI: mo = self.createMsgPackRes('table_call', 'wait_dz_jiabei') else: ftlog.error('DizhuSender.sendWaitJiabei', 'playingState=', self.table.status.playingState, 'err=', 'BadPlayingState') return mo.setResult('optime', optime) self.sendToAllTableUser(mo) def sendJiabeiRes(self, seatId, jiabei): mo = self.createMsgPackRes('table_call', 'jiabei') mo.setResult('jiabei', jiabei) mo.setResult('seatId', seatId) mo.setResult('userId', self.table.seats[seatId - 1].userId) self.sendToAllTableUser(mo) def sendTreasureBoxRes(self, userId, datas): userId = int(userId) if userId <= 0: return mo = self.createMsgPackRes('table_call', 'tbox') mo.setResult('userId', userId) mo.updateResult(datas) router.sendToUser(mo, userId) def sendCardNoteOpened(self, player): mo = self.createMsgPackRes('table_call', 'cardNote') mo.setResult('cardNote', player.getCardNoteCount()) router.sendToUser(mo, player.userId) def buildSeatCards(self, player, seat): # if (player.gameClientVer >= DizhuSender.HIDE_CARD_VER # and self.table.state < DizhuState.TABLE_STATE_PLAYING): # seatInfo['card'] = [-1 for _ in len(seatInfo['card'])] if (player.userId != seat.userId and player.gameClientVer >= DizhuSender.HIDE_CARD_VER and self.table.state < DizhuState.TABLE_STATE_PLAYING): return [-1 for _ in xrange(len(seat.cards))] return seat.cards[:] def sendStartHuanpaiRes(self, optime): mo = self.createMsgPackRes('table_call', 'startHuanpai') mo.setResult('opTime', optime) self.sendToAllTableUser(mo) def sendHuanpaiRes(self, player): mo = self.createMsgPackRes('table_call', 'huanpai') mo.setResult('userId', player.userId) mo.setResult('seatId', player.seatId) self.sendToAllTableUser(mo) def sendEndHuanpaiRes(self): seatCards = [self.buildSeatCards(self.table.players[i], self.table.seats[i]) \ for i in xrange(len(self.table.seats))] for i, seat in enumerate(self.table.seats): mo = self.createMsgPackRes('table_call', 'endHuanpai') mo.setResult('outCards', seat.huanpaiOut) mo.setResult('inCards', seat.huanpaiIn) mo.setResult('myCardNote', self.buildCardNote(i)) mo.setResult('seatCards', seatCards) router.sendToUser(mo, seat.userId)
class DizhuMillionHeroMatchSender(DizhuSender): def __init__(self, table): super(DizhuMillionHeroMatchSender, self).__init__(table) if not self.table: from dizhu.gametable.dizhu_table import DizhuTable self.table = DizhuTable() def sendChuPaiNextRes(self, seatId, opTime): super(DizhuMillionHeroMatchSender, self).sendChuPaiNextRes(seatId, opTime) # 收到next命令cancel所有的seatOpTimer self.table.cancelAllSeatOpTimers() # 机器人出牌,延时2秒 player = self.table.players[seatId - 1] if TYPlayer.isRobot(player.userId): params = { 'seatId': seatId, 'userId': player.userId, 'ccrc': self.table.status.cardCrc } self.table.seatOpTimers[seatId - 1].setup(random.randint(2, 4), 'AI_OUTCARD_TIMEUP', params) def sendTableInfoRes(self, userId, clientId, isrobot): ''' 给牌桌上的人发送tableInfo ''' if TYPlayer.isRobot(userId): return ftlog.debug('userId', userId, "|clientId", clientId, 'isrobot=', isrobot, caller=self) tableInfo = self.table._match_table_info if not tableInfo: ftlog.error('DizhuArenaSender.sendTableInfoRes NoMatchTableInfo', 'userId=', userId, 'clientId=', clientId, 'isrobot=', isrobot) return player = self.table.getPlayer(userId) if not player: ftlog.error('DizhuArenaSender.sendTableInfoRes NoPlayer', 'userId=', userId, 'clientId=', clientId, 'isrobot=', isrobot) return baseinfo = self.table.buildBasicInfo(False, userId, clientId) mo = self.createMsgPackRes("table_info") playMode = self.table.gamePlay.getPlayMode() isMatch = self.table.isMatch mo.setResult('isrobot', isrobot) mo.setResult('playMode', playMode) roomLevel = gdata.roomIdDefineMap()[self.table.roomId].configure.get( 'roomLevel', 1) mo.setResult('roomLevel', roomLevel) roomName = self.table.room.roomConf['name'] if self.table.room else '' mo.setResult('roomName', roomName) mo.setResult('isMatch', isMatch) mo.setResult('notShowRank', 1) mo.setResult('info', baseinfo['info']) mo.setResult('config', baseinfo['config']) mo.setResult('stat', self.buildStatusInfoDict(player)) mo.setResult('myCardNote', self.buildCardNote(player.seatIndex)) if self.table.gameRound: mo.setResult('roundId', self.table.gameRound.roundId) if self.table._complain_open: clientIdVer = sessiondata.getClientIdVer(userId) clientIdLimit = dizhuconf.getAllComplainInfo().get( "clientIdLimit", 3.72) if clientIdVer >= clientIdLimit: mo.setResult('complain', self.table._complain) for i in xrange(len(self.table.seats)): seat = self.table.seats[i] oseat = self.buildSeatInfo(player, seat) seatuid = seat.userId if seatuid: seatPlayer = self.table.players[i] oseat.update(seatPlayer.datas) oseat['cardNote'] = seatPlayer.getCardNoteCount() seatPlayer.cleanDataAfterFirstUserInfo() else: oseat['uid'] = 0 mo.setResult('seat' + str(i + 1), oseat) tmpobsr = [] for _, obuser in self.table.observers.items(): if obuser: tmpobsr.append((obuser.userId, obuser.name)) mo.setResult('obsr', tmpobsr) mo.setResult('betpoolClose', 1) if player and player.getCardNoteCount() < 1: tableConf = self.table.room.roomConf.get( 'tableConf') if self.table.room else None cardNoteChip = tableConf.get('cardNoteChip', 0) cardNoteDiamod = tableConf.get('cardNoteDiamond', 0) cardNote = dizhuconf.getCardNoteTips(userId, player.datas.get('chip', 0), clientId, cardNoteChip, cardNoteDiamod) if cardNote: mo.setResult('cardNote', cardNote) # 发送消息至客户端 router.sendToUser(mo, userId) def sendRobotNotifyCallUp(self, params): ''' 召唤机器人 ''' ucount, uids = self.table.getSeatUserIds() mo = self.createMsgPackRequest("robotmgr") if params: mo.updateParam(params) mo.setAction('callup') mo.setParam('userCount', ucount) mo.setParam('seatCount', len(uids)) mo.setParam('users', uids) router.sendRobotServer(mo, self.table.tableId) def sendTuoGuanRes(self, seatId): robots = [] for seat in self.table.seats: if TYPlayer.isRobot(seat.userId): continue robots.append(seat.isRobot) mo = self.createMsgPackRes('table_call', 'rb') mo.setResult('robots', robots) mo.setResult('seatId', seatId) ccount = len(self.table.seats[seatId - 1].cards) if ccount > 2: mo.setResult('tuoguantip', "我托管,我包赔!有钱就是这么任性!!") self.sendToAllTableUser(mo)
class DizhuGroupMatchSender(DizhuSender): def __init__(self, table): super(DizhuGroupMatchSender, self).__init__(table) if not self.table : from dizhu.gametable.dizhu_table import DizhuTable self.table = DizhuTable() self._logger = Logger() self._logger.add('roomId', self.table.roomId) self._logger.add('tableId', self.table.tableId) def sendTableInfoRes(self, userId, clientId, isrobot): if self._logger.isDebug(): self._logger.debug('DizhuGroupMatchSender.sendTableInfoRes', 'userId=', userId, 'clientId=', clientId, 'isrobot=', isrobot) tableInfo = self.table._match_table_info if not tableInfo: self._logger.error('DizhuGroupMatchSender.sendTableInfoRes NoMatchTableInfo', 'userId=', userId, 'clientId=', clientId, 'isrobot=', isrobot) return player = self.table.getPlayer(userId) if not player: self._logger.error('DizhuGroupMatchSender.sendTableInfoRes NoPlayer', 'userId=', userId, 'clientId=', clientId, 'isrobot=', isrobot) return baseinfo = self.table.buildBasicInfo(False, userId, clientId) _, clientVer, _ = strutil.parseClientId(clientId) mo = self.createMsgPackRes('table_info') playMode = self.table.gamePlay.getPlayMode() if clientVer <= 3.7: if playMode == dizhuconf.PLAYMODE_HAPPY or playMode == dizhuconf.PLAYMODE_123 : playMode = 'normal' # FIX, 客户端happy和123都是normal, grab=1就是欢乐 isMatch = self.table.isMatch mo.setResult('isrobot', isrobot) mo.setResult('playMode', playMode) roomLevel = gdata.roomIdDefineMap()[self.table.roomId].configure.get('roomLevel', 1) mo.setResult('roomLevel', roomLevel) roomName = self.table.room.roomConf['name'] if self.table.room else '' mo.setResult('roomName', roomName) mo.setResult('isMatch', isMatch) mo.setResult('info', baseinfo['info']) mo.setResult('config', baseinfo['config']) mo.setResult('stat', self.buildStatusInfoDict(player)) mo.setResult('myCardNote', self.buildCardNote(player.seatIndex)) if self.table.gameRound: mo.setResult('roundId', self.table.gameRound.roundId) if self.table._complain_open: clientIdVer = sessiondata.getClientIdVer(userId) clientIdLimit = dizhuconf.getAllComplainInfo().get('clientIdLimit', 3.72) if clientIdVer >= clientIdLimit: mo.setResult('complain', self.table._complain) if self._logger.isDebug(): self._logger.debug('DizhuGroupMatchSender.sendTableInfoRes before getMatchTableInfo', 'mo=', mo) self.getMatchTableInfo(userId, tableInfo, mo) if self._logger.isDebug(): self._logger.debug('DizhuGroupMatchSender.sendTableInfoRes after getMatchTableInfo', 'mo=', mo) for i in xrange(len(self.table.seats)): seat = self.table.seats[i] oseat = seat.toInfoDict() seatuid = seat.userId if seatuid : seatPlayer = self.table.players[i] oseat.update(seatPlayer.datas) oseat['cardNote'] = seatPlayer.getCardNoteCount() seatPlayer.cleanDataAfterFirstUserInfo() self.getMatchUserInfo(seatPlayer.userId, tableInfo, oseat) else: oseat['uid'] = 0 mo.setResult('seat' + str(i + 1), oseat) tmpobsr = [] for _, obuser in self.table.observers.items() : if obuser : tmpobsr.append((obuser.userId, obuser.name)) mo.setResult('obsr', tmpobsr) mo.setResult('betpoolClose', 1) if player and player.getCardNoteCount() < 1: tableConf = self.table.room.roomConf.get('tableConf') if self.table.room else None cardNoteChip = tableConf.get('cardNoteChip', 0) cardNoteDiamod = tableConf.get('cardNoteDiamond', 0) cardNote = dizhuconf.getCardNoteTips(userId, player.datas.get('chip', 0), clientId, cardNoteChip, cardNoteDiamod) if cardNote: mo.setResult('cardNote', cardNote) # 发送消息至客户端 router.sendToUser(mo, userId) def getMatchTableInfo(self, userId, tableInfo, mo): mo.setResult('mnotes', tableInfo['mnotes']) mo.setResult('mInfos', tableInfo['mInfos']) mo.setResult('step', { 'name':tableInfo['step']['name'], 'des':'%s人参赛,%s人晋级' % (tableInfo['step']['playerCount'], tableInfo['step']['riseCount']), 'playerCount':tableInfo['step']['playerCount'], 'note':self.table._buildNote(userId, tableInfo) }) def getMatchUserInfo(self, userId, tableInfo, oseat): oseat['mscore'] = 0 oseat['mrank'] = 0 try: for userInfo in tableInfo['seats']: if userInfo['userId'] == userId: oseat['mscore'] = userInfo['score'] oseat['mrank'] = userInfo['rank'] record = MatchRecord.loadRecord(self.table.gameId, userId, tableInfo.get('recordId', tableInfo['matchId'])) if record: oseat['mrecord'] = { 'bestRank':record.bestRank, 'crownCount':record.crownCount, 'playCount':record.playCount } except: self._logger.error('DizhuGroupMatchSender.getMatchUserInfo', 'userId=', userId, 'tableInfo=', tableInfo, 'oseat=', oseat)