示例#1
0
    def testGetPrize(self):
        handler = NeiTuiGuangTcpHandler()
        createTime = datetime.now(
        )  # datetime.strptime('2015-12-22 18:20:00.0', '%Y-%m-%d %H:%M:%S.%f')
        userdata.setAttr(self.userId, 'createTime',
                         createTime.strftime('%Y-%m-%d %H:%M:%S.%f'))
        userdata.setAttr(self.inviteeUserId, 'createTime',
                         createTime.strftime('%Y-%m-%d %H:%M:%S.%f'))
        createTime -= timedelta(days=8)
        userdata.setAttr(self.userId, 'createTime',
                         createTime.strftime('%Y-%m-%d %H:%M:%S.%f'))
        gamedata.delGameAttr(self.userId, self.gameId, 'neituiguang')
        gamedata.delGameAttr(self.inviteeUserId, self.gameId, 'neituiguang')

        handler.doQueryPrize(self.gameId, self.userId, self.clientId)

        timestamp = pktimestamp.getCurrentTimestamp()
        handler.doCheckCode(self.gameId, self.inviteeUserId, self.clientId,
                            self.userId)

        neituiguang_remote.onInvitationAccepted(self.userId,
                                                self.inviteeUserId)
        status = neituiguang.loadStatus(self.userId, timestamp)
        neituiguang.onNotifyInviterOk(status)

        handler.doQueryPrize(self.gameId, self.userId, self.clientId)
        handler.doGetPrize(self.gameId, self.userId, self.clientId)
示例#2
0
def loadStatus(userId, timestamp):
    '''
    加载用户推广状态
    麻将先于大厅做过邀请有礼,从麻将merge数据
    '''
    d = None
    status = None
    try:
        # 优先迁移跑胡子的配置
        ftlog.debug('hall_simple_invite.loadStatus try load from paohuzi...')
        d = gamedata.getGameAttrJson(userId, 21, NeituiguangSimpleStatus.OLD_KEY)
        gamedata.delGameAttr(userId, 21, NeituiguangSimpleStatus.OLD_KEY)
        if not d:
            # 其次迁移麻将的配置
            ftlog.debug('hall_simple_invite.loadStatus try load from majiang...')
            d = gamedata.getGameAttrJson(userId, 7, NeituiguangSimpleStatus.OLD_KEY)
            gamedata.delGameAttr(userId, 7, NeituiguangSimpleStatus.OLD_KEY)

        if not d:
            # 使用大厅数据
            ftlog.debug('hall_simple_invite.loadStatus try load from hall at last...')
            d = gamedata.getGameAttrJson(userId, HALL_GAMEID, NeituiguangSimpleStatus.NEW_KEY)

        ftlog.debug('hall_simple_invite.loadStatus status:', d)
        if d:
            status = NeituiguangSimpleStatus(userId, timestamp).decodeFromDict(d)
    except:
        ftlog.error('invite.loadStatus userId=', userId, 'd=', d)

    if not status:
        status = NeituiguangSimpleStatus(userId, timestamp)

    return status
示例#3
0
def refreshDailyQuestData(userId):
    """
    重置每日任务存档
    """
    # 刷新每日任务分组难度等级
    refreshDailyQuestGroupLv(userId)
    key = _getUserDailyQuestKey(userId)
    daobase.executeUserCmd(userId, "DEL", key)
    key = _getUserDailyQuestRewardKey(userId)
    daobase.executeUserCmd(userId, "DEL", key)
    gamedata.delGameAttr(userId, FISH_GAMEID, _getUserDailyQuestInfoKey(userId))
    gamedata.delGameAttr(userId, FISH_GAMEID, GameData.refreshDailyQuestTimes)
    module_tip.resetModuleTipEvent(userId, "task")
示例#4
0
 def testGetPrize(self):
     handler = NeiTuiGuangTcpHandler()
     createTime = datetime.now()# datetime.strptime('2015-12-22 18:20:00.0', '%Y-%m-%d %H:%M:%S.%f')
     userdata.setAttr(self.userId, 'createTime', createTime.strftime('%Y-%m-%d %H:%M:%S.%f'))
     userdata.setAttr(self.inviteeUserId, 'createTime', createTime.strftime('%Y-%m-%d %H:%M:%S.%f'))
     createTime -= timedelta(days=8)
     userdata.setAttr(self.userId, 'createTime', createTime.strftime('%Y-%m-%d %H:%M:%S.%f'))
     gamedata.delGameAttr(self.userId, self.gameId, 'neituiguang')
     gamedata.delGameAttr(self.inviteeUserId, self.gameId, 'neituiguang')
     
     handler.doQueryPrize(self.gameId, self.userId, self.clientId)
     
     timestamp = pktimestamp.getCurrentTimestamp()
     handler.doCheckCode(self.gameId, self.inviteeUserId, self.clientId, self.userId)
     
     neituiguang_remote.onInvitationAccepted(self.userId, self.inviteeUserId)
     status = neituiguang.loadStatus(self.userId, timestamp)
     neituiguang.onNotifyInviterOk(status)
     
     handler.doQueryPrize(self.gameId, self.userId, self.clientId)
     handler.doGetPrize(self.gameId, self.userId, self.clientId)
示例#5
0
def loadStatus(userId, timestamp):
    '''
    加载用户推广状态
    麻将先于大厅做过邀请有礼,从麻将merge数据
    '''
    d = None
    status = None
    try:
        # 优先迁移跑胡子的配置
        ftlog.debug('hall_simple_invite.loadStatus try load from paohuzi...')
        d = gamedata.getGameAttrJson(userId, 21,
                                     NeituiguangSimpleStatus.OLD_KEY)
        gamedata.delGameAttr(userId, 21, NeituiguangSimpleStatus.OLD_KEY)
        if not d:
            # 其次迁移麻将的配置
            ftlog.debug(
                'hall_simple_invite.loadStatus try load from majiang...')
            d = gamedata.getGameAttrJson(userId, 7,
                                         NeituiguangSimpleStatus.OLD_KEY)
            gamedata.delGameAttr(userId, 7, NeituiguangSimpleStatus.OLD_KEY)

        if not d:
            # 使用大厅数据
            ftlog.debug(
                'hall_simple_invite.loadStatus try load from hall at last...')
            d = gamedata.getGameAttrJson(userId, HALL_GAMEID,
                                         NeituiguangSimpleStatus.NEW_KEY)

        ftlog.debug('hall_simple_invite.loadStatus status:', d)
        if d:
            status = NeituiguangSimpleStatus(userId,
                                             timestamp).decodeFromDict(d)
    except:
        ftlog.error('invite.loadStatus userId=', userId, 'd=', d)

    if not status:
        status = NeituiguangSimpleStatus(userId, timestamp)

    return status
示例#6
0
def clearFiveStarRate(userId, clientId):
    channel = findChannel(clientId)
    if channel:
        field = 'fivestar.%s' % (channel['name'])
        gamedata.delGameAttr(userId, HALL_GAMEID, field)
示例#7
0
def clearFiveStarRate(userId, clientId):
    channel = findChannel(clientId)
    if channel:
        field = 'fivestar.%s' % (channel['name'])
        gamedata.delGameAttr(userId, HALL_GAMEID, field)
示例#8
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)
示例#9
0
def doBuyFishGift(userId, clientId, giftId, buyType=None, itemId=0):
    """
    购买礼包
    """
    if ftlog.is_debug():
        ftlog.debug("doBuyFishGift===>", userId, clientId, giftId, buyType,
                    itemId)
    giftConf = getGiftConf(clientId, giftId)
    if not giftConf:
        return
    buyType = buyType or giftConf.get("buyType")
    # 使用钻石购买
    if buyType == config.BT_DIAMOND:
        price = giftConf.get("discountPrice", 0)
        price, isSucc = store.getUseRebateItemPrice(userId, itemId, price,
                                                    buyType, giftId,
                                                    clientId)  # 满减券之后的钻石 满减券
        if price > 0:
            consumeCount = 0
            if isSucc:
                store.autoConvertVoucherToDiamond(userId, price)  # 代购券
                consumeCount, final = userchip.incrDiamond(
                    userId,
                    FISH_GAMEID,
                    -abs(price),
                    0,
                    "BI_NFISH_BUY_ITEM_CONSUME",
                    int(giftId),
                    util.getClientId(userId),
                    param01=giftId)
            if not isSucc or abs(consumeCount) != price:
                _sendBuyFishGiftRet(userId, clientId, giftId, 1)  # 钻石购买结果
                return
    # 使礼包变为可领取状态
    code, extraRwards = 1, None
    if giftConf["giftType"] == GiftType.BANKRUPT:  # 破产礼包
        code = BankruptGift(userId, clientId).addGiftData(int(giftId))
        if code == 0:
            # 购买成功后更新破产礼包购买次数并存储礼包等级.
            bankruptGiftInfo = gamedata.getGameAttrJson(
                userId, FISH_GAMEID, GameData.bankruptGiftInfo, [])
            if bankruptGiftInfo:
                fishPool, grade = bankruptGiftInfo[:2]
                buyBankruptGift = weakdata.getDayFishData(
                    userId, WeakData.buyBankruptGiftTimesPerPool, {})
                buyBankruptGift.setdefault(str(fishPool),
                                           {}).setdefault("count", 0)
                buyBankruptGift[str(fishPool)]["count"] += 1  # 购买次数
                buyBankruptGift[str(fishPool)]["grade"] = grade  # 购买等级
                weakdata.setDayFishData(userId,
                                        WeakData.buyBankruptGiftTimesPerPool,
                                        json.dumps(buyBankruptGift))
        gamedata.delGameAttr(userId, FISH_GAMEID, GameData.bankruptGiftInfo)
    elif giftConf["giftType"] == GiftType.MONTHCARD:  # 月卡|永久月卡礼包
        code, extraRwards = MonthCardGift(userId,
                                          clientId).addGiftData(int(giftId))
    _sendBuyFishGiftRet(userId, clientId, giftId, code, extraRwards)
    # 购买礼包事件
    if code != 0:
        return
    from newfish.game import TGFish
    from newfish.entity.event import GiftBuyEvent
    event = GiftBuyEvent(userId, FISH_GAMEID, giftConf["productId"], buyType,
                         giftId)
    TGFish.getEventBus().publishEvent(event)
    util.addProductBuyEvent(userId, giftConf["productId"], clientId)