Ejemplo n.º 1
0
    def processEnterGame(cls, evt):
        # # 检查当前已结束赛季并发放赛季奖励, 只发放上一期的
        if ftlog.is_debug():
            ftlog.debug('============= processEnterGame userId=', evt.userId)
        _, intClientId = sessiondata.getClientIdNum(evt.userId)
        if intClientId == 24105:
            latestTwoIssues = SegmentMatchHelper.getIssueStateList()[-2:]
            for issuestate in reversed(latestTwoIssues):
                if issuestate['state'] == 0:
                    continue

                # 判断用户有没有结算此赛季
                userData = SegmentMatchHelper.getUserSegmentDataIssue(
                    evt.userId, issuestate['issue']) or UserSegmentDataIssue()
                if userData and userData.segmentRewardsState == UserSegmentDataIssue.IDEAL:
                    # 结算 发奖
                    settlementRanking(evt.userId, issuestate['issue'])

        segmentConf = getSegmentConf()
        if segmentConf.closed:
            return

        if evt.dayFirst:
            # 检查用户是否已经发送
            if not gamedata.getGameAttrInt(evt.userId, DIZHU_GAMEID,
                                           'wxNotice'):
                # 保存消息记录
                gamedata.setGameAttr(evt.userId, DIZHU_GAMEID, 'wxNotice', 1)

                # 新用户发送一条额外消息
                mailstr = '游戏公告#如有任何意见建议,欢迎加客服微信:Tuyoo_taozi,进入官方群反馈'
                message.send(DIZHU_GAMEID, message.MESSAGE_TYPE_SYSTEM,
                             evt.userId, mailstr)

        # 同步钻石为用户道具
        if not segmentdata.getSegmentAttr(evt.userId, DIZHU_GAMEID,
                                          'diamondConvert'):
            segmentdata.setSegmentAttr(evt.userId, DIZHU_GAMEID,
                                       'diamondConvert', 1)
            userDiamond = userdata.getAttr(evt.userId, 'diamond')
            if userDiamond:
                # count
                user_remote.consumeAssets(DIZHU_GAMEID, evt.userId,
                                          [{
                                              'itemId': 'user:diamond',
                                              'count': userDiamond
                                          }], 'DIZHU_SEGMENT_DIAMOND_CONVERT',
                                          0)
                contentItems = TYContentItem.decodeList([{
                    'itemId': 'item:1311',
                    'count': userDiamond
                }])
                from dizhu.entity import dizhu_util
                dizhu_util.sendRewardItems(evt.userId, contentItems, None,
                                           'DIZHU_SEGMENT_DIAMOND_CONVERT', 0)
                ftlog.info('DizhuSegmentRewardsHelper diamondConvert userId=',
                           evt.userId, 'userDiamond=', userDiamond)
Ejemplo n.º 2
0
    def collectFees(self, inst, userId, fees):
        '''
        收取用户报名费
        '''
        if userId <= 10000:
            return

        contentItemList = []
        for fee in fees:
            contentItemList.append({
                'itemId': fee.assetKindId,
                'count': fee.count
            })
        assetKindId, count = user_remote.consumeAssets(self._room.gameId,
                                                       userId, contentItemList,
                                                       'MATCH_SIGNIN_FEE',
                                                       self._room.roomId)

        if assetKindId:
            fee = None
            for fee in fees:
                if fee.assetKindId == assetKindId:
                    raise SigninFeeNotEnoughException(inst, fee)
            raise SigninFeeNotEnoughException(inst,
                                              MatchFee(assetKindId, count, {}))
Ejemplo n.º 3
0
    def collectFee(self, inst, userId, fee, mixId=None):
        '''
        收取用户报名费
        '''
        if userId <= 10000:
            return

        # 月卡, 荣耀月卡报名比赛不扣除月卡
        from hall.entity import hallitem
        if fee.assetKindId in matchutil.getMatchSigninFeeWithoutCollect():
            userAssets = hallitem.itemSystem.loadUserAssets(userId)
            balance = userAssets.balance(HALL_GAMEID, fee.assetKindId,
                                         pktimestamp.getCurrentTimestamp())
            if balance:
                ftlog.info('SigninFeeDizhu.collectFee matchId=', inst.matchId,
                           'userId=', userId, 'fees=', fee, 'mixId=', mixId,
                           'signinParams=', {'mixId': mixId} if mixId else {},
                           'assetKindId=', fee.assetKindId, 'balance=',
                           balance)
                return None
        contentItemList = []
        contentItemList.append({'itemId': fee.assetKindId, 'count': fee.count})
        from dizhu.games.matchutil import changeSignInFees
        contentItemList, changedItemId = changeSignInFees(
            userId, self._room.roomId, contentItemList)
        # 折扣报名判断, 如果有其他的折扣如折扣券,月卡等,执行这些
        if not changedItemId:
            contentItem = match_signin_discount.changeItemToDiscount(
                userId, mixId if mixId else self._room.bigRoomId, {
                    'itemId': fee.assetKindId,
                    'count': fee.count
                })
            contentItemList = [contentItem]
            fee = copy.deepcopy(fee)
            fee.count = contentItem['count']
        assetKindId, count = user_remote.consumeAssets(
            self._room.gameId, userId, contentItemList, 'MATCH_SIGNIN_FEE',
            int(mixId) if mixId else None or self._room.roomId)

        ftlog.info('SigninFeeDizhu.collectFee matchId=', inst.matchId,
                   'userId=', userId, 'fees=', contentItemList, 'mixId=',
                   mixId, 'signinParams=', {'mixId': mixId} if mixId else {},
                   'assetKindId=', assetKindId, 'count=', count)

        if assetKindId:
            raise SigninFeeNotEnoughException(inst, fee)
        return fee
Ejemplo n.º 4
0
    def _segment_recover(cls, userId, gameId, clientId):
        # 段位复活数据
        errmsg = '你的保段复活费用不足'
        success = 0
        userRecoverData = SegmentMatchHelper.getUserSegmentRecoverData(userId)
        if userRecoverData.active:
            totalRecoverCount = userRecoverData.totalRecoverCount
            recoverConf = getSegmentConf().segmentRecover
            others = recoverConf.get('buy', {}).get('itemCount', {}).get('others', 10)
            needCount = recoverConf.get('buy', {}).get('itemCount', {}).get(str(totalRecoverCount), others)
            itemId = recoverConf.get('buy', {}).get('itemId')
            # 判断用户参赛券否够
            contentItemList = [{'itemId': itemId, 'count': needCount}]
            assetKindId, count = user_remote.consumeAssets(DIZHU_GAMEID, userId, contentItemList,
                                                           'SEGMENT_MATCH_RECOVER_FEE', 0)

            ftlog.info('SegmentMatchHandler.collectFee',
                       'userId=', userId,
                       'fees=', contentItemList,
                       'assetKindId=', assetKindId,
                       'count=', count)

            if not assetKindId:
                errmsg = 'ok'
                success = 1
                # 广播事件
                TGDizhu.getEventBus().publishEvent(SegmentRecoverEvent(userId, gameId))

        msg = MsgPack()
        msg.setCmd('dizhu')
        msg.setResult('action', 'segment_recover')
        msg.setResult('gameId', gameId)
        msg.setResult('userId', userId)
        msg.setResult('success', success)
        msg.setResult('errmsg', errmsg)

        if ftlog.is_debug():
            ftlog.debug('SegmentMatchHandler._segment_recover'
                        'userId=', userId,
                        'gameId=', gameId,
                        'clientId=', clientId,
                        'userRecoverData=', userRecoverData.toDict(),
                        'msg=', msg._ht)

        return msg
Ejemplo n.º 5
0
 def collectFee(feeDict, userId, matchId, disKey):
     '''
     比赛收费
     '''
     assetKindId, count = user_remote.consumeAssets(
             DIZHU_GAMEID
             , userId
             , feeDict
             , disKey
             , matchId)
     
     ftlog.debug('CommonMatchIF.collectFee matchId=', matchId,
                'userId=', userId,
                'fees=', feeDict,
                'assetKindId=', assetKindId,
                'count=', count)
     if assetKindId:
         return False
     
     return True
Ejemplo n.º 6
0
    def collectFee(self, inst, userId, fee):
        '''
        收取用户报名费
        '''
        if userId <= 10000:
            return

        contentItemList = []
        contentItemList.append({'itemId': fee.assetKindId, 'count': fee.count})
        assetKindId, count = user_remote.consumeAssets(self._room.gameId,
                                                       userId, contentItemList,
                                                       'MATCH_SIGNIN_FEE',
                                                       self._room.roomId)

        ftlog.info('SigninFeeDizhu.collectFee matchId=', inst.matchId,
                   'userId=', userId, 'fees=', contentItemList, 'assetKindId=',
                   assetKindId, 'count=', count)
        if assetKindId:
            raise SigninFeeNotEnoughException(inst, fee)
        return fee
Ejemplo n.º 7
0
def doTableThrowEmojiFromBursts(gameId, userId, roomId, tableId, emojiId,
                                charmDelta, burstsConf):

    assert (burstsConf.get('cost', {}).get('count', 0) > 0)

    cost = burstsConf.get('cost')
    contentItemList = [cost]
    eventId = 'EMOTICON_%s_CONSUME' % (emojiId.upper())
    assetKindId, count = user_remote.consumeAssets(gameId, userId,
                                                   contentItemList, eventId,
                                                   roomId)
    if assetKindId:
        return 0

    # 魅力值
    userdata.incrCharm(userId, charmDelta * burstsConf.get('count', 1))
    eventBus = gdata.games()[gameId].getEventBus()
    if eventBus:
        eventBus.publishEvent(
            UseTableEmoticonEvent(gameId, userId, roomId, tableId, emojiId,
                                  cost.get('count', 0),
                                  burstsConf.get('count', 0)))
    return burstsConf.get('count', 0)