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)
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
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")
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)
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
def clearFiveStarRate(userId, clientId): channel = findChannel(clientId) if channel: field = 'fivestar.%s' % (channel['name']) gamedata.delGameAttr(userId, HALL_GAMEID, field)
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)
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)