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)
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, {}))
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
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
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
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
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)