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))
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))
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)
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
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))
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
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