Пример #1
0
def sendGiftsToUser(userId, gameId, clientId, items):
    '''
        多个奖品时的发奖,或者一个奖品的发奖,items为数组
    '''
    contentItemList = []
    rouletteMap = getRouletteMap()

    for item in items:
        itemMap = rouletteMap.get(item, {})
        if itemMap:
            # 添加判断流程,判断奖励是否需要发送led
            if itemMap.get('isSendLed', False):
                userInfo = halluser.getUserInfo(userId, gameId, clientId)
                msgstr = '恭喜' + userInfo.get(
                    'name', '') + '玩家在幸运大转盘中,抽中了' + itemMap.get(
                        'itemDesc', '') + '大奖!快来参与,大奖得主就是你!'
                hallled.sendLed(HALL_GAMEID, msgstr, 1, 'hall')

            # 添加中奖内容
            contentItemList.append(
                TYContentItem.decodeFromDict({
                    'itemId': itemMap.get('itemId'),
                    'count': itemMap.get('count')
                }))

    userAssets = hallitem.itemSystem.loadUserAssets(userId)
    results = userAssets.sendContentItemList(gameId, contentItemList, 1, True,
                                             int(time.time()), 'ROULETTE_GOLD',
                                             0)
    datachangenotify.sendDataChangeNotify(
        gameId, userId, TYAssetUtils.getChangeDataNames(results))
Пример #2
0
def sendGiftsToUser(userId, gameId, clientId, items):
    '''
        多个奖品时的发奖,或者一个奖品的发奖,items为数组
    '''
    contentItemList = []
    rouletteMap = getRouletteMap()

    for item in items:
        itemMap = rouletteMap.get(item, {})
        if itemMap:
            #添加判断流程,判断奖励是否需要发送led
            if itemMap.get('isSendLed', False):
                userInfo = halluser.getUserInfo(userId, gameId, clientId)
                msgstr = '恭喜玩家' + userInfo.get(
                    'name', '') + '在幸运大转盘中,抽中了' + itemMap.get(
                        'itemDesc', '') + '大奖!快来参与,大奖得主就是你!'
                hallled.sendLed(HALL_GAMEID, msgstr, 0, 'hall')

                # 轮播LED仅保留最近10条中奖记录
                doRouletteRecordKey = "roulette:recordLed"
                try:
                    datas = {
                        'name': userInfo.get('name', ''),
                        'itemDesc': itemMap.get('itemDesc', '')
                    }
                    recordledLen = daobase.executeMixCmd(
                        'RPUSH', doRouletteRecordKey, json.dumps(datas))
                    if recordledLen > 10:
                        # 超过10个就截取后10个
                        daobase.executeMixCmd('LTRIM', doRouletteRecordKey,
                                              -10, -1)
                except:
                    ftlog.warn("redis rpush|ltrim roulette:recordLed error",
                               gameId, userId, clientId, msgstr)

                ftlog.debug("sendGiftsToUser|1", userId, gameId, clientId,
                            msgstr)
            ftlog.debug("sendGiftsToUser|2", userId, gameId, clientId,
                        itemMap.get('isSendLed'))

            # 添加中奖内容
            contentItemList.append(
                TYContentItem.decodeFromDict({
                    'itemId': itemMap.get('itemId'),
                    'count': itemMap.get('count')
                }))

    userAssets = hallitem.itemSystem.loadUserAssets(userId)
    results = userAssets.sendContentItemList(gameId, contentItemList, 1, True,
                                             int(time.time()), 'ROULETTE_GOLD',
                                             0)
    datachangenotify.sendDataChangeNotify(
        gameId, userId, TYAssetUtils.getChangeDataNames(results))
Пример #3
0
 def sendUserInfoResponse(self, userId, gameId, clientId, loc, isudata, isgdata):
     '''
     仅发送user_info命令, USER的主账户信息和游戏账户信息至客户端
     '''
     mo = MsgPack()
     if isudata:
         mo.setCmd('user_info')
     else:
         mo.setCmd('game_data')
     mo.setResult('gameId', gameId)
     mo.setResult('userId', userId)
     if isudata:
         mo.setResult('udata', halluser.getUserInfo(userId, gameId, clientId))
         if loc:
             mo.setResult('loc', loc)
     if isgdata:
         mo.setResult('gdata', halluser.getGameInfo(userId, gameId, clientId))
     router.sendToUser(mo, userId)
Пример #4
0
 def sendUserInfoResponse(self, userId, gameId, clientId, loc, isudata,
                          isgdata):
     '''
     仅发送user_info命令, USER的主账户信息和游戏账户信息至客户端
     '''
     mo = MsgPack()
     if isudata:
         mo.setCmd('user_info')
     else:
         mo.setCmd('game_data')
     mo.setResult('gameId', gameId)
     mo.setResult('userId', userId)
     if isudata:
         mo.setResult('udata', halluser.getUserInfo(userId, gameId,
                                                    clientId))
         if loc:
             mo.setResult('loc', loc)
     if isgdata:
         mo.setResult('gdata', halluser.getGameInfo(userId, gameId,
                                                    clientId))
     router.sendToUser(mo, userId)
Пример #5
0
def findRewardUsers(gameId, issue, reward, clientId):
    x = random.randint(1, hallroulette.soldierSysTem.getSoldierNumber())
    soldier = hallroulette.soldierSysTem.getSoldierforsId(x)
    count = 3
    while (count):
        if soldier:
            break
        x = random.randint(1, hallroulette.soldierSysTem.getSoldierNumber())
        soldier = hallroulette.soldierSysTem.getSoldierforsId(x)
        count -= 1
    ftlog.info('findRewardUsers.gameId=', gameId, 'issue=', issue, 'reward=',
               reward, 'clientId=', clientId, 'x=', x, 'soldier=', soldier)
    if not soldier:
        ftlog.info('findRewardUsers.gameId=', gameId, 'issue=', issue,
                   'reward=', reward, 'errorMessage=',
                   'not find the soldier user!')
        return 0, 0
    nowUserId = soldier.get('userId', 0)
    chip = pkuserchip.getUserChipAll(nowUserId)
    vip = hallvip.userVipSystem.getUserVip(nowUserId).vipLevel.level
    userInfo = halluser.getUserInfo(nowUserId, gameId, clientId)
    result = {}
    result['chip'] = chip
    result['vip'] = vip
    result['sex'] = userInfo.get('sex', 0)
    result['purl'] = userInfo.get('purl', '')
    result['sId'] = '%07d' % x
    result['uId'] = nowUserId
    result['issue'] = issue
    result['name'] = userInfo.get('name', '')
    result['nowReward'] = reward
    nowRewardNumber = pkgamedata.incrGameAttr(nowUserId, 9999,
                                              'getRewardNumber', 1)
    result['getRewardNumber'] = nowRewardNumber
    result['isCheckin'] = 0
    result['checkinSoldiers'] = pkgamedata.getGameAttrInt(
        nowUserId, 9999, 'checkinSoldiers')
    ftlog.info('findRewardUsers.gameId=', gameId, 'nowUserId=', nowUserId,
               'result=', result)
    return nowUserId, result
Пример #6
0
def sendGiftsToUser(userId, gameId, clientId, items):
    '''
        多个奖品时的发奖,或者一个奖品的发奖,items为数组
    '''
    contentItemList = []
    rouletteMap = getRouletteMap()

    for item in items:
        itemMap = rouletteMap.get(item, {})
        if itemMap:
            # 添加判断流程,判断奖励是否需要发送led
            if itemMap.get('isSendLed', False):
                userInfo = halluser.getUserInfo(userId, gameId, clientId)
                msgstr = '恭喜' + userInfo.get('name', '') + '玩家在幸运大转盘中,抽中了' + itemMap.get('itemDesc',
                                                                                         '') + '大奖!快来参与,大奖得主就是你!'
                hallled.sendLed(HALL_GAMEID, msgstr, 1, 'hall')

            # 添加中奖内容    
            contentItemList.append(
                TYContentItem.decodeFromDict({'itemId': itemMap.get('itemId'), 'count': itemMap.get('count')}))

    userAssets = hallitem.itemSystem.loadUserAssets(userId)
    results = userAssets.sendContentItemList(gameId, contentItemList, 1, True, int(time.time()), 'ROULETTE_GOLD', 0)
    datachangenotify.sendDataChangeNotify(gameId, userId, TYAssetUtils.getChangeDataNames(results))
Пример #7
0
def findRewardUsers(gameId, issue, reward):
    '''
    开奖:
        从本期小兵中获取一个中奖的小兵,并且返回
        修改
            首先,判断是否有多余的小兵,对多余的小兵进行管理
    '''
    needNumber = getSnatchConf().get('needNumber', 0)
    nowNumber = getSoldierNumber()
    if needNumber > nowNumber:
        return 0, 0, {}

    # 中奖序号
    x = random.randint(1, needNumber)

    # 本期小兵list
    soldiers = daobase.executeMixCmd('LRANGE', CURKEY, 0, needNumber - 1)
    if not soldiers:
        return 0, 0

    # 移除本期小兵,留下下一期小兵
    daobase.executeMixCmd('LTRIM', CURKEY, needNumber, -1)

    # 开奖的时候,对每一个参与人的夺宝次数加1
    uids = []
    for soldier in soldiers:
        if soldier not in uids:
            pkgamedata.incrGameAttr(soldier, HALL_GAMEID, 'checkinSoldiers', 1)
            uids.append(soldier)

    # 生成中奖结果
    nowUserId = soldiers[x]
    chip = pkuserchip.getUserChipAll(nowUserId)
    vip = hallvip.userVipSystem.getUserVip(nowUserId).vipLevel.level
    userInfo = halluser.getUserInfo(nowUserId, gameId, sessiondata.getClientId(nowUserId))
    result = {}
    result['chip'] = chip
    result['vip'] = vip
    result['sex'] = userInfo.get('sex', 0)
    result['purl'] = userInfo.get('purl', '')
    result['sId'] = getSoldierIdByIndex(x)
    result['uId'] = nowUserId
    result['issue'] = issue
    result['name'] = userInfo.get('name', '')
    result['nowReward'] = reward

    # 添加夺宝次数
    # 夺宝人的夺宝次数
    nowRewardNumber = pkgamedata.incrGameAttr(nowUserId, HALL_GAMEID, 'getRewardNumber', 1)
    result['getRewardNumber'] = nowRewardNumber
    result['isCheckin'] = 0

    # 添加夺宝人的夺宝次数
    result['checkinSoldiers'] = pkgamedata.getGameAttrInt(nowUserId, HALL_GAMEID, 'checkinSoldiers')

    # 下发奖励的时候,全服广播,发led
    strLed = '恭喜' + userInfo.get('name', '') + '玩家在转盘夺宝活动中,斩获' + issue + '期' + reward + '大奖,不要再等了,你就是下一位夺宝王!'
    from hall.servers.util.rpc import user_remote as SendLed
    SendLed.sendHallLed(gameId, strLed, 1, 'hall')

    # 打印开奖日志
    ftlog.hinfo('findRewardUsers.gameId=', gameId,
                'issue=', issue,
                'userId=', nowUserId,
                'reward=', reward,
                'soldiers=', soldiers,
                'result=', result,
                'x=', x,
                'snatchConf=', getSnatchConf())

    # 保存历史中奖信息
    issueObj = {}
    issueObj['issue'] = issue
    issueObj['soldiers'] = soldiers
    issueObj['result'] = result
    issueObj['time'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    # 保存本期中奖信息
    daobase.executeMixCmd('HSET', HISKEYDETAIL + str(issue), 'info', json.dumps(issueObj))
    daobase.executeMixCmd('LPUSH', HISKEY, issue)
    if daobase.executeMixCmd('LLEN', HISKEY) > 10:
        delIssue = daobase.executeMixCmd('RPOP', HISKEY)
        if ftlog.is_debug():
            ftlog.debug('hallroulette.findRewardUsers delIssue:', delIssue)

        # 删除过期记录
        if delIssue:
            daobase.executeMixCmd('DEL', HISKEYDETAIL + str(delIssue))

    return nowUserId, result
Пример #8
0
def findRewardUsers(gameId, issue, reward):
    '''
    开奖:
        从本期小兵中获取一个中奖的小兵,并且返回
        修改
            首先,判断是否有多余的小兵,对多余的小兵进行管理
    '''
    needNumber = getSnatchConf().get('needNumber', 0)
    nowNumber = getSoldierNumber()
    if needNumber > nowNumber:
        return 0, 0, {}

    # 中奖序号
    x = random.randint(1, needNumber)

    # 本期小兵list
    soldiers = daobase.executeMixCmd('LRANGE', CURKEY, 0, needNumber - 1)
    if not soldiers:
        return 0, 0

    # 移除本期小兵,留下下一期小兵
    daobase.executeMixCmd('LTRIM', CURKEY, needNumber, -1)

    # 开奖的时候,对每一个参与人的夺宝次数加1
    uids = []
    for soldier in soldiers:
        if soldier not in uids:
            pkgamedata.incrGameAttr(soldier, HALL_GAMEID, 'checkinSoldiers', 1)
            uids.append(soldier)

    # 生成中奖结果
    nowUserId = soldiers[x]
    chip = pkuserchip.getUserChipAll(nowUserId)
    vip = hallvip.userVipSystem.getUserVip(nowUserId).vipLevel.level
    userInfo = halluser.getUserInfo(nowUserId, gameId,
                                    sessiondata.getClientId(nowUserId))
    result = {}
    result['chip'] = chip
    result['vip'] = vip
    result['sex'] = userInfo.get('sex', 0)
    result['purl'] = userInfo.get('purl', '')
    result['sId'] = getSoldierIdByIndex(x)
    result['uId'] = nowUserId
    result['issue'] = issue
    result['name'] = userInfo.get('name', '')
    result['nowReward'] = reward

    # 添加夺宝次数
    # 夺宝人的夺宝次数
    nowRewardNumber = pkgamedata.incrGameAttr(nowUserId, HALL_GAMEID,
                                              'getRewardNumber', 1)
    result['getRewardNumber'] = nowRewardNumber
    result['isCheckin'] = 0

    # 添加夺宝人的夺宝次数
    result['checkinSoldiers'] = pkgamedata.getGameAttrInt(
        nowUserId, HALL_GAMEID, 'checkinSoldiers')

    # 下发奖励的时候,全服广播,发led
    strLed = '恭喜' + userInfo.get(
        'name',
        '') + '玩家在转盘夺宝活动中,斩获' + issue + '期' + reward + '大奖,不要再等了,你就是下一位夺宝王!'
    from hall.servers.util.rpc import user_remote as SendLed
    SendLed.sendHallLed(gameId, strLed, 1, 'hall')

    # 打印开奖日志
    ftlog.hinfo('findRewardUsers.gameId=', gameId, 'issue=', issue, 'userId=',
                nowUserId, 'reward=', reward, 'soldiers=', soldiers, 'result=',
                result, 'x=', x, 'snatchConf=', getSnatchConf())

    # 保存历史中奖信息
    issueObj = {}
    issueObj['issue'] = issue
    issueObj['soldiers'] = soldiers
    issueObj['result'] = result
    issueObj['time'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    # 保存本期中奖信息
    daobase.executeMixCmd('HSET', HISKEYDETAIL + str(issue), 'info',
                          json.dumps(issueObj))
    daobase.executeMixCmd('LPUSH', HISKEY, issue)
    if daobase.executeMixCmd('LLEN', HISKEY) > 10:
        delIssue = daobase.executeMixCmd('RPOP', HISKEY)
        if ftlog.is_debug():
            ftlog.debug('hallroulette.findRewardUsers delIssue:', delIssue)

        # 删除过期记录
        if delIssue:
            daobase.executeMixCmd('DEL', HISKEYDETAIL + str(delIssue))

    return nowUserId, result