Ejemplo n.º 1
0
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)
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
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