Example #1
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)
Example #2
0
def convertItem(roomId, idx, count, userId, mode):
    """
    兑换
    """
    bigRoomId, _ = util.getBigRoomId(roomId)
    key = "%s_%d" % (bigRoomId, mode)
    mgType = config.getSuperBossCommonConf().get(str(key),
                                                 {}).get("mgType", "")
    code, rewards, info = _exchange(userId, mgType, mode, idx, count)
    mo = MsgPack()
    mo.setCmd("superboss_convert")
    mo.setResult("gameId", FISH_GAMEID)
    mo.setResult("userId", userId)
    mo.setResult("roomId", roomId)
    mo.setResult("code", code)
    mo.setResult("idx", idx)
    mo.setResult("mode", mode)
    mo.setResult("count", count)
    mo.setResult("info", info)
    mo.setResult("rewards", rewards)
    router.sendToUser(mo, userId)
    if code == 0:
        sendConvertInfo(roomId, userId, mode)
        mgType = config.getSuperBossCommonConf().get(str(key),
                                                     {}).get("mgType", "")
        checkModuleTip(mgType, userId, mode)
Example #3
0
def sendMiniGameProgress(table, userId, roomId):
    """
    发送断线重连后发送进度信息
    """
    roomData = getRoomMinigame(roomId, userId)
    bigRoomId, _ = util.getBigRoomId(roomId)
    if roomData and roomData.get("current", {}):
        locs = roomData.get("current", {}).get("locs", [])
        reward = roomData.get("current", {}).get("reward", [])
        msgRet = MsgPack()
        # 还没有翻完硬币/还未选择箱子
        if len(locs) < len(reward):
            msgRet = MsgPack()
            msgRet.setCmd("mini_game_continue")
            msgRet.setResult("gameState", 1)
            msgRet.setResult("gameId", FISH_GAMEID)
            msgRet.setResult("userId", userId)
            cardId = roomData.get("current", {}).get("cardId", 0)
            msgRet.setResult("locs", locs)
            msgRet.setResult("cardId", cardId)
            msgRet.setResult("reward", reward)
            totalWinCount = roomData.get("current", {}).get("totalWin", 0)
            msgRet.setResult("totalWin", [{
                "name": 101,
                "count": totalWinCount
            }])
        # 已经选择了箱子,但是还没点击转盘抽奖
        elif len(locs) == len(reward):
            msgRet.setCmd("mini_game_continue")
            msgRet.setResult("gameState", 2)
            msgRet.setResult("gameId", FISH_GAMEID)
            msgRet.setResult("userId", userId)
        GameMsg.sendMsg(msgRet, table.getBroadcastUids())
Example #4
0
def triggerWinCmpttTaskEvent(event):
    """
    夺宝赛获奖事件
    """
    bigRoomId, _ = util.getBigRoomId(event.roomId)
    fishPool = util.getFishPoolByBigRoomId(bigRoomId)
    userId = event.userId
    _incQuestValue(userId, TaskType.WinTask, 1, fishPool=fishPool)
Example #5
0
def getRoomMinigame(roomId, userId):
    """
    获取小游戏数据
    """
    bigRoomId, _ = util.getBigRoomId(roomId)
    miniGameData = gamedata.getGameAttrJson(userId, FISH_GAMEID, "miniGame",
                                            {})
    return miniGameData.get(str(bigRoomId))
Example #6
0
 def __init__(self, table, player, miniGameId):
     self.miniGameId = miniGameId
     self.table = table
     self.bigRoomId, _ = util.getBigRoomId(table.roomId)
     self.player = player
     self.conf = config.getMiniGameConf(miniGameId)
     self.minWeaponId = self.conf["minWeaponId"]
     self.minChip = self.conf["minChip"]
Example #7
0
def triggerWinBonusTaskEvent(event):
    """
    奖金赛获奖事件
    """
    bigRoomId, _ = util.getBigRoomId(event.roomId)
    fishPool = util.getFishPoolByBigRoomId(bigRoomId)
    userId = event.userId
    rank = event.rank
    _incQuestValue(userId, TaskType.WinTask, 1, fishPool=fishPool)
Example #8
0
def triggerFireEvent(event):
    """
    开火事件
    """
    bigRoomId, _ = util.getBigRoomId(event.roomId)
    fishPool = util.getFishPoolByBigRoomId(bigRoomId)
    fpMultiple = event.fpMultiple if hasattr(event, "fpMultiple") else 0
    userId = event.userId
    _incQuestValue(userId, TaskType.FireNum, 1, fishPool=fishPool, fpMultiple=fpMultiple)
Example #9
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
Example #10
0
def triggerUseSkillEvent(event):
    """
    使用技能事件
    """
    bigRoomId, _ = util.getBigRoomId(event.roomId)
    fishPool = util.getFishPoolByBigRoomId(bigRoomId)
    fpMultiple = event.fpMultiple if hasattr(event, "fpMultiple") else 0
    userId = event.userId
    skillId = event.skillId
    _incQuestValue(userId, TaskType.SkillUseNum, 1, fishPool=fishPool, fpMultiple=fpMultiple)
Example #11
0
def triggerEnterTableEvent(event):
    """
    进入渔场事件(参加回馈赛)
    """
    if event.reconnect:
        return
    userId = event.userId
    bigRoomId, isMatch = util.getBigRoomId(event.roomId)
    if isMatch:
        _incQuestValue(userId, TaskType.EnterMatchTimes, 1)
    fishPool = util.getFishPoolByBigRoomId(bigRoomId)
    _incQuestValue(userId, TaskType.EnterFishPool, 1, fishPool=fishPool)
Example #12
0
def miniGameStart(table, player, miniGameLevel, gunM=1):
    """
    开始小游戏
    """
    ret = {"reason": 0}
    bigRoomId, _ = util.getBigRoomId(table.roomId)
    addCard(table.roomId, player, gunM)
    miniGameData = gamedata.getGameAttrJson(player.userId, FISH_GAMEID,
                                            "miniGame", {})
    roomData = miniGameData.get(str(bigRoomId))
    if not roomData or roomData.get("cardNum", 0) == 0:
        ret["reason"] = 4
    elif roomData.get("current", {}):
        ret["reason"] = 5
    else:
        miniGameIds = config.getMiniGameLevelIds(miniGameLevel)
        if not miniGameIds:
            ret["reason"] = 6
        else:
            selected = random.choice(miniGameIds)
            if ftlog.is_debug():
                ftlog.debug("miniGameStart", player.userId, miniGameIds,
                            selected, config.miniGameConf,
                            config.miniGameLevelMap)
            conf = config.getMiniGameConf(selected)
            if player.clip * player.fpMultiple + player.tableChip < conf[
                    "minChip"]:
                if ftlog.is_debug():
                    ftlog.debug("miniGameStart chip not enough", player.userId,
                                player.chip, conf["minChip"])
                ret["reason"] = 2
            elif "minWeaponId" in conf and player.gunLevel < conf[
                    "minWeaponId"]:
                if ftlog.is_debug():
                    ftlog.debug("miniGameStart gunLevel not enough",
                                player.userId, player.gunLevel,
                                conf["minWeaponId"])
                ret["reason"] = 1
            elif "minUserLevel" in conf and player.level < conf["minUserLevel"]:
                if ftlog.is_debug():
                    ftlog.debug("miniGameStart minUserLevel not enough",
                                player.userId, player.level,
                                conf["minUserLevel"])
                ret["reason"] = 3
            else:
                ret["cardId"] = selected
                miniGame = createMiniGame(selected, table, player)
                startRet = miniGame.start()
                ret.update(startRet)
    return ret
Example #13
0
def playMinigameShow(roomId, userId, idx, mode, userIds):
    """
    巨龙转盘展示盘面
    """
    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_show")
    mo.setResult("gameId", FISH_GAMEID)
    mo.setResult("userId", userId)
    mo.setResult("roomId", roomId)
    mo.setResult("mode", mode)
    mo.setResult("idx", idx)
    mo.setResult("type", mgType)
    data = {}
    code = 1
    gainItems = []
    if mgType == "dragon":
        superbossPlayedTimes = weakdata.getDayFishData(userId, WeakData.superbossMGPlayedTimes, {})
        playedTimes = superbossPlayedTimes.setdefault(key, 0)
        conf = config.getSuperBossMiniGameConf()
        vipLevel = hallvip.userVipSystem.getUserVip(userId).vipLevel.level
        maxTimesList = conf.get("info", {}).get(key, {}).get("maxTimes", [])
        isCanPlay = True
        items = conf.get("game", {}).get(key, [])
        maxTimes = maxTimesList[vipLevel] if maxTimesList and len(maxTimesList) > vipLevel else 0
        if 0 <= idx < len(items) and (maxTimes == -1 or maxTimes > playedTimes) and isCanPlay:
            costItems = items[idx]["costs"]
            gainItems = items[idx]["rewards"]
            for _val in costItems:
                if util.balanceItem(userId, _val["name"]) < _val["count"]:
                    code = 2
                    break
            else:
                code = 0
        turntable_rewards = []
        if code == 0:
            for gainItem in gainItems:
                for key in gainItem.keys():
                    if key == "count":
                        turntable_rewards.append(gainItem[key])
            data["turntable_rewards"] = turntable_rewards
            mo.setResult("data", data)
    mo.setResult("code", code)
    userIds.append(userId)
    GameMsg.sendMsg(mo, userIds)
Example #14
0
 def spin(self, weightList, fpMultiple):
     """
     转动轮盘
     """
     fishPool = str(self.fishPool)
     prizeConf = self.getPrizeConf(fishPool, fpMultiple)
     pwData = self._getData(fishPool, fpMultiple)
     try:
         # 获取轮盘结果
         idx = util.selectIdxByWeight(weightList)
         rewards = prizeConf["wheel"][idx]["rewards"]
         ratioList = self._buildRetData(fishPool, fpMultiple, rewards)
         pwData[PWValueSlot.RET] = ratioList
     except:
         code = 1
         self._resetPrizeWheelState(fishPool, fpMultiple)
         ftlog.error("prize_wheel, userId =", self.userId)
         return code
     else:
         code = 0
         _idx = len(pwData[PWValueSlot.TAKEN])
         if _idx >= len(self.pwConf["energy"]):
             _idx = -1
         pwData[PWValueSlot.TAKEN].append(idx)
         # 扣除可用抽奖次数.
         if not self.isEnergyStorageMode:
             pwData[PWValueSlot.SPINTIMES] = 0
         else:
             pwData[PWValueSlot.SPINTIMES] -= 1
             pwData[PWValueSlot.SPINTIMES] = max(
                 0, pwData[PWValueSlot.SPINTIMES])
         pwData[PWValueSlot.STATE] = PWState.NOT_TAKE_REWARD
         self.sendEnergyProgress(self.fishPool, fpMultiple, self.roomId, -1)
         # 给其他渔场充能
         addEnergy = self.pwConf["energy"][_idx].get(fishPool,
                                                     {}).get("add", {})
         for roomId, val in addEnergy.iteritems():
             roomId = int(roomId)
             bigRoomId, _ = util.getBigRoomId(roomId)
             fp = util.getFishPoolByBigRoomId(bigRoomId)
             if self._addEnergy(fp, fpMultiple, val):
                 self.sendEnergyProgress(fp, fpMultiple, roomId, val)
         self._setData(fishPool, fpMultiple)
         from newfish.game import TGFish
         event = PrizeWheelSpinEvent(self.userId, config.FISH_GAMEID,
                                     self.roomId)
         TGFish.getEventBus().publishEvent(event)
         return code
Example #15
0
def triggerEnterTableEvent(event):
    """
    进入渔场事件
    """
    if event.reconnect:
        return
    userId = event.userId
    bigRoomId, _ = util.getBigRoomId(event.roomId)
    if bigRoomId in range(44101, 44105):
        incrQuestTypeData(userId, QuestType.JoinMatch, 1)  # 进入回馈赛多少次
    if bigRoomId == 44102:
        incrQuestTypeData(userId, QuestType.EnterMatch44102, 1)
    elif bigRoomId == 44103:
        incrQuestTypeData(userId, QuestType.EnterMatch44103, 1)
    elif bigRoomId in [44301, 44302]:
        incrQuestTypeData(userId, QuestType.JoinRobbery, 1)  # 进入招财多少次
Example #16
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)
Example #17
0
def sendConvertInfo(roomId, userId, mode):
    """
    发送兑换信息
    """
    bigRoomId, _ = util.getBigRoomId(roomId)
    key = "%s_%d" % (bigRoomId, mode)
    mgType = config.getSuperBossCommonConf().get(str(key),
                                                 {}).get("mgType", "")
    mo = MsgPack()
    mo.setCmd("superboss_convert_info")
    mo.setResult("gameId", FISH_GAMEID)
    mo.setResult("userId", userId)
    mo.setResult("roomId", roomId)
    mo.setResult("mode", mode)
    showItemsList, exchangeItems = _getExchangeData(userId, mgType, mode)
    mo.setResult("showItemsList", showItemsList)
    mo.setResult("convertItems", exchangeItems)
    router.sendToUser(mo, userId)
Example #18
0
def addCard(roomId, player, gunM):
    """
    增加卡片数量
    """
    userId = player.userId
    bigRoomId, _ = util.getBigRoomId(roomId)
    miniGameData = gamedata.getGameAttrJson(userId, FISH_GAMEID, "miniGame",
                                            {})
    roomData = miniGameData.get(str(bigRoomId))
    if not roomData:
        roomData = {"cardNum": 0, "multi": 0, "roomId": bigRoomId}
        miniGameData[str(bigRoomId)] = roomData

    roomData["cardNum"] += 1
    roomData["multi"] = gunM
    gamedata.setGameAttr(userId, FISH_GAMEID, "miniGame",
                         json.dumps(miniGameData))
    player.cardNum = 1
    return roomData
Example #19
0
def triggerCatchEvent(event):
    """捕获事件"""
    bigRoomId, _ = util.getBigRoomId(event.roomId)
    typeName = util.getRoomTypeName(event.roomId)
    fishPool = util.getFishPoolByBigRoomId(bigRoomId)
    fpMultiple = event.fpMultiple if hasattr(event, "fpMultiple") else 0
    userId = event.userId
    fishTypes = event.fishTypes
    gain_chip = event.gainChip
    resetTime = event.resetTime
    gunX = event.gunX * event.gunSkinMul

    fish_boss_num = 0
    fish_multiple_num = 0
    terror_num = 0

    all_fish_num = len(fishTypes)
    for fishType in fishTypes:
        fishConf = config.getFishConf(fishType, typeName)
        if fishConf["type"] in config.BOSS_FISH_TYPE:                   # Boss
            fish_boss_num += 1
        elif fishConf["type"] in config.ROBBERY_BOSS_FISH_TYPE:         # 招财Boss
            fish_boss_num += 1
            all_fish_num -= 1
        elif fishConf["type"] in config.MULTIPLE_FISH_TYPE:             # 倍率鱼
            fish_multiple_num += 1
        elif fishConf["type"] in config.ROBBERY_MULTIPLE_FISH_TYPE:     # 招财倍率鱼
            fish_multiple_num += 1
            all_fish_num -= 1
        if fishConf["type"] in config.TERROR_FISH_TYPE:                 # 特殊鱼
            terror_num += 1
    if fish_boss_num:
        _incQuestValue(userId, TaskType.GunYBossFishNum, fish_boss_num, resetTime, fishPool=fishPool, fpMultiple=fpMultiple, gunX=gunX)
    if fish_multiple_num:
        _incQuestValue(userId, TaskType.GunYMultipleFishNum, fish_multiple_num, resetTime, fishPool=fishPool, fpMultiple=fpMultiple, gunX=gunX)
    if all_fish_num:
        _incQuestValue(userId, TaskType.GunYFishNum, all_fish_num, resetTime, fishPool=fishPool, fpMultiple=fpMultiple, gunX=gunX)
        _incQuestValue(userId, TaskType.FishNum, all_fish_num, resetTime, fishPool=fishPool, fpMultiple=fpMultiple)
    if gain_chip:
        _incQuestValue(userId, TaskType.CoinNum, gain_chip, resetTime, fishPool=fishPool, fpMultiple=fpMultiple)
    if terror_num:
        _incQuestValue(userId, TaskType.GunYTerrorFishNum, terror_num, resetTime, fishPool=fishPool, fpMultiple=fpMultiple, gunX=gunX)
        _incQuestValue(userId, TaskType.TerrorFishNum, terror_num, resetTime, fishPool=fishPool, fpMultiple=fpMultiple)
Example #20
0
def _triggerEnterTableEvent(event):
    """进入招财模式渔场"""
    if event.reconnect:
        return
    roomId, isMatch = util.getBigRoomId(event.roomId)
    _EnterRoomEvent(event.userId, roomId, isMatch)
Example #21
0
    def getInfo(self, fpMultiple, action=0):
        """
        获取轮盘数据
        """
        fishPool = str(self.fishPool)
        pwData = self._getData(fishPool, fpMultiple)
        code = 1

        mo = MsgPack()
        mo.setCmd("prize_wheel_info")
        mo.setResult("gameId", FISH_GAMEID)
        mo.setResult("userId", self.userId)
        mo.setResult("act", action)

        prizeConf = self.getPrizeConf(fishPool, fpMultiple)
        info = {}
        # 获取转盘奖励数据
        prizeList = []
        weightList = []
        info["prizeList"] = prizeList
        if self._enable(fishPool, fpMultiple):
            for idx, item in enumerate(prizeConf.get("wheel", [])):
                prizeList.append({
                    "name": item["rewards"]["name"],
                    "count": item["rewards"]["count"]
                })
                enable = 1 if idx not in pwData[PWValueSlot.TAKEN] else 0
                prizeList[-1].update({"enable": enable})
                weightList.append(item["rate"] if enable else 0)
            if action == 0:  # 查询
                code = 0
            elif action == 1 and prizeList and weightList and sum(weightList) \
                    and pwData[PWValueSlot.SPINTIMES] > 0 and pwData[PWValueSlot.STATE] == PWState.NOT_SPIN:    # 抽奖
                code = self.spin(weightList, fpMultiple)
            # 更新数据.
            pwData = self._getData(fishPool, fpMultiple)
            if pwData[PWValueSlot.STATE] in [
                    PWState.NOT_TAKE_REWARD, PWState.FAIL_SPIN
            ]:
                if code == 0:
                    consumeDiamond, rewards = self.getConsumeDiamond(pwData)
                    info["rewards"] = [rewards]
                    info["paidInfo"] = {
                        "name": config.DIAMOND_KINDID,
                        "count": consumeDiamond
                    }
                    info["ratioList"] = pwData[PWValueSlot.RET]
                    # 如果没有设置倍数则直接领取当前奖励.
                    if action == 1 and len(info["ratioList"]) == 1:
                        self.setRewards(fpMultiple, 1, "bet")
                    if pwData[PWValueSlot.STATE] == PWState.FAIL_SPIN:
                        info["betFail"] = pwData[PWValueSlot.BET]
                else:
                    info["rewards"] = []
                    info["ratioList"] = []
        else:
            info["rewards"] = []
            info["ratioList"] = []
        mo.setResult("info", info)
        mo.setResult("code", code)
        mo.setResult("state", pwData[PWValueSlot.STATE])
        mo.setResult("curRemainTimes", pwData[PWValueSlot.SPINTIMES])
        nextRoomId = prizeConf.get("nextRoomId", 0)
        if nextRoomId:
            bigRoomId, _ = util.getBigRoomId(nextRoomId)
            nextFishPool = util.getFishPoolByBigRoomId(bigRoomId)
            mo.setResult("nextRoomId", nextRoomId)
            mo.setResult("nextRoomMultiple",
                         prizeConf.get("nextRoomMultiple", 0))
            mo.setResult("nextProgressPct",
                         self._getEnergyPct(nextFishPool, fpMultiple))
            mo.setResult(
                "nextRemainTimes",
                self._getData(nextFishPool, fpMultiple)[PWValueSlot.SPINTIMES])
        GameMsg.sendMsg(mo, self.userId)
        if ftlog.is_debug():
            ftlog.debug("prize_wheel, userId =", self.userId, "fishPool =",
                        fishPool, "fpMultiple =", fpMultiple, "msg =", mo)
Example #22
0
def playMinigame(roomId, userId, idx, mode, userIds, groupIdx):
    """
    点击小游戏
    """
    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")
    mo.setResult("gameId", FISH_GAMEID)
    mo.setResult("userId", userId)
    mo.setResult("roomId", roomId)
    mo.setResult("mode", mode)
    mo.setResult("idx", idx)
    mo.setResult("type", mgType)
    code = 1
    data = {}
    gainItems =[]
    if mgType in MINIGAME_TYPE_LIST:
        superbossPlayedTimes = weakdata.getDayFishData(userId, WeakData.superbossMGPlayedTimes, {})
        playedTimes = superbossPlayedTimes.setdefault(key, 0)
        conf = config.getSuperBossMiniGameConf()
        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
        items = conf.get("game", {}).get(key, [])
        rewards = []
        _idx = 0
        isCanPlay = True
        # 只能抽取满足消耗的最高等级抽奖.
        # if mgType == "queen":
        #     # 抽奖消耗由多到少配置。
        #     for _idx, _val in enumerate(itemsinfo):
        #         # 检查消耗是否满足条件
        #         for v in _val["costs"]:
        #             if util.balanceItem(userId, v["name"]) < v["count"]:
        #                 break
        #         else:
        #             isCanPlay = (idx == _idx)
        #             break
        if 0 <= idx < len(items) and (maxTimes == -1 or maxTimes > playedTimes) and isCanPlay:
            costItems = items[idx]["costs"]
            if mgType == "box":
                gainItems = items[idx]["rewards"][groupIdx].values()[0]
            else:
                gainItems = items[idx]["rewards"]
            for _val in costItems:
                if util.balanceItem(userId, _val["name"]) < _val["count"]:
                    code = 2
                    break
            else:
                _ret = util.consumeItems(userId, costItems, "BI_NFISH_SUPERBOSS_EXCHANGE", bigRoomId, mode)
                if not _ret:
                    code = 2
                else:
                    superbossPlayedTimes[key] += 1
                    weakdata.setDayFishData(userId, WeakData.superbossMGPlayedTimes, json.dumps(superbossPlayedTimes))
                    _idx = util.selectIdxByWeight([v["probb"] for v in gainItems])
                    if _idx >= 0:
                        rewards = [{"name": gainItems[_idx]["name"], "count": gainItems[_idx]["count"]}]
                        isIn, roomId, tableId, _ = util.isInFishTable(userId)
                        if isIn:
                            code = table_remote.addRewardsToTable(roomId, tableId, userId, rewards, "BI_NFISH_SUPERBOSS_BOX", mode)
                        else:
                            code = util.addRewards(userId, rewards, "BI_NFISH_SUPERBOSS_BOX", bigRoomId, mode)
                        if code != 0:
                            ftlog.error("minigame, userId =", userId, "bigRoomId =", key, "idx =", idx, "rewards =", rewards)
            playedTimes = superbossPlayedTimes.get(key, 0)
            remainTimes = max(0, maxTimes - playedTimes) if maxTimes >= 0 else -1
            data = {"remainTimes": remainTimes, "rewards": rewards, "rewardIndex": _idx}
    else:
        ftlog.warn("minigame, type error, userId =", userId, "roomId =", roomId, "mode =", mode, "idx =", idx, "mgType =", mgType)
    mo.setResult("code", code)
    turntable_rewards = []
    if mgType == "dragon":
        for gainItem in gainItems:
            for key in gainItem.keys():
                if key == "count":
                    turntable_rewards.append(gainItem[key])
        data["turntable_rewards"] = turntable_rewards
    mo.setResult("data", data)
    router.sendToUser(mo, userId)
    if mgType == "dragon" and code == 0:
        userIds = userIds
        GameMsg.sendMsg(mo, userIds)
    if code == 0:
        from newfish.game import TGFish
        event = PlayMiniGame(userId, config.FISH_GAMEID)
        TGFish.getEventBus().publishEvent(event)
    checkModuleTip(bigRoomId, userId, mode)