def _getSurpassTarget(self):
     """
     获取要超越的玩家数据
     """
     timestamp = pktimestamp.getCurrentTimestamp()
     rankClass = RankingBase(self.userId,
                             RankType.TodayGrandPrix,
                             RankDefineIndex.GrandPrix,
                             clientId=None,
                             httpRequest=False)
     if rankClass:
         rankingList = rankClass.getTopNRankUsers(timestamp)
         surpassTarget = config.getGrandPrixConf(
             "surpassTarget")  # [100、80、... 3、2、1]
         masterSurpassTargets = []
         for rank in surpassTarget:
             idx = rank - 1
             if 0 <= idx < len(rankingList.rankingUserList):
                 player = rankingList.rankingUserList[idx]
                 name = util.getNickname(player.userId)
                 avatar = userdata.getAttr(player.userId, "purl")
                 masterSurpassTargets.append({
                     "userId": player.userId,
                     "name": name,
                     "score": player.score,
                     "rank": player.rank + 1,
                     "avatar": avatar
                 })
         self._rankListCache = masterSurpassTargets
Example #2
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)
Example #3
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
 def getRankList(self, userId):
     ranks = []
     score = 0
     rank = 0
     rewards = []
     ownPlayer = [player for player in self.matchMaster.rankList if player.userId == userId]
     if ownPlayer:
         player = ownPlayer[0]
         score = player.score
         rank = player.rank
         rankRewards = self._getRewards(player.rank)
         if rankRewards:
             rewards = TimeMatch.buildRewards(rankRewards)
     name = util.getNickname(userId)
     sex, avatar = userdata.getAttrs(userId, ["sex", "purl"])
     ranks.append({
         "userId": userId,
         "name": name,
         "sex": sex,
         "score": score,
         "rank": rank,
         "avatar": avatar,
         "vip": util.getVipShowLevel(userId),
         "rewards": rewards
     })
     if not self.matchMaster.rankListCache:
         for player in self.matchMaster.rankList[:50]:
             name = util.getNickname(player.userId)
             sex, avatar = userdata.getAttrs(player.userId, ["sex", "purl"])
             rankRewards = self._getRewards(player.rank)
             rewards = []
             if rankRewards:
                 rewards = TimeMatch.buildRewards(rankRewards)
             self.matchMaster.rankListCache.append({
                 "userId": player.userId,
                 "name": name,
                 "sex": sex,
                 "score": player.score,
                 "rank": player.rank,
                 "avatar": avatar,
                 "vip": util.getVipShowLevel(player.userId),
                 "rewards": rewards
             })
     ranks.extend(self.matchMaster.rankListCache)
     return ranks
Example #5
0
def getShareTaskInfo(userId):
    """
    获取分享有礼信息
    """
    shareGroupIds = weakdata.getDayFishData(userId, "shareGroupIds", [])
    shareGroupTotalCount = config.getCommonValueByKey("shareGroupTotalCount")
    shareGroupCurrentCount = min(len(shareGroupIds), shareGroupTotalCount)
    groupTask = {
        "taskId": 0,
        "progress": [shareGroupCurrentCount, shareGroupTotalCount], # 分享群数/总数
        "rewards": config.getCommonValueByKey("shareGroupRewards"),
        "state": weakdata.getDayFishData(userId, "shareGroupReward", 0)
    }
    if groupTask["state"] == 0 or util.isVersionLimit(userId):
        module_tip.cancelModuleTipEvent(userId, "invite", 0)
    inviteTasks = []
    inviteList = refreshInviteData(userId)
    for _, inviteData in enumerate(inviteList):
        name = util.getNickname(inviteData["userId"])
        avatar = userdata.getAttr(inviteData["userId"], "purl")
        if inviteData.get("isAppUser", 0) == 1:
            continue
        if inviteData.get("isNewUser"):
            rewards = config.getCommonValueByKey("newUserInviteFriendRewards")
        else:
            rewards = config.getCommonValueByKey("inviteFriendRewards")
        task = {
            "taskId": inviteData["inviteId"],
            "name": name,
            "avatar": avatar,
            "vip": hallvip.userVipSystem.getUserVip(userId).vipLevel.level,
            "state": 2 if inviteData.get("receiveTime") else 1,
            "rewards": rewards
        }
        inviteTasks.append(task)
    inviteCount = weakdata.getDayFishData(userId, "inviteCount", 0)
    inviteTotalCount = config.getCommonValueByKey("inviteLimitCount", 99999)
    inviteCount = min(inviteCount, inviteTotalCount)
    friendTask = {
        "progress": [inviteCount, inviteTotalCount],
        "rewards": config.getCommonValueByKey("inviteFriendRewards"),
        "newUserRewards": config.getCommonValueByKey("newUserInviteFriendRewards"),
        "tasks": inviteTasks
    }
    message = MsgPack()
    message.setCmd("share_task_info")
    message.setResult("gameId", FISH_GAMEID)
    message.setResult("userId", userId)
    if not util.isVersionLimit(userId):
        message.setResult("groupTask", groupTask)
    message.setResult("friendTask", friendTask)
    router.sendToUser(message, userId)
Example #6
0
 def getUserInfo(self, userId):
     curTime = int(time.time())
     # 存储的额外数据太多了清理一下
     if len(self.userInfoMap) >= 200:
         self.userInfoMap.clear()
         self.userInfoCacheTime.clear()
     # 没有数据或缓存时间过长重新获取数据.
     if self.userInfoMap.get(
             userId, None) is None or curTime - self.userInfoCacheTime.get(
                 userId, 0) >= 60:
         name = util.getNickname(userId)
         sex, purl = userdata.getAttrs(userId, ["sex", "purl"])
         self.userInfoMap[userId] = (name, sex, purl)
         self.userInfoCacheTime[userId] = curTime
     return self.userInfoMap.get(userId)
Example #7
0
def addOneHistory(userId, otherUserId, type, ftId, rewards=None):
    ftlog.debug("addOneHistory->", userId, otherUserId, type, rewards)
    curTime = int(time.time())
    desc = ""
    rewards = rewards or []
    otherUserId = otherUserId or 0

    # 添加对战详情到发件人发件箱
    if userId > 10000:
        otherUserName = ""
        if otherUserId:
            otherUserName = util.getNickname(otherUserId)
        # if type == HistoryType.CreatRoom:
        #     if rewards:
        #         desc = u"创建了奖励为%s的竞技房间" % (getRewardDesc(rewards))
        #     else:
        #         desc = "创建了竞技房间"
        # elif type == HistoryType.Unbind:
        #     if rewards:
        #         desc = u"解散了奖励为%s的竞技房间" % (getRewardDesc(rewards))
        #     else:
        #         desc = "解散了房间"
        # elif type == HistoryType.Win:
        #     if rewards:
        #         desc = u"在和%s(账号:%d)的竞技中获得第1名,赢了%s" % (otherUserName, otherId, getRewardDesc(rewards))
        #     else:
        #         desc = u"在和%s(账号:%d)的竞技中获得第1名" % (otherUserName, otherId)
        # elif type == HistoryType.Lose:
        #     desc = u"在和%s(账号:%d)的竞技中获得第2名" % (otherUserName, otherId)

        historyId = gamedata.incrGameAttr(userId, FISH_GAMEID,
                                          GameData.fightHistoryId, 1)
        historyInfos = gamedata.getGameAttrJson(userId, FISH_GAMEID,
                                                GameData.fightHistory, [])

        historyInfos.append({
            "id": historyId,
            "userId": otherUserId,
            "time": curTime,
            "name": otherUserName,
            "reward": rewards,
            "type": type,
            "ftId": ftId,
            "desc": desc
        })
        historyInfos = _removeHistoryExpData(historyInfos, 50)
        gamedata.setGameAttr(userId, FISH_GAMEID, GameData.fightHistory,
                             json.dumps(historyInfos))
Example #8
0
def notifyInspireInfo(roomId, teamId, ratio, remainTime, purchaserUid,
                      interval, lv):
    """
    通知购买鼓舞礼包
    """
    room = gdata.rooms()[roomId]
    ftlog.debug("notifyInspireInfo, ", roomId, teamId, ratio, remainTime,
                room.maptable.keys() if room else [])
    # for table in room.maptable.values():
    #     if table.playersNum:
    #         table.notifyInspireInfo(teamId, ratio, remainTime)
    name = util.getNickname(purchaserUid)
    avatar = userdata.getAttr(purchaserUid, "purl")
    ledTxt = {}
    from newfish.entity.fishactivity import competition_activity
    mo = MsgPack()
    mo.setCmd("comp_act_notify")
    mo.setResult("gameId", FISH_GAMEID)
    mo.setResult("teamId", teamId)
    mo.setResult("teamInspireBuf", (ratio, remainTime, lv))
    actState, actStateRemainTime = competition_activity._getCompStateAndRemainTime(
    )
    mo.setResult("actState", actState)
    mo.setResult("actStateRemainTime", actStateRemainTime)
    mo.setResult("avatar", avatar)
    mo.setResult("name", name)
    mo.setResult("interval", interval)
    for lang in util.getAllLanguage():
        teamName = config.getMultiLangTextConf("ID_COMPACT_TEAM_%d" %
                                               (teamId + 1),
                                               lang=lang)
        led = config.getMultiLangTextConf("ID_COMPACT_LED", lang=lang).format(
            name, teamName, interval)
        ledTxt[lang] = led
    for _uid in room._allPlayerDict.keys():
        if competition_activity._getCompTeamId(_uid) == teamId:
            lang = util.getLanguage(_uid)
            mo.setResult("led", ledTxt.get(lang, ""))
            GameMsg.sendMsg(mo, _uid)
            ftlog.debug("notifyInspireInfo, userId =", _uid, "teamId =",
                        teamId, "mo =", mo)
    return 1
Example #9
0
def sendMailToReceiver(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 ""
    mailSendId = gamedata.incrGameAttr(receiverUserId, FISH_GAMEID, GameData.mailId, 1)
    # 邮件的有效期
    mailSenderType = MailSenderType.MT_SYS if senderUserId == config.ROBOT_MAX_USER_ID else MailSenderType.MT_USERS
    expireTs = curTime + _getMailExpireTime(mailSenderType)
    # 邮件数据存储key(系统邮件、玩家邮件)
    mailKey = GameData.mailInfos if senderUserId == config.ROBOT_MAX_USER_ID else GameData.userMailInfos
    mailInfos = gamedata.getGameAttrJson(receiverUserId, FISH_GAMEID, mailKey, [])
    senderUserName = util.getNickname(senderUserId)
    mailInfos.insert(0, {
        "id": mailSendId,
        "userId": senderUserId,
        "time": curTime,
        "expireTime": expireTs,
        "name": senderUserName,
        "reward": reward,
        "type": type,
        "desc": desc,
        "state": MailState.Default,
        "title": title
    })
    mailInfos = _removeMailExpData(mailInfos, MAIL_DISPLAY_COUNT)
    gamedata.setGameAttr(receiverUserId, FISH_GAMEID, mailKey, json.dumps(mailInfos))
    _dealTips(receiverUserId, mailInfos, mailSenderType)
    if type == MailRewardType.Present:
        lang = util.getLanguage(receiverUserId)
        message = config.getMultiLangTextConf("ID_ACCEPT_PRESENT_MSG", lang=lang)
        message = message.format(senderUserName, senderUserId, util.buildRewardsDesc(reward, lang))
        GameMsg.sendPrivate(FISH_GAMEID, receiverUserId, 0, message)
Example #10
0
def sendUserNewLed(userId, clientId):
    """发送新手Led"""
    import random
    from hall.entity import hallranking
    import time
    from newfish.entity.config import FISH_GAMEID
    from poker.entity.dao import gamedata
    from newfish.entity.redis_keys import GameData
    from newfish.entity import util
    if gamedata.getGameAttrInt(userId, FISH_GAMEID,
                               GameData.hasSendUserNewLed) == 0:
        lang = util.getLanguage(userId, clientId)
        names = config.getRobotConf("names")
        name = random.choice(names)
        msg_1 = config.getMultiLangTextConf("ID_LED_NEWBIE_TASK_1",
                                            lang=lang) % name
        msg_3 = config.getMultiLangTextConf("ID_LED_NEWBIE_TASK_4",
                                            lang=lang) % name
        msg_4 = config.getMultiLangTextConf("ID_LED_NEWBIE_TASK_6",
                                            lang=lang) % name
        msg_5 = config.getMultiLangTextConf("ID_LED_NEWBIE_TASK_7",
                                            lang=lang) % name
        rankingList = hallranking.rankingSystem.getTopN(
            config.RANK_MATCH_WZZB, 1, int(time.time()))
        if rankingList and len(rankingList.rankingUserList) > 0:
            user = rankingList.rankingUserList[0]
            name = util.getNickname(user.userId)
        msg_2 = config.getMultiLangTextConf("ID_LED_NEWBIE_TASK_2",
                                            lang=lang) % name
        mo = MsgPack()
        mo.setCmd("sendUserNewLed")
        mo.setResult("gameId", FISH_GAMEID)
        mo.setResult("userId", userId)
        mo.setResult("msg_1", msg_1)
        mo.setResult("msg_2", msg_2)
        mo.setResult("msg_3", msg_3)
        mo.setResult("msg_4", msg_4)
        mo.setResult("msg_5", msg_5)
        router.sendToUser(mo, userId)
        gamedata.setGameAttr(userId, FISH_GAMEID, GameData.hasSendUserNewLed,
                             json.dumps(1))
Example #11
0
def doGetUserInfo(userId, otherUserId, kindId):
    """
    :param kindId: 赠送的道具ID
    """
    userdata.checkUserData(otherUserId)
    name = util.getNickname(otherUserId)
    sex, purl, charm = userdata.getAttrs(otherUserId, ["sex", "purl", "charm"])
    vipLv = util.getVipShowLevel(otherUserId)
    level = util.getUserValidCheckLevel(otherUserId)
    honors = honor_system.getHonorList(otherUserId)
    _, leftReceiveCount = _isCanReceiveFromOther(otherUserId, kindId)
    code = 0
    if name is None or name == "" or not level or level == 0:
        code = 1
    if otherUserId in config.getPublic("banGiftList", []):
        code = 1
    name = str(name) if name else ""
    message = MsgPack()
    message.setCmd("fishUserInfo")
    message.setResult("gameId", FISH_GAMEID)
    message.setResult("userId", userId)
    if code == 0:
        userInfos = {
            "userId": otherUserId,
            "name": name,
            "sex": sex,
            "purl": purl,
            "level": level,
            "vipLv": vipLv,
            "charm": charm,
            "honors": honors,
            "leftReceiveCount": leftReceiveCount
        }
        message.setResult("userInfos", userInfos)
    message.setResult("code", code)
    router.sendToUser(message, userId)
Example #12
0
def getGameInfo(userId, clientId):
    """
    获取玩家的游戏数据
    """
    from newfish.entity import user_system
    ukeys = getInitDataKeys()
    uvals = gamedata.getGameAttrs(userId, FISH_GAMEID, ukeys)
    uvals = list(uvals)
    values = getInitDataValues()
    for x in xrange(len(uvals)):
        if uvals[x] is None:
            uvals[x] = values[x]
    gdata = dict(zip(ukeys, uvals))
    gdata["name"] = util.getNickname(userId)
    gdata["userGuideStep"] = gamedata.getGameAttrJson(userId, FISH_GAMEID,
                                                      GameData.userGuideStep,
                                                      [])
    redState = gamedata.getGameAttrInt(userId, FISH_GAMEID, GameData.redState)
    gdata["redState"] = redState
    gdata["giftState"] = newbie_7days_gift.checkNewbie7DaysGiftState(
        userId, redState)
    # 是否可以领取启航礼包(1:是 0:否)
    # gdata["sailGiftState"] = 1 if gift_system.SailGift(userId, clientId).getGiftInfo() else 0
    gdata["surpriseGift"] = weakdata.getDayFishData(userId,
                                                    GameData.surpriseGift, 0)
    gdata["exchangeCount"] = gamedata.getGameAttrInt(userId, FISH_GAMEID,
                                                     GameData.exchangeCount)
    gdata["nowServerTime"] = time.time()
    gdata["isAdult"] = user_system.isAdult(userId)

    # 是否为v2版本老玩家(1:是 0:否)
    isOldPlayerV2 = gamedata.getGameAttr(userId, FISH_GAMEID,
                                         GameData.isOldPlayerV2)
    if isOldPlayerV2 is None:
        isOldPlayerV2 = 0
        clientVersion = gamedata.getGameAttr(userId, FISH_GAMEID,
                                             GameData.clientVersion)
        if redState:
            isOldPlayerV2 = 1
        elif clientVersion and StrictVersion(
                str(clientVersion)) < StrictVersion("3.0.0"):
            isOldPlayerV2 = 1
            gamedata.setGameAttr(userId, FISH_GAMEID, GameData.redState, 1)
        gamedata.setGameAttr(userId, FISH_GAMEID, GameData.isOldPlayerV2,
                             isOldPlayerV2)
        v2DataTov3Data(userId, clientId)
    gdata["isOldPlayerV2"] = isOldPlayerV2

    # 当前技能页面显示的模式,老玩家默认为经典模式(0:经典 1:千炮)
    skillMode = gamedata.getGameAttr(userId, FISH_GAMEID, GameData.skillMode)
    if skillMode is None:
        skillMode = config.CLASSIC_MODE if isOldPlayerV2 else config.MULTIPLE_MODE
        gamedata.setGameAttr(userId, FISH_GAMEID, GameData.skillMode,
                             skillMode)
    gdata["skillMode"] = skillMode

    # 当前炮台页显示的模式,老玩家默认为经典模式(0:经典 1:千炮)
    gunMode = gamedata.getGameAttr(userId, FISH_GAMEID, GameData.gunMode)
    if gunMode is None:
        gunMode = config.CLASSIC_MODE if isOldPlayerV2 else config.MULTIPLE_MODE
        gamedata.setGameAttr(userId, FISH_GAMEID, GameData.gunMode, gunMode)
    gdata["gunMode"] = gunMode

    exp, level = gamedata.getGameAttrs(userId, FISH_GAMEID,
                                       [GameData.exp, GameData.level])
    exp = exp or 0
    level = level or 1
    _, expPct = util.getUserLevelExpData(userId, level, exp)
    gdata["level"] = level
    gdata["expPct"] = expPct
    return gdata