Esempio n. 1
0
def _onTableWinlose(event):
    status = gamedata.getGameAttrJson(event.userId, DIZHU_GAMEID,
                                      'item.win.progress', {})
    if ftlog.is_debug():
        ftlog.debug('dizhuredenvelope._onTableWinlose userId=', event.userId,
                    'status=', status)
    if event.winlose.isWin:
        changed = False
        roomConf = gdata.getRoomConfigure(event.roomId)
        playMode = roomConf.get('playMode')
        for itemConf in _itemConfList:
            if not itemConf['playModes'] or playMode in itemConf['playModes']:
                changed = True
                itemId = str(itemConf['itemId'])
                winTimes = itemConf['winTimes']
                progress = status.get(itemId, 0) + 1
                status[itemId] = progress
                if progress >= winTimes:
                    flagName = 'item.open.flag:%s' % (itemId)
                    gamedata.setnxGameAttr(event.userId, HALL_GAMEID, flagName,
                                           1)
        if changed:
            gamedata.setGameAttr(event.userId, DIZHU_GAMEID,
                                 'item.win.progress', strutil.dumps(status))
        if ftlog.is_debug():
            ftlog.debug('dizhuredenvelope._onTableWinlose userId=',
                        event.userId, 'status=', status, 'changed=', changed)
Esempio n. 2
0
def doUpdate(userId, gameId, clientId):
    '''
        刷新信息,判断用户进入银盘抽奖还是金盘抽奖
    '''
    result = {}
    # 判断用户是否是第一次进入该功能,如果是,则赠送一张银盘抽奖卡
    isFirstRoulette = pkgamedata.setnxGameAttr(userId, gameId, 'isFirstRoulette', 1)
    if isFirstRoulette:
        sendToUserALotteryCard(userId, gameId, clientId)
    # 拿到配置信息
    tempResult = getConfForClient(userId, gameId, clientId)
    # 判断用户的抽奖卡张数,决定进入金盘抽奖还是银盘抽奖
    if nowUserLotteryCardNumber(userId, gameId, clientId) or (not tempResult.get('gold_items', None)):
        # 银盘
        result['rouletteType'] = 'silver'
        result['items'] = tempResult.get('silver_items', [])
        timestamp = pktimestamp.getCurrentTimestamp()
        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        result['cardNumber'] = userAssets.balance(gameId, hallitem.ASSET_ITEM_LOTTERY_CARD_ID, timestamp)
    else:
        # 金盘
        result['rouletteType'] = 'gold'
        result['isFirstCheck'] = doGetFisrtToGold(userId, gameId)
        result['items'] = tempResult.get('gold_items', [])
    return result
Esempio n. 3
0
def doUpdate(userId, gameId, clientId):
    '''
        刷新信息,判断用户进入银盘抽奖还是金盘抽奖
    '''
    result = {}
    # 判断用户是否是第一次进入该功能,如果是,则赠送一张银盘抽奖卡
    isFirstRoulette = pkgamedata.setnxGameAttr(userId, gameId,
                                               'isFirstRoulette', 1)
    if isFirstRoulette:
        sendToUserALotteryCard(userId, gameId, clientId)
    # 拿到配置信息
    tempResult = getConfForClient(userId, gameId, clientId)
    # 判断用户的抽奖卡张数,决定进入金盘抽奖还是银盘抽奖
    if nowUserLotteryCardNumber(
            userId, gameId,
            clientId) or (not tempResult.get('gold_items', None)):
        # 银盘
        result['rouletteType'] = 'silver'
        result['items'] = tempResult.get('silver_items', [])
        timestamp = pktimestamp.getCurrentTimestamp()
        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        result['cardNumber'] = userAssets.balance(
            gameId, hallitem.ASSET_ITEM_LOTTERY_CARD_ID, timestamp)
    else:
        # 金盘
        result['rouletteType'] = 'gold'
        result['isFirstCheck'] = doGetFisrtToGold(userId, gameId)
        result['items'] = tempResult.get('gold_items', [])
    return result
Esempio n. 4
0
 def isFirst(cls, userId, key, gameId=6):
     '''
     只有第一次才能设置成功,若已经成功设置过,则在设置就会失败
     :param key: hashmap中的key
     :param gameId 存储在redis中的位置,默认存在game:6下
     :return: True代表设置成功,False代表已经设置过了
     '''
     return gamedata.setnxGameAttr(userId, gameId, key, 1) == 1
Esempio n. 5
0
def doGetFisrtToGold(userId, gameId):
    '''
        获取是否第一次进入金盘
    '''
    result = 0
    isFirstCheck = pkgamedata.setnxGameAttr(userId, gameId, 'isFirstGoldRoulette', 1)
    if isFirstCheck:
        result = 1
    return result
Esempio n. 6
0
def doGetFisrtToGold(userId, gameId):
    '''
        获取是否第一次进入金盘
    '''
    result = 0
    isFirstCheck = pkgamedata.setnxGameAttr(userId, gameId,
                                            'isFirstGoldRoulette', 1)
    if isFirstCheck:
        result = 1
    return result
Esempio n. 7
0
def _isCheckContinuousBreak(userId, ts=None):
    """
    检查是否需要中断连续签到
    """
    ts = ts or int(time.time())
    dayStartTS = util.getDayStartTimestamp(int(ts))
    gamedata.setnxGameAttr(userId, FISH_GAMEID,
                           GameData.breakContinuousCheckinTS, dayStartTS)
    gamedata.setnxGameAttr(userId, FISH_GAMEID,
                           GameData.continuousCheckinDayTS, dayStartTS)
    # 未连续签到时要中断.
    continuousCheckinDayTS = gamedata.getGameAttrInt(
        userId, FISH_GAMEID, GameData.continuousCheckinDayTS)
    if continuousCheckinDayTS + 86400 <= dayStartTS:
        breakContinuousCheckinTS = dayStartTS
        continuousCheckinDayTS = dayStartTS
        gamedata.setGameAttrs(userId, FISH_GAMEID, [
            GameData.breakContinuousCheckinTS, GameData.continuousCheckinDayTS
        ], [breakContinuousCheckinTS, continuousCheckinDayTS])
    # vip小于配置时,每周按照配置日期中断连续签到数据.
    st = time.localtime(dayStartTS)
    vipLevel = hallvip.userVipSystem.getVipInfo(userId).get("level", 0)
    conf = config.getCheckinConf("resetInfo")
    resetVip = conf.get("vip", 0)
    resetWeekDay = conf.get("resetWeekDay", 0)
    if vipLevel <= resetVip and st.tm_wday == resetWeekDay:
        breakContinuousCheckinTS = gamedata.getGameAttrInt(
            userId, FISH_GAMEID, GameData.breakContinuousCheckinTS)
        if breakContinuousCheckinTS < dayStartTS:
            breakContinuousCheckinTS = dayStartTS
            continuousCheckinDayTS = dayStartTS
            gamedata.setGameAttrs(userId, FISH_GAMEID, [
                GameData.breakContinuousCheckinTS,
                GameData.continuousCheckinDayTS
            ], [breakContinuousCheckinTS, continuousCheckinDayTS])
            ftlog.debug("checkin, reset, userId =", userId, "resetTS =",
                        dayStartTS)
Esempio n. 8
0
def doSendReward(cls, gameId, userId, clientId, activityId):
    todotasks = [TodoTaskDownloadApkPromote('http://apk.dl.tuyoo.com/down/hszz/Clash_Royale.apk')]
    if gamedata.setnxGameAttr(userId, gameId, 'act.sendReward:%s' % (activityId), 1) == 1:
        # 发1完金币
        userchip.incrChip(userId, gameId, cls.REWARD_CHIP_COUNT,
                          daoconst.CHIP_NOT_ENOUGH_OP_MODE_NONE,
                          'ACTIVITY_REWARD',
                          20000,
                          clientId)
        datachangenotify.sendDataChangeNotify(gameId, userId, ['chip'])
        todotasks.append(TodoTaskGoldRain('恭喜您获得1万金币'))
        ftlog.info('ActivitySendReward.doSendReward gameId=', gameId,
                   'userId=', userId,
                   'clientId=', clientId,
                   'activityId=', activityId,
                   'rewardChip=', cls.REWARD_CHIP_COUNT)
    TodoTaskHelper.sendTodoTask(gameId, userId, todotasks)
Esempio n. 9
0
def doUpdate(userId, gameId, clientId):
    '''
        刷新信息,判断用户进入银盘抽奖还是金盘抽奖
    '''
    result = {}
    # 判断用户是否是第一次进入该功能,如果是,则赠送一张银盘抽奖卡
    isFirstRoulette = pkgamedata.setnxGameAttr(userId, gameId,
                                               'isFirstRoulette', 1)
    if isFirstRoulette:
        sendToUserALotteryCard(userId, gameId, clientId)
    # 拿到配置信息
    tempResult = getConfForClient(userId, gameId, clientId)
    # 判断用户的抽奖卡张数,决定进入金盘抽奖还是银盘抽奖
    if nowUserLotteryCardNumber(userId, gameId, clientId):
        # 银盘
        result['rouletteType'] = 'silver'
        result['items'] = tempResult.get('silver_items', [])
        timestamp = pktimestamp.getCurrentTimestamp()
        userAssets = hallitem.itemSystem.loadUserAssets(userId)
        result['cardNumber'] = userAssets.balance(
            gameId, hallitem.ASSET_ITEM_LOTTERY_CARD_ID, timestamp)
    else:
        if tempResult.get('gold_items', None):
            # 金盘
            result['rouletteType'] = 'gold'
            result['isFirstCheck'] = doGetFisrtToGold(userId, gameId)
            result['items'] = tempResult.get('gold_items', [])

        # 部分情况需要限制每日抽奖的次数
        isSuitableClient = isSuitableClientID(userId, gameId, clientId)
        if isSuitableClient:
            result['10lottoryNum'] = pkgamedata.getGameAttrInt(
                userId, HALL_GAMEID, 'Do10LottoryNum')
            result['50lottoryNum'] = pkgamedata.getGameAttrInt(
                userId, HALL_GAMEID, 'Do50LottoryNum')
            result['10MaxNum'] = tempResult.get('roulette_10_max_daily_num', 0)
            result['50MaxNum'] = tempResult.get('roulette_50_max_daily_num', 0)
        else:
            result['10lottoryNum'] = -1
            result['50lottoryNum'] = -1
            result['10MaxNum'] = -1
            result['50MaxNum'] = -1
            pass
    return result
Esempio n. 10
0
    def doSendReward(cls, gameId, userId, clientId, activityId):
        activities = {
            'activity_hall_reward_hszz':{
                'url':'http://apk.dl.tuyoo.com/down/hszz/Clash_Royale.apk',
                'rewardChip':10000,
                'goldRain':'恭喜您获得1万金币',
                'intActId':20000
            },
            'act_hall_reward_wzry':{
                'url':'http://down.s.qq.com/download/apk/10015420_com.tencent.tmgp.sgame.apk',
                'rewardChip':0,
                'goldRain':'恭喜您获得100金币',
                'intActId':20001
            },
            'act_hall_reward_cyhx':{
                'url':'http://down.s.qq.com/download/apk/10015420_com.tencent.tmgp.cf.apk',
                'rewardChip':0,
                'goldRain':'恭喜您获得100金币',
                'intActId':20002
            }        
        }
        actConf = activities.get(activityId)
        if actConf:
            todotasks = [TodoTaskDownloadApkPromote(actConf['url'])]
            if (actConf['rewardChip'] > 0
                and gamedata.setnxGameAttr(userId, gameId, 'act.sendReward:%s' % (activityId), 1) == 1):
                # 发1完金币
                userchip.incrChip(userId, gameId, actConf['rewardChip'],
                                  daoconst.CHIP_NOT_ENOUGH_OP_MODE_NONE,
                                  'ACTIVITY_REWARD',
                                  actConf['intActId'],
                                  clientId)
                datachangenotify.sendDataChangeNotify(gameId, userId, ['chip'])
                todotasks.append(TodoTaskGoldRain(actConf['goldRain']))
                ftlog.info('ActivitySendReward.doSendReward gameId=', gameId,
                           'userId=', userId,
                           'clientId=', clientId,
                           'activityId=', activityId,
                           'rewardChip=', actConf['rewardChip'])
            TodoTaskHelper.sendTodoTask(gameId, userId, todotasks)


            
Esempio n. 11
0
 def doSendReward(cls, gameId, userId, clientId, activityId):
     activities = {
         'activity_hall_reward_hszz': {
             'url': 'http://apk.dl.tuyoo.com/down/hszz/Clash_Royale.apk',
             'rewardChip': 10000,
             'goldRain': '恭喜您获得1万金币',
             'intActId': 20000
         },
         'act_hall_reward_wzry': {
             'url': 'http://down.s.qq.com/download/apk/10015420_com.tencent.tmgp.sgame.apk',
             'rewardChip': 0,
             'goldRain': '恭喜您获得100金币',
             'intActId': 20001
         },
         'act_hall_reward_cyhx': {
             'url': 'http://down.s.qq.com/download/apk/10015420_com.tencent.tmgp.cf.apk',
             'rewardChip': 0,
             'goldRain': '恭喜您获得100金币',
             'intActId': 20002
         }
     }
     actConf = activities.get(activityId)
     if actConf:
         todotasks = [TodoTaskDownloadApkPromote(actConf['url'])]
         if (actConf['rewardChip'] > 0
             and gamedata.setnxGameAttr(userId, gameId, 'act.sendReward:%s' % (activityId), 1) == 1):
             # 发1完金币
             userchip.incrChip(userId, gameId, actConf['rewardChip'],
                               daoconst.CHIP_NOT_ENOUGH_OP_MODE_NONE,
                               'ACTIVITY_REWARD',
                               actConf['intActId'],
                               clientId)
             datachangenotify.sendDataChangeNotify(gameId, userId, ['chip'])
             todotasks.append(TodoTaskGoldRain(actConf['goldRain']))
             ftlog.info('ActivitySendReward.doSendReward gameId=', gameId,
                        'userId=', userId,
                        'clientId=', clientId,
                        'activityId=', activityId,
                        'rewardChip=', actConf['rewardChip'])
         TodoTaskHelper.sendTodoTask(gameId, userId, todotasks)
Esempio n. 12
0
def _onUserLogin(gameId, userId, clientId, isCreate, isDayfirst):
    from hall.entity import hallsubmember
    ftlog.debug('hallitem._onUserLogin gameId=', gameId,
               'userId=', userId,
               'clientId=', clientId,
               'isCreate=', isCreate,
               'isDayfirst', isDayfirst)
    if not hallitem._inited:
        return
    
    timestamp = pktimestamp.getCurrentTimestamp()
    userAssets = hallitem.itemSystem.loadUserAssets(userId)
    userBag = userAssets.getUserBag()
    if isCreate:
        pkgamedata.setGameAttr(userId, HALL_GAMEID, 'flag.item.trans', 1)
        hallitem._initUserBag(gameId, userId, clientId, userBag)
    else:
        if pkgamedata.setnxGameAttr(userId, HALL_GAMEID, 'flag.item.trans', 1) == 1:
            if not hallitem._tranformItems(gameId, userId, clientId, userBag):
                hallitem._initUserBag(gameId, userId, clientId, userBag)
        hallsubmember.checkSubMember(gameId, userId, timestamp, 'LOGIN_CHECK_SUBMEM', 0, userAssets)
    userBag.processWhenUserLogin(gameId, isDayfirst, timestamp)
Esempio n. 13
0
def setFirstRechargeReward(userId):
    return pkgamedata.setnxGameAttr(userId, HALL_GAMEID, 'first_recharge_reward', 1) == 1
Esempio n. 14
0
def setFirstRechargeReward(userId):
    return pkgamedata.setnxGameAttr(userId, HALL_GAMEID,
                                    'first_recharge_reward', 1) == 1
Esempio n. 15
0
def doOldRemoteCallNew(userId, msgline):
    '''
    必须要返回dict的实例
    '''
    try:
        ftlog.debug('doOldRemoteCallNew->msgline=', msgline)

        msg = MsgPack()
        msg.unpack(msgline)
        action = msg.getAction()
        gameId = msg.getParam('gameId', -1)
        userId = msg.getParam('userId', -1)
        userBag = hallitem.itemSystem.loadUserAssets(userId).getUserBag()
        clientId = sessiondata.getClientId(userId)
        if pkgamedata.setnxGameAttr(userId, HALL_GAMEID, 'flag.item.trans', 1) == 1:
            hallitem._tranformItems(gameId, userId, clientId, userBag)

        mo = MsgPack()
        mo.setResult('action', action)
        if action == 'getUserItem':
            kindId = msg.getParam('itemId', -1)
            val = getUserItem(userId, gameId, kindId, userBag)
            mo.setResult('item', val)

        elif action == 'getUserItemList':
            result = getUserItemList(userId, gameId, userBag)
            mo.setResult('item', result)

        elif action == 'addUserItem':
            kindId = msg.getParam('itemId', -1)
            count = msg.getParam('count', -1)
            eventId = msg.getParam('eventId', -1)
            eventId = eventIdToString(eventId)
            ftlog.debug('addUserItem itemId=', kindId, 'count=', count, 'eventId=', eventId)
            val = addUserItem(userId, gameId, kindId, count, eventId, userBag)
            mo.setResult('item', val)

        elif action == 'addUserItems':
            pass
        elif action == 'consumeUserItem':
            kindId = msg.getParam('itemId', -1)
            count = msg.getParam('count', -1)
            eventId = msg.getParam('eventId', -1)
            eventId = eventIdToString(eventId)
            ftlog.debug('consumeUserItem itemId=', kindId, 'count=', count, 'eventId=', eventId)
            val = consumeUserItem(userId, gameId, kindId, count, eventId, userBag)
            mo.setResult('item', val)
        elif action == 'useUserItem':
            kindId = msg.getParam('itemId', -1)
            val = useUserItem(userId, gameId, kindId, userBag)
            mo.setResult('item', val)
        elif action == 'updateTimingUserItems':
            isDayFirst = msg.getParam('isDayFirst', False)
            val = updateTimingUserItems(userId, gameId, isDayFirst, userBag)
            mo.setResult('item', val)
        elif action == 'loadUserDecroation':
            val = loadUserDecroation(userId, gameId, userBag)
            mo.setResult('item', val)
        else:
            ftlog.error('doOldRemoteCallNew unknown rpc action action=', action, 'gameId=', gameId, 'userId=', userId)

        ftlog.debug('doOldRemoteCallNew->mo=', mo._ht)
        mo.setResult('code', 0)
        return mo._ht
    except TYItemException:
        mo = MsgPack()
        mo.setResult('code', -1)
        return mo._ht
    except:
        ftlog.error()
        mo = MsgPack()
        mo.setResult('code', -1)
        return mo._ht
Esempio n. 16
0
def loginGame(userId, gameId, clientId, iscreate, isdayfirst):
    """
    用户登录一个游戏, 游戏自己做一些其他的业务或数据处理
    """
    if ftlog.is_debug():
        ftlog.debug("userId =", userId, "gameId =", gameId, "clientId =",
                    clientId, "iscreate =", iscreate, "isdayfirst =",
                    isdayfirst, gdata.name())
    gamedata.setnxGameAttr(userId, FISH_GAMEID, GameData.gunLevel_m, 2101)
    if isdayfirst:
        sendVipSpringFestivalRewards(userId)
    if isdayfirst:
        vipAutoSupplyPerDay(userId)
    if isdayfirst:
        from newfish.entity.quest import daily_quest
        from newfish.entity import weakdata
        resetTime = weakdata.getDayFishData(userId, "resetTime")
        if not resetTime:
            weakdata.setDayFishData(userId, "resetTime", int(time.time()))
            daily_quest.refreshDailyQuestData(userId)
        # FTLoopTimer(1, 0, util.doSendFishNotice, userId).start()
    gamedata.setnxGameAttr(userId, FISH_GAMEID, GameData.vipShow, 1)
    serverVersion = gamedata.getGameAttrInt(userId, gameId,
                                            GameData.serverVersion)
    if isdayfirst and gamedata.getGameAttr(
            userId, FISH_GAMEID, GameData.hasBoughtMonthCard) is None:
        from hall.entity import hallitem
        userBag = hallitem.itemSystem.loadUserAssets(userId).getUserBag()
        item = userBag.getItemByKindId(config.PERMANENT_MONTH_CARD_KINDID) or \
               userBag.getItemByKindId(config.MONTH_CARD_KINDID)
        bought = 1 if item else 0
        gamedata.setGameAttr(userId, FISH_GAMEID, GameData.hasBoughtMonthCard,
                             json.dumps(bought))
    if serverVersion and serverVersion <= 20180907:
        # 珍珠数量调整
        util.adjustPearlCount(userId)
    if serverVersion and serverVersion <= 20180918:
        # 老玩家屏蔽10元话费卡兑换
        gamedata.setGameAttr(userId, gameId, GameData.exchangeCount, 1)
    if serverVersion and serverVersion <= 20180928:
        # 老玩家金猪出现次数数据迁移
        from newfish.entity import share_system
        from newfish.entity.share_system import FlyingPig
        shareClass = FlyingPig(userId)
        flyPigFinishCount = shareClass.shareData[
            share_system.INDEX_FINISH_COUNT]
        gamedata.incrGameAttr(userId, FISH_GAMEID, GameData.flyPigFinishCount,
                              flyPigFinishCount)
    # 清理金币购买记录,19/12/25日0点后开始检测
    if int(time.time()) >= util.getTimestampFromStr("2019-12-25 00:00:00") and \
            not gamedata.getGameAttrInt(userId, gameId, "resetBuyCoinCount"):
        gamedata.delGameAttr(userId, FISH_GAMEID, GameData.buyCoinCount)
        gamedata.setGameAttr(userId, gameId, "resetBuyCoinCount", 1)
    if not serverVersion or int(serverVersion) != SERVER_VERSION:
        gamedata.setGameAttr(userId, gameId, GameData.serverVersion,
                             SERVER_VERSION)

    if not util.isFinishAllNewbieTask(userId):  # 没完成所有新手引导,不主动弹出每日签到和最新消息
        return

    # 限定玩家比赛幸运值.
    from newfish.entity.match_record import MatchRecord
    vip = hallvip.userVipSystem.getUserVip(userId).vipLevel.level
    for roomId in [44102]:
        key = "initLuckyValue:%d" % int(roomId)
        initVal = config.getVipConf(vip).get(key, 10000)
        record = MatchRecord.loadRecord(FISH_GAMEID, userId, roomId)
        record.luckyValue = min(record.luckyValue, initVal)
        MatchRecord.saveRecord(FISH_GAMEID, userId, roomId, record)