Ejemplo n.º 1
0
 def _doSitDown(self, msg, userId, seatId, clientId):
     """
     比赛牌桌只有玩家断线重连时才会触发坐下操作,既重新坐回牌桌
     """
     if seatId != 0:
         if self.seats[seatId - 1].userId == 0:
             onlinedata.removeOnlineLoc(userId, self.roomId, self.tableId)
             ftlog.warn("reconnect user is cleaned from table", "seats =",
                        self.seats)
             return False
         elif userId != self.seats[seatId - 1].userId:
             onlinedata.removeOnlineLoc(userId, self.roomId, self.tableId)
             ftlog.warn("reconnect user id is not matched", "seats =",
                        self.seats)
             return False
         else:
             ftlog.info("user reconect, userId:", userId)
             onlinedata.addOnlineLoc(userId, self.roomId, self.tableId,
                                     seatId)
             self.players[seatId - 1].offline = 1
             self.players[seatId - 1].clientId = clientId
             self.players[seatId - 1].lang = util.getLanguage(
                 userId, clientId)
             self.players[seatId - 1].refreshGunSkin()
             self._sendTableInfo(userId, seatId)
             self._updateMatchInfo(userId)
             self._updateMatchRank(userId)
             self._updateMatchTask(userId)
             self.players[seatId - 1].dealEnterTable()
             self.players[seatId - 1].enterTime = int(time.time())
             self.players[seatId - 1].offline = 0
             from newfish.game import TGFish
             event = EnterTableEvent(userId, FISH_GAMEID, self.roomId,
                                     self.tableId, seatId, 1)
             TGFish.getEventBus().publishEvent(event)
             return True
     else:
         for i in range(len(self.seats)):
             if self.seats[i].userId == userId:
                 ftlog.info("lost user reconect, userId:", userId, "i =", i)
                 onlinedata.addOnlineLoc(userId, self.roomId, self.tableId,
                                         i + 1)
                 self.players[i].offline = 1
                 self.players[i].clientId = clientId
                 self.players[i].lang = util.getLanguage(userId, clientId)
                 self.players[i].refreshGunSkin()
                 self._sendTableInfo(userId, i + 1)
                 self._updateMatchInfo(userId)
                 self._updateMatchRank(userId)
                 self._updateMatchTask(userId)
                 self.players[i].dealEnterTable()
                 self.players[i].enterTime = int(time.time())
                 self.players[i].offline = 0
                 from newfish.game import TGFish
                 event = EnterTableEvent(userId, FISH_GAMEID, self.roomId,
                                         self.tableId, seatId, 1)
                 TGFish.getEventBus().publishEvent(event)
                 return True
Ejemplo n.º 2
0
 def getTaskInfo(self):
     """
     获取返回给客户端的任务数据
     """
     progress = min(self.taskData["progress"], self.taskData["targetNum"])
     progress = int(progress) if progress - int(progress) == 0 else progress
     meProgress = progress - self.helpProgress
     meProgress = int(meProgress) if meProgress - int(meProgress) == 0 else meProgress
     taskInfo = {}
     taskInfo["taskId"] = self.taskConfig["taskId"]
     taskInfo["isLimitTime"] = self.isLimitTime()
     taskInfo["shareMode"] = 1   # 1 if not self.isLimitTime() or util.isLocationLimit(self.userId) else 0
     taskInfo["progress"] = [int(progress), int(meProgress), self.taskData["targetNum"]]
     taskInfo["state"] = self.taskData["state"]
     taskInfodescId = self.taskConfig["desc"]
     taskInfo["desc"] = config.getMultiLangTextConf(str(taskInfodescId), lang=util.getLanguage(self.userId))
     taskInfo["reward"] = self.taskConfig["rewards"]
     if self.receiveRewards:
         taskInfo["realReward"] = self.receiveRewards
     taskInfo["target"] = self.taskConfig["target"]
     taskInfo["suggestTarget"] = self.taskConfig["suggestTarget"]
     timeLeft = self.recordStartTime + self.taskInterval - int(time.time())
     taskInfo["timeLeft"] = timeLeft if timeLeft >= 0 else self.taskInterval
     taskInfo["timeLong"] = self.taskInterval
     taskInfo["failTimeConf"] = self.taskConfig["failTime"]
     taskInfo["failTime"] = self.taskData["failTime"]        # 失败次数
     taskInfo["isNextLimitTime"] = self.taskSystem.isNextLimitTime(self.getTaskId())
     taskInfo["model"] = TaskModel.Red if util.isNewbieRoom(self.player.table.typeName) and self.taskSystem.taskModel == TaskModel.Main else self.taskSystem.taskModel
     taskInfo["type"] = self.taskConfig["type"]
     if self.taskSystem.taskModel in [TaskModel.Red, TaskModel.Main]:
         taskInfo["index"] = self.taskSystem.allMainTaskIds.index(self.taskId)
     return taskInfo
Ejemplo n.º 3
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 sendLuckyTreeInfo(userId, clientId):
    """
    发送免费金币摇钱树详情
    """
    isAppClient = util.isAppClient(userId)  # 判断是否为单包客户端
    luckyTreeConf = config.getLuckyTreeConf()
    accelerateTimes, rewardTs, copperCount = getRewardTsAndCopperCount(userId)
    vipLevel = hallvip.userVipSystem.getUserVip(userId).vipLevel.level
    vipLimit = luckyTreeConf.get("vipLimit")
    maxAcceleratetimes = luckyTreeConf.get("maxAcceleratetimes")
    state = 4
    if accelerateTimes < maxAcceleratetimes:
        if vipLevel >= vipLimit:
            state = 1
        else:
            state = 3 if isAppClient else 0
    else:
        state = 2
    message = MsgPack()
    message.setCmd("lucky_tree_info")
    message.setResult("gameId", FISH_GAMEID)
    message.setResult("userId", userId)
    message.setResult(
        "rule",
        config.getMultiLangTextConf(str(luckyTreeConf.get("rule")),
                                    lang=util.getLanguage(userId, clientId)))
    message.setResult("copperCount", copperCount)
    message.setResult("state", state)
    message.setResult("rewardTs", rewardTs)
    message.setResult("rewardCount", luckyTreeConf.get("rewardCount", 0))
    message.setResult("rewardsList", getAllRewardList())
    router.sendToUser(message, userId)
Ejemplo n.º 5
0
def doSendLevelGift(userId, clientId):
    """
    获取升级礼包数据
    """
    message = MsgPack()
    message.setCmd("levelGiftData")
    message.setResult("gameId", FISH_GAMEID)
    message.setResult("userId", userId)
    giftInfo = []
    if not util.isVersionLimit(userId) and not util.isPurchaseLimit(userId) and util.isFinishAllNewbieTask(userId):
        levelGiftConf = config.getLevelGiftConf()
        gunLv = util.getGunLevelVal(userId, config.MULTIPLE_MODE)
        for giftId, giftConf in levelGiftConf.iteritems():
            if _isBought(userId, giftId):
                continue
            if not (giftConf["minLevel"] <= gunLv <= giftConf["maxLevel"]):
                continue
            now = int(time.time())
            timeout = giftConf["showTime"] * 60
            data = weakdata.getDayFishData(userId, WeakData.LevelUpCountDownData, [])
            if not data:
                weakdata.setDayFishData(userId, WeakData.LevelUpCountDownData, json.dumps([giftId, now]))
            else:
                if data[0] == giftId:
                    if timeout - (now - data[1]) > 0:
                        timeout = timeout - (now - data[1])
                    else:
                        timeout = 0
                else:
                    weakdata.setDayFishData(userId, WeakData.LevelUpCountDownData, json.dumps([giftId, now]))
            giftInfo.append(getGiftDetail(giftConf, util.getLanguage(userId, clientId), timeout))
    message.setResult("giftInfo", giftInfo)
    router.sendToUser(message, userId)
    return giftInfo
Ejemplo n.º 6
0
def getTreasureList(userId):
    """
    宝藏列表
    """
    treasures = []
    lang = util.getLanguage(userId)
    for kindId, treasureConf in config.getTreasureConf().iteritems():
        kindId = int(kindId)
        treasure = {}
        level, _ = getTreasureInfo(userId, kindId)
        treasure["kindId"] = kindId
        treasure["sortId"] = treasureConf["sortId"]
        treasure["name"] = config.getMultiLangTextConf(treasureConf["name"], lang=lang)
        treasure["desc"] = config.getMultiLangTextConf(treasureConf.get("desc"), lang=lang)
        treasure["level"] = level
        treasure["convert"] = treasureConf["convert"]
        treasures.append(treasure)

    def cmpSort(x, y):
        if x["level"] > y["level"]:
            return 1
        elif x["level"] < y["level"]:
            return -1
        else:
            if x["sortId"] < y["sortId"]:
                return 1
            else:
                return -1

    treasures.sort(cmp=cmpSort, reverse=True)
    return treasures
Ejemplo n.º 7
0
def sendGameplayInfo(roomId, userId, clientId, mode):
    """
    发送玩法相关信息
    """
    bigRoomId, _ = util.getBigRoomId(roomId)
    key = "%s_%d" % (bigRoomId, mode)
    lang = util.getLanguage(userId, clientId)
    conf = config.getSuperBossCommonConf()
    tabs = conf.get(str(key), {}).get("tabs", [])
    tabs = [{
        "title": config.getMultiLangTextConf(v["title"], lang=lang),
        "data": v["data"],
        "param": v.get("param", 0)
    } for v in tabs]
    mo = MsgPack()
    mo.setCmd("superboss_gameplay_info")
    mo.setResult("gameId", FISH_GAMEID)
    mo.setResult("userId", userId)
    mo.setResult("roomId", roomId)
    mo.setResult("mode", mode)
    mo.setResult("tabs", tabs)
    router.sendToUser(mo, userId)
    checkModuleTip(bigRoomId, userId, mode)
    if ftlog.is_debug():
        ftlog.debug("gameplay, userId =", userId, "mo =", mo)
Ejemplo n.º 8
0
def sendWelcomeMail(userId):
    """
    发送欢迎邮件
    """
    message = None
    welcomeMailConfs = config.getCommonValueByKey("ignoreConf")
    clientId = util.getClientId(userId)
    ftlog.debug("sendWelcomeMail", userId, "clientId = ", clientId)
    lang = util.getLanguage(userId)
    rewards = config.getCommonValueByKey("welcomeMailRewards")
    for welcomeMailConf in welcomeMailConfs:
        if clientId in welcomeMailConf.get("clientIds", []):
            # 不可显示实物、人民币相关描述
            message = config.getMultiLangTextConf(
                "ID_CONFIG_BAN_ENTITY_WELCOME_MSG", lang=lang)
        else:
            # 可显示实物、人民币相关描述
            message = config.getMultiLangTextConf(
                "ID_CONFIG_ALLOW_ENTITY_WELCOME_MSG", lang=lang)
    if message:
        mail_system.sendSystemMail(userId,
                                   mail_system.MailRewardType.SystemReward,
                                   rewards,
                                   message=message,
                                   title=config.getMultiLangTextConf(
                                       "ID_MAIL_TITLE_HOT_WELCOME", lang=lang))
 def __init__(self, userId, taskConf):
     self.userId = userId
     self.taskId = taskConf["Id"]
     self.taskConfig = taskConf
     self.lang = util.getLanguage(userId)
     self.taskData = None
     self.taskData = self._getAchievementTaskData()
Ejemplo n.º 10
0
 def doReturnFee(self, msg):
     """
     停服准备返还玩家报名费
     """
     # des = u"由于游戏维护导致您离开了比赛,特将此次报名费全额返还,请您查收!非常抱歉给您带来不便,祝您游戏愉快!"
     userList = msg.getParam("users")
     assert (isinstance(userList, list))
     for user in userList:
         userId = user.get("userId", 0)
         if userId <= config.ROBOT_MAX_USER_ID:
             continue
         lang = util.getLanguage(userId)
         des = config.getMultiLangTextConf("ID_DO_RETURN_FEE_MESSAGE",
                                           lang=lang)
         player = self.match.findPlayer(userId)
         if player and self.userFee.get(userId, None):
             fee = self.userFee.get(int(userId))
             rewardsList = []
             if fee:
                 rewardsList = util.convertToFishItems(fee)
             self._logger.debug("doReturnFee", "userId=", userId, "fee=",
                                rewardsList)
             self.match.matchUserIF.unlockUser(self.matchId, self.roomId,
                                               player.instId, userId)
             if rewardsList:
                 mail_system.sendSystemMail(
                     userId, mail_system.MailRewardType.SystemCompensate,
                     rewardsList, des)
Ejemplo n.º 11
0
 def sendTideTaskStartInfo(self, userId, timeLeft):
     """
     发送限时任务开始消息
     :param userId: 玩家Id
     :param timeLeft: 剩余时间
     """
     userData = self.usersData.get(userId, {})
     task = userData.get("task")
     if userData and task:
         msg = MsgPack()
         msg.setCmd("tide_task")
         msg.setResult("gameId", FISH_GAMEID)
         msg.setResult("userId", userId)
         msg.setResult("action", "start")
         msg.setResult("taskId", task["taskId"])
         desc = config.getMultiLangTextConf(str(task["desc"]),
                                            lang=util.getLanguage(userId))
         if desc.find("%d") >= 0:
             if task["taskType"] == 1:
                 desc = desc % (task["targets"].get(
                     "number", 0), task["targets"].get("target"))
             elif task["taskType"] == 2:
                 desc = desc % (task["targets"].get("number"))
             elif task["taskType"] == 3:
                 desc = desc % (task["targets"].get("number"))
         msg.setResult("desc", desc)
         msg.setResult("timeLeft", timeLeft)
         msg.setResult("timeLong", task["timeLong"])
         msg.setResult("taskType", task["taskType"])
         msg.setResult("rewardType", userData["rewardType"])
         msg.setResult("targets", task["targets"])
         msg.setResult("rewards", task["rewards"])
         GameMsg.sendMsg(msg, userId)
Ejemplo n.º 12
0
 def sendNcmpttTaskStartInfo(self, userId, timeLeft):
     """
     发送限时任务开始消息
     :param userId: 玩家Id
     :param timeLeft: 剩余时间
     """
     userData = self.usersData.get(userId, {})
     task = userData.get("task")
     if userData and task:
         msg = MsgPack()
         msg.setCmd("ncmptt_task")
         msg.setResult("gameId", FISH_GAMEID)
         msg.setResult("userId", userId)
         msg.setResult("action", "start")
         msg.setResult("taskId", task["taskId"])
         desc = config.getMultiLangTextConf(str(task["desc"]),
                                            lang=util.getLanguage(userId))
         if desc.find("%d") >= 0:
             desc = desc % (task["targets"].get("target1")
                            or task["targets"].get("number1", 0))
         msg.setResult("desc", desc)
         msg.setResult("timeLeft", timeLeft)
         msg.setResult("timeLong", task["timeLong"])
         msg.setResult("taskType", task["taskType"])
         msg.setResult("rewardType", userData["rewardType"])
         msg.setResult("targets", task["targets"])
         msg.setResult("reward", {"name": task["chestReward"], "count": 1})
         GameMsg.sendMsg(msg, userId)
Ejemplo n.º 13
0
def getAllTabs(userId):
    """
    获取所有可以显示的排行榜
    """
    confs = []
    isVerLimit = util.isVersionLimit(userId)  # 是否是提审版本
    lang = util.getLanguage(userId)
    rankRewardConf = config.getAllRankConfs()
    # rankRewardConf = OrderedDict(sorted(rankRewardConf.iteritems(), key=lambda d: d[1]["order"]))
    # for rankType, conf in rankRewardConf.iteritems():
    #     if (isVerLimit is False or conf.get("reviewVerLimit", 0) == 0) and conf["visible"] and conf["showInCommon"]:
    #         confs.append({"rankType": int(rankType), "rankName": config.getMultiLangTextConf(str(conf["rankName"]), lang=lang)})
    for _tab in rankRewardConf.get("tabs"):
        ranks = []
        for _rankType in _tab["rankList"]:
            conf = rankRewardConf.get("ranks", {}).get(str(_rankType))
            if conf and (not isVerLimit or not conf.get("reviewVerLimit", 0)
                         ) and conf["visible"] and conf["showInCommon"]:
                ranks.append({
                    "rankType":
                    int(_rankType),
                    "rankName":
                    config.getMultiLangTextConf(str(conf["rankName"]),
                                                lang=lang)
                })
        if ranks:
            confs.append({
                "tabName":
                config.getMultiLangTextConf(str(_tab["tabName"]), lang=lang),
                "ranks":
                ranks
            })
    return confs
Ejemplo n.º 14
0
def vipAutoSupplyPerDay(userId):
    """
    vip每日自动补足
    """
    vipLevel = hallvip.userVipSystem.getVipInfo(userId).get("level", 0)
    key = GameData.autoSupplyKey % config.CHIP_KINDID
    autoSupplyCount = config.getVipConf(vipLevel).get(key, 0)
    chips = userchip.getUserChipAll(userId)
    if autoSupplyCount >= 10000 and chips < autoSupplyCount and weakdata.getDayFishData(
            userId, key, 0) == 0:
        weakdata.incrDayFishData(userId, key, 1)
        lang = util.getLanguage(userId)
        rewards = [{
            "name": config.CHIP_KINDID,
            "count": (autoSupplyCount - chips)
        }]
        message = config.getMultiLangTextConf(
            "ID_VIP_AUTO_SUPPLY_PER_DAY",
            lang=lang) % (autoSupplyCount / 10000)
        mail_system.sendSystemMail(userId,
                                   mail_system.MailRewardType.SystemReward,
                                   rewards, message)
    if ftlog.is_debug():
        ftlog.debug("vipAutoSupplyPerDay", userId, vipLevel, autoSupplyCount,
                    chips, key, autoSupplyCount - chips)
Ejemplo n.º 15
0
def _sendMailBySender(senderUserId, receiverUserId, type, reward=None, desc=None, title=None):
    """
    添加邮件到发件人发件箱
    :param senderUserId: 发件人
    :param receiverUserId: 收件人
    :param type: 邮件类型
    :param reward: 附件奖励
    :param desc: 邮件内容
    :param title: 标题
    """
    curTime = int(time.time())
    desc = desc or ""
    reward = reward or []
    title = title or ""
    mailOutId = gamedata.incrGameAttr(senderUserId, FISH_GAMEID, GameData.outMailId, 1)
    mailOutInfos = gamedata.getGameAttrJson(senderUserId, FISH_GAMEID, GameData.outMailInfos, [])
    receiverUserName = util.getNickname(receiverUserId)
    mailOutInfos.insert(0, {
        "id": mailOutId,
        "userId": receiverUserId,
        "time": curTime,
        "name": receiverUserName,
        "reward": reward,
        "type": type,
        "desc": desc,
        "title": title
    })
    mailOutInfos = _removeOutMailExpData(mailOutInfos, MAX_OUT_MAIL_COUNT)
    gamedata.setGameAttr(senderUserId, FISH_GAMEID, GameData.outMailInfos, json.dumps(mailOutInfos))
    if type == MailRewardType.Present:
        lang = util.getLanguage(senderUserId)
        message = config.getMultiLangTextConf("ID_PRESENT_TO_OTHER_MSG", lang=lang)
        message = message.format(receiverUserName, receiverUserId, util.buildRewardsDesc(reward, lang))
        GameMsg.sendPrivate(FISH_GAMEID, senderUserId, 0, message)
Ejemplo n.º 16
0
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)
Ejemplo n.º 17
0
def doReadFishNotice(userId, clientId, noticeId):
    """
    读通知
    """
    message = MsgPack()
    message.setCmd("fishNoticeRead")
    message.setResult("gameId", FISH_GAMEID)
    message.setResult("userId", userId)
    message.setResult("noticeId", noticeId)
    noticeConf = config.getNoticeConf(noticeId)
    vipLevel = int(hallvip.userVipSystem.getUserVip(userId).vipLevel.level)
    level = util.getActivityCheckLevel(userId)
    clientIdNum = util.getClientIdNum(userId, clientId)
    acTemplate = config.getActivityTemplateByClientIdNum(
        clientIdNum, util.getLanguage(userId, clientId))
    if noticeConf and noticeConf.get("enable", 0) and _isNoticeEnable(
            userId, acTemplate, noticeConf, vipLevel, level):
        noticeData = readNoticeById(userId, clientId, noticeConf)
        if noticeData:
            message.setResult("notice", noticeData)
            message.setResult("code", 0)
        else:
            message.setResult("code", ActivityErrorCode.OtherError)
    else:
        message.setResult("code", ActivityErrorCode.OtherError)
    router.sendToUser(message, userId)
Ejemplo n.º 18
0
def provideTimeMatchRankReward(userId, roomId, rank, rankRewards):
    """
    回馈赛上榜发放宝藏奖励到邮件
    """
    treasureConf = config.getTreasureConf(effectType=EffectType.MatchRankRewardAdd)
    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)
        ratio = levelConf["params"]["time_match"]
        for _reward in rankRewards:
            if _reward["name"] in config.BULLET_VALUE:
                name = config.BRONZE_BULLET_KINDID
                count = int(math.ceil(_reward["count"] * config.BULLET_VALUE[_reward["name"]] * ratio))
            else:
                name = _reward["name"]
                count = int(math.ceil(_reward["count"] * ratio))
            rewards.append({"name": name, "count": count})
        if rewards:
            matchName = config.getMultiLangTextConf(gdata.getRoomConfigure(roomId).get("name", ""), lang=lang)
            treasureName = config.getMultiLangTextConf(treasureConf["name"], lang=lang)
            message = config.getMultiLangTextConf("ID_CONFIG_TREASURE_TIME_MATCH_RANK", lang=lang)
            message = message.format(matchName, rank, level, treasureName)
            title = config.getMultiLangTextConf("ID_MAIL_TITLE_TREASURE_REWARD", lang=lang)
            mail_system.sendSystemMail(userId, mail_system.MailRewardType.TreasureReward, rewards, message, title)
            activeTreasure(userId, kindId, treasureData)
Ejemplo n.º 19
0
def provideFinishGrandPrixReward(userId):
    """
    完成大奖赛发放宝藏奖励到邮件
    """
    treasureConf = config.getTreasureConf(effectType=EffectType.MatchItemReward)
    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, _count in levelConf.get("params", {}).iteritems():
            rewards.append({"name": int(_kindId), "count": _count})
        if rewards:
            treasureName = config.getMultiLangTextConf(treasureConf["name"], lang=lang)
            message = config.getMultiLangTextConf("ID_CONFIG_TREASURE_FINISH_GRAND_PRIX", lang=lang).format(level,
                                                                                                            treasureName)
            title = config.getMultiLangTextConf("ID_MAIL_TITLE_TREASURE_REWARD", lang=lang)
            mail_system.sendSystemMail(userId, mail_system.MailRewardType.TreasureReward, rewards, message, title)
            activeTreasure(userId, kindId, treasureData)
Ejemplo n.º 20
0
    def doFTEnter(self, ftId, userId, seatId):
        ftlog.info("FishFriendTable.doFTEnter", "tableId=", self.tableId,
                   "ftId=", ftId, "seatId=", seatId)
        lang = util.getLanguage(userId)
        if ftId != self.ftId:
            raise TYBizException(
                1,
                config.getMultiLangTextConf("ID_INPUT_ROOMID_ERROR_INFO",
                                            lang=lang))

        player = self.getPlayer(userId)
        if player and player.userId:
            self.sendFriendDetails(userId)
        else:
            if self._expiresTimer:  # 重置桌子超时计时器
                self._expiresTimer.cancel()
                self._expiresTimer = None
            self._expiresTimer = FTLoopTimer(self._tableExpiresTime, 0,
                                             self._tableExpires)
            self._expiresTimer.start()
            self._doTableQuickStart(userId, seatId)  # 用户进入
            self.sendFriendDetails(userId)  # 发送对战详情信息
            if userId != self.ftTable.userId:  # 记录参与者Id
                self.otherId = userId
                fight_history.addOneHistory(userId, self.ftTable.userId,
                                            fight_history.HistoryType.Enter,
                                            self.ftId,
                                            self.ftTable.fee)  # 进入房间记录
        return 0
Ejemplo n.º 21
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.º 22
0
 def getCurrentGiftConf(self):
     """
     获取当前可显示礼包的配置
     """
     isIn, roomId, _, _ = util.isInFishTable(self.userId)
     if not isIn:
         return [], ""
     mode = util.getGiftDTestMode(self.userId)
     fishPool = util.getFishPoolByBigRoomId(util.getBigRoomId(roomId)[0])
     grade, nextGrade = self._getGrade(fishPool)  # 获取礼包档位
     giftAbcTestConf = config.getGiftAbcTestConf(self.clientId)
     giftListConf = giftAbcTestConf.get("data", {}).get(
         str(fishPool), {}).get(grade, {}).get("giftList",
                                               {}).get(mode, [])
     nextGiftListConf = giftAbcTestConf.get("data", {}).get(
         str(fishPool), {}).get(nextGrade, {}).get("giftList",
                                                   {}).get(mode, [])
     buyTimes = self._getBuyTimes(fishPool)
     recommonGift = []
     # 当前房间可以使用的破产礼包列表.
     for idx, giftGroup in enumerate(zip(giftListConf, nextGiftListConf)):
         if not set(self.availableGift) & set(giftGroup):  # 优先展示可领取的礼包
             continue
         if buyTimes - 1 != idx:
             continue
         for giftId in giftGroup:
             giftConf = giftAbcTestConf.get("gift", {}).get(str(giftId))
             if not giftConf:
                 continue
             recommonGift.append(giftConf)
     if ftlog.is_debug():
         ftlog.debug("BankruptGift_getCurrentGiftConf", fishPool,
                     giftListConf, nextGiftListConf, grade, nextGrade,
                     recommonGift)
     # 没有可领取礼包则按照已购买次数显示礼包.
     if not recommonGift:
         if 0 <= buyTimes < len(giftListConf):
             listConf2 = giftAbcTestConf.get("data", {}).get(
                 str(fishPool),
                 {}).get(nextGrade, {}).get("giftList", {}).get(mode, [])
             giftId1, giftId2 = giftListConf[buyTimes], listConf2[buyTimes]
             recommonGift = [
                 giftAbcTestConf.get("gift", {}).get(str(giftId1)),
                 giftAbcTestConf.get("gift", {}).get(str(giftId2))
             ]
     lang = util.getLanguage(self.userId, self.clientId)
     remainTimes = max(0, len(giftListConf) - buyTimes)
     if recommonGift:
         gamedata.setGameAttr(self.userId, FISH_GAMEID,
                              GameData.bankruptGiftInfo,
                              json.dumps([fishPool, grade, nextGrade]))
         tip = config.getMultiLangTextConf("ID_BANKRUPT_GIFT_TIP",
                                           lang=lang).format(remainTimes)
     else:
         tip = ""
     return recommonGift, tip
Ejemplo n.º 23
0
def readNoticeById(userId, clientId, noticeConf):
    """
    读活动
    """
    noticeId = noticeConf["Id"]
    readNotice = _getNoticeReadInfo(userId)
    if noticeId in readNotice:
        return None
    readNotice.append(noticeId)
    _setNoticeReadInfo(userId, readNotice)
    updateUnReadNotice(userId, clientId, readNotice=readNotice)
    lang = util.getLanguage(userId, clientId)
    return _getNoticeInfo(noticeConf, lang, readNotice)
Ejemplo n.º 24
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.º 25
0
def getSectionTasksInfo(userId, sectionId=None):
    """
    获取该章节下的所有任务信息
    """
    sectionId = sectionId or gamedata.getGameAttrInt(userId, FISH_GAMEID,
                                                     GameData.currSectionId)
    tasks = []
    if sectionId:
        clientId = util.getClientId(userId)
        lang = util.getLanguage(userId)
        sectionConf = config.getMainQuestSectionConf(clientId, sectionId)
        for taskId in sectionConf["taskIds"]:
            taskDict = getTaskInfo(userId, clientId, taskId, lang)
            tasks.append(taskDict)
    return tasks
Ejemplo n.º 26
0
def _triggerUserVipExpChangeEvent(event):
    try:
        rmbs = int(event.toAddExp / 10)
        rewards = [{
            "name": config.SOUVENIR_KINDID,
            "count": int(RMB_SOUVENIR_RATE * rmbs)
        }]
        message = config.getMultiLangTextConf("ID_MAIL_SOUVENIR_COIN_MESSAGE",
                                              lang=util.getLanguage(
                                                  event.userId))
        mail_system.sendSystemMail(event.userId,
                                   mail_system.MailRewardType.SystemReward,
                                   rewards, message)
    except Exception as e:
        ftlog.error("souvenir_coin._triggerUserVipExpChangeEvent error", e,
                    "userId=", event.userId, "toAddExp=", event.toAddExp)
Ejemplo n.º 27
0
def sendMinigameInfo(roomId, userId, mode):
    """
    发送小游戏信息
    """
    bigRoomId, _ = util.getBigRoomId(roomId)
    subkey = "%s_%d" % (bigRoomId, mode)
    mgType = config.getSuperBossCommonConf().get(str(subkey), {}).get("mgType", "")
    key = "%s_%d" % (mgType, mode)
    mo = MsgPack()
    mo.setCmd("superboss_minigame_info")
    mo.setResult("gameId", FISH_GAMEID)
    mo.setResult("userId", userId)
    mo.setResult("roomId", roomId)
    mo.setResult("mode", mode)
    mo.setResult("type", mgType)
    data = {}
    if mgType in MINIGAME_TYPE_LIST:
        conf = config.getSuperBossMiniGameConf()
        superbossPlayedTimes = weakdata.getDayFishData(userId, WeakData.superbossMGPlayedTimes, {})
        playedTimes = superbossPlayedTimes.get(key, 0)
        vipLevel = hallvip.userVipSystem.getUserVip(userId).vipLevel.level
        maxTimesList = conf.get("info", {}).get(key, {}).get("maxTimes", [])
        maxTimes = maxTimesList[vipLevel] if maxTimesList and len(maxTimesList) > vipLevel else 0
        remainTimes = max(0, maxTimes - playedTimes) if maxTimes >= 0 else -1
        currencyList = conf.get("info", {}).get(key, {}).get("currencyList", [])
        items = config.rwcopy(conf.get("game", {}).get(key, []))
        gunLevelVal = util.getGunLevelVal(userId, config.MULTIPLE_MODE)
        lang = util.getLanguage(userId)
        itemsinfo = []
        for item in items:
            if gunLevelVal >= item["level"]:
                item["des"] = config.getMultiLangTextConf(item["des"], lang=lang) if item["des"] else ""
                itemsinfo.append(item)
        if mgType == "box":
            for iteminfo in itemsinfo:
                rewards = iteminfo["rewards"]
                groupIdx = util.selectIdxByWeight([int(reward.keys()[0]) for reward in rewards])
                iteminfo["rewards"] = rewards[groupIdx].values()[0]
                iteminfo["groupIdx"] = groupIdx
        mo.setResult("showItemsList", currencyList)
        data = {"remainTimes": remainTimes, "items": itemsinfo}
    else:
        ftlog.warn("minigame, type error, userId =", userId, "roomId =", roomId, "mode =", mode, "mgType =", mgType)
    mo.setResult("data", data)
    router.sendToUser(mo, userId)
    if ftlog.is_debug():
        ftlog.debug("minigame, userId =", userId, "mode =", mode, "mo =", mo)
Ejemplo n.º 28
0
def getAllNotice(userId, clientId):
    """
    获取所有开启活动的信息
    """
    noticeConfigs = _getAllNoticeConfigs(userId, clientId)
    readNotice = _getNoticeReadInfo(userId)
    ftlog.debug()
    noticeInfos = []
    lang = util.getLanguage(userId, clientId)
    ftlog.debug("getAllNotice->noticeInfos =", noticeConfigs)
    for noticeConf in noticeConfigs:
        noticeInfo = _getNoticeInfo(noticeConf, lang, readNotice)
        noticeInfos.append(noticeInfo)

    ftlog.debug("getAllNotice->noticeInfos =", noticeInfos)
    updateUnReadNotice(userId, clientId, noticeInfos)
    return noticeInfos
Ejemplo n.º 29
0
def _triggerTYOpenItemEvent(event):
    userId = event.userId
    itemKind = event.item.itemKind
    lang = util.getLanguage(userId)
    for key, value in config.getChestConf().iteritems():
        if value["kindId"] == itemKind.kindId:
            from hall.entity import halluser
            from hall.entity.todotask import TodoTaskShowInfo, TodoTaskHelper
            from newfish.entity import mail_system
            message = config.getMultiLangTextConf("ID_OPEN_ITEM_GET_REWARD_MSG", lang=lang) % value["name"]
            GameMsg.sendPrivate(FISH_GAMEID, userId, 0, message)
            todoTask = TodoTaskShowInfo(message)
            TodoTaskHelper.sendTodoTask(FISH_GAMEID, userId, todoTask)
            halluser.ensureGameDataExists(userId, FISH_GAMEID, util.getClientId(userId))
            message = config.getMultiLangTextConf("ID_USE_ITEM_GET_REWARD_MSG", lang=lang).format(itemKind.displayName, value["name"])
            rewards = [{"name": value["chestId"], "count": 1}]
            mail_system.sendSystemMail(userId, mail_system.MailRewardType.ChestReward, rewards, message)
            break
Ejemplo n.º 30
0
 def doGiveup(self, userId):
     if self._logger.isDebug():
         self._logger.debug("doGiveup", "userId=", userId)
     mo = MsgPack()
     mo.setCmd("m_giveup")
     mo.setResult("gameId", self.gameId)
     mo.setResult("roomId", self.roomId)
     mo.setResult("userId", userId)
     lang = util.getLanguage(userId)
     try:
         if self.match.giveup(userId):
             mo.setResult("giveup", 1)
         else:
             # mo.setResult("error", {"code": -1, "info": "不能退出比赛"})
             mo.setResult("error", {"code": -1, "info": config.getMultiLangTextConf("ID_MATCH_FORBID_GIVE_UP", lang=lang)})
     except:
         mo.setResult("error", {"code": -1, "info": config.getMultiLangTextConf("ID_MATCH_FORBID_GIVE_UP", lang=lang)})
     router.sendToUser(mo, userId)