Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
 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()
Exemplo n.º 5
0
 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()
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
 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()
Exemplo n.º 9
0
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
        }
    }