Beispiel #1
0
 def sendRewards(rewards, userId, matchId, disKey):
     '''
     退还比赛费用
     MATCH_RETURN_FEE
     '''
     user_remote.addAssets(DIZHU_GAMEID, userId, rewards, disKey, matchId)
     ftlog.debug('CommonMatchIF.sendRewards matchId=', matchId,
                'userId=', userId,
                'rewards=', rewards)
     rewardsInfo = []
     for reward in rewards:
         kindId = reward['itemId']
         rItem = hallitem.itemSystem.findAssetKind(kindId)
         rInfo = {}
         rInfo['icon'] = kindId
         rInfo['name'] = rItem.displayName
         rInfo['count'] = reward['count']
         rInfo['iconPath'] = rItem.pic
         rewardsInfo.append(rInfo)
      
     ftlog.debug('CommonMatchIF.sendRewards rewardsInfo=', rewardsInfo)
     
     # 更新排行榜
     if disKey == 'MATCH_REWARD':
         hallranking.rankingSystem.setUserByInputType(DIZHU_GAMEID, MATCH_RANK_TEMPLATE_NAME, userId, 1, pktimestamp.getCurrentTimestamp())
     
     # 返回结果
     return rewardsInfo
Beispiel #2
0
    def returnFee(self, inst, userId, fee, mixId=None):
        '''
        退还报名费
        '''
        try:
            if userId <= 10000:
                return
            if not fee:
                return

            contentItemList = []
            contentItemList.append({
                'itemId': fee.assetKindId,
                'count': fee.count
            })

            from dizhu.games.matchutil import returnSignInfFees
            contentItemList = returnSignInfFees(userId, self._room.roomId,
                                                contentItemList)

            user_remote.addAssets(
                self._room.gameId, userId, contentItemList, 'MATCH_RETURN_FEE',
                int(mixId) if mixId else None or self._room.roomId)
            ftlog.info('SigninFeeDizhu.returnFee matchId=', inst.matchId,
                       'userId=', userId, 'mixId=', mixId, 'signinParams=',
                       {'mixId': mixId} if mixId else {}, 'fees=',
                       contentItemList)
        except:
            ftlog.error()
Beispiel #3
0
 def returnFee(feeDict, userId, matchId, disKey):
     '''
     退还比赛费用
     MATCH_RETURN_FEE
     '''
     user_remote.addAssets(DIZHU_GAMEID, userId, feeDict, disKey, matchId)
     ftlog.debug('CommonMatchIF.returnFee matchId=', matchId,
                'userId=', userId,
                'fees=', feeDict)
     return True
Beispiel #4
0
def sendBigWinnerRewards(userId, roomId):
    creatorConf = getCreatorConf(userId)
    if creatorConf.bigWinnerRewardContent:
        items = creatorConf.bigWinnerRewardContent.getItems()
        if items:
            contentItems = [item.toDict() for item in items]
            user_remote.addAssets(DIZHU_GAMEID, userId, contentItems, 'DIZHU_BIG_WINNER', roomId)
            ftlog.info('ft_service.sendBigWinnerRewards',
                       'userId=', userId,
                       'roomId=', roomId,
                       'rewards=', contentItems)
Beispiel #5
0
 def sendRewards(self, player, group, rankRewards):
     '''给用户发送奖励'''
     try:
         matchlog('MatchRewardsDizhu.sendRewards', self._room.roomId,
                  group.groupId, player.userId, player.rank,
                  rankRewards.rewards)
         user_remote.addAssets(self._room.gameId, player.userId,
                               rankRewards.rewards, 'MATCH_REWARD',
                               self._room.roomId)
         if rankRewards.message:
             pkmessage.sendPrivate(self._room.gameId, player.userId, 0,
                                   rankRewards.message)
             datachangenotify.sendDataChangeNotify(self._room.gameId,
                                                   player.userId, 'message')
     except:
         ftlog.error()
Beispiel #6
0
    def returnFees(self, inst, userId, fees):
        '''
        退还报名费
        '''
        try:
            if userId <= 10000:
                return

            contentItemList = []
            for fee in fees:
                contentItemList.append({
                    'itemId': fee.assetKindId,
                    'count': fee.count
                })
            user_remote.addAssets(self._room.gameId, userId, contentItemList,
                                  'MATCH_RETURN_FEE', self._room.roomId)
        except:
            ftlog.error()
Beispiel #7
0
    def returnFee(self, inst, userId, fee):
        '''
        退还报名费
        '''
        try:
            if userId <= 10000:
                return

            contentItemList = []
            contentItemList.append({
                'itemId': fee.assetKindId,
                'count': fee.count
            })
            user_remote.addAssets(self._room.gameId, userId, contentItemList,
                                  'MATCH_RETURN_FEE', self._room.roomId)
            ftlog.info('SigninFeeDizhu.returnFee matchId=', inst.matchId,
                       'userId=', userId, 'fees=', contentItemList)
        except:
            ftlog.error()
Beispiel #8
0
 def sendRankRewards(self, player, rankRewards):
     '''
     给用户发奖
     '''
     try:
         ftlog.info('MatchRankRewardsSenderDizhu.sendRankRewards matchId=',
                    player.matchInst.matchId, 'instId=',
                    player.matchInst.instId, 'userId=', player.userId,
                    'rank=', player.rank, 'rewards=', rankRewards.rewards)
         user_remote.addAssets(self._room.gameId, player.userId,
                               rankRewards.rewards, 'MATCH_REWARD',
                               player.matchInst.matchId)
         if rankRewards.message:
             pkmessage.sendPrivate(self._room.gameId, player.userId, 0,
                                   rankRewards.message)
             datachangenotify.sendDataChangeNotify(self._room.gameId,
                                                   player.userId, 'message')
     except:
         ftlog.error()
Beispiel #9
0
 def sendRewards(self, player, rankRewards):
     '''给用户发送奖励'''
     try:
         self._logger.info('MatchRewardsDizhu.sendRewards', 'groupId=',
                           player.group.groupId if player.group else None,
                           'score=', player.score, 'rank=', player.rank,
                           'rankRewards=', rankRewards.rewards)
         user_remote.addAssets(self._room.gameId, player.userId,
                               rankRewards.rewards, 'MATCH_REWARD',
                               self._room.roomId)
         if rankRewards.message:
             pkmessage.sendPrivate(self._room.gameId, player.userId, 0,
                                   rankRewards.message)
             datachangenotify.sendDataChangeNotify(self._room.gameId,
                                                   player.userId, 'message')
     except:
         self._logger.error('MatchRewardsDizhu.sendRewards', 'groupId=',
                            player.group.groupId if player.group else None,
                            'score=', player.score, 'rank=', player.rank,
                            'rankRewards=', rankRewards.rewards)
Beispiel #10
0
 def sendReward(self, rankingDefine, issueNumber, rankingUser, content):
     contentItemList = []
     contentItems = content.getItems()
     for contentItem in contentItems:
         contentItemList.append({
             'itemId': contentItem.assetKindId,
             'count': contentItem.count
         })
     try:
         intRankingId = int(rankingDefine.rankingId)
         ret = user_remote.addAssets(HALL_GAMEID, rankingUser.userId,
                                     contentItemList, 'RANK_REWARD',
                                     intRankingId)
         if ret:
             mail = None
             if rankingDefine.rewardMail:
                 rewardContent = hallitem.buildContentsString(contentItems)
                 if rewardContent:
                     params = {
                         'rankingName':
                         rankingDefine.name,
                         'rank':
                         rankingUser.rank + 1,
                         'rewardContent':
                         hallitem.buildContentsString(contentItems)
                     }
                     mail = strutil.replaceParams(rankingDefine.rewardMail,
                                                  params)
                     if mail:
                         gameId = rankingDefine.gameIds[
                             0] if rankingDefine.gameIds else 0
                         if gameId == 0:
                             gameId = 9999
                         pkmessage.sendPrivate(gameId, rankingUser.userId,
                                               0, mail)
             ftlog.info('RankRewardSender.sendReward Succ userId=',
                        rankingUser.userId, 'rankingId=', intRankingId,
                        'issueNumber=', issueNumber, 'rank=',
                        rankingUser.rank + 1, 'rewards=', contentItemList,
                        'mail=', mail)
         else:
             ftlog.warn('RankRewardSender.sendReward Fail userId=',
                        rankingUser.userId, 'rankingId=', intRankingId,
                        'issueNumber=', issueNumber, 'rank=',
                        rankingUser.rank + 1, 'rewards=', contentItemList)
     except:
         ftlog.error('RankRewardSender.sendReward Exception userId=',
                     rankingUser.userId, 'rankingId=', intRankingId,
                     'issueNumber=', issueNumber, 'rank=',
                     rankingUser.rank + 1, 'rewards=', contentItemList)
Beispiel #11
0
 def sendReward(self, rankingDefine, issueNumber, rankingUser, content):
     contentItemList = []
     contentItems = content.getItems()
     for contentItem in contentItems:
         contentItemList.append({'itemId': contentItem.assetKindId, 'count': contentItem.count})
     try:
         intRankingId = int(rankingDefine.rankingId)
         ret = user_remote.addAssets(HALL_GAMEID, rankingUser.userId, contentItemList, 'RANK_REWARD', intRankingId)
         if ret:
             mail = None
             if rankingDefine.rewardMail:
                 rewardContent = hallitem.buildContentsString(contentItems)
                 if rewardContent:
                     params = {
                         'rankingName': rankingDefine.name,
                         'rank': rankingUser.rank + 1,
                         'rewardContent': hallitem.buildContentsString(contentItems)
                     }
                     mail = strutil.replaceParams(rankingDefine.rewardMail, params)
                     if mail:
                         gameId = rankingDefine.gameIds[0] if rankingDefine.gameIds else 0
                         if gameId == 0:
                             gameId = 9999
                         pkmessage.sendPrivate(gameId, rankingUser.userId, 0, mail)
             ftlog.info('RankRewardSender.sendReward Succ userId=', rankingUser.userId,
                        'rankingId=', intRankingId,
                        'issueNumber=', issueNumber,
                        'rank=', rankingUser.rank + 1,
                        'rewards=', contentItemList,
                        'mail=', mail)
         else:
             ftlog.warn('RankRewardSender.sendReward Fail userId=', rankingUser.userId,
                        'rankingId=', intRankingId,
                        'issueNumber=', issueNumber,
                        'rank=', rankingUser.rank + 1,
                        'rewards=', contentItemList)
     except:
         ftlog.error('RankRewardSender.sendReward Exception userId=', rankingUser.userId,
                     'rankingId=', intRankingId,
                     'issueNumber=', issueNumber,
                     'rank=', rankingUser.rank + 1,
                     'rewards=', contentItemList)
Beispiel #12
0
def sendUserAssets(gameId, userId, contentItems, rankNumber):
    if ftlog.is_debug():
        ftlog.debug('replay_ranking_prize_sender.sendUserAssets',
                    'gameId=', gameId,
                    'userId=', userId,
                    'contentItems=', contentItems,
                    'rankNumber=', rankNumber)
    dictContentItems = [{'itemId': item.assetKindId, 'count': item.count} for item in contentItems]
    ok = user_remote.addAssets(gameId, userId, dictContentItems, 'REPLAY_RANK_PRIZE', 0)
    if ok:
        prizeContent = hallitem.buildContentsString(contentItems, True)
        mail = strutil.replaceParams(getReplayRankingPrizeSentMail(), {'prizeContent':prizeContent, 'rankNumber': rankNumber})
        if mail:
            pkmessage.sendPrivate(9999, userId, 0, mail)
    else:
        ftlog.warn('replay_ranking_prize_sender.sendUserAssets: send error',
                    'gameId=', gameId,
                    'userId=', userId,
                    'contentItems=', contentItems)
    return ok
Beispiel #13
0
 def _sendAuthReawrd(cls, userId):
     """发送认证奖励"""
     assets = cls.getConf('auth_reward')
     if ftlog.is_debug():
         ftlog.debug('PlayerControl._sendAuthReawrd', 'userId=', userId,
                     'assets=', assets)
     if assets:
         contentItems = [{
             'itemId': assets.get('itemId'),
             'count': assets.get('count')
         }]
         if user_remote.addAssets(DIZHU_GAMEID, userId, contentItems,
                                  'ERDAYI_AUTH_REWARD', 0):
             ftlog.info('PlayerControl._sendAuthReawrd Succ', 'userId=',
                        userId, 'assets=', assets)
             rewardDesc = hallitem.buildContent(assets.get('itemId'),
                                                assets.get('count'), False)
             mail = strutil.replaceParams(cls.getConf('auth_reward_mail'),
                                          {'reward_desc': rewardDesc})
             pkmessage.sendPrivate(9999, userId, 0, mail)
             cls.sendPopTip(userId, mail)
         else:
             ftlog.warn('PlayerControl._sendAuthReawrd Fail', 'userId=',
                        userId, 'assets=', assets)
Beispiel #14
0
    def sendRankRewards(self, player, rankRewards):
        '''
        给用户发奖
        '''
        conf = configure.getGameJson(DIZHU_GAMEID, 'wx.share.control', {})
        matchRewardSwitch = conf.get('matchRewardSwitch')
        if matchRewardSwitch:
            return
        try:
            ftlog.info('MatchRankRewardsSenderDizhu.sendRankRewards matchId=',
                       player.matchInst.matchId, 'instId=',
                       player.matchInst.instId, 'userId=', player.userId,
                       'rank=', player.rank, 'signinParams=',
                       player.signinParams, 'rewards=', rankRewards.rewards)
            playerMixId = int(player.mixId) if player.mixId else None
            user_remote.addAssets(self._room.gameId, player.userId,
                                  rankRewards.rewards, 'MATCH_REWARD',
                                  playerMixId or player.matchInst.matchId)

            from dizhu.game import TGDizhu
            from dizhu.entity.common.events import ActiveEvent
            TGDizhu.getEventBus().publishEvent(
                ActiveEvent(DIZHU_GAMEID, player.userId, 'redEnvelope'))

            if rankRewards:
                # 发邮件
                rewardDesc = matchutil.buildRewardsDesc(rankRewards)
                roomName = player.matchInst.matchConf.getRoomName(player.mixId)
                mailstr = '红包赛奖励#恭喜您在%s' % roomName + '中, 获得%s。' % rewardDesc
                message.send(DIZHU_GAMEID, message.MESSAGE_TYPE_SYSTEM,
                             player.userId, mailstr)

            if rankRewards.message:
                pkmessage.sendPrivate(self._room.gameId, player.userId, 0,
                                      rankRewards.message)
                datachangenotify.sendDataChangeNotify(self._room.gameId,
                                                      player.userId, 'message')

            sequence = int(player.matchInst.instId.split('.')[1])
            rewardsLen = len(rankRewards.rewards)
            for reward in rankRewards.rewards:
                # 如果是红包券则广播红包券事件
                if reward['itemId'] == 'user:coupon':
                    from hall.game import TGHall
                    TGHall.getEventBus().publishEvent(
                        UserCouponReceiveEvent(
                            HALL_GAMEID, player.userId, reward['count'],
                            user_coupon_details.USER_COUPON_SOURCE_MATCH_ARENA)
                    )

                chipType = matchutil.getBiChipType(reward['itemId'])
                kindId = 0
                if chipType == daoconst.CHIP_TYPE_ITEM:
                    kindId = reward['itemId'].strip('item:')
                matchutil.report_bi_game_event(
                    'MATCH_REWARD', player.userId, player.matchInst.matchId, 0,
                    sequence, 0, 0, 0, [
                        chipType, reward['count'], kindId, player.rank,
                        int(player.mixId) if player.mixId else 0, rewardsLen
                    ], 'match_reward')
        except:
            ftlog.error()
Beispiel #15
0
def _sendReward(gameId, activityId, quizResult):
    if not quizResult in ('l', 'm', 'r'):
        ftlog.warn('hotfix_match_quiz._sendReward BadQuizResult gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return
    
    actConf = _getActivityConf(activityId)
    if not actConf:
        ftlog.warn('hotfix_match_quiz._sendReward NotActConf gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return
    
    serverConf = actConf.get('server_config')
    if not serverConf:
        ftlog.warn('hotfix_match_quiz._sendReward NotActServerConf gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return
    
    oddsMap = {
        'l':serverConf['leftOdds'],
        'm':serverConf['middleOdds'],
        'r':serverConf['rightOdds'],
    }
    
    odds = oddsMap.get(quizResult)
    gameId = int(serverConf['gameId'])
    intActId = int(serverConf['intActId'])
    chipAssetId = 'user:chip' #serverConf['chipAssetId']
    
    ftlog.info('hotfix_match_quiz._sendReward sending... gameId=', gameId,
               'activityId=', activityId,
               'quizResult=', quizResult,
               'intActId=', intActId,
               'chipAssetId=', chipAssetId,
               'odds=', odds,
               'oddsMap=', oddsMap)
    
    totalBets = {'l':0, 'm':0, 'r':0}
    totalReward = 0
    needTotalReward = 0
    userIds = _getActUsers(gameId, activityId)
    
    for userId in userIds:
#         class UserQuizStatus(object):
#     def __init__(self, userId):
#         self._userId = userId
#         self._betMap = {}
#         self._totalBet = 0
        status = activity_match_quiz.loadUserQuizStatus(gameId, userId, activityId)
        if not status:
            ftlog.error('hotfix_match_quiz._sendReward NotUserStatus gameId=', gameId,
                        'activityId=', activityId,
                        'quizResult=', quizResult,
                        'intActId=', intActId,
                        'chipAssetId=', chipAssetId,
                        'odds=', odds,
                        'oddsMap=', oddsMap,
                        'userId=', userId,
                        'status=', None)
            status = UserQuizStatus(userId)
            
        betAmount = status.getBet(quizResult, 0)
        
        totalBets['l'] += status.getBet('l', 0)
        totalBets['m'] += status.getBet('m', 0)
        totalBets['r'] += status.getBet('r', 0)
        
        quizResultTitleMap = {'l':serverConf['leftTitle']+'获胜', 'm':'平局', 'r':serverConf['rightTitle']+'获胜'}
        
        if betAmount > 0:
            rewardCount = int(math.ceil(betAmount * odds))
            needTotalReward += rewardCount
            addState = 2
            if _setAlreadySentReward(gameId, activityId, userId):
                try:
                    # 给用户发奖
                    addOk = user_remote.addAssets(gameId, userId, [{'itemId':chipAssetId, 'count':rewardCount}],
                                                  'ACTIVITY_CONSUME', intActId)
                    
                    msg = '恭喜您在%s活动%sVS%s场次押注%s金币猜中%s,赔率为%s,获得%s金币奖励。' % (actConf['name'],
                                                                                serverConf['leftTitle'],
                                                                               serverConf['rightTitle'],
                                                                               int(betAmount),
                                                                               quizResultTitleMap[quizResult],
                                                                               odds,
                                                                               rewardCount)
                    pkmessage.sendPrivate(HALL_GAMEID, userId, 0, msg)
                except:
                    ftlog.error('hotfix_match_quiz._sendReward RewardUser gameId=', gameId,
                                'activityId=', activityId,
                                'quizResult=', quizResult,
                                'intActId=', intActId,
                                'chipAssetId=', chipAssetId,
                                'odds=', odds,
                                'oddsMap=', oddsMap,
                                'userId=', userId,
                                'rewardCount=', rewardCount,
                                'status=', status.toDict())
                    addOk = False
                addState = 1 if addOk else 0
                if addOk:
                    totalReward += rewardCount

            ftlog.info('hotfix_match_quiz._sendReward RewardUser gameId=', gameId,
                       'activityId=', activityId,
                       'quizResult=', quizResult,
                       'intActId=', intActId,
                       'chipAssetId=', chipAssetId,
                       'odds=', odds,
                       'oddsMap=', oddsMap,
                       'userId=', userId,
                       'rewardCount=', rewardCount,
                       'addState=', addState,
                       'status=', status.toDict())
        else:
            ftlog.info('hotfix_match_quiz._sendReward NotRewardUser gameId=', gameId,
                       'activityId=', activityId,
                       'quizResult=', quizResult,
                       'intActId=', intActId,
                       'chipAssetId=', chipAssetId,
                       'odds=', odds,
                       'oddsMap=', oddsMap,
                       'userId=', userId,
                       'status=', status.toDict())

    ftlog.info('hotfix_match_quiz._sendReward sent gameId=', gameId,
               'activityId=', activityId,
               'quizResult=', quizResult,
               'intActId=', intActId,
               'chipAssetId=', chipAssetId,
               'odds=', odds,
               'oddsMap=', oddsMap,
               'totalBets=', totalBets,
               'totalReward=', totalReward,
               'needTotalReward=', needTotalReward)
    return {'actId':activityId, 'intActId':intActId,
            'chipAssetId':chipAssetId, 'quizResult':quizResult,
            'totalBets':totalBets,
            'totalReward':totalReward,
            'odds':odds,
            'oddsMap':oddsMap,
            'needTotalReward':needTotalReward,
            }
Beispiel #16
0
def _sendReward(gameId, activityId, quizResult):
    if not quizResult in ('l', 'm', 'r'):
        ftlog.warn('hotfix_match_quiz._sendReward BadQuizResult gameId=',
                   gameId, 'activityId=', activityId, 'quizResult=',
                   quizResult)
        return

    actConf = _getActivityConf()
    if not actConf:
        ftlog.warn('hotfix_match_quiz._sendReward NotActConf gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return

    serverConf = actConf.get('serverConf')
    if not serverConf:
        ftlog.warn('hotfix_match_quiz._sendReward NotActServerConf gameId=',
                   gameId, 'activityId=', activityId, 'quizResult=',
                   quizResult)
        return

    oddsMap = {
        'l': serverConf['leftOdds'],
        'm': serverConf['middleOdds'],
        'r': serverConf['rightOdds'],
    }

    odds = oddsMap.get(quizResult)
    gameId = int(serverConf['gameId'])
    intActId = int(serverConf['intActId'])
    chipAssetId = serverConf['chipAssetId']

    ftlog.info('hotfix_match_quiz._sendReward sending... gameId=', gameId,
               'activityId=', activityId, 'quizResult=', quizResult,
               'intActId=', intActId, 'chipAssetId=', chipAssetId, 'odds=',
               odds, 'oddsMap=', oddsMap)

    totalBet = 0
    totalReward = 0
    needTotalReward = 0
    userIds = _getActUsers(gameId, activityId)

    for userId in userIds:
        #         class UserQuizStatus(object):
        #     def __init__(self, userId):
        #         self._userId = userId
        #         self._betMap = {}
        #         self._totalBet = 0
        status = activity_match_quiz.loadUserQuizStatus(
            gameId, userId, activityId)
        betAmount = status.getBet(quizResult, 0)
        totalBet += status.totalBet

        if betAmount > 0:
            rewardCount = betAmount * odds
            needTotalReward += rewardCount
            addState = 2
            if _setAlreadySentReward(gameId, activityId, userId):
                try:
                    # 给用户发奖
                    addOk = user_remote.addAssets(gameId, userId,
                                                  [{
                                                      'itemId': chipAssetId,
                                                      'count': rewardCount
                                                  }], 'ACTIVITY_CONSUME',
                                                  intActId)
                except:
                    ftlog.error(
                        'hotfix_match_quiz._sendReward RewardUser gameId=',
                        gameId, 'activityId=', activityId, 'quizResult=',
                        quizResult, 'intActId=', intActId, 'chipAssetId=',
                        chipAssetId, 'odds=', odds, 'oddsMap=', oddsMap,
                        'userId=', userId, 'rewardCount=', rewardCount,
                        'status=', status.toDict())
                    addOk = False
                addState = 1 if addOk else 0
                if addOk:
                    totalReward += rewardCount

            ftlog.info('hotfix_match_quiz._sendReward RewardUser gameId=',
                       gameId, 'activityId=', activityId, 'quizResult=',
                       quizResult, 'intActId=', intActId, 'chipAssetId=',
                       chipAssetId, 'odds=', odds, 'oddsMap=', oddsMap,
                       'userId=', userId, 'rewardCount=', rewardCount,
                       'addState=', addState, 'status=', status.toDict())
        else:
            ftlog.info('hotfix_match_quiz._sendReward NotRewardUser gameId=',
                       gameId, 'activityId=', activityId, 'quizResult=',
                       quizResult, 'intActId=', intActId, 'chipAssetId=',
                       chipAssetId, 'odds=', odds, 'oddsMap=', oddsMap,
                       'userId=', userId, 'status=', status.toDict())

    ftlog.info('hotfix_match_quiz._sendReward sent gameId=', gameId,
               'activityId=', activityId, 'quizResult=', quizResult,
               'intActId=', intActId, 'chipAssetId=', chipAssetId, 'odds=',
               odds, 'oddsMap=', oddsMap, 'totalBet=', totalBet,
               'totalReward=', totalReward, 'needTotalReward=',
               needTotalReward)
def _sendReward(gameId, activityId, quizResult):
    if not quizResult in ('l', 'm', 'r'):
        ftlog.warn('hotfix_match_quiz._sendReward BadQuizResult gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return

    actConf = _getActivityConf(activityId)
    if not actConf:
        ftlog.warn('hotfix_match_quiz._sendReward NotActConf gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return

    serverConf = actConf.get('server_config')
    if not serverConf:
        ftlog.warn('hotfix_match_quiz._sendReward NotActServerConf gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return

    oddsMap = {
        'l': serverConf['leftOdds'],
        'm': serverConf['middleOdds'],
        'r': serverConf['rightOdds'],
    }

    odds = oddsMap.get(quizResult)
    gameId = int(serverConf['gameId'])
    intActId = int(serverConf['intActId'])
    chipAssetId = 'user:chip'  # serverConf['chipAssetId']

    ftlog.info('hotfix_match_quiz._sendReward sending... gameId=', gameId,
               'activityId=', activityId,
               'quizResult=', quizResult,
               'intActId=', intActId,
               'chipAssetId=', chipAssetId,
               'odds=', odds,
               'oddsMap=', oddsMap)

    totalBets = {'l': 0, 'm': 0, 'r': 0}
    totalReward = 0
    needTotalReward = 0
    userIds = _getActUsers(gameId, activityId)

    for userId in userIds:
        #         class UserQuizStatus(object):
        #     def __init__(self, userId):
        #         self._userId = userId
        #         self._betMap = {}
        #         self._totalBet = 0
        status = activity_match_quiz.loadUserQuizStatus(gameId, userId, activityId)
        if not status:
            ftlog.error('hotfix_match_quiz._sendReward NotUserStatus gameId=', gameId,
                        'activityId=', activityId,
                        'quizResult=', quizResult,
                        'intActId=', intActId,
                        'chipAssetId=', chipAssetId,
                        'odds=', odds,
                        'oddsMap=', oddsMap,
                        'userId=', userId,
                        'status=', None)
            status = UserQuizStatus(userId)

        betAmount = status.getBet(quizResult, 0)

        totalBets['l'] += status.getBet('l', 0)
        totalBets['m'] += status.getBet('m', 0)
        totalBets['r'] += status.getBet('r', 0)

        quizResultTitleMap = {'l': serverConf['leftTitle'] + '获胜', 'm': '平局', 'r': serverConf['rightTitle'] + '获胜'}

        if betAmount > 0:
            rewardCount = int(betAmount * odds * 1000)
            needTotalReward += rewardCount
            addState = 2
            if _setAlreadySentReward(gameId, activityId, userId):
                try:
                    # 给用户发奖
                    addOk = user_remote.addAssets(gameId, userId, [{'itemId': chipAssetId, 'count': rewardCount}],
                                                  'ACTIVITY_CONSUME', intActId)

                    msg = '恭喜您在欧洲杯竞猜活动%sVS%s场次押注%s钻石猜中%s,赔率为%s,获得%s金币奖励。' % (serverConf['leftTitle'],
                                                                             serverConf['rightTitle'],
                                                                             int(betAmount),
                                                                             quizResultTitleMap[quizResult],
                                                                             odds,
                                                                             rewardCount)
                    pkmessage.sendPrivate(HALL_GAMEID, userId, 0, msg)
                except:
                    ftlog.error('hotfix_match_quiz._sendReward RewardUser gameId=', gameId,
                                'activityId=', activityId,
                                'quizResult=', quizResult,
                                'intActId=', intActId,
                                'chipAssetId=', chipAssetId,
                                'odds=', odds,
                                'oddsMap=', oddsMap,
                                'userId=', userId,
                                'rewardCount=', rewardCount,
                                'status=', status.toDict())
                    addOk = False
                addState = 1 if addOk else 0
                if addOk:
                    totalReward += rewardCount

            ftlog.info('hotfix_match_quiz._sendReward RewardUser gameId=', gameId,
                       'activityId=', activityId,
                       'quizResult=', quizResult,
                       'intActId=', intActId,
                       'chipAssetId=', chipAssetId,
                       'odds=', odds,
                       'oddsMap=', oddsMap,
                       'userId=', userId,
                       'rewardCount=', rewardCount,
                       'addState=', addState,
                       'status=', status.toDict())
        else:
            ftlog.info('hotfix_match_quiz._sendReward NotRewardUser gameId=', gameId,
                       'activityId=', activityId,
                       'quizResult=', quizResult,
                       'intActId=', intActId,
                       'chipAssetId=', chipAssetId,
                       'odds=', odds,
                       'oddsMap=', oddsMap,
                       'userId=', userId,
                       'status=', status.toDict())

    ftlog.info('hotfix_match_quiz._sendReward sent gameId=', gameId,
               'activityId=', activityId,
               'quizResult=', quizResult,
               'intActId=', intActId,
               'chipAssetId=', chipAssetId,
               'odds=', odds,
               'oddsMap=', oddsMap,
               'totalBets=', totalBets,
               'totalReward=', totalReward,
               'needTotalReward=', needTotalReward)
    return {'actId': activityId, 'intActId': intActId,
            'chipAssetId': chipAssetId, 'quizResult': quizResult,
            'totalBets': totalBets,
            'totalReward': totalReward,
            'odds': odds,
            'oddsMap': oddsMap,
            'needTotalReward': needTotalReward,
            }
Beispiel #18
0
def _sendReward(gameId, activityId, quizResult):
    if not quizResult in ('l', 'm', 'r'):
        ftlog.warn('hotfix_match_quiz._sendReward BadQuizResult gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return

    actConf = _getActivityConf()
    if not actConf:
        ftlog.warn('hotfix_match_quiz._sendReward NotActConf gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return

    serverConf = actConf.get('serverConf')
    if not serverConf:
        ftlog.warn('hotfix_match_quiz._sendReward NotActServerConf gameId=', gameId,
                   'activityId=', activityId, 'quizResult=', quizResult)
        return

    oddsMap = {
        'l': serverConf['leftOdds'],
        'm': serverConf['middleOdds'],
        'r': serverConf['rightOdds'],
    }

    odds = oddsMap.get(quizResult)
    gameId = int(serverConf['gameId'])
    intActId = int(serverConf['intActId'])
    chipAssetId = serverConf['chipAssetId']

    ftlog.info('hotfix_match_quiz._sendReward sending... gameId=', gameId,
               'activityId=', activityId,
               'quizResult=', quizResult,
               'intActId=', intActId,
               'chipAssetId=', chipAssetId,
               'odds=', odds,
               'oddsMap=', oddsMap)

    totalBet = 0
    totalReward = 0
    needTotalReward = 0
    userIds = _getActUsers(gameId, activityId)

    for userId in userIds:
        #         class UserQuizStatus(object):
        #     def __init__(self, userId):
        #         self._userId = userId
        #         self._betMap = {}
        #         self._totalBet = 0
        status = activity_match_quiz.loadUserQuizStatus(gameId, userId, activityId)
        betAmount = status.getBet(quizResult, 0)
        totalBet += status.totalBet

        if betAmount > 0:
            rewardCount = betAmount * odds
            needTotalReward += rewardCount
            addState = 2
            if _setAlreadySentReward(gameId, activityId, userId):
                try:
                    # 给用户发奖
                    addOk = user_remote.addAssets(gameId, userId, [{'itemId': chipAssetId, 'count': rewardCount}],
                                                  'ACTIVITY_CONSUME', intActId)
                except:
                    ftlog.error('hotfix_match_quiz._sendReward RewardUser gameId=', gameId,
                                'activityId=', activityId,
                                'quizResult=', quizResult,
                                'intActId=', intActId,
                                'chipAssetId=', chipAssetId,
                                'odds=', odds,
                                'oddsMap=', oddsMap,
                                'userId=', userId,
                                'rewardCount=', rewardCount,
                                'status=', status.toDict())
                    addOk = False
                addState = 1 if addOk else 0
                if addOk:
                    totalReward += rewardCount

            ftlog.info('hotfix_match_quiz._sendReward RewardUser gameId=', gameId,
                       'activityId=', activityId,
                       'quizResult=', quizResult,
                       'intActId=', intActId,
                       'chipAssetId=', chipAssetId,
                       'odds=', odds,
                       'oddsMap=', oddsMap,
                       'userId=', userId,
                       'rewardCount=', rewardCount,
                       'addState=', addState,
                       'status=', status.toDict())
        else:
            ftlog.info('hotfix_match_quiz._sendReward NotRewardUser gameId=', gameId,
                       'activityId=', activityId,
                       'quizResult=', quizResult,
                       'intActId=', intActId,
                       'chipAssetId=', chipAssetId,
                       'odds=', odds,
                       'oddsMap=', oddsMap,
                       'userId=', userId,
                       'status=', status.toDict())

    ftlog.info('hotfix_match_quiz._sendReward sent gameId=', gameId,
               'activityId=', activityId,
               'quizResult=', quizResult,
               'intActId=', intActId,
               'chipAssetId=', chipAssetId,
               'odds=', odds,
               'oddsMap=', oddsMap,
               'totalBet=', totalBet,
               'totalReward=', totalReward,
               'needTotalReward=', needTotalReward)