def _sendQuestFinished(userId, quest): """发送完成的每日任务""" level = util.getUserLevel(userId) if level < config.getCommonValueByKey("dailyQuestOpenLevel"): return lang = util.getLanguage(userId) mo = MsgPack() mo.setCmd("task") mo.setResult("gameId", FISH_GAMEID) mo.setResult("userId", userId) mo.setResult("action", "finished") mo.setResult("taskId", quest["taskId"]) # if quest["taskType"] == TaskType.CoinNum and quest["des"].find("%s") >= 0: # des = quest["des"] % util.formatScore(quest["targetsNum"]) # elif quest["des"].find("%d") >= 0: # des = quest["des"] % quest["targetsNum"] # else: # des = quest["des"] questDes = config.getMultiLangTextConf(quest["des"], lang=lang) if questDes.find("%s") >= 0: des = questDes % util.formatScore(quest["targetsNum"], lang=lang) elif questDes.find("%d") >= 0: des = questDes % quest["targetsNum"] elif questDes.count("{}") >= 2: des = questDes.format(quest["gunX"], quest["targetsNum"]) else: des = questDes mo.setResult("des", des) router.sendToUser(mo, userId)
def sendPushCompleteInfo(self): """ 发送任务完成消息 """ message = MsgPack() message.setCmd("fishAchievementTaskComplete") message.setResult("gameId", FISH_GAMEID) message.setResult("userId", self.userId) taskInfo = {} taskInfo["taskId"] = self.taskConfig["Id"] taskInfo["type"] = self.taskConfig["type"] taskInfo["target"] = self.taskConfig["target"]["num"] taskInfo["state"] = TaskState.Complete descId = self.taskConfig["desc"] desc = config.getMultiLangTextConf(descId, lang=self.lang) if taskInfo["type"] == AchieveType.SkillUp: if desc.find("%d") >= 0: taskInfo["desc"] = desc % self.taskConfig["target"].get("condition", 0) else: if desc.find("%s") >= 0: taskInfo["desc"] = desc % util.formatScore(taskInfo["target"], lang=self.lang) elif desc.find("%d") >= 0: taskInfo["desc"] = desc % taskInfo["target"] message.setResult("result", taskInfo) router.sendToUser(message, self.userId)
def getFailedInfo(cls, reason, userId, roomId): """ 获取失败提示信息 """ lang = util.getLanguage(userId) roomConf = {} if gdata.roomIdDefineMap().get(roomId): roomConf = gdata.roomIdDefineMap()[roomId].configure info = config.getMultiLangTextConf("ID_ENTER_ROOM_REASON", lang=lang) if reason == cls.ENTER_ROOM_REASON_LESS_LEVEL: info = config.getMultiLangTextConf( "ID_ENTER_ROOM_REASON_LESS_LEVEL", lang=lang) % roomConf["minLevel"] elif reason == cls.ENTER_ROOM_REASON_MAINTENANCE: info = config.getMultiLangTextConf( "ID_ENTER_ROOM_REASON_MAINTENANCE", lang=lang) elif reason == cls.ENTER_ROOM_REASON_VERSION_DISABLE: info = config.getMultiLangTextConf( "ID_ENTER_ROOM_REASON_VERSION_DISABLE", lang=lang) elif reason == cls.ENTER_ROOM_REASON_LESS_FEES: info = config.getMultiLangTextConf( "ID_ENTER_ROOM_REASON_LESS_FEES", lang=lang) elif reason == cls.ENTER_ROOM_REASON_LESS_BULLET: info = config.getMultiLangTextConf( "ID_ENTER_ROOM_REASON_LESS_BULLET", lang=lang) elif reason == cls.ENTER_ROOM_REASON_LESS_COIN: info = config.getMultiLangTextConf( "ID_ENTER_ROOM_REASON_LESS_COIN", lang=lang) % util.formatScore(roomConf["minCoin"], lang=lang) elif reason == cls.ENTER_ROOM_REASON_TIME_LIMIT: info = config.getMultiLangTextConf("ID_ENTER_ROOM_REASON_NOT_OPEN", lang=lang) if roomConf.get("typeName") == config.FISH_ROBBERY: info = config.getMultiLangTextConf( "ID_ENTER_ROOM_REASON_TIME_LIMIT", lang=lang) elif reason == cls.ENTER_ROOM_REASON_EXCESSIVE_LOSS: info = config.getMultiLangTextConf( "ID_ENTER_ROOM_REASON_EXCESSIVE_LOSS", lang=lang) % config.getMultiLangTextConf(roomConf["name"], lang=lang) elif reason == cls.ENTER_ROOM_REASON_NOT_OPEN: info = config.getMultiLangTextConf("ID_ENTER_ROOM_REASON_NOT_OPEN", lang=lang) elif reason == cls.ENTER_ROOM_REASON_GRAND_PRIX_LESS_FEES: # 大奖赛门票不足 info = config.getMultiLangTextConf( "ENTER_ROOM_REASON_GRAND_PRIX_LESS_FEES", lang=lang) elif reason == cls.ENTER_ROOM_REASON_GRAND_PRIX_NOE_OPEN: info = config.getMultiLangTextConf( "ENTER_ROOM_REASON_GRAND_PRIX_NOE_OPEN", lang=lang) return info
def getResComplement(userId, count=0): """ 获得珍珠、紫水晶、黄水晶道具补足 """ effect = {} treasureConf = config.getTreasureConf(effectType=EffectType.ResComplement) if treasureConf: kindId = treasureConf["kindId"] level, levelConf = getTreasureInfo(userId, kindId) if not levelConf: return refreshTreasureState(userId, kindId) treasureData = getTreasure(userId, kindId) if treasureData[INDEX_FINISH_COUNT] >= treasureConf["limitCount"]: return rewards = [] lang = util.getLanguage(userId) for _kindId, _complementCount in levelConf.get("params", {}).iteritems(): _kindId = int(_kindId) _surplusCount = util.balanceItem(userId, _kindId) if _complementCount > _surplusCount: _reward = { "name": _kindId, "count": _complementCount - _surplusCount, "chgCount": [_surplusCount, _complementCount] } rewards.append(_reward) treasureName = config.getMultiLangTextConf(treasureConf["name"], lang=lang) countStr = util.formatScore(_complementCount, lang=lang) message = config.getMultiLangTextConf("ID_CONFIG_TREASURE_SUPPLY_%s" % _kindId, lang=lang) message = message.format(countStr, treasureName, countStr) GameMsg.sendPrivate(FISH_GAMEID, userId, 0, message) if rewards: util.addRewards(userId, rewards, "BI_NFISH_TREASURE_REWARDS", kindId) activeTreasure(userId, kindId, treasureData) effect = { "kindId": kindId, "level": level, "rewards": rewards } return effect
def getCoinComplement(userId, coin=0): """ 获得金币补足 :param userId: :param coin: 当处于渔场中时,使用渔场传过来的金币数 """ effect = {} userCoin = coin if coin > 0 else userchip.getChip(userId) treasureConf = config.getTreasureConf(effectType=EffectType.CoinComplement) if treasureConf: kindId = treasureConf["kindId"] level, levelConf = getTreasureInfo(userId, kindId) if not levelConf: return refreshTreasureState(userId, kindId) treasureData = getTreasure(userId, kindId) if treasureData[INDEX_FINISH_COUNT] >= treasureConf["limitCount"]: return coinComplement = levelConf.get("params", {}).get("value", 0) if coinComplement > userCoin: lang = util.getLanguage(userId) rewards = [{"name": config.CHIP_KINDID, "count": coinComplement - userCoin, "chgCount": [userCoin, coinComplement]}] util.addRewards(userId, rewards, "BI_NFISH_TREASURE_REWARDS", kindId) activeTreasure(userId, kindId, treasureData) treasureName = config.getMultiLangTextConf(treasureConf["name"], lang=lang) coinStr = util.formatScore(coinComplement, lang=lang) message = config.getMultiLangTextConf("ID_CONFIG_TREASURE_SUPPLY_101", lang=lang) message = message.format(coinStr, treasureName, coinStr) GameMsg.sendPrivate(FISH_GAMEID, userId, 0, message) effect = { "kindId": kindId, "level": level, "rewards": rewards } return effect
def getTaskInfo(userId, clientId, taskId, lang): """ 获得单个任务信息 """ taskConf = config.getMainQuestTaskConf(clientId, taskId) state = getTask(userId, taskConf["taskId"])[QuestIndex.State] if state == QuestState.Default: value = getQuestTypeData(userId, taskConf["type"]) if taskConf["type"] == QuestType.RobberyProfit: value = 0 if value >= taskConf["num"]: state = QuestState.Completed setTask(userId, clientId, taskConf["taskId"], [state, int(time.time())]) # 任务完成时间 progress = [min(value, taskConf["num"]), taskConf["num"]] else: progress = [taskConf["num"], taskConf["num"]] # 完成的进度 # 招财珠价值任务客户端使用是否完成显示. if taskConf["type"] == QuestType.RobberyProfit and taskConf["num"] != 0: progress = [val / taskConf["num"] for val in progress] taskDict = {} taskDict["taskId"] = taskConf["taskId"] taskDict["state"] = state taskDict["type"] = taskConf["type"] taskDict["title"] = taskConf["title"] descId = taskConf["desc"] desc = config.getMultiLangTextConf(str(descId), lang=lang) if desc: taskDict["desc"] = desc % util.formatScore( taskConf["num"], lang=lang) if "%s" in desc else desc taskDict["progress"] = progress taskDict["normalRewards"] = taskConf["normalRewards"] chestRewards = taskConf["chestRewards"] taskDict["chestInfo"] = chest_system.getChestInfo( chestRewards[0]["name"]) if chestRewards else {} taskDict["taskLevel"] = taskConf["star"] return taskDict
def getTaskInfo(self): """ 获取任务数据 """ taskInfo = {} self._updateState() # 更新状态 taskInfo["taskId"] = self.taskConfig["Id"] taskInfo["progress"] = min(int(self.taskData["progress"]), self.taskConfig["target"]["num"]) taskInfo["state"] = self.taskData["state"] taskInfo["type"] = self.taskConfig["type"] taskInfo["target"] = self.taskConfig["target"]["num"] desc = config.getMultiLangTextConf(str(self.taskConfig["desc"]), lang=self.lang) if taskInfo["type"] == AchieveType.SkillUp: if desc.find("%d") >= 0: taskInfo["desc"] = desc % self.taskConfig["target"].get("condition", 0) else: if desc.find("%s") >= 0: taskInfo["desc"] = desc % util.formatScore(taskInfo["target"], lang=self.lang) elif desc.find("%d") >= 0: taskInfo["desc"] = desc % taskInfo["target"] taskInfo["exp"] = self.taskConfig["exp"] taskInfo["time"] = self.taskData.get("time", 0) return taskInfo
def getDailyQuestData(userId): """ 获取玩家每日任务数据 """ level = util.getUserLevel(userId) if level < config.getCommonValueByKey("dailyQuestOpenLevel"): return {} if not util.isFinishAllNewbieTask(userId): return {} lang = util.getLanguage(userId) # 替换为新版任务时,重置玩家每日任务数据. key = _getUserDailyQuestGroupLvKey(userId) groupLvData = gamedata.getGameAttrJson(userId, FISH_GAMEID, key, {}) if len(groupLvData) == 0: refreshDailyQuestData(userId) groupIdList = config.getDailyQuestGroupOrder() dailyQuestData = {} todayQuest, activeLv = getTodayQuest(userId) # userData = _getUserQuestData(userId) finishedStar = 0 key = _getUserDailyQuestWeeklyRewardKey(userId) ret = json.loads(weakdata.getWeekFishData(userId, key, "{}")) finishedWeekStar = ret.get("star", 0) questInfo = getUserQuestInfoData(userId) tasks = [] update = False questList = sorted(todayQuest.items(), key=lambda val: groupIdList.index(val[1]["groupId"])) all = len(todayQuest) == len(groupIdList) # for k, v in todayQuest.iteritems(): for _val in questList: k, v = _val task = {} task["taskId"] = k task["taskLevel"] = v["taskLevel"] task["targetsNum"] = v["targetsNum"] # progress = userData.get(v["taskType"], 0) progress, state = questInfo.get(str(k), [0, QuestTaskState.Normal]) if progress >= task["targetsNum"] or state >= QuestTaskState.Complete: progress = task["targetsNum"] # 已领取 if state == QuestTaskState.Received: finishedStar += task["taskLevel"] elif state == QuestTaskState.Normal: state = QuestTaskState.Complete questInfo[str(k)] = [progress, state] update = True task["progress"] = progress task["taskState"] = state task["rewards"] = v["rewards"] task["chestRewards"] = [] for val in v["rewards"]: itemId = val["name"] if util.isChestRewardId(itemId): task["chestRewards"].append({"chestId": itemId, "chestInfo": chest_system.getChestInfo(itemId)}) # if v["taskType"] == TaskType.CoinNum and v["des"].find("%s") >= 0: # task["des"] = v["des"] % util.formatScore(v["targetsNum"]) # elif v["des"].find("%d") >= 0: # task["des"] = v["des"] % v["targetsNum"] # else: # task["des"] = v["des"] vDesId = v["des"] vDes = config.getMultiLangTextConf(str(vDesId), lang=lang) if v["taskType"] == TaskType.CoinNum and vDes.find("%s") >= 0: task["des"] = vDes % util.formatScore(v["targetsNum"], lang=lang) elif vDes.find("%d") >= 0: task["des"] = vDes % v["targetsNum"] elif vDes.count("{}") >= 2: task["des"] = vDes.format(v["gunX"], v["targetsNum"]) else: task["des"] = vDes tasks.append(task) if update: setUserQuestInfoData(userId, questInfo) dailyQuestReward = config.getDailyQuestRewardConf(activeLv, all) gotReward = _getUserQuestRewardData(userId, "day") gotWeekReward = _getUserQuestRewardData(userId, "week") dailyQuestData["tasks"] = tasks rewardData = [dailyQuestReward[str(key)] for key in sorted(map(int, dailyQuestReward.keys()))] for v in rewardData: v["chestRewards"] = [] for val in v["rewards"]: itemId = val["itemId"] if util.isChestRewardId(itemId): v["chestRewards"].append({"chestId": itemId, "chestInfo": chest_system.getChestInfo(itemId)}) dailyQuestData["rewardData"] = rewardData dailyQuestData["finishedStar"] = finishedStar dailyQuestData["gotReward"] = gotReward dailyQuestData["finishedWeekStar"] = finishedWeekStar dailyQuestData["gotWeekReward"] = gotWeekReward dailyQuestData["refreshData"] = config.getDailyQuestRefreshConf() dailyQuestData["refreshedTimes"] = gamedata.getGameAttrInt(userId, FISH_GAMEID, GameData.refreshDailyQuestTimes) return dailyQuestData
def sendGrandPrizeReward(roomId, tableId, userId, fId, coinCount, level, seatId, fpMultiple): """ 发放巨奖奖励 """ try: rewards = [{"name": config.CHIP_KINDID, "count": coinCount}] room = gdata.rooms()[roomId] table = room.maptable[tableId] player = table.getPlayer(userId) msg = MsgPack() msg.setCmd("getGrandPrizeRewards") msg.setResult("gameId", FISH_GAMEID) msg.setResult("userId", userId) msg.setResult("fId", fId) msg.setResult("rewards", rewards) msg.setResult("level", level) msg.setResult("seatId", seatId) msg.setResult("fpMultiple", fpMultiple) GameMsg.sendMsg(msg, table.getBroadcastUids()) if player: for bigRoomId in config.getGrandPrizeConf().get("roomIds", []): player.fireCost[str(bigRoomId)] = 0 name = player.name player.addTableChip(coinCount, "BI_NFISH_GRAND_PRIZE") player.totalGainChip += coinCount # 深海巨奖触发幸运降临 table.checkBigPrize(player, coinCount // fpMultiple, coinCount, fpMultiple, isGrandPriz=True) else: from poker.entity.dao import gamedata from newfish.entity.redis_keys import GameData fireCost = gamedata.getGameAttrJson(userId, FISH_GAMEID, GameData.fireCost, {}) for bigRoomId in config.getGrandPrizeConf().get("roomIds", []): fireCost[str(bigRoomId)] = 0 gamedata.setGameAttr(userId, FISH_GAMEID, GameData.fireCost, json.dumps(fireCost)) name = util.getNickname(userId) util.addRewards(userId, rewards, "BI_NFISH_GRAND_PRIZE", roomId) leds = [ "ID_LED_GRAND_PRIZE_1", "ID_LED_GRAND_PRIZE_2", "ID_LED_GRAND_PRIZE_3" ] if len(leds) > level >= 0: lang = util.getLanguage(userId) msg = config.getMultiLangTextConf(leds[level], lang=lang) % \ (name, config.getMultiLangTextConf(table.runConfig.title, lang=lang), util.formatScore(coinCount, lang=lang)) user_rpc.sendLed(FISH_GAMEID, msg, id=leds[level], lang=lang) except Exception as e: ftlog.error("sendGrandPrizeReward", roomId, tableId, userId, fId, coinCount, traceback.format_exc()) return 0
def _getTaskData(self): """ 获取活动中的任务信息 """ tasks = [] if len(self.activityConfig.get("task", {}).keys()) > 0: hasNoReceive = False # 默认全部任务奖励都领取 for taskId in self.activityConfig["task"]: if not self._isTaskVisible(taskId): continue item = {} stateInfo = self._getTaskState(taskId) item["id"] = taskId item["type"] = self.activityConfig["task"][taskId]["type"] item["reward"] = stateInfo[ "reward"] if "reward" in stateInfo else self._getTaskReward( taskId) item["state"] = stateInfo["state"] item["progress"] = stateInfo.get("progress", 0) item["value"] = self._getTaskTargetValue(taskId) # item["taskDesc"] = self.activityConfig["task"][taskId]["taskDesc"] if self.activityConfig["task"][taskId]["taskDesc"]: taskDesc = config.getMultiLangTextConf( self.activityConfig["task"][taskId]["taskDesc"], lang=self.lang) if taskDesc: taskValue = self.activityConfig["task"][taskId][ "value"] taskValue = taskValue.get("value", 0) or taskValue.get( "count", 0) if taskDesc.find("%s") >= 0: item["taskDesc"] = taskDesc % util.formatScore( taskValue, lang=self.lang) elif taskDesc.find("%d") >= 0: item["taskDesc"] = taskDesc % taskValue else: item["taskDesc"] = taskDesc else: item["taskDesc"] = "" if self.activityConfig["task"][taskId]["taskImg"]: item["taskImg"] = self.activityConfig["task"][taskId][ "taskImg"] if self.activityConfig["task"][taskId]["taskDisableImg"]: item["taskDisableImg"] = self.activityConfig["task"][ taskId]["taskDisableImg"] item["leftNum"] = stateInfo[ "leftNum"] if "leftNum" in stateInfo else 0 if "chestInfo" in stateInfo and stateInfo["chestInfo"]: item["chestInfo"] = stateInfo["chestInfo"] item["upgradeReward"] = self._getTaskUpgradeReward(taskId) if item["state"] != ActivityState.Received: hasNoReceive = True tasks.append(item) if (not hasNoReceive and not self.activityConfig["receivedVisible"]): return None if self.activityConfig.get("sort", 0): tasks.sort(key=lambda info: (AcTaskSortPriority[info["state"]], info["id"])) else: tasks = sorted(tasks, key=lambda info: info["id"]) return tasks