Пример #1
0
 def processInvitees(self, enterParam, note, invitees, userId, gameId):
     '''
     邀请好友牌桌游戏
     invitees - 被邀请者
     '''
     if not invitees:
         return
     uds = userdata.getAttrs(userId, ['name'])
     # 检查是否在线
     for invitee in invitees:
         # invitee - 被邀请者
         state = onlinedata.getOnlineState(invitee)
         if state:
             # 在线,则进行下一步操作
             ids = userdata.getAttrs(invitee, ['name'])
             _, clientVer, _, _ = sessiondata.getClientIdInfo(invitee)
             if clientVer < 3.77:
                 # 版本号小于3.77,则提示升级
                 TodoTaskHelper.sendTodoTask(gameId, invitee,
                                             TodoTaskPopTip(note + ' 请升级至新版本与好友 ' + uds[0] + ' 一起玩耍!'))
                 TodoTaskHelper.sendTodoTask(gameId, userId,
                                             TodoTaskPopTip('您的好友 ' + ids[0] + ' 版本较低,提醒他升级到最新版本一起玩耍吧!'))
             else:
                 # 判断是否在同一牌桌上
                 if self.isInSameTable(userId, invitee):
                     TodoTaskHelper.sendTodoTask(gameId, userId, TodoTaskPopTip('您的好友 ' + ids[0] + ' 正在跟您一起游戏呢'))
                 else:
                     # 版本号大于3.77,则发送邀请
                     TodoTaskHelper.sendTodoTask(gameId, invitee, TodoTaskInviteToGame(userId, note, enterParam))
         else:
             TodoTaskHelper.sendTodoTask(gameId, userId, TodoTaskPopTip('您的好友当前不在线'))
             ftlog.debug('您的好友当前不在线')
Пример #2
0
def _getThirdPartyUserInfo(userId):
    '''
    取得用户的基本账户的信息
    玩家昵称
    玩家id
    钻石数量
    金币数量
    奖券数量
    魅力值
    vip等级
    '''
    userdata.checkUserData(userId)
    ukeys = [UserDataSchema.NAME, UserDataSchema.SEX, UserDataSchema.DIAMOND,
             UserDataSchema.CHIP, UserDataSchema.COUPON, UserDataSchema.CHARM,
             UserDataSchema.PURL, UserDataSchema.CREATETIME]
    udataDb = userdata.getAttrs(userId, ukeys)
    udata = dict(zip(ukeys, udataDb))
    # vip信息
    udata['vipInfo'] = hallvip.userVipSystem.getVipInfo(userId)

    # 游戏信息
    clientId = sessiondata.getClientId(userId)
    gameInfo = hallaccount.getGameInfo(userId, clientId)
    udata['gameInfo'] = gameInfo.get('dashifen', {})
    return udata
Пример #3
0
 def getUserNameAndPic(cls, userId):
     name, pic = userdata.getAttrs(userId, ['name', 'purl'])
     if not name or name == '':
         name = str(userId)
     if not pic:
         pic = ''
     return name, pic
Пример #4
0
 def encodeReplayForWonderful(cls, userId, replay):
     seats = []
     for seat in replay.details.get('seats'):
         name = seat.get('name', '')
         headUrl = seat.get('headUrl', '')
         if not name or not headUrl:
             nowName, nowHeadUrl = userdata.getAttrs(seat.get('uid'), ['name', 'purl'])
             if not name:
                 name = nowName
             if not headUrl:
                 headUrl = nowHeadUrl
         seats.append({
             'uid':seat.get('uid'),
             'name':strutil.ensureString(name, ''),
             'img':strutil.ensureString(headUrl, '')
         })
     return {
         'id':replay.videoId,
         'name':replay.roomName,
         'mark':'',
         'desc':cls.buildDesc(replay),
         'views':replay.viewsCount,
         'time':replay.timestamp,
         'dizhuwin':replay.details.get('dizhuWin'),
         'dizhu':replay.details.get('dizhu'),
         'owner':replay.userId,
         'url':'',
         'seats':seats
     }
Пример #5
0
 def getUserNameAndPic(cls, userId):
     name, pic = userdata.getAttrs(userId, ['name', 'purl'])
     if not name or name == '':
         name = str(userId)
     if not pic:
         pic = ''
     return name, pic
Пример #6
0
 def _getRanking(self, rankingDefine, timestamp):
     rankingList = hallranking.rankingSystem.getTopN(
         rankingDefine.rankingId, rankingDefine.totalN, timestamp)
     if not rankingList:
         return None
     rankDatas = []
     for index, user in enumerate(rankingList.rankingUserList):
         if index >= rankingDefine.topN:
             break
         name, purl = userdata.getAttrs(user.userId, ['name', 'purl'])
         detail = {}
         detail['name'] = str(name) if name else ''
         detail['headUrl'] = str(purl) if purl else ''
         detail['rankValue'] = self._filterScore(user.score)
         rankDatas.append({
             'rank':
             user.rank + 1,
             'rankPic':
             rankingList.rankingDefine.getPicByRank(user.rank),
             'userId':
             user.userId,
             'detail':
             detail,
         })
     return (rankingList, timestamp, {
         'rankId': rankingDefine.rankingId,
         'issueNum': rankingList.issueNumber,
         'name': rankingList.rankingDefine.name,
         'desc': rankingList.rankingDefine.desc,
         'rankInfo': rankingList.rankingDefine.outRankDesc,
         'type': rankingList.rankingDefine.rankingType,
         'rankDatas': rankDatas
     })
Пример #7
0
def _getThirdPartyUserInfo(userId):
    '''
    取得用户的基本账户的信息
    玩家昵称
    玩家id
    钻石数量
    金币数量
    奖券数量
    魅力值
    vip等级
    '''
    userdata.checkUserData(userId)
    ukeys = [
        UserDataSchema.NAME, UserDataSchema.SEX, UserDataSchema.DIAMOND,
        UserDataSchema.CHIP, UserDataSchema.COUPON, UserDataSchema.CHARM,
        UserDataSchema.PURL, UserDataSchema.CREATETIME
    ]
    udataDb = userdata.getAttrs(userId, ukeys)
    udata = dict(zip(ukeys, udataDb))
    # vip信息
    udata['vipInfo'] = hallvip.userVipSystem.getVipInfo(userId)

    # 游戏信息
    clientId = sessiondata.getClientId(userId)
    gameInfo = hallaccount.getGameInfo(userId, clientId)
    udata['gameInfo'] = gameInfo.get('dashifen', {})
    return udata
Пример #8
0
def getUserHeadUrl(userId, clientId, purl=None, beauty=None):
    '''
    取得当前的用户的头像
    取得当前的用户是否是美女认证账户
    '''
    # 自定义头像, 美女认证
    if purl == None:
        purl, beauty = userdata.getAttrs(userId, ['purl', 'beauty'])
        if purl:
            purl = unicode(purl)
        else:
            purl = ''
    purl = _filter360QihuImage(userId, clientId, purl)
    if isinstance(purl, (str, unicode)):
        if (purl.find('http://') < 0) and (purl.find('https://') < 0):
            purl = ''
    if purl == '' or purl == None:
        heads = getUserHeadPics(clientId)
        purl = random.choice(heads)
        userdata.setAttr(userId, 'purl', purl)

    isBeauty = False
    if beauty:
        isBeauty = True if (beauty & 1) != 0 else False

    return purl, isBeauty
Пример #9
0
    def queryEnvelope(self):
        info = {}
        info['envelopeId'] = self.id
        info['contents'] = self.contents
        info['receiver'] = []
        receivers = daobase.executeMixCmd('LRANGE', self.dbPrefix + self.id + self.RECEIVER, 0, -1)
        if receivers:
            for receiverJson in receivers:
                receiver = json.loads(receiverJson)
                # 补充昵称/头像/金币信息
                userId = receiver['userId']
                chip, name, purl = pkuserdata.getAttrs(userId, ['chip', 'name', 'purl'])
                if chip and name and purl:
                    if ftlog.is_debug():
                        ftlog.debug('TYRedEnvelope.queryEnvelope receiver userId:', userId, ' chip:', chip, ' name:',
                                    name, ' purl:', purl)
                    receiver['chip'] = chip
                    receiver['name'] = name
                    receiver['purl'] = purl

                info['receiver'].append(receiver)

        if ftlog.is_debug():
            ftlog.debug('TYRedEnvelope.queryEnvelope info:', info)

        return info
Пример #10
0
def getUserInfo(userId, gameId, clientId):
    '''
    取得用户的基本账户的信息
    '''
    ukeys = ['email', 'pdevid', 'mdevid', 'isbind', 'snsId', 'name',
             'source', 'diamond', 'address', 'sex', 'state',
             'payCount', 'snsinfo', 'vip', 'dayang', 'idcardno',
             'phonenumber', 'truename', 'detect_phonenumber',
             'lang', 'country', "signature", "set_name_sum", "coupon",
             'purl', 'beauty', 'charm', 'password', 'bindMobile']

    udataDb = userdata.getAttrs(userId, ukeys)

    udata = dict(zip(ukeys, udataDb))
    udata['coin'] = udata['diamond']  # 数据补丁: 再把diamond转换到coin返回, 老版本用的是coin
    udata['chip'] = userchip.getChip(userId)

    # 头像相关
    purl, isbeauty = getUserHeadUrl(userId, clientId, udata['purl'], udata['beauty'])
    udata['purl'] = purl
    udata['isBeauty'] = isbeauty

    # vip信息
    udata['vipInfo'] = hallvip.userVipSystem.getVipInfo(userId)
    # 江湖救急次数
    udata['assistance'] = {
        'count': hallvip.userVipSystem.getAssistanceCount(gameId, userId),
        'limit': hallvip.vipSystem.getAssistanceChipUpperLimit()
    }
    userdata.updateUserGameDataAuthorTime(userId, gameId)
    return udata
Пример #11
0
 def _getRanking(self, rankingDefine, timestamp):
     rankingList = hallranking.rankingSystem.getTopN(rankingDefine.rankingId,
                                                     rankingDefine.totalN, timestamp)
     if not rankingList:
         return None
     rankDatas = []
     for index, user in enumerate(rankingList.rankingUserList):
         if index >= rankingDefine.topN:
             break
         name, purl = userdata.getAttrs(user.userId, ['name', 'purl'])
         detail = {}
         detail['name'] = str(name) if name else ''
         detail['headUrl'] = str(purl) if purl else ''
         detail['rankValue'] = self._filterScore(user.score)
         rankDatas.append({
             'rank': user.rank + 1,
             'rankPic': rankingList.rankingDefine.getPicByRank(user.rank),
             'userId': user.userId,
             'detail': detail,
         })
     return (rankingList, timestamp, {
         'rankId': rankingDefine.rankingId,
         'issueNum': rankingList.issueNumber,
         'name': rankingList.rankingDefine.name,
         'desc': rankingList.rankingDefine.desc,
         'rankInfo': rankingList.rankingDefine.outRankDesc,
         'type': rankingList.rankingDefine.rankingType,
         'rankDatas': rankDatas
     })
Пример #12
0
def isUserEnabledGps(userId):
    """用户是否开启了gps, 有geo坐标数据就认为是已经开启
    """
    lat1, lon1 = userdata.getAttrs(userId, ["geoLat", "geoLon"])
    ftlog.debug("util.isUserEnabledGps userId", userId, "lat", lat1, "lon1",
                lon1)
    return lat1 and lon1
Пример #13
0
    def getWorshipRank(cls):
        """ 获取排行榜 """
        currentTimestamp = pktimestamp.getCurrentTimestamp()
        key = buildUserCostKey()
        first_updated_at = daobase.executeRePlayCmd('hget', key, 'first_updated_at') or currentTimestamp
        if pktimestamp.is_same_day(currentTimestamp, first_updated_at):
            ret = []
            key = buildWorshipRankKey()
            datas = daobase.executeRePlayCmd('zrevrange', key, 0, -1, 'withscores')
            if datas:
                for i in xrange(len(datas) / 2):
                    userId = int(datas[i * 2])
                    chip = int(datas[i * 2 + 1])
                    userName, purl = userdata.getAttrs(userId, ['name', 'purl'])
                    ret.append({'nickname': str(userName),
                                'img': purl,
                                'userId': userId,
                                'chip': chip,
                                'rank': i+1})

            return ret
        else:
            key = buildUserCostKey()
            clearUserCost()
            clearRankList()
            daobase.executeRePlayCmd('hset', key, 'first_updated_at', currentTimestamp)
            ftlog.info('WorshipHelper.getWorshipRank first_updated_at=', first_updated_at)
            return []
Пример #14
0
    def friendInfo(cls, friend, prize, index, clientId):
        userdata.checkUserData(friend["userId"])

        coupon = 0
        if (index + 1) % 5 == 0:
            coupon = prize["COUPON"]
        result = {
            "prizeInfo": {
                "prize": [{
                    "name": "CHIP",
                    "count": prize["CHIP"]
                }, {
                    "name": "COUPON",
                    "count": coupon
                }],
                "state":
                friend["state"]
            }
        }
        uds = userdata.getAttrs(friend["userId"], ['purl', 'name', 'chip'])
        friendInfo = {
            "userId": friend["userId"],
            "headUrl": uds[0],
            "name": uds[1],
            "chip": uds[2],
            "dashifen": cls.getDaShiFenPic(friend["userId"], clientId)
        }
        result['friendInfo'] = friendInfo
        return result
Пример #15
0
    def queryEnvelope(self):
        info = {}
        info['envelopeId'] = self.id
        info['contents'] = self.contents
        info['receiver'] = []
        receivers = daobase.executeMixCmd(
            'LRANGE', self.dbPrefix + self.id + self.RECEIVER, 0, -1)
        if receivers:
            for receiverJson in receivers:
                receiver = json.loads(receiverJson)
                # 补充昵称/头像/金币信息
                userId = receiver['userId']
                chip, name, purl = pkuserdata.getAttrs(
                    userId, ['chip', 'name', 'purl'])
                if chip and name and purl:
                    if ftlog.is_debug():
                        ftlog.debug(
                            'TYRedEnvelope.queryEnvelope receiver userId:',
                            userId, ' chip:', chip, ' name:', name, ' purl:',
                            purl)
                    receiver['chip'] = chip
                    receiver['name'] = name
                    receiver['purl'] = purl

                info['receiver'].append(receiver)

        if ftlog.is_debug():
            ftlog.debug('TYRedEnvelope.queryEnvelope info:', info)

        return info
Пример #16
0
 def getNickname(cls, userId):
     '''
     获得指定UserId玩家的昵称
     '''
     l = userdata.getAttrs(userId, ['name'])
     if l:
         return l[0]
     return ''
Пример #17
0
 def getUData(self, userId):
     if userId not in self.udatas:
         udata = userdata.getAttrs(userId, ['name', 'purl'])
         photo = gamedata.getGameAttr(userId, self.gameId, 'photo')
         udata.append(photo)
         self.udatas[userId] = udata
         return udata
     return self.udatas[userId]
Пример #18
0
 def getUData(self, userId):
     if userId not in self.udatas:
         udata = userdata.getAttrs(userId, ['name', 'purl'])
         photo = gamedata.getGameAttr(userId, self.gameId, 'photo')
         udata.append(photo)
         self.udatas[userId] = udata
         return udata
     return self.udatas[userId]
Пример #19
0
def _processUserShareLoginEventImpl(evt):
    clientId = sessiondata.getClientId(evt.shareUserId)
    actList = ActivityWxHelper.getActivityList(evt.shareUserId, clientId)
    if ftlog.is_debug():
        ftlog.debug('activity_wx_share_charm._processUserShareLoginEventImpl',
                    'userId=', evt.userId, 'shareUserId=', evt.shareUserId,
                    'actList=', actList)
    for act in actList:
        if act['typeId'] == ActivityWxShareCharm.TYPE_ID:
            actId = act['actId']
            actInstance = ActivityWxHelper.findActivity(actId)
            if actInstance:
                if ftlog.is_debug():
                    ftlog.debug(
                        'activity_wx_share_charm._processUserShareLoginEventImpl',
                        'userId=', evt.userId, 'shareUserId=', evt.shareUserId,
                        'actInstance=', actInstance)
                # 判断用户是否已经帮助过别人了
                timestamp = pktimestamp.getCurrentTimestamp()
                userData = UserShareCharmData(evt.userId).loadUserData(actId)
                saveUserData = False
                if not pktimestamp.is_same_day(userData.timestamp, timestamp):
                    userData.timestamp = timestamp
                    userData.isShareLogin = 0
                    saveUserData = True

                if userData.isShareLogin == 0:
                    # 获取当前期号
                    shareUserData = UserShareCharmData(
                        evt.shareUserId).loadUserData(actId)
                    currentIssue = calculateCurrentIssue(
                        actInstance.settleDayOrWeek)
                    # 增加魅力值
                    totalCount = shareUserData.increaseCharm(currentIssue, 1)
                    shareUserData.saveUserData(actId)
                    # 插入排行榜
                    insertRankList(actId, currentIssue, evt.shareUserId,
                                   totalCount, actInstance.maxRankNum)

                    # 更新帮助用户信息
                    userData.isShareLogin = 1
                    saveUserData = True

                if saveUserData:
                    userData.saveUserData(actId)
                    name, _ = userdata.getAttrs(evt.shareUserId,
                                                ['name', 'purl'])
                    mo = MsgPack()
                    mo.setCmd('act_wx')
                    mo.setResult('action', 'share_charm_login')
                    mo.setResult('loginMsg', '感谢您帮助【%s】增加1点魅力值哦~' % name)
                    router.sendToUser(mo, evt.userId)

                    if ftlog.is_debug():
                        ftlog.debug(
                            'activity_wx_share_charm._processUserShareLoginEventImpl',
                            'userId=', evt.userId, 'shareUserId=',
                            evt.shareUserId, 'mo=', mo)
Пример #20
0
 def getRankList(self, userId):
     ranks = []
     score = 0
     rank = 0
     rewards = []
     ownPlayer = [player for player in self.matchMaster.rankList if player.userId == userId]
     if ownPlayer:
         player = ownPlayer[0]
         score = player.score
         rank = player.rank
         rankRewards = self._getRewards(player.rank)
         if rankRewards:
             rewards = TimeMatch.buildRewards(rankRewards)
     name = util.getNickname(userId)
     sex, avatar = userdata.getAttrs(userId, ["sex", "purl"])
     ranks.append({
         "userId": userId,
         "name": name,
         "sex": sex,
         "score": score,
         "rank": rank,
         "avatar": avatar,
         "vip": util.getVipShowLevel(userId),
         "rewards": rewards
     })
     if not self.matchMaster.rankListCache:
         for player in self.matchMaster.rankList[:50]:
             name = util.getNickname(player.userId)
             sex, avatar = userdata.getAttrs(player.userId, ["sex", "purl"])
             rankRewards = self._getRewards(player.rank)
             rewards = []
             if rankRewards:
                 rewards = TimeMatch.buildRewards(rankRewards)
             self.matchMaster.rankListCache.append({
                 "userId": player.userId,
                 "name": name,
                 "sex": sex,
                 "score": player.score,
                 "rank": player.rank,
                 "avatar": avatar,
                 "vip": util.getVipShowLevel(player.userId),
                 "rewards": rewards
             })
     ranks.extend(self.matchMaster.rankListCache)
     return ranks
Пример #21
0
 def getConfigForClient(self, gameId, userId, clientId):
     clientconf = copy.deepcopy(self._clientConf)
     config = clientconf['config']
     name, purl = userdata.getAttrs(userId, [UserDataSchema.NAME, UserDataSchema.PURL])
     purl, _ = halluser.getUserHeadUrl(userId, clientId, purl)
     replace_dict = {'code': userId, 'name': name, 'image': purl}
     self._fill_button_todotask(userId, config, 'button_friend', replace_dict)
     self._fill_button_todotask(userId, config, 'button_moments', replace_dict)
     return clientconf
Пример #22
0
def tryRename(gameId, userId, newName):
    consumeCount = 0
    oldName, setNameSum = userdata.getAttrs(userId, ['name', 'set_name_sum'])
    if ftlog.is_debug():
        ftlog.info(
            'hallrename.tryRename gameId=',
            gameId,
            'setNameSum=',
            setNameSum,
            'userId=',
            userId,
            'oldName=',
            oldName,
            'newName=',
            newName,
        )
    if oldName == newName:
        if ftlog.is_debug():
            ftlog.info('hallrename.tryRename gameId=', gameId, 'userId=',
                       userId, 'name not changed !')
        return -3, 'not changed'

    setNameSum = userdata.incrAttr(userId, 'set_name_sum', 1)
    if setNameSum > 1:
        # 消耗一个改名卡
        timestamp = pktimestamp.getCurrentTimestamp()
        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        _, consumeCount, final = userAssets.consumeAsset(
            gameId, hallitem.ASSET_RENAME_CARD_KIND_ID, 1, timestamp,
            'USER_RENAME', 0)
        if consumeCount < 1:
            if ftlog.is_debug():
                ftlog.info('hallrename.tryRename gameId=', gameId, 'userId=',
                           userId, 'no rename card !')
            return -2, 'no rename card'

        ftlog.info('hallrename.tryRename gameId=', gameId, 'userId=', userId,
                   'newName=', newName, 'consumeCount=', consumeCount,
                   'setNameSum=', setNameSum, 'final=', final)
    code, info = _rename(gameId, userId, newName)
    if code != 0 and consumeCount > 0:
        # 改名失败,退回改名卡
        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        _, addCount, final = userAssets.addAsset(
            gameId, hallitem.ASSET_RENAME_CARD_KIND_ID, 1, timestamp,
            'USER_RENAME', 0)
        ftlog.info('hallrename.tryRename rollback gameId=', gameId, 'userId=',
                   userId, 'newName=', newName, 'addCount=', addCount,
                   'setNameSum=', setNameSum, 'final=', final)
    if code != 0 and setNameSum == 1:
        # 第一次修改失败,退回
        userdata.incrAttr(userId, 'set_name_sum', -1)

    datachangenotify.sendDataChangeNotify(gameId, userId, ['item', 'udata'])

    return code, info
Пример #23
0
    def getRankRewardList(self, userId):
        ''' 获取奖励排行榜 '''
        ret = []
        for rankReward in self.rankRewards:
            nickname, purl, count = '', '', 0
            startRankUserIdList = getRankList(
                self.actId, calculateCurrentIssue(self.settleDayOrWeek),
                rankReward.startRank - 1, rankReward.startRank - 1)
            if startRankUserIdList:
                startRankUserId = startRankUserIdList[0]
                userdata.checkUserData(startRankUserId)
                nickname, purl = userdata.getAttrs(startRankUserId,
                                                   ['name', 'purl'])
                issue = calculateCurrentIssue(self.settleDayOrWeek)
                userData = UserShareCharmData(startRankUserId).loadUserData(
                    self.actId)
                issueData = userData.getIssueData(issue)
                count = issueData.count if issueData else 0
            ret.append({
                'startRank': rankReward.startRank,
                'endRank': rankReward.endRank,
                'rewardDesc': rankReward.rewardDesc,
                'rewardPic': rankReward.rewardPic,
                'userInfo': {
                    'name': nickname,
                    'purl': purl,
                    'count': count
                }
            })

        currentIssue = calculateCurrentIssue(self.settleDayOrWeek)
        lastIssue = calculateLastIssue(self.settleDayOrWeek)
        rank = getUserRealRank(userId, self.actId, currentIssue)
        count = UserShareCharmData(userId).loadUserData(
            self.actId).getCharmCount(currentIssue)
        lastRank = getUserRealRank(userId, self.actId, lastIssue)
        lastCount = UserShareCharmData(userId).loadUserData(
            self.actId).getCharmCount(lastIssue)

        retRes = {
            'userInfo': {
                'rank': rank,
                'count': count,
                'lastRank': lastRank,
                'lastCount': lastCount
            },
            'rankList': ret,
            'startDate': calculateCurrentIssue(self.settleDayOrWeek),
            'endDate': calculateEndDayStr(self.settleDayOrWeek)
        }
        if ftlog.is_debug():
            ftlog.debug('ActivityWxShareCharm.getRankRewardList', 'retRes=',
                        retRes)
        return retRes
Пример #24
0
 def processInvitees(self, enterParam, note, invitees, userId, gameId):
     '''
     邀请好友牌桌游戏
     invitees - 被邀请者
     '''
     if not invitees:
         return
     uds = userdata.getAttrs(userId, ['name'])
     # 检查是否在线
     for invitee in invitees:
         # invitee - 被邀请者
         state = onlinedata.getOnlineState(invitee)
         if state:
             # 在线,则进行下一步操作
             ids = userdata.getAttrs(invitee, ['name'])
             _, clientVer, _, _ = sessiondata.getClientIdInfo(invitee)
             if clientVer < 3.77:
                 # 版本号小于3.77,则提示升级
                 TodoTaskHelper.sendTodoTask(
                     gameId, invitee,
                     TodoTaskPopTip(note + ' 请升级至新版本与好友 ' + uds[0] +
                                    ' 一起玩耍!'))
                 TodoTaskHelper.sendTodoTask(
                     gameId, userId,
                     TodoTaskPopTip('您的好友 ' + ids[0] +
                                    ' 版本较低,提醒他升级到最新版本一起玩耍吧!'))
             else:
                 # 判断是否在同一牌桌上
                 if self.isInSameTable(userId, invitee):
                     TodoTaskHelper.sendTodoTask(
                         gameId, userId,
                         TodoTaskPopTip('您的好友 ' + ids[0] + ' 正在跟您一起游戏呢'))
                 else:
                     # 版本号大于3.77,则发送邀请
                     TodoTaskHelper.sendTodoTask(
                         gameId, invitee,
                         TodoTaskInviteToGame(userId, note, enterParam))
         else:
             TodoTaskHelper.sendTodoTask(gameId, userId,
                                         TodoTaskPopTip('您的好友当前不在线'))
             ftlog.debug('您的好友当前不在线')
Пример #25
0
 def loadStatus(self, userId):
     try:
         firstDailyCheckin, lastDailyCheckin = pkuserdata.getAttrs(userId, ['firstDailyCheckin', 'lastDailyCheckin'])
         if ftlog.is_debug():
             ftlog.debug('TYDailyCheckinDao.loadStatus userId=', userId,
                         'firstDailyCheckin=', firstDailyCheckin,
                         'lastDailyCheckin=', lastDailyCheckin)
         if firstDailyCheckin and lastDailyCheckin:
             return TYDailyCheckinStatus(int(firstDailyCheckin), int(lastDailyCheckin))
     except:
         ftlog.error()
     return None
 def getConfigForClient(self, gameId, userId, clientId):
     clientconf = copy.deepcopy(self._clientConf)
     config = clientconf['config']
     name, purl = userdata.getAttrs(
         userId, [UserDataSchema.NAME, UserDataSchema.PURL])
     purl, _ = halluser.getUserHeadUrl(userId, clientId, purl)
     replace_dict = {'code': userId, 'name': name, 'image': purl}
     self._fill_button_todotask(userId, config, 'button_friend',
                                replace_dict)
     self._fill_button_todotask(userId, config, 'button_moments',
                                replace_dict)
     return clientconf
Пример #27
0
def getGeoDistance(userId1, userId2):
    '''计算两个玩家距离 单位:米
       无法测量时返回-1
    '''
    lat1, lon1 = userdata.getAttrs(userId1, ["geoLat", "geoLon"])
    lat2, lon2 = userdata.getAttrs(userId2, ["geoLat", "geoLon"])
    if not lat1 or not lat2:
        return -1

    if abs(lat1) < 1e-100 or abs(lat2) < 1e-100:
        return -1

    geoint1 = geohash.encode(lat1, lon1)
    geoint2 = geohash.encode(lat2, lon2)

    dist = -1
    try:
        dist = geohash.get_distance(geoint1, geoint2)
    except Exception, e:
        ftlog.error("getGeoDistance, |lat1, lon1, lat2, lon2, geoint1, geoint2:",
                    lat1, lon1, lat2, lon2, geoint1, geoint2, e)
Пример #28
0
def getGeoDistance(userId1, userId2):
    '''计算两个玩家距离 单位:米
       无法测量时返回-1
    '''
    lat1, lon1 = userdata.getAttrs(userId1, ["geoLat", "geoLon"])
    lat2, lon2 = userdata.getAttrs(userId2, ["geoLat", "geoLon"])
    if not lat1 or not lat2:
        return -1

    if abs(lat1) < 1e-100 or abs(lat2) < 1e-100:
        return -1

    geoint1 = geohash.encode(lat1, lon1)
    geoint2 = geohash.encode(lat2, lon2)

    dist = -1
    try:
        dist = geohash.get_distance(geoint1, geoint2)
    except Exception, e:
        ftlog.error(
            "getGeoDistance, |lat1, lon1, lat2, lon2, geoint1, geoint2:", lat1,
            lon1, lat2, lon2, geoint1, geoint2, e)
Пример #29
0
def _adjustStatus(status):
    try:
        bindMobile, createTimeStr = userdata.getAttrs(status.userId, ['bindMobile', 'createTime'])
        status._isBindMobile = True if bindMobile else False
        status._registerTime = pktimestamp.timestrToTimestamp(createTimeStr, '%Y-%m-%d %H:%M:%S.%f')
        if status.inviteeMap:
            sl = sorted(status.inviteeMap.values(), key=lambda invitee: invitee.index)
            removeList = sl[MAX_INVITEE:]
            for invitee in removeList:
                del status.inviteeMap[invitee.userId]
    except:
        ftlog.error('neituiguang._adjustStatus userId=', status.userId)
    return status
Пример #30
0
def _onOpenItemEvent(event):
    # TYOpenItemEvent(gameId, userBag.userId, item, assetItemList)
    if _scoreRankConf.closed:
        return
    userName = userdata.getAttrs(event.userId, ['name'])[0]
    boxName = event.item.itemKind.displayName
    for assetItemTuple in event.gotAssetList:
        # 0 - assetItem, 1 - count, 2 - final
        assetItem = assetItemTuple[0]
        if assetItem.kindId in _scoreRankConf.ledItems:
            # 冠军发送Led通知所有其他玩家
            ledText = dizhuled._mk_open_box_rich_text(userName, boxName,
                                                      assetItem.displayName)
            LedUtil.sendLed(ledText, 'global')
Пример #31
0
 def loadStatus(self, userId):
     try:
         firstDailyCheckin, lastDailyCheckin = pkuserdata.getAttrs(
             userId, ['firstDailyCheckin', 'lastDailyCheckin'])
         if ftlog.is_debug():
             ftlog.debug('TYDailyCheckinDao.loadStatus userId=', userId,
                         'firstDailyCheckin=', firstDailyCheckin,
                         'lastDailyCheckin=', lastDailyCheckin)
         if firstDailyCheckin and lastDailyCheckin:
             return TYDailyCheckinStatus(int(firstDailyCheckin),
                                         int(lastDailyCheckin))
     except:
         ftlog.error()
     return None
Пример #32
0
    def _onChargeNotify(self, event):
        # charge 充值增加积分 按照商品标价(钻石)来增加积分
        isOpen = self.checkActivityActive(event.userId)
        if not isOpen:
            return

        diamonds = int(event.diamonds)
        if ftlog.is_debug():
            ftlog.debug('ActivityScoreRanking _onChargeNotify userId=',
                        event.userId, 'rmb=', event.rmbs, 'productId=',
                        event.productId, 'diamonds=', diamonds)

        todayIssueNum = calcDailyIssueNum()
        totalIssueNum = self._issueNum

        chargeConf = self._scoreUpWay.get('charge')

        userData = loadOrCreateUserData(event.userId, self.actId,
                                        todayIssueNum)
        scoreDelta = int(round(chargeConf.exchangeRate * diamonds / 10))
        scoreDelta = min(scoreDelta,
                         chargeConf.maxScore - userData.chargeScore)

        name, _ = userdata.getAttrs(event.userId, ['name', 'purl'])

        # 保存日榜玩家信息
        userData.chargeScore += scoreDelta
        userData.score += scoreDelta
        userData.name = '' if name is None else str(name)
        if self._dibaoScore:
            if userData.score >= self._dibaoScore and userData.dibaoStu == RewardState.ST_NO_REWARD:
                userData.dibaoStu = RewardState.ST_HAS_REWARD
        saveUserData(userData)
        insertRankList(self.actId, todayIssueNum, event.userId, userData.score,
                       self.rewardLimit)

        # 保存总榜玩家信息
        totalUserData = loadOrCreateUserData(event.userId, self.actId,
                                             totalIssueNum)
        totalUserData.score += scoreDelta
        totalUserData.name = '' if name is None else str(name)
        saveUserData(totalUserData)
        insertRankList(self.actId, totalIssueNum, event.userId,
                       totalUserData.score, self.rewardLimit)

        ftlog.info('ActivityScoreRanking _onChargeNotify', 'userId=',
                   event.userId, 'diamonds=', diamonds, 'scoreDelta=',
                   scoreDelta, 'today.score=', userData.score, 'total.score=',
                   totalUserData.score)
Пример #33
0
    def processInviteAnswser(self, inviter, answer, userId, gameId):
        '''
        对邀请游戏的应答
        userId - 当前用户
        inviter - 邀请者
        向邀请者发送回应
        '''
        uds = userdata.getAttrs(userId, ['name'])
        response = ''
        if answer:
            response = '您的好友 ' + uds[0] + ' 同意了您的游戏邀请'
        else:
            response = '您的好友 ' + uds[0] + ' 拒绝了您的游戏邀请'

        TodoTaskHelper.sendTodoTask(gameId, inviter, TodoTaskPopTip(response))
Пример #34
0
    def processInviteAnswser(self, inviter, answer, userId, gameId):
        '''
        对邀请游戏的应答
        userId - 当前用户
        inviter - 邀请者
        向邀请者发送回应
        '''
        uds = userdata.getAttrs(userId, ['name'])
        response = ''
        if answer:
            response = '您的好友 ' + uds[0] + ' 同意了您的游戏邀请'
        else:
            response = '您的好友 ' + uds[0] + ' 拒绝了您的游戏邀请'

        TodoTaskHelper.sendTodoTask(gameId, inviter, TodoTaskPopTip(response))
Пример #35
0
 def getUserInfo(self, userId):
     curTime = int(time.time())
     # 存储的额外数据太多了清理一下
     if len(self.userInfoMap) >= 200:
         self.userInfoMap.clear()
         self.userInfoCacheTime.clear()
     # 没有数据或缓存时间过长重新获取数据.
     if self.userInfoMap.get(
             userId, None) is None or curTime - self.userInfoCacheTime.get(
                 userId, 0) >= 60:
         name = util.getNickname(userId)
         sex, purl = userdata.getAttrs(userId, ["sex", "purl"])
         self.userInfoMap[userId] = (name, sex, purl)
         self.userInfoCacheTime[userId] = curTime
     return self.userInfoMap.get(userId)
Пример #36
0
 def _processEvent(self, event, timestamp):
     # 
     if isinstance(event, EventUserLogin):
         lastAuthTime, authTime = userdata.getAttrs(event.userId, ['lastAuthorTime', 'authorTime'])
         if lastAuthTime and authTime:
             try:
                 if pktimestamp.getTimeStrDiff(lastAuthTime, authTime) >= self.kind.nBackDays * 86400:
                     self.finishTime = timestamp
                     self.gainTime = 0
                     return True
             except:
                 ftlog.error('YYBBackGiftStatus._processEvent',
                             'userId=', event.userId,
                             'times=', [lastAuthTime, authTime])
                 return False
     return False
Пример #37
0
 def getHelpMsg(cls, helpUserId):
     ''' 助力信息 '''
     seconds = _treasureChestTotalConf.treasureChest.helpShortenSeconds
     userdata.checkUserData(helpUserId)
     name, _ = userdata.getAttrs(helpUserId, ['name', 'purl'])
     if seconds < 60:
         helpMsg = '感谢您帮助【%s】减少%s秒的开宝箱时间~' % (name, seconds)
     else:
         minutes = seconds / 60
         leftSecond = seconds % 60
         if leftSecond == 0:
             helpMsg = '感谢您帮助【%s】减少%s分钟的开宝箱时间~' % (name, minutes)
         else:
             helpMsg = '感谢您帮助【%s】减少%s分钟%s秒的开宝箱时间~' % (name, minutes,
                                                      leftSecond)
     return helpMsg
Пример #38
0
def addUserScoreByGiftBox(userId, rankId, scoreDelta, issueNum=None):
    # 礼包增加积分的接口
    issueNum = calcIssueNum() if not issueNum else issueNum
    userData = loadOrCreateUserData(userId, rankId, issueNum)
    userData.score += scoreDelta
    name, purl = userdata.getAttrs(userId, ['name', 'purl'])
    userData.name = '' if name is None else str(name)
    userData.purl = '' if purl is None else str(purl)
    rankingDefine = _scoreRankConf.findRankingDefine(rankId)
    ret = False
    if rankingDefine:
        updateUserData(userData, rankingDefine.rankLimit)
        ret = True
    ftlog.info('addUserScoreByGiftBox userId=', userId, 'rankId=', rankId,
               'scoreDelta=', scoreDelta, 'issueNum=', issueNum, 'ret=', ret)
    return ret
Пример #39
0
def loadSubMemberStatus(userId):
    isYouyifuVipUser, youyifuVipMsg = userdata.getAttrs(userId, ['isYouyifuVipUser', 'youyifuVipMsg'])
    isSub = isYouyifuVipUser == 1
    if ftlog.is_debug():
        ftlog.debug('hallsubmember.loadSubMemberStatus userId=', userId,
                    'isYouyifuVipUser='******'youyifuVipMsg=', youyifuVipMsg)
    youyifuVipMsg = str(youyifuVipMsg) if youyifuVipMsg is not None else None
    nowDT = datetime.now()
    status = _loadSubMemberStatus(userId)
    status.isSub = isSub
    status.unsubDesc = youyifuVipMsg
    if status.isSub and not status.subDT:
        status.subDT = nowDT
    _adjustExpiresDT(status, nowDT)
    return status
Пример #40
0
def _adjustStatus(status):
    try:
        bindMobile, createTimeStr = userdata.getAttrs(
            status.userId, ['bindMobile', 'createTime'])
        status._isBindMobile = True if bindMobile else False
        status._registerTime = pktimestamp.timestrToTimestamp(
            createTimeStr, '%Y-%m-%d %H:%M:%S.%f')
        if status.inviteeMap:
            sl = sorted(status.inviteeMap.values(),
                        key=lambda invitee: invitee.index)
            removeList = sl[MAX_INVITEE:]
            for invitee in removeList:
                del status.inviteeMap[invitee.userId]
    except:
        ftlog.error('neituiguang._adjustStatus userId=', status.userId)
    return status
Пример #41
0
    def initInfo(self):
        '''从redis或session里初始化player的数据
        '''
        if ftlog.is_debug():
            ftlog.debug("<< |userId, tableId, seatId:", self.userId, self.table.tableId, self.seatId, caller=self)

        self._clear()

        self.name, self.sex, self.purl = userdata.getAttrs(self.userId, ['name', 'sex', 'purl'])
        # self.purl = unicode(self.purl)
        # self.ip = sessiondata.getClientIp(self.userId)

        # gdata_fields = []
        # () = gamedata.getGameAttrs(self.userId, self.table.gameId, gdata_fields)

        if ftlog.is_debug():
            ftlog.debug(">> |userId, tableId, seatId:", self.userId, self.table.tableId, self.seatId, caller=self)
Пример #42
0
    def friendInfo(cls, friend, prize, index, clientId):
        userdata.checkUserData(friend["userId"])

        coupon = 0
        if (index + 1) % 5 == 0:
            coupon = prize["COUPON"]
        result = {"prizeInfo": {
            "prize": [{"name": "CHIP", "count": prize["CHIP"]}, {"name": "COUPON", "count": coupon}],
            "state": friend["state"]
        }}
        uds = userdata.getAttrs(friend["userId"], ['purl', 'name', 'chip'])
        friendInfo = {
            "userId": friend["userId"],
            "headUrl": uds[0],
            "name": uds[1],
            "chip": uds[2],
            "dashifen": cls.getDaShiFenPic(friend["userId"], clientId)
        }
        result['friendInfo'] = friendInfo
        return result
Пример #43
0
    def _doTableGmGetTableDetail(self, gameId, roomId, tableId, token):
        '''获取牌桌信息'''
        room = gdata.rooms()[roomId]  # shadow roomId
        table = room.maptable[tableId]
        ftlog.info('GM._doTableGmGetTableDetail << |', 'roomId, tableId, token:', roomId, tableId, token)

        players = []
        for player in table.players:
            if player.userId > 0:
                userVip = hallvip.userVipSystem.getUserVip(player.userId)
                vipLevel = (userVip and userVip.vipLevel and userVip.vipLevel.level) or 0
                createTime, chargeTotal, ip = userdata.getAttrs(player.userId,
                                                                ['createTime', 'chargeTotal', 'sessionClientIP'])
                playerInfo = {
                    'seatId': player.seatId,
                    'purl': player.purl,
                    'name': player.name,
                    'userId': player.userId,
                    'holeCards': player.holeCards,
                    'cardtype': player.cardtype,
                    'cardOrder': player.order,
                    'bet': player.bet,
                    'userChips': player.userChips,
                    'tableChips': player.tableChips,
                    'sharkLevel': player.sharkLevel,
                    'vipLevel': vipLevel,
                    'chargeTotal': chargeTotal,
                    'createTime': createTime,
                    'ip': ip,
                    'localPic': player.localPic,
                }
                if not token:
                    del playerInfo['holeCards']
                    del playerInfo['cardtype']
                    del playerInfo['cardOrder']
                players.append(playerInfo)

        obs = []
        for userId in table.observers.keys():
            userVip = hallvip.userVipSystem.getUserVip(userId)
            vipLevel = (userVip and userVip.vipLevel and userVip.vipLevel.level) or 0
            name, chip = userdata.getAttrs(userId, ['name', 'chip'])
            ob = {
                'userId': userId,
                'name': name,
                'chip': chip,
            }
            obs.append(ob)

        tableDetail = {
            'tableId': table.tableId,
            'cards': table.gamePlay.sharedCards,
            'players': players,
            'obs': obs,
        }
        if getattr(table, 'creatorId', 0):
            tableDetail['主播'] = userdata.getAttr(table.creatorId, 'name')
            tableDetail['主播id'] = table.creatorId

        if not token:
            del tableDetail['cards']
        return tableDetail
Пример #44
0
def isColdUser(userId):
    '''判断是否冷用户'''
    userdatas = userdata.getAttrs(userId, ['userId', 'createTime', 'name'])
    return None in userdatas
Пример #45
0
    def doQuickStart(self, msg):
        userId = msg.getParam('userId')
        tableId = msg.getParam('tableId')
        shadowRoomId = msg.getParam('shadowRoomId')
        clientId = msg.getParam('clientId')

        ftlog.info('TYRelaxationMatchRoom.doQuickStart',
                   'userId=', userId,
                   'tableId=', tableId,
                   'shadowRoomId=', shadowRoomId,
                   'clientId=', clientId)
        # 先判断比赛是否已经开始
        if self.match.state != MatchRelaxation.ST_START:
            mq = MsgPack()
            mq.setCmd('quick_start')
            mq.setResult('userId', userId)
            mq.setResult('gameId', self.gameId)
            mq.setResult('roomId', 0)
            mq.setResult('tableId', 0)
            mq.setResult('isMatch', 1)
            mq.setResult('seatId', 0)
            mq.setResult('reason', u'比赛还未开始!')
            # 发送用户的quick_start
            router.sendToUser(mq, userId)
            return

        # 从playerMap里取得玩家对象, 没有就创建
        player = self.match.findPlayer(userId)
        maxPlayCount = self.match.matchConf.start.maxPlayCount
        isNewPlayer = False
        if not player:
            isNewPlayer = True
            player = Player(userId)
            _, userName = userdata.getAttrs(userId, ['sessionClientId', 'name'])
            player.fillUserInfo(userName, clientId)
            self.match.addPlayer(player)
        elif player.playCount >= maxPlayCount:
            mq = MsgPack()
            mq.setCmd('quick_start')
            mq.setResult('userId', userId)
            mq.setResult('gameId', self.gameId)
            mq.setResult('roomId', 0)
            mq.setResult('tableId', 0)
            mq.setResult('isMatch', 1)
            mq.setResult('seatId', 0)
            mq.setResult('reason', u'你的比赛局数已超过上限')
            # 发送用户的quick_start
            router.sendToUser(mq, userId)
            return
        # 开始分配桌子
        table = self.match.tableManager.getTableSitdown(player)
        if table:
            # 发送通知发送quck_start
            self.match.onPlayerSitdown(player, table, isNewPlayer)
            self.match.tableController.notifyTableSendQuickStart(table, player)
        else:
            mq = MsgPack()
            mq.setCmd('quick_start')
            mq.setResult('userId', userId)
            mq.setResult('gameId', self.gameId)
            mq.setResult('roomId', 0)
            mq.setResult('tableId', 0)
            mq.setResult('isMatch', 1)
            mq.setResult('seatId', 0)
            mq.setResult('reason', u'比赛桌位已满,请稍后再试')
            # 发送用户的quick_start
            router.sendToUser(mq, userId)
            return
Пример #46
0
def isUserEnabledGps(userId):
    """用户是否开启了gps, 有geo坐标数据就认为是已经开启
    """
    lat1, lon1 = userdata.getAttrs(userId, ["geoLat", "geoLon"])
    ftlog.debug("util.isUserEnabledGps userId", userId, "lat", lat1, "lon1", lon1)
    return lat1 and lon1
Пример #47
0
    def doQueryInviteInfo(self, gameId, userId, clientId):
        """
        查询邀请信息
        上行:
        {
            "cmd": "game",
            "params": {
                "action": "query_invite_info",
                "gameId": 9999,
                "userId": 10323,
                "clientId": "IOS_3.9001_weixin.weixinPay,alipay.0-hall710.yitiao.ioshrbmj"
            }
        }
        
        下行:
        {
            "cmd": "game",
            "result": {
                "action": "query_invite_info",
                "state": 1,
                "gameId": 9999,
                "bindUserId": 123456,
                "bindName": "123456",
                "bindPic": "",
                "rewardState": 0,
                "bindRewardCount": 12,
                "totalReward": 0,
                "inviteeList": [],
                "gotoInfo": {
                    "title": "\\u4f53\\u9a8c\\u6e38\\u620f\\u9001\\u623f\\u5361\\u5566",
                    "desc": "",
                    "url": "http://www.shediao.com/youle/gamelist.html"
                },
                "inviteShare": {
                    "title": "\\u53ef\\u4ee5\\u548c\\u4eb2\\u53cb\\u4e00\\u8d77\\u6e38\\u620f\\u7684\\u9ebb\\u5c06",
                    "desc": "\\u73a9\\u81ea\\u5efa\\u684c\\u672c\\u5730\\u9ebb\\u5c06\\uff0c\\u62a5\\u6211ID(10323)\\u5c31\\u9886\\u53d612\\u5f20\\u623f\\u5361",
                    "url": "http://www.shediao.com/youle/gamelist.html"
                }
            }
        }
        """
        timestamp = pktimestamp.getCurrentTimestamp()
        mo = MsgPack()
        mo.setCmd('game')
        mo.setResult('action', 'query_invite_info')
        status = hall_simple_invite.loadStatus(userId, timestamp)
        # 是否已填写了邀请人
        state = self.translateState(status)
        mo.setResult('state', state)
        mo.setResult('gameId', gameId)
        # 已绑定了邀请人
        if state == 1 and status.inviter:
            bindUserId = status.inviter
            mo.setResult('bindUserId', bindUserId)
            name, pic = userdata.getAttrs(bindUserId, ['name', 'purl'])
            if not name or name == '':
                name = str(bindUserId)
            if not pic:
                pic = ''
            mo.setResult('bindName', name)
            mo.setResult('bindPic', pic)
            mo.setResult('rewardState', status.getRewardState(userId, gameId, clientId))
        # 绑定奖励数
        conf = hall_simple_invite.getSimpleInviteConf(userId, gameId, clientId)
        if not conf:
            ftlog.error('ClentId:', clientId, ' has no hall_simple_invite config, please check!!!')
            return

        if conf.inviteRewardItem:
            mo.setResult('bindRewardCount', conf.inviteRewardItem.count)

        userList, count = self.getInviteesRewardInfo(status, Invitation.STATE_REWARDED, clientId)
        # 自己绑定获取的
        if status.rewardState == Invitation.STATE_REWARDED:
            count += 1
        # 总奖励数
        mo.setResult('totalReward', count * conf.inviteRewardItem.count)
        mo.setResult('inviteeList', userList)
        # 去邀请信息
        goto = {}
        goto['title'] = conf.gotoTitle
        goto['desc'] = conf.gotoDesc
        goto['url'] = conf.gotoUrl
        mo.setResult('gotoInfo', goto)
        inviteShare = {}
        inviteShare['title'] = conf.inviteTitle
        inviteShare['desc'] = strutil.replaceParams(conf.inviteDesc, {'rewardContent': str(userId)})
        inviteShare['url'] = conf.inviteUrl
        mo.setResult('inviteShare', inviteShare)
        router.sendToUser(mo, userId)