def refreshReturnerMissionData(userId, lastLoginTime): """ 刷新回归豪礼数据 """ currTime = int(time.time()) lastLoginTime = util.getDayStartTimestamp(lastLoginTime) returnerMissionConf = config.getReturnerMissionConf() # 判断是否激活回归豪礼 if currTime - lastLoginTime >= returnerMissionConf["daysLost"] * 24 * 3600: returnerMission = gamedata.getGameAttrJson(userId, FISH_GAMEID, GameData.returnerMission, {}) lastActiveTime = util.getDayStartTimestamp(returnerMission.get("lastActiveTime", currTime)) isActive = False if returnerMission: if currTime - lastActiveTime >= returnerMissionConf["daysBetween"] * 24 * 3600: isActive = True else: isActive = True if isActive: userLevel = gamedata.getGameAttrInt(userId, FISH_GAMEID, GameData.level) vipLevel = hallvip.userVipSystem.getUserVip(userId).vipLevel.level vipExp = hallvip.userVipSystem.getUserVip(userId).vipExp returnerMission = {} returnerMission["lastActiveTime"] = currTime returnerMission["userLevel"] = userLevel returnerMission["vipExp"] = vipExp returnerMission["tasks"] = initTaskData() gamedata.setGameAttr(userId, FISH_GAMEID, GameData.returnerMission, json.dumps(returnerMission)) bireport.reportGameEvent("BI_NFISH_GE_RETURNER_MISSION", userId, FISH_GAMEID, vipLevel, vipExp, userLevel, 0, 0, 0, [], util.getClientId(userId)) returnerMission = getReturnerMissionData(userId) if returnerMission: # 解锁新任务 lastActiveTime = util.getDayStartTimestamp(returnerMission["lastActiveTime"]) fewDays = (datetime.fromtimestamp(currTime) - datetime.fromtimestamp(lastActiveTime)).days + 1 fewDays = max(1, min(fewDays, len(returnerMission["tasks"]))) # 第N天之前的任务都会解锁 isUnlock = False taskIds = [] for _index, taskConf in enumerate(config.getReturnerMissionConf("tasks")): if taskConf["taskId"] in returnerMission["tasks"]: if _index < fewDays and returnerMission["tasks"][taskConf["taskId"]]["state"] == 0: returnerMission["tasks"][taskConf["taskId"]]["state"] = 1 isUnlock = True elif returnerMission["tasks"][taskConf["taskId"]]["state"] == 2: taskIds.append(taskConf["taskId"]) if isUnlock: gamedata.setGameAttr(userId, FISH_GAMEID, GameData.returnerMission, json.dumps(returnerMission)) if taskIds: module_tip.addModuleTipEvent(userId, "returnerMission", taskIds) else: module_tip.resetModuleTipEvent(userId, "returnerMission")
def getReturnerReward(userId, clientId, taskId): """ 领取回归豪礼 """ rewards = None returnerMission = getReturnerMissionData(userId) if returnerMission: for taskConf in config.getReturnerMissionConf("tasks"): if taskConf["taskId"] == taskId and taskId in returnerMission["tasks"]: if returnerMission["tasks"][taskId]["state"] == 2: rewards = buildTaskRewards(taskConf["rewards"], returnerMission["userLevel"], returnerMission["vipExp"]) returnerMission["tasks"][taskId]["state"] = 3 break mo = MsgPack() mo.setCmd("returner_reward") mo.setResult("gameId", FISH_GAMEID) mo.setResult("userId", userId) mo.setResult("taskId", taskId) mo.setResult("code", 0 if rewards else 1) if rewards: util.addRewards(userId, rewards, "BI_NFISH_RETURNER_REWARDS", int(taskId)) gamedata.setGameAttr(userId, FISH_GAMEID, GameData.returnerMission, json.dumps(returnerMission)) module_tip.cancelModuleTipEvent(userId, "returnerMission", taskId) mo.setResult("rewards", rewards) router.sendToUser(mo, userId)
def getReturnerMission(userId, clientId): """ 获取回归豪礼 """ timeLeft = 0 currTime = int(time.time()) returnerMission = getReturnerMissionData(userId) returnerMissionConf = config.getReturnerMissionConf() if returnerMission: # 获取回归豪礼结束倒计时 expireDays = returnerMissionConf["expireDays"] * 24 * 3600 endTime = returnerMission["lastActiveTime"] + expireDays timeLeft = max(endTime - currTime, 0) mo = MsgPack() mo.setCmd("returner_mission") mo.setResult("gameId", FISH_GAMEID) mo.setResult("userId", userId) mo.setResult("timeLeft", timeLeft) if timeLeft > 0: # 是否首次登录弹出 dayFirst = weakdata.incrDayFishData(userId, WeakData.returnerMission, 1) # 当前是激活后的第几个任务(按天处理) lastActiveTime = util.getDayStartTimestamp(returnerMission["lastActiveTime"]) fewDays = (datetime.fromtimestamp(currTime) - datetime.fromtimestamp(lastActiveTime)).days + 1 fewDays = max(1, min(fewDays, len(returnerMission["tasks"]))) currentTaskId = returnerMissionConf["tasks"][fewDays - 1]["taskId"] lang = util.getLanguage(userId, clientId) # 任务数据 tasks = buildTaskData(returnerMission, lang) mo.setResult("dayFirst", 1 if dayFirst == 1 else 0) mo.setResult("currentTaskId", currentTaskId) mo.setResult("rule", config.getMultiLangTextConf(returnerMissionConf["rule"], lang=lang)) mo.setResult("tasks", tasks) router.sendToUser(mo, userId)
def addProgress(userId, taskLevel): """ 增加任务进度 """ taskIds = [] returnerMission = getReturnerMissionData(userId) if returnerMission: # 未解锁的任务进度为最后一个已解锁的任务进度 notUnlockedProgress = 0 for taskConf in config.getReturnerMissionConf("tasks"): if taskConf["taskId"] in returnerMission["tasks"]: taskData = returnerMission["tasks"][taskConf["taskId"]] if taskData["state"] == 1: taskData["progress"] += taskLevel taskData["progress"] = min(taskData["progress"], taskConf["value"]) notUnlockedProgress = taskData["progress"] if taskData["progress"] >= taskConf["value"]: taskData["state"] = 2 taskData["progress"] = taskConf["value"] elif taskData["state"] == 0: taskData["progress"] = max(taskData["progress"], notUnlockedProgress) if taskData["state"] == 2: taskIds.append(taskConf["taskId"]) gamedata.setGameAttr(userId, FISH_GAMEID, GameData.returnerMission, json.dumps(returnerMission)) taskIds and module_tip.addModuleTipEvent(userId, "returnerMission", taskIds)
def initTaskData(): """ 初始化任务数据 """ tasks = {} for _index, taskConf in enumerate(config.getReturnerMissionConf("tasks")): task = {"progress": 0, "state": 0} if _index == 0: task["state"] = 2 tasks[taskConf["taskId"]] = task return tasks
def buildTaskData(returnerMission, lang): """ 构建任务数据 """ taskList = [] for taskConf in config.getReturnerMissionConf("tasks"): if taskConf["taskId"] in returnerMission["tasks"]: task = {} taskId = taskConf["taskId"] taskData = returnerMission["tasks"][taskId] task["taskId"] = taskId task["desc"] = config.getMultiLangTextConf(taskConf["desc"], lang=lang) task["progress"] = [min(taskData["progress"], taskConf["value"]), taskConf["value"]] task["state"] = taskData["state"] task["rewards"] = buildTaskRewards(taskConf["rewards"], returnerMission["userLevel"], returnerMission["vipExp"]) taskList.append(task) return taskList
def getReturnerMissionData(userId): """ 获取回归豪礼数据 """ returnerMission = gamedata.getGameAttrJson(userId, FISH_GAMEID, GameData.returnerMission, {}) if returnerMission: currTime = int(time.time()) expireDays = config.getReturnerMissionConf("expireDays") * 24 * 3600 endTime = returnerMission["lastActiveTime"] + expireDays # 是否全部领取、是否过期 isAllReceived = True for taskData in returnerMission["tasks"].values(): if taskData["state"] != 3: isAllReceived = False if isAllReceived or currTime >= endTime: return {} return returnerMission