def _doTreasureChestHelp(cls, userId, rewardId, helpUserId): mo = MsgPack() mo.setCmd('dizhu') mo.setResult('action', 'treasure_chest_help') mo.setResult('gameId', DIZHU_GAMEID) mo.setResult('userId', userId) ret, state, leftSeconds = TreasureChestHelper.helpShortenTreasureChest( userId, rewardId, helpUserId) mo.setResult('success', ret) mo.setResult('state', state) mo.setResult('leftSeconds', leftSeconds) mo.setResult('helpMsg', TreasureChestHelper.getHelpMsg(helpUserId)) router.sendToUser(mo, userId)
def _doTreasureChestUnlock(cls, userId, rewardId): mo = MsgPack() mo.setCmd('dizhu') mo.setResult('action', 'treasure_chest_unlock') mo.setResult('gameId', DIZHU_GAMEID) mo.setResult('userId', userId) mo.setResult('success', TreasureChestHelper.unlockTreasureChest(userId, rewardId)) router.sendToUser(mo, userId)
def doTreasureChestOpen(self, userId, rewardId): mo = MsgPack() mo.setCmd('dizhu') mo.setResult('action', 'treasure_chest_open') mo.setResult('gameId', DIZHU_GAMEID) mo.setResult('userId', userId) ret, _ = TreasureChestHelper.openTreasureChest(userId, rewardId) mo.setResult('success', ret) return mo.pack()
def doTreasureChestUnlock(self, userId, rewardId): mo = MsgPack() mo.setCmd('dizhu') mo.setResult('action', 'treasure_chest_unlock') mo.setResult('gameId', DIZHU_GAMEID) mo.setResult('userId', userId) mo.setResult('success', TreasureChestHelper.unlockTreasureChest(userId, rewardId)) return mo.pack()
def doGetTreasureChestList(self, userId): mo = MsgPack() mo.setCmd('dizhu') mo.setResult('action', 'treasure_chest_list') mo.setResult('gameId', DIZHU_GAMEID) mo.setResult('userId', userId) mo.setResult('treasureChestList', TreasureChestHelper.getTreasureChestList(userId)) return mo.pack()
def _doTreasureChestOpen(cls, userId, rewardId): mo = MsgPack() mo.setCmd('dizhu') mo.setResult('action', 'treasure_chest_open') mo.setResult('gameId', DIZHU_GAMEID) mo.setResult('userId', userId) ret, rewards = TreasureChestHelper.openTreasureChest(userId, rewardId) mo.setResult('success', ret) mo.setResult('rewards', rewards) router.sendToUser(mo, userId)
def doGetTreasureChestList(self, userId): mo = MsgPack() mo.setCmd('dizhu') mo.setResult('action', 'treasure_chest_list') mo.setResult('gameId', DIZHU_GAMEID) mo.setResult('userId', userId) treasureChestList = TreasureChestHelper.getTreasureChestList(userId) mo.setResult('treasureChestList', treasureChestList) videoShortenSeconds, helpShortenSeconds = TreasureChestHelper.getShortSeconds( ) mo.setResult('videoShortenSeconds', videoShortenSeconds) mo.setResult('helpShortenSeconds', helpShortenSeconds) if ftlog.is_debug(): ftlog.debug('TreasureChestHandler.doGetTreasureList', 'userId= ', userId, 'treasureChestList=', treasureChestList) router.sendToUser(mo, userId)
def doTreasureChestHelp(self, userId, rewardId, helpUserId): mo = MsgPack() mo.setCmd('dizhu') mo.setResult('action', 'treasure_chest_help') mo.setResult('gameId', DIZHU_GAMEID) mo.setResult('userId', userId) ret, state, leftSeconds = TreasureChestHelper.helpShortenTreasureChest( userId, rewardId, helpUserId) mo.setResult('success', ret) mo.setResult('state', state) mo.setResult('leftSeconds', leftSeconds) return mo.pack()
def processSegmentTableWinlose(roomId, tableId, userId, isWin, isDizhu, winUserId, winlose, finalTableChip, winDoubles, bomb, chuntian, winslam, topValidCard, baseScore, punishState=0, outCardSeconds=0, leadWin=0, **kwargs): from dizhu.game import TGDizhu from hall.game import TGHall ebus = TGDizhu.getEventBus() hallBus = TGHall.getEventBus() assist = kwargs.get('assist', 0) validMaxOutCard = kwargs.get('validMaxOutCard', 0) if ftlog.is_debug(): ftlog.debug('processSegmentTableWinlose userId=', userId, 'assist', assist, 'validMaxOutCard', validMaxOutCard) winloseObj = Winlose(winUserId, topValidCard, isWin, isDizhu, winlose, finalTableChip, winDoubles, bomb, chuntian > 1, winslam, baseScore, punishState=punishState, outCardSeconds=outCardSeconds, leadWin=leadWin, assist=assist, validMaxOutCard=validMaxOutCard) rankInfo = wx_official.getRankInfo(userId) ebus.publishEvent(SegmentTableWinloseEvent(DIZHU_GAMEID, userId, roomId, tableId, winloseObj, rankInfo=rankInfo)) # 处理牌桌奖励 segmentInfo = SegmentMatchHelper.getUserSegmentInfo(userId, SegmentMatchHelper.getCurrentIssue()) # 处理打出高倍公众号消息 if winDoubles >= 64: hallBus.publishEvent(OfficialMessageEvent(DIZHU_GAMEID, userId, dizhuconf.MULTI)) # 处理保段 recoverConsume = None recoverInfo = SegmentMatchHelper.getUserSegmentRecoverData(userId) segmentRecoverConf = getSegmentConf().segmentRecover if recoverInfo.active: if _isRecoverForShare(userId): recoverConsume = { 'type': 'share' } else: itemId = segmentRecoverConf.get('buy', {}).get('itemId') itemCount = segmentRecoverConf.get('buy', {}).get('itemCount', {}) desc = segmentRecoverConf.get('buy', {}).get('desc', {}) count = itemCount.get(str(recoverInfo.totalRecoverCount)) or itemCount.get('others', 10) userAssets = hallitem.itemSystem.loadUserAssets(userId) userItemCount = userAssets.balance(HALL_GAMEID, itemId, pktimestamp.getCurrentTimestamp()) or 0 if userItemCount >= count: recoverConsume = { 'type': 'buy', 'itemId': itemId, 'count': count, 'desc': desc } # 获取连胜任务奖励 winStreakRewards = None currentWinStreak = 0 isAsync = None rewardId = None if SegmentWinStreakTaskHelper.isActive(): _, winStreakRewards, currentWinStreak, isAsync = SegmentWinStreakTaskHelper.updateUserWinStreak(userId, isWin, punishState) # 处理九连胜公众号消息 if currentWinStreak == 9: hallBus.publishEvent(OfficialMessageEvent(DIZHU_GAMEID, userId, dizhuconf.WINSTREAK)) # 发送宝箱逻辑 winStreakChestConf = TreasureChestHelper.getWinStreakConf(currentWinStreak) if TreasureChestHelper.isValidUser(userId) and winStreakRewards and winStreakChestConf: TGDizhu.getEventBus().publishEvent(TreasureChestEvent(DIZHU_GAMEID, userId, TREASURE_CHEST_TYPE_AS_WINSTREAK, None, winStreak=currentWinStreak)) # 处理分享得奖 elif isAsync and winStreakRewards: from dizhu.game import TGDizhu rewards = [] for rewardInfo in winStreakRewards: rewards.append({'itemId': rewardInfo['itemId'], 'count': rewardInfo['count']}) rewardId = RewardAsyncHelper.genRewardId() TGDizhu.getEventBus().publishEvent(UserRewardAsyncEvent(DIZHU_GAMEID, userId, REWARD_ASYNC_TYPE_AS_WINSTREAK, rewardId, rewards, winStreak=currentWinStreak)) return { 'tableRewards': DizhuSegmentRewardsHelper.processUserTableRewards(userId, winloseObj), 'segmentInfo': segmentInfo, 'recoverConsume': recoverConsume, 'treasureChest': winStreakChestConf, 'winStreakRewards': { 'winStreak': currentWinStreak, 'winStreakReward': winStreakRewards, 'rewardId': rewardId } }