Example #1
0
 def process(self):
     args = self.getUrlArgs('/evolutionyesno/')
     try:
         self.__baseid = int(args.get(0))
         self.__materialid = self.getMaterialId()
     except:
         raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)
     
     v_player = self.getViewerPlayer()
     model_mgr = self.getModelMgr()
     
     # ベースカード.
     basecard = BackendApi.get_cards([self.__baseid], model_mgr, using=settings.DB_READONLY)
     basecard = basecard[0] if len(basecard) else None
     if not self.checkBaseCard(basecard):
         return
     evolmaster = BackendApi.get_evolution_cardmaster(model_mgr, basecard.master, using=settings.DB_READONLY)
     if evolmaster is None:
         raise CabaretError(u'ハメ管理後のキャストが設定されていません.', CabaretError.Code.INVALID_MASTERDATA)
     
     self.html_param['basecard'] = Objects.card(self, basecard)
     self.__basecard = basecard
     
     # プレイヤー情報.
     self.html_param['player'] = Objects.player(self, v_player)
     
     # デッキ情報.
     deck = BackendApi.get_deck(v_player.id, model_mgr, using=settings.DB_READONLY)
     basecard_post = CardSet(basecard.card, evolmaster)
     cost_over, deck_none = BackendApi.check_evol_deckcost(model_mgr, v_player, basecard_post, using=settings.DB_READONLY)
     self.html_param['deckcapacity_over'] = cost_over
     self.html_param['deck_none'] = deck_none
     
     # 素材カード.
     materialcard = BackendApi.get_cards([self.__materialid], model_mgr, using=settings.DB_READONLY)
     materialcard = materialcard[0] if len(materialcard) else None
     if not self.checkMaterialCard(basecard, materialcard, deck):
         return
     self.html_param['materialcard'] = Objects.card(self, materialcard)
     self.__materialcard = materialcard
     
     # 消費ゴールド.
     cost = evolmaster.evolcost
     self.html_param['cost'] = cost
     self.html_param['cost_over'] = v_player.gold < cost
     self.html_param['gold_post'] = v_player.gold - cost
     
     self.html_param['cardnum'] = BackendApi.get_cardnum(v_player.id, model_mgr, using=settings.DB_READONLY)
     
     BackendApi.get_evolutiondata(model_mgr, v_player.id, using=settings.DB_READONLY)
     
     # 書き込みへのURL.
     url = UrlMaker.evolutiondo(self.__baseid, v_player.req_confirmkey)
     self.html_param['url_do'] = self.makeAppLinkUrl(OSAUtil.addQuery(url, Defines.URLQUERY_CARD, self.__materialcard.id))
     
     self.writeAppHtml('evolution/yesno')
Example #2
0
 def putCardInfo(self, o_player):
     """カードの情報.
     """
     model_mgr = self.getModelMgr()
     deck = BackendApi.get_deck(o_player.id, model_mgr, using=settings.DB_READONLY)
     leader = BackendApi.get_cards([deck.leader], model_mgr, using=settings.DB_READONLY)[0]
     # リーダー情報.
     self.html_param['leader'] = Objects.card(self, leader)
     
     cardlist = BackendApi.get_profile_newbie_cardlist(model_mgr, o_player.id, excludes=[deck.leader], using=settings.DB_READONLY)
     self.html_param['newbie_cardlist'] = [Objects.card(self, card) for card in cardlist]
Example #3
0
 def putDeck(self):
     """ロードしたデッキを埋め込む.
     """
     if self.__v_deck:
         self.html_param['v_deck'] = [
             Objects.card(self, cardset) for cardset in self.__v_deck
         ]
     if self.__o_deck:
         self.html_param['o_deck'] = [
             Objects.card(self, cardset) for cardset in self.__o_deck
         ]
Example #4
0
    def process(self):
        v_player = self.getViewerPlayer()
        model_mgr = self.getModelMgr()

        # 合成結果.
        evolutiondata = BackendApi.get_evolutiondata(
            model_mgr, v_player.id, using=settings.DB_READONLY)

        # ベースカード.
        basecardset = BackendApi.get_cards([evolutiondata.result_baseid],
                                           model_mgr,
                                           using=settings.DB_READONLY)
        if not basecardset:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'ハメ管理したキャストが見つかりません.')
            url = UrlMaker.evolution()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        basecardset = basecardset[0]
        self.html_param['basecard_post'] = Objects.card(self, basecardset)

        pre_master = BackendApi.get_cardmasters(
            [evolutiondata.mid], model_mgr,
            using=settings.DB_READONLY).get(evolutiondata.mid)
        if pre_master is None or (pre_master.albumhklevel +
                                  1) != basecardset.master.albumhklevel:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'ハメ管理前のキャストが見つかりません.')
            url = UrlMaker.evolution()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        pre_card = copy(basecardset.card)
        evolutiondata.set_to_card(pre_card)
        pre_cardset = CardSet(pre_card, pre_master)
        self.html_param['basecard_pre'] = Objects.card(self, pre_cardset)

        # 素材カード.
        materialcard = BackendApi.get_cards([evolutiondata.result_materialid],
                                            model_mgr,
                                            using=settings.DB_READONLY,
                                            deleted=True)
        if not materialcard:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'ハメ管理に使用したキャストが見つかりません.')
            url = UrlMaker.evolution()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        self.html_param['materialcard'] = Objects.card(self, materialcard[0])

        self.writeAppHtml('evolution/complete')
Example #5
0
 def process(self):
     args = self.getUrlArgs('/scoutcardgetresult/')
     try:
         scoutid = int(args.get(0))
     except:
         raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)
     
     v_player = self.getViewerPlayer()
     model_mgr = self.getModelMgr()
     
     using = settings.DB_READONLY
     
     # 進行情報.
     playdata = BackendApi.get_scoutprogress(model_mgr, v_player.id, [scoutid], using=using).get(scoutid, None)
     target_event = BackendApi.find_scout_event(playdata, Defines.ScoutEventType.GET_CARD)
     
     if target_event is None:
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'女の子を発見していません')
         url = self.makeAppLinkUrlRedirect(UrlMaker.scout())
         self.appRedirect(url)
         return
     elif not target_event.is_received:
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'まだ女の子をスカウトしていません')
         url = self.makeAppLinkUrlRedirect(UrlMaker.scoutresult(scoutid, playdata.alreadykey))
         self.appRedirect(url)
         return
     
     # プレイヤー.
     self.html_param['player'] = Objects.player(self, v_player)
     
     # 獲得したカード.
     cardmaster = BackendApi.get_cardmasters([target_event.card], arg_model_mgr=model_mgr, using=using).get(target_event.card)
     card = BackendApi.create_card_by_master(cardmaster)
     cardset = CardSet(card, cardmaster)
     self.html_param['card'] = Objects.card(self, cardset, is_new=target_event.is_new)
     
     # スカウト.
     arr = BackendApi.get_scouts(model_mgr, [scoutid], using=using)
     scoutmaster = arr[0] if arr else None
     self.html_param['scout'] = self.makeScoutObj(scoutmaster, playdata)
     
     # スカウト結果.
     resultlist = playdata.result.get('result', [])
     self.html_param['scoutresultinfo'] = BackendApi.make_scoutresult_info(resultlist)
     
     # レイドイベント.
     BackendApi.put_raidevent_champagnedata(self, v_player.id)
     
     if target_event.is_success:
         if target_event.autosell:
             # 自動退店.
             self.html_param['autosell'] = target_event.autosell
             self.html_param['_gold_add'] = target_event.sellprice
             self.html_param['_ckt'] = getattr(target_event, 'sellprice_treasure', 0)
         
         self.writeAppHtml('scout/cardgetresult_success')
     else:
         self.writeAppHtml('scout/cardgetresult_failed')
Example #6
0
    def procYesno(self):
        """タイプ選択確認.
        """
        v_player = self.__getViewerPlayer()
        if v_player is None:
            return
        ptype = self.getSelectedType()
        if ptype is None:
            return

        model_mgr = self.getModelMgr()
        leader = BackendApi.get_defaultleaders(
            model_mgr,
            Defines.CharacterType.NAMES.keys(),
            using=settings.DB_READONLY).get(ptype)
        if leader:
            cardset = CardSet(BackendApi.create_card_by_master(leader), leader)
            self.html_param['leader'] = Objects.card(self, cardset)
        self.html_param['ptype'] = ptype
        self.html_param['is_first'] = self.__args.get(2) == '1'
        self.html_param['url_write'] = self.makeAppLinkUrl(
            UrlMaker.regist_write(ptype))
        self.html_param['url_back'] = self.makeAppLinkUrl(
            UrlMaker.regist_select())

        self.setTutorialHead(Defines.TutorialStatus.REGIST_SELECT)

        self.writeAppHtml('regist/yesno')
Example #7
0
 def procGetCard(self, mid, stagemaster, playdata, event):
     """カード獲得.
     """
     if event.is_received:
         # 終了済み.
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'判定済みです', CabaretError.Code.ALREADY_RECEIVED)
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.scouteventcardgetresult(stagemaster.id)))
         return
     
     model_mgr = self.getModelMgr()
     
     # 獲得したカード.
     cardid = event.card
     cardmaster = BackendApi.get_cardmasters([cardid], model_mgr, using=settings.DB_READONLY).get(cardid)
     if cardmaster is None:
         raise CabaretError(u'一度公開されたキャストが非公開にされました.危険です.', CabaretError.Code.INVALID_MASTERDATA)
     card = BackendApi.create_card_by_master(cardmaster)
     self.html_param['card'] = Objects.card(self, CardSet(card, cardmaster), is_new=event.is_new)
     self.html_param['silhouette'] = event.silhouette
     
     # 獲得判定へ飛ぶ.
     url = UrlMaker.scouteventcardget(stagemaster.id)
     self.html_param['url_exec'] = self.makeAppLinkUrl(url)
     
     # アイテム.
     BackendApi.put_scoutcard_uselead_info(self, UrlMaker.scouteventcardget(stagemaster.id))
     
     self.html_param['num_key'] = Defines.URLQUERY_NUMBER
     
     self.writeScoutEventHTML('cardget', self.eventmaster)
Example #8
0
 def makeCardObject(self, cardset, deck):
     obj_card = Objects.card(self, cardset, deck=deck)
     if cardset.card.id == self.__baseid or cardset.card.protection or obj_card['deckmember']:
         raise CabaretError(u'ハメ管理に使用できないキャストです.', CabaretError.Code.ILLEGAL_ARGS)
     url = UrlMaker.evolutionmaterial(self.__baseid)
     obj_card['url_evolution'] = self.makeAppLinkUrl(url)
     return obj_card
Example #9
0
 def getObjPlayerList(self, playerlist):
     obj_list = []
     if playerlist:
         model_mgr = self.getModelMgr()
         
         persons = BackendApi.get_dmmplayers(self, playerlist, using=settings.DB_READONLY, do_execute=False)
         
         self.execute_api()
         
         for player in playerlist:
             
             deck = BackendApi.get_deck(player.id, arg_model_mgr=model_mgr, using=settings.DB_READONLY)
             cardsetlist = BackendApi.get_cards(deck.to_array(), arg_model_mgr=model_mgr, using=settings.DB_READONLY)
             leader = cardsetlist[0]
             
             obj_player = Objects.player(self, player, persons.get(player.dmmid), leader)
             power_total = leader.power
             
             deckmember = []
             for cardset in cardsetlist[1:]:
                 obj_card = Objects.card(self, cardset)
                 power_total += obj_card['power']
                 deckmember.append(obj_card)
             obj_player['deckmember'] = deckmember
             obj_player['power_total'] = power_total
             obj_list.append(obj_player)
     return obj_list
Example #10
0
 def makeCardObject(self, cardset, deck):
     obj_card = Objects.card(self, cardset, deck=deck)
     # ストック可能な数を埋め込む.
     stocknum = self.__getStockNum(cardset.master.album)
     obj_card.update(stock_num=stocknum,
                     stockable_num=max(
                         0, Defines.ALBUM_STOCK_NUM_MAX - stocknum))
     return obj_card
Example #11
0
 def makeCardObject(self, cardset, deck):
     data = Objects.card(self, cardset, deck=deck)
     url = UrlMaker.deckset(target=self.__target)
     url = OSAUtil.addQuery(url, Defines.URLQUERY_INDEX,
                            self.__selected_index)
     url = OSAUtil.addQuery(url, Defines.URLQUERY_CARD, cardset.id)
     data['url_deck'] = self.makeAppLinkUrl(url)
     return data
Example #12
0
 def makeCompositionObjCardList(self, basecard, materialcard):
     obj_cardlist = []
     url_next = self.makeAppLinkUrl(self.makeUrlNext())
     for cardset in (basecard, materialcard):
         obj_card = Objects.card(self, cardset)
         obj_card['url_composition'] = url_next
         obj_card['url_evolution'] = url_next
         obj_cardlist.append(obj_card)
     return obj_cardlist
Example #13
0
    def proc_EVOL00_COMPLETE(self, basecard, materialcard):
        """ハメ管理完了.
        """
        model_mgr = self.getModelMgr()
        basecard_post, _ = BackendApi.tutorial_evolution(
            model_mgr, basecard, materialcard, using=settings.DB_READONLY)
        obj_basecard_post = Objects.card(self, basecard_post)
        obj_basecard_post['master']['url_album'] = self.makeAppLinkUrl(
            self.makeUrlNext())
        self.html_param['basecard_post'] = obj_basecard_post

        self.writeAppHtml('evolution/complete')
Example #14
0
 def putDeckParams(self, deckcardlist):
     obj_cardlist = []
     cost_total = 0
     power_total = 0
     for card in deckcardlist:
         obj_card = Objects.card(self, card)
         power_total += obj_card['power']
         cost_total += card.master.cost
         obj_cardlist.append(obj_card)
     self.html_param['cardlist'] = obj_cardlist
     self.html_param['cost_total'] = cost_total
     self.html_param['power_total'] = power_total
Example #15
0
    def process(self):
        self.__cardlist = None

        args = self.getUrlArgs('/compositionmaterial/')
        try:
            self.__baseid = int(args.get(0))
        except:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)
            url = UrlMaker.composition()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        v_player = self.getViewerPlayer()
        model_mgr = self.getModelMgr()

        # ベースカード.
        basecard = BackendApi.get_cards([self.__baseid],
                                        model_mgr,
                                        using=settings.DB_READONLY)
        if not basecard or basecard[0].card.uid != v_player.id:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'不正なキャストです.%d' % self.__baseid)
            url = UrlMaker.composition()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        basecard = basecard[0]
        self.html_param['basecard'] = Objects.card(self, basecard)
        self.__basecard = basecard

        self.loadSortParams(
            default_sortby=Defines.CardSortType.RARE,
            default_ckind_type=Defines.CardKind.ListFilterType.ALL_KIND)

        # プレイヤー情報.
        self.html_param['player'] = Objects.player(self, v_player)

        # カード所持数.
        cardnum = BackendApi.get_cardnum(v_player.id,
                                         model_mgr,
                                         using=settings.DB_READONLY)
        self.html_param['cardnum'] = cardnum

        # カード.
        self.putCardList()

        # 確認ページのUrl.
        url = UrlMaker.compositionyesno(self.__baseid)
        self.html_param['url_yesno'] = self.makeAppLinkUrl(url)

        self.writeCompositionHtml('composition/materialselect')
Example #16
0
 def putDeckInfoParams(self):
     # デッキのカード.
     cardlist = self.getDeckCardList()
     obj_cardlist = []
     cost_total = 0
     power_total = 0
     for card in cardlist:
         obj_card = Objects.card(self, card)
         power_total += obj_card['power']
         cost_total += card.master.cost
         obj_cardlist.append(obj_card)
     self.html_param['cardlist'] = obj_cardlist
     self.html_param['cost_total'] = cost_total
     self.html_param['power_total'] = power_total
Example #17
0
    def proc_SCOUT00_CARDGET(self, area, scout, scout_cnt):
        """スカウト実行アニメーション(スカウト成功).
        """
        v_player = self.getViewerPlayer(True)
        card = self.getLeaderCard()

        obj_scout = Objects.scout(self, v_player, scout, scout_cnt, [])
        obj_scout['url_exec'] = self.makeAppLinkUrl(self.makeUrlNext())
        self.html_param['scout'] = obj_scout
        self.html_param['card'] = Objects.card(self, card, is_new=True)

        self.putPlayerInfo(scout_cnt=scout_cnt)

        self.writeAppHtml('scout/cardgetresult_success')
Example #18
0
 def process(self):
     # 現在時刻.
     self.__now = OSAUtil.get_now()
     # ModelRequestMgr.
     model_mgr = self.getModelMgr()
     # ユーザ情報.
     v_player = self.getViewerPlayer()
     uid = v_player.id
     # 店舗のマスターデータ.
     args = self.getUrlArgs('/cabaclubcastselect/')
     mid = args.getInt(0)
     master = None
     if mid:
         master = BackendApi.get_cabaretclub_store_master(
             model_mgr, mid, using=settings.DB_READONLY)
     if master is None:
         self.appRedirect(
             self.makeAppLinkUrlRedirect(UrlMaker.cabaclubtop()))
         return
     self.__mid = master.id
     # 削除するID.
     cardid = args.getInt(1)
     card = None
     obj_card = None
     if cardid:
         cardlist = BackendApi.get_cards([cardid],
                                         model_mgr,
                                         using=settings.DB_READONLY)
         if not cardlist or cardlist[0].card.uid != uid:
             # カードの指定おかしい.
             self.appRedirect(
                 self.makeAppLinkUrlRedirect(UrlMaker.cabaclubstore(mid)))
             return
         card = cardlist[0]
         obj_card = Objects.card(self, card)
         obj_card['url_remove'] = self.makeAppLinkUrl(
             UrlMaker.cabaclubcastremove(mid, cardid))
     self.__cardid = cardid or 0
     # 絞り込みのパラメータ.
     self.loadSortParams(default_sortby=Defines.CardSortType.COST_REV,
                         default_ckind_type=Defines.CardKind.NORMAL,
                         default_maxrare=Defines.Rarity.LIST[-1])
     # カード情報埋め込み.
     self.putCardList()
     # HTML書き出し.
     self.html_param.update(
         current_card=obj_card,
         url_store=self.makeAppLinkUrl(UrlMaker.cabaclubstore(mid)),
     )
     self.writeBoxHtml('cabaclub/castselect')
Example #19
0
    def proc_SCOUT01_CARDGET(self, area, scout, scout_cnt):
        """スカウト実行アニメーション(スカウト成功).
        """
        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer(True)
        card = BackendApi.get_tutorial_scoutdropcard(
            model_mgr, v_player.ptype, using=settings.DB_READONLY)

        obj_scout = Objects.scout(self, v_player, scout, scout_cnt, [])
        obj_scout['url_exec'] = self.makeAppLinkUrl(self.makeUrlNext())
        self.html_param['scout'] = obj_scout
        self.html_param['card'] = Objects.card(self, card, is_new=True)

        self.putPlayerInfo(scout_cnt=scout_cnt)

        self.writeAppHtml('scout/cardgetresult_success')
Example #20
0
    def proc_COMPOSITION00_COMPLETE(self, basecard, materialcard):
        """教育結果.
        """
        model_mgr = self.getModelMgr()
        pre_level = basecard.card.level
        pre_power = basecard.power
        BackendApi.composition(model_mgr,
                               basecard, [materialcard],
                               False,
                               using=settings.DB_READONLY)
        obj_card = Objects.card(self, basecard)
        self.html_param['basecard_post'] = obj_card
        self.html_param['url_next'] = self.makeAppLinkUrl(self.makeUrlNext())
        self.html_param['power_add'] = obj_card['power'] - pre_power
        self.html_param['level_add'] = obj_card['level'] - pre_level
        self.html_param['skilllevel_add'] = 0

        self.writeAppHtml('composition/complete')
Example #21
0
    def process(self):

        self.__cardlist = None

        args = self.getUrlArgs('/evolutionmaterial/')
        try:
            self.__baseid = int(args.get(0))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

        v_player = self.getViewerPlayer()
        model_mgr = self.getModelMgr()

        # ベースカード.
        basecard = BackendApi.get_cards([self.__baseid],
                                        model_mgr,
                                        using=settings.DB_READONLY)
        basecard = basecard[0] if len(basecard) else None
        if not self.checkBaseCard(basecard):
            return
        evolmaster = BackendApi.get_evolution_cardmaster(
            model_mgr, basecard.master, using=settings.DB_READONLY)
        if evolmaster is None:
            raise CabaretError(u'ハメ管理後のキャストが設定されていません.',
                               CabaretError.Code.INVALID_MASTERDATA)

        self.html_param['basecard'] = Objects.card(self, basecard)
        self.__basecard = basecard

        self.loadSortParams()

        # プレイヤー情報.
        self.html_param['player'] = Objects.player(self, v_player)

        # カード所持数.
        cardnum = BackendApi.get_cardnum(v_player.id,
                                         model_mgr,
                                         using=settings.DB_READONLY)
        self.html_param['cardnum'] = cardnum

        # カード.
        self.putCardList()

        self.writeEvolutionHtml('evolution/materialselect')
Example #22
0
    def process(self):

        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()
        viewer_id = v_player.id

        deck = BackendApi.get_deck(viewer_id,
                                   model_mgr,
                                   using=settings.DB_READONLY)

        cardsetlist = BackendApi.get_card_list(viewer_id,
                                               arg_model_mgr=model_mgr,
                                               using=settings.DB_READONLY)

        self.json_result_param['cardlist'] = [
            Objects.card(self, cardset, deck) for cardset in cardsetlist
        ]

        self.writeAppJson()
Example #23
0
 def putCardInfo(self):
     """カードの情報.
     """
     model_mgr = self.getModelMgr()
     v_player = self.getViewerPlayer()
     deck = BackendApi.get_deck(v_player.id, model_mgr, using=settings.DB_READONLY)
     cardlist = BackendApi.get_cards(deck.to_array(), model_mgr, using=settings.DB_READONLY)
     
     # 接客力の合計.
     power_total = 0
     for card in cardlist:
         power_total += card.power
     self.html_param['power_total'] = power_total
     
     # デッキのカードをランダムで表示.
     disp_members = cardlist[:]
     random.shuffle(disp_members)
     cardset = disp_members[0]
     self.html_param['card'] = Objects.card(self, cardset, deck)
     
     # カード枚数.
     self.html_param['card_num'] = BackendApi.get_cardnum(v_player.id, model_mgr, using=settings.DB_READONLY)
Example #24
0
    def procDecide(self):
        """タイプ選択完了.
        """
        v_player = self.getViewerPlayer()
        if v_player.tutorialstate != Defines.TutorialStatus.REGIST_COMPLETE:
            self.redirectToTop()
            return
        ptype = v_player.ptype

        model_mgr = self.getModelMgr()
        leader = BackendApi.get_defaultleaders(
            model_mgr,
            Defines.CharacterType.NAMES.keys(),
            using=settings.DB_READONLY).get(ptype)
        if leader:
            cardset = CardSet(BackendApi.create_card_by_master(leader), leader)
            self.html_param['leader'] = Objects.card(self, cardset)
        self.html_param['ptype'] = ptype
        self.html_param['url_enter'] = self.makeAppLinkUrl(UrlMaker.tutorial())

        self.setTutorialHead(Defines.TutorialStatus.REGIST_COMPLETE)

        self.writeAppHtml('regist/decide')
Example #25
0
    def process(self):

        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()

        try:
            oid = int(self.request.get(Defines.URLQUERY_ID) or v_player.id)
        except:
            raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS)

        deck = BackendApi.get_deck(oid, model_mgr, using=settings.DB_READONLY)

        cardidlist = deck.to_array()

        cardsetlist = BackendApi.get_cards(cardidlist,
                                           arg_model_mgr=model_mgr,
                                           using=settings.DB_READONLY)

        self.json_result_param['cardlist'] = [
            Objects.card(self, cardset, deck) for cardset in cardsetlist
        ]

        self.writeAppJson()
Example #26
0
    def process(self):

        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()

        self.setFromPage(Defines.FromPages.BATTLE)

        # 結果データ.
        battleresult = BackendApi.get_battleresult(model_mgr,
                                                   v_player.id,
                                                   using=settings.DB_READONLY)
        if battleresult is None:
            # 結果が存在しない.
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'結果がない')
            url = UrlMaker.battle()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # 対戦相手.
        oid = battleresult.oid
        arr = BackendApi.get_players(self, [oid], [PlayerExp],
                                     using=settings.DB_READONLY)
        o_player = arr[0] if arr else None
        if o_player is None:
            # 相手が存在しない.
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'相手が存在しない')
            url = UrlMaker.battle()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        obj_v_player, obj_o_player = self.getObjPlayerList(
            [v_player, o_player])

        obj_v_player['power_total'] = battleresult.data['v_power']
        obj_o_player['power_total'] = battleresult.data['o_power']

        obj_v_player['skilllist'] = battleresult.anim.make_html_skilllist(True)
        obj_o_player['skilllist'] = battleresult.anim.make_html_skilllist(
            False)

        self.html_param['player'] = obj_v_player
        self.html_param['o_player'] = obj_o_player

        if BackendApi.check_friend(v_player.id,
                                   oid,
                                   arg_model_mgr=model_mgr,
                                   using=settings.DB_READONLY):
            pass
        elif BackendApi.check_friendrequest_receive(
                v_player.id,
                oid,
                arg_model_mgr=model_mgr,
                using=settings.DB_READONLY):
            pass
        elif BackendApi.check_friendrequest_send(v_player.id,
                                                 oid,
                                                 arg_model_mgr=model_mgr,
                                                 using=settings.DB_READONLY):
            pass
        else:
            self.html_param['is_friendrequest_ok'] = True

        data = battleresult.data
        self.html_param['resultdata'] = data

        # 獲得したアイテム.
        prizes = data.get('prizes')
        if prizes:
            prizelist = BackendApi.get_prizelist(model_mgr,
                                                 prizes,
                                                 using=settings.DB_READONLY)
            self.html_param['prize'] = BackendApi.make_prizeinfo(
                self, prizelist, using=settings.DB_READONLY)

        # レベルアップしたカード.
        obj_lebelupcardlist = []
        levelupcardlist = BackendApi.get_cards(battleresult.levelupcard.keys(),
                                               model_mgr,
                                               using=settings.DB_READONLY)
        for levelupcard in levelupcardlist:
            obj_card = Objects.card(self, levelupcard)
            obj_card['level_add'] = battleresult.levelupcard.get(
                levelupcard.id, 0)
            obj_lebelupcardlist.append(obj_card)
        self.html_param['levelupcardlist'] = obj_lebelupcardlist

        # 回復アイテム.
        BackendApi.put_bprecover_uselead_info(self)

        # 続けて戦う.
        url = UrlMaker.battleoppselect(0)
        self.html_param['url_battlecontinue'] = self.makeAppLinkUrl(url)

        # html書き込み.
        if data['is_win']:
            # 金の鍵の獲得率.
            battleplayer = self.getBattlePlayer()
            rankmaster = self.getBattleRankMaster()
            self.html_param[
                'goldkey_rate'] = BackendApi.get_battle_goldkey_rate(
                    model_mgr,
                    battleplayer,
                    rankmaster,
                    using=settings.DB_READONLY)
            self.writeAppHtml('battle/battlewin')
        else:
            self.writeAppHtml('battle/battlelose')
Example #27
0
    def process(self):
        v_player = self.getViewerPlayer()
        model_mgr = self.getModelMgr()

        # 合成結果.
        compositiondata = BackendApi.get_compositiondata(
            model_mgr, v_player.id, using=settings.DB_READONLY)

        # ベースカード.
        basecardset = BackendApi.get_cards([compositiondata.result_baseid],
                                           model_mgr,
                                           using=settings.DB_READONLY)
        if not basecardset or basecardset[0].card.mid != compositiondata.mid:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'教育したキャストが見つかりません.')
            url = UrlMaker.composition()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        basecardset = basecardset[0]

        self.html_param['basecard_post'] = Objects.card(self, basecardset)
        compositiondata.set_to_card(basecardset.card)
        self.html_param['basecard_pre'] = Objects.card(self, basecardset)

        # 素材カード.
        materialcardsetlist = BackendApi.get_cards(
            compositiondata.result_materialidlist,
            model_mgr,
            using=settings.DB_READONLY,
            deleted=True)
        self.html_param['cardlist'] = [
            Objects.card(self, cardset) for cardset in materialcardsetlist
        ]

        # 経験値とレベル.
        self.html_param['exp'] = compositiondata.result_exp
        self.html_param['levelup'] = compositiondata.result_lvup

        # お金.
        self.html_param['cost'] = compositiondata.result_cost_gold

        # スキル.
        self.html_param['skilllevelup'] = compositiondata.result_skilllvup

        # 成功 or 大成功.
        self.html_param[
            'is_great_success'] = compositiondata.result_flag_great_success

        # 上昇値.
        level_pre = compositiondata.result_lvpre
        level_add = compositiondata.result_lvup
        power_add = 0
        if 0 < level_add:
            basemaster = basecardset.master
            pow_pre = CardUtil.calcPower(basemaster.gtype,
                                         basemaster.basepower,
                                         basemaster.maxpower, level_pre,
                                         basemaster.maxlevel,
                                         basecardset.card.takeover)
            pow_post = CardUtil.calcPower(basemaster.gtype,
                                          basemaster.basepower,
                                          basemaster.maxpower,
                                          level_pre + level_add,
                                          basemaster.maxlevel,
                                          basecardset.card.takeover)
            power_add = pow_post - pow_pre
        self.html_param['power_add'] = power_add
        self.html_param['level_add'] = level_add
        self.html_param['skilllevel_add'] = compositiondata.result_skilllvup

        # 続けて合成のURL.
        url = UrlMaker.compositionmaterial(basecardset.id)
        self.html_param['url_continue'] = self.makeAppLinkUrl(url)

        self.writeAppHtml('composition/complete')
Example #28
0
    def process(self):

        model_mgr = self.getModelMgr()

        args = self.getUrlArgs('/battleeventbattleresult/')
        eventid = args.getInt(0)

        eventmaster = None
        if eventid:
            eventmaster = BackendApi.get_battleevent_master(
                model_mgr, eventid, using=settings.DB_READONLY)

        if eventmaster is None:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'引数がおかしい')
            self.redirectToTop()
            return

        v_player = self.getViewerPlayer()
        uid = v_player.id

        # 結果データ.
        battleresult = BackendApi.get_battleevent_battleresult(
            model_mgr, eventid, uid, using=settings.DB_READONLY)
        if battleresult is None:
            # 結果が存在しない.
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'結果がない')
            url = UrlMaker.battleevent_top(eventid)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        self.setFromPage(Defines.FromPages.BATTLEEVENTPRE)

        data = battleresult.data

        # 対戦相手.
        oid = battleresult.oid
        arr = BackendApi.get_players(self, [oid], [PlayerExp],
                                     using=settings.DB_READONLY)
        o_player = arr[0] if arr else None
        if o_player is None:
            # 相手が存在しない.
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'相手が存在しない')
            url = UrlMaker.battleevent_top(eventid)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        obj_v_player, obj_o_player = self.getObjPlayerList(
            [v_player, o_player])

        rival_key = BackendApi.get_rival_key(oid, eventid, args)
        self.html_param['resultdata'] = data

        obj_v_player['power_total'] = data['v_power']
        obj_o_player['power_total'] = data['o_power']
        obj_v_player['sp_powup'] = (data.get('v_sp_powup')
                                    or 0) * data['fever_powerup_rate'] / 100
        obj_o_player['sp_powup'] = data.get('o_sp_powup') or 0
        obj_v_player['spt_powup'] = (data.get('v_spt_powup')
                                     or 0) * data['fever_powerup_rate'] / 100
        obj_o_player['spt_powup'] = data.get('o_spt_powup') or 0

        obj_v_player['skilllist'] = battleresult.anim.make_html_skilllist(True)
        obj_o_player['skilllist'] = battleresult.anim.make_html_skilllist(
            False)

        self.html_param['player'] = obj_v_player
        self.html_param['o_player'] = obj_o_player

        if BackendApi.check_friend(uid,
                                   oid,
                                   arg_model_mgr=model_mgr,
                                   using=settings.DB_READONLY):
            pass
        elif BackendApi.check_friendrequest_receive(
                uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY):
            pass
        elif BackendApi.check_friendrequest_send(uid,
                                                 oid,
                                                 arg_model_mgr=model_mgr,
                                                 using=settings.DB_READONLY):
            pass
        else:
            self.html_param['is_friendrequest_ok'] = True

        # 獲得したアイテム.
        prizes = data.get('prizes')
        if prizes:
            prizelist = BackendApi.get_prizelist(model_mgr,
                                                 prizes,
                                                 using=settings.DB_READONLY)
            self.html_param['prize'] = BackendApi.make_prizeinfo(
                self, prizelist, using=settings.DB_READONLY)

        battle_ticket_num = self.get_base_battle_ticket_num(data)
        self.html_param['battle_ticket_num'] = battle_ticket_num
        self.html_param[
            'battle_ticket_bonus'] = self.get_player_battle_ticket_bonus(
                model_mgr, uid, battle_ticket_num, eventmaster)

        # レベルアップしたカード.
        obj_lebelupcardlist = []
        levelupcardlist = BackendApi.get_cards(battleresult.levelupcard.keys(),
                                               model_mgr,
                                               using=settings.DB_READONLY)
        for levelupcard in levelupcardlist:
            obj_card = Objects.card(self, levelupcard)
            obj_card['level_add'] = battleresult.levelupcard.get(
                levelupcard.id, 0)
            obj_lebelupcardlist.append(obj_card)
        self.html_param['levelupcardlist'] = obj_lebelupcardlist

        # 回復アイテム.
        BackendApi.put_bprecover_uselead_info(self)

        # 獲得したポイント.
        scorerecord = BackendApi.get_battleevent_scorerecord(
            model_mgr, eventid, uid, using=settings.DB_READONLY)
        self.html_param['battleevent_score'] = self.makeScoreRecordObj(
            scorerecord, battleresult)

        # 特効キャスト分のポイント.
        effect_percent = data.get('effp', 0)
        if 0 < effect_percent:
            point_add = data['eventpoint']
            point_base = int(point_add * 100 / (effect_percent + 100))
            self.html_param['effect_point'] = point_add - point_base

        # 現在の贈り物情報を確認.
        presentdata = BackendApi.get_battleeventpresent_pointdata(
            model_mgr, uid, eventid, using=settings.DB_READONLY)
        if presentdata:
            cur_data = presentdata.getData()
            presentmaster = BackendApi.get_battleeventpresent_master(
                model_mgr,
                eventid,
                cur_data['number'],
                using=settings.DB_READONLY)
            self.html_param[
                'is_present_open'] = presentmaster.point <= presentdata.point
        else:
            self.html_param['is_present_open'] = False

        # トピック.
        self.putEventTopic(eventid)

        # 続けて競う.
        target = 'revenge' if data.get('revenge') else 'lv'
        self.html_param['url_battlecontinue'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_opplist(target, do_update=True))

        # グループ詳細.
        self.html_param['url_battleevent_group'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_group())
        self.html_param["battleevent"] = Objects.battleevent(
            self, eventmaster)
        if data['is_win']:
            piecedata = battleresult.data.get('piecedata')
            if piecedata:
                if piecedata.get('is_item'):
                    # キャスト名.
                    _, cardmaster = self.get_dirname_and_castname(
                        eventid, piecedata['rarity'])

                    # アイテム獲得.
                    prizelist = BackendApi.get_prizelist(
                        model_mgr,
                        piecedata.get('item_prizeids') or [],
                        using=settings.DB_READONLY)
                    self.html_param['piece_dropiteminfo'] = dict(
                        cardmaster=Objects.cardmaster(self, cardmaster),
                        prize=BackendApi.make_prizeinfo(
                            self, prizelist, using=settings.DB_READONLY))
                else:
                    self.put_drop_castname(model_mgr, eventid,
                                           piecedata['rarity'],
                                           piecedata['piece'])
            self.writeAppHtml(
                '%s/battlewin' %
                ('gcevent' if eventmaster.is_goukon else 'btevent'))
        else:
            self.writeAppHtml(
                '%s/battlelose' %
                ('gcevent' if eventmaster.is_goukon else 'btevent'))
Example #29
0
    def process(self):
        self.__include_rare = False

        args = self.getUrlArgs('/compositionyesno/')
        try:
            self.__baseid = int(args.get(0))
            self.__materialidlist = self.getMaterialIdList()
        except:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)
            url = UrlMaker.composition()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        v_player = self.getViewerPlayer()
        model_mgr = self.getModelMgr()

        # ベースカード.
        basecard = BackendApi.get_cards([self.__baseid],
                                        model_mgr,
                                        using=settings.DB_READONLY)
        if not basecard or basecard[0].card.uid != v_player.id:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'不正なキャストです.%d' % self.__baseid)
            url = UrlMaker.composition()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        basecard = basecard[0]
        self.html_param['basecard'] = Objects.card(self, basecard)

        self.loadSortParams()

        # プレイヤー情報.
        self.html_param['player'] = Objects.player(self, v_player)

        # カード.
        self.putCardList()
        if not self._put_cardlist:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'素材が選ばれていません')
            url = UrlMaker.composition()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        card_masters = {
            m.master
            for m in self._put_cardlist
            if m.master.ckind == Defines.CardKind.SKILL
        }

        is_not_skillup = False
        for card_master in card_masters:
            if card_master.id != Defines.MasterData.TIARA_ID and card_master.rare < basecard.master.rare:
                is_not_skillup = True
                break
        self.html_param['not_skillup'] = is_not_skillup

        # 消費ゴールド.
        cost = BackendApi.calc_composition_cost(basecard, self._put_cardlist)
        self.html_param['cost'] = cost
        self.html_param['cost_over'] = v_player.gold < cost
        self.html_param['gold_post'] = v_player.gold - cost

        self.html_param['cardnum'] = BackendApi.get_cardnum(
            v_player.id, model_mgr, using=settings.DB_READONLY)

        # 書き込みへのURL.
        str_cardidlist = ','.join(
            [str(cardset.card.id) for cardset in self._put_cardlist])
        url = UrlMaker.compositiondo(self.__baseid, v_player.req_confirmkey)
        self.html_param['url_do'] = self.makeAppLinkUrl(
            OSAUtil.addQuery(url, Defines.URLQUERY_CARD, str_cardidlist))

        self.html_param['flag_include_rare'] = self.__include_rare

        self.writeAppHtml('composition/yesno')
Example #30
0
 def makeCardObject(self, cardset, deck):
     data = Objects.card(self, cardset, deck=deck)
     url = UrlMaker.cabaclubcastselectdo(self.__mid, self.__cardid,
                                         cardset.id)
     data['url_selectdo'] = self.makeAppLinkUrl(url)
     return data