Example #1
0
 def process(self):
     
     try:
         str_idlist = self.request.get(Defines.URLQUERY_ID, '').split(',')
         uidlist = list(set([int(str_id) for str_id in str_idlist if str_id.isdigit()]))
     except:
         uidlist = None
     
     v_player = self.getViewerPlayer()
     viewer_id = v_player.id
     
     playerlist = None
     if uidlist:
         tmp_uidlist = uidlist[:]
         playerlist = []
         
         if viewer_id in tmp_uidlist:
             # 自分自身.
             tmp_uidlist.remove(viewer_id)
             playerlist.append(BackendApi.get_players(self, [viewer_id], Handler.VIEWER_MODELS, using=settings.DB_READONLY)[0])
         # 他のプレイヤー.
         playerlist.extend(BackendApi.get_players(self, tmp_uidlist, Handler.OTHERS_MODELS, using=settings.DB_READONLY))
     
     if not playerlist:
         raise CabaretError(u'指定したプレイヤーが見つかりませんでした', CabaretError.Code.NOT_DATA)
     
     # リーダーカード.
     model_mgr = self.getModelMgr()
     leaders = BackendApi.get_leaders(uidlist, model_mgr, using=settings.DB_READONLY)
     
     # レスポンス用のオブジェクトに変換.
     obj_playerlist = [Objects.player(self, player, leader=leaders[player.id]) for player in playerlist]
     self.json_result_param['playerlist'] = obj_playerlist
     
     self.writeAppJson()
Example #2
0
    def process(self):
        args = self.getUrlArgs('/shopyesno/')
        try:
            mid = int(args.get(0))
            buy_num = int(self.request.get(Defines.URLQUERY_NUMBER))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)
        # プレイヤー情報.
        v_player = self.getViewerPlayer()
        self.html_param['player'] = Objects.player(self, v_player)
        self.set_masterid(mid)
        master = self.getShopMaster()
        if master is None or master.consumetype == Defines.ShopConsumeType.PAYMENT:
            # 不正な遷移.
            self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.shop()))
            return
        # 購入する数.
        self.html_param['buy_num'] = buy_num
        # 購入する商品.
        self.html_param['shopitem'] = self.makeShopObj()
        # 購入するURL.
        url = UrlMaker.shopdo(mid, v_player.req_confirmkey)
        url = OSAUtil.addQuery(url, Defines.URLQUERY_NUMBER, buy_num)
        self.html_param['url_buy'] = self.makeAppLinkUrl(url)
        # 遷移元チェック.
        self.putFromBackPageLinkUrl()

        self.writeAppHtml('shop/yesno')
Example #3
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 #4
0
    def get_obj_playerlist(self, uidscoresetlist):
        model_mgr = self.getModelMgr()

        obj_playerlist = []

        uidscoreset = dict(uidscoresetlist)
        uidscoreset_keys = uidscoreset.keys()

        playerlist = BackendApi.get_players(self,
                                            uidscoreset_keys,
                                            using=settings.DB_READONLY)
        persons = BackendApi.get_dmmplayers(self,
                                            playerlist,
                                            using=settings.DB_READONLY,
                                            do_execute=False)
        self.execute_api()

        leaders = BackendApi.get_leaders(uidscoreset_keys,
                                         arg_model_mgr=model_mgr,
                                         using=settings.DB_READONLY)

        for player in playerlist:
            obj_player = Objects.player(self, player,
                                        persons.get(player.dmmid),
                                        leaders.get(player.id))
            score, rank = uidscoreset[player.id]
            obj_player['event_score'] = score
            obj_player['event_rank'] = rank
            obj_playerlist.append(obj_player)
        obj_playerlist.sort(key=lambda x: x['event_score'], reverse=True)
        return obj_playerlist
Example #5
0
    def process(self):

        self.__cardlist_all = None
        self.__cardlist = None
        self.__filtered_by_skill_cardlist = None
        self.__skilllist = None

        model_mgr = self.getModelMgr()

        self.loadSortParams()

        # プレイヤー情報.
        v_player = self.getViewerPlayer()
        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()

        # スキル一覧.
        skilllist = self.getSkillMasterList()
        self.html_param['skillmasterlist'] = [
            Objects.skillmaster(skill) for skill in skilllist
        ]

        self.writeCompositionHtml('composition/baseselect')
Example #6
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 #7
0
    def putPlayerInfo(self, person=None, leader=None, scout_cnt=0):

        self.reflectScoutResult(scout_cnt)

        v_player = self.getViewerPlayer(True)

        self.html_param['player'] = Objects.player(self, v_player, person,
                                                   leader)
Example #8
0
 def execute_end():
     for leader in leaderlist:
         player = playerdict.get(leader.card.uid)
         if not player:
             continue
         person = persons[player.dmmid]
         obj_player = Objects.player(self, player, person, leader)
         obj_player['url_friendselect'] = self.makeAppLinkUrl(UrlMaker.raidfriendset(raidid, leader.card.uid), False)
         obj_playerlist.append(obj_player)
Example #9
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 #10
0
    def process(self):
        model_mgr = self.getModelMgr()

        # プレイヤー情報
        v_player = self.getViewerPlayer()
        obj_player = Objects.player(self, v_player)

        # 交換レートリスト取得
        #tradelist = BackendApi.get_tradeshopmaster_all(model_mgr, using=settings.DB_READONLY)
        #tradelist.sort(key=...)

        # カード所持数
        cardnum = BackendApi.get_cardnum(v_player.id,
                                         model_mgr,
                                         using=settings.DB_READONLY)
        cardrest = v_player.cardlimit - cardnum
        is_cardnum_max = cardrest < 1

        obj_tradelist = []
        limited_masters = {}  # ストック制限があるマスター.
        # slide_cards = {} # スライド表示するカード.
        header_img_list = {}  # ヘッダ画像.

        self.putFromBackPageLinkUrl()

        self.html_param['player'] = obj_player
        self.html_param['tradelist'] = obj_tradelist
        self.html_param['headerlist'] = header_img_list
        # self.html_param['slidelist'] = obj_slidelist # 必要か判断出来ない

        tradeshopmaster = BackendApi.get_current_tradeshopmaster(
            model_mgr, using=settings.DB_READONLY)
        if tradeshopmaster is None:
            raise CabaretError(u'交換所の開催期間外です', CabaretError.Code.EVENT_CLOSED)

        userdata = None
        userpoint = BackendApi.get_tradeshop_userpoint(model_mgr, v_player.id)
        if userpoint is None:
            userdata = PlayerTradeShop.createInstance(uid)
            userpoint = userdata.point
        self.html_param['user_point'] = userpoint

        self.html_param['itemdata'] = self.get_tradeitem_list(
            model_mgr, tradeshopmaster.trade_shop_item_master_ids, userpoint)

        tradeshopitemmasters = BackendApi.get_tradeshopitemmaster_list(
            model_mgr, tradeshopmaster.trade_shop_item_master_ids)
        tradecount_data = BackendApi.get_tradeshopitem_tradecountdata(
            model_mgr, v_player.id, tradeshopitemmasters)

        model_mgr = db_util.run_in_transaction(self.tr_write, userdata,
                                               tradecount_data)
        model_mgr.write_end()
        self.writeAppHtml('tradeshop/top')
Example #11
0
    def process(self):
        args = self.getUrlArgs('/happeningresult/')
        try:
            key = urllib.unquote(args.get(0))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

        v_player = self.getViewerPlayer()

        # 進行情報.
        if v_player.req_alreadykey != key:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'キーが正しくありません %s vs %s' %
                                   (v_player.req_alreadykey, key))
            url = self.makeAppLinkUrlRedirect(UrlMaker.happening())
            self.appRedirect(url)
            return

        self.html_param['player'] = Objects.player(self, v_player)

        # ハプニング.
        self.putHappeningInfo()

        # 続ける.
        url = UrlMaker.happeningdo(v_player.req_confirmkey)
        self.html_param['url_exec'] = self.makeAppLinkUrl(url)

        # 諦める.
        url = UrlMaker.happeningcancel_yesno()
        self.html_param['url_happeningcancel_yesno'] = self.makeAppLinkUrl(url)

        # レイド.
        self.putRaidHelpList()

        eventlist = v_player.happening_result.get('event', [])
        if not eventlist:
            raise CabaretError(u'ハプニング実行の実装に問題があります')

        table = (
            (Defines.ScoutEventType.AP_NONE, self.procApNone),
            (Defines.ScoutEventType.GET_ITEM, self.procGetItem),
        )

        eventdict = {}
        for event in eventlist:
            eventdict[event.get_type()] = event
        self.__eventdict = eventdict

        for eventtype, func in table:
            event = eventdict.get(eventtype)
            if event:
                func(event)
                return
        raise CabaretError(u'実行可能なハプニング内イベントがありません')
Example #12
0
 def putRanking(self, uid, eventid, view_myrank, url_battleevent_ranking, url_battleevent_myrank, view_beginer=False):
     
     model_mgr = self.getModelMgr()
     
     page = int(self.request.get(Defines.URLQUERY_PAGE) or 0)
     
     if view_myrank:
         score = BackendApi.get_battleevent_score(eventid, uid)
         if score:
             # 自分のランクのページヘ.
             index = BackendApi.get_battleevent_rankindex(eventid, uid, is_beginer=view_beginer)
             offset = max(0, index - int((self.CONTENT_NUM_MAX_PER_PAGE+1) / 2))
             uidscoresetlist = BackendApi.fetch_uid_by_battleeventrank(eventid, self.CONTENT_NUM_MAX_PER_PAGE, offset, withrank=True, is_beginer=view_beginer)
         else:
             uidscoresetlist = []
     else:
         uidscoresetlist = self.getUidScoreSetList(eventid, page, is_beginer=view_beginer)
     
     obj_playerlist = []
     
     if uidscoresetlist:
         uidscoreset = dict(uidscoresetlist)
         
         playerlist = BackendApi.get_players(self, uidscoreset.keys(), [PlayerExp], using=settings.DB_READONLY)
         persons = BackendApi.get_dmmplayers(self, playerlist, using=settings.DB_READONLY, do_execute=False)
         
         leaders = BackendApi.get_leaders(uidscoreset.keys(), arg_model_mgr=model_mgr, using=settings.DB_READONLY)
         
         self.execute_api()
         
         for player in playerlist:
             obj_player = Objects.player(self, player, persons.get(player.dmmid), leaders.get(player.id))
             score, rank = uidscoreset[player.id]
             obj_player['event_score'] = score
             obj_player['event_rank'] = rank
             obj_player['is_me'] = uid == player.id
             obj_playerlist.append(obj_player)
         obj_playerlist.sort(key=lambda x:x['event_score'], reverse=True)
     self.html_param['ranking_playerlist'] = obj_playerlist
     
     contentnum = BackendApi.get_battleevent_rankernum(eventid, is_beginer=view_beginer)
     
     self.html_param['is_view_myrank'] = view_myrank
     self.html_param['is_view_beginer'] = view_beginer
     
     self.html_param['url_battleevent_ranking'] = self.makeAppLinkUrl(url_battleevent_ranking) + "#ranking"
     self.html_param['url_battleevent_myrank'] = self.makeAppLinkUrl(url_battleevent_myrank) + "#ranking"
     self.html_param['url_battleevent_ranking_beginer'] = self.makeAppLinkUrl(OSAUtil.addQuery(url_battleevent_ranking, Defines.URLQUERY_BEGINER, 1)) + "#ranking"
     self.html_param['url_battleevent_myrank_beginer'] = self.makeAppLinkUrl(OSAUtil.addQuery(url_battleevent_myrank, Defines.URLQUERY_BEGINER, 1)) + "#ranking"
     
     url_base = OSAUtil.addQuery(url_battleevent_myrank if view_myrank else url_battleevent_ranking, Defines.URLQUERY_BEGINER, int(view_beginer))
     
     if not view_myrank:
         self.putPagenation(url_base, page, contentnum, self.CONTENT_NUM_MAX_PER_PAGE, "ranking")
Example #13
0
    def process(self):
        args = self.getUrlArgs('/gachasupcard/')
        try:
            mid = int(args.get(0))
            subbox = int(args.get(1))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

        v_player = self.getViewerPlayer()

        self.html_param['player'] = Objects.player(self, v_player)

        model_mgr = self.getModelMgr()

        # マスターデータ.
        gachamaster = BackendApi.get_gachamaster(model_mgr,
                                                 mid,
                                                 using=settings.DB_READONLY)
        if gachamaster is None:
            raise CabaretError(u'表示できない引抜です', CabaretError.Code.ILLEGAL_ARGS)
        self.html_param['gacha_name'] = gachamaster.name

        # カード情報.
        if subbox == 0:
            info = BackendApi.make_stepup_rateinfo(self,
                                                   gachamaster,
                                                   using=settings.DB_READONLY)
            self.html_param['gachacardlistinfo'] = info
        elif 0 < gachamaster.rarity_fixed_boxid and subbox == 1:
            subboxinfo = BackendApi.make_stepup_rateinfo(
                self, gachamaster, subbox=True, using=settings.DB_READONLY)
            self.html_param['gachacardlistinfo'] = subboxinfo

        # スライド情報.
        BackendApi.put_gachaslidecarddata(self, [gachamaster])

        # ガチャページに戻る.
        consumetype, tabengname = gachamaster.consumetype, gachamaster.tabengname
        url = UrlMaker.gacha()
        if consumetype in Defines.GachaConsumeType.PAYMENT_TYPES:
            url = OSAUtil.addQuery(
                url, Defines.URLQUERY_GTYPE,
                Defines.GachaConsumeType.GTYPE_NAMES[consumetype])
            if tabengname:
                url = OSAUtil.addQuery(url, Defines.URLQUERY_GTAB, tabengname)
        else:
            url = OSAUtil.addQuery(
                url, Defines.URLQUERY_CTYPE,
                Defines.GachaConsumeType.TO_TOPIC[consumetype])

        self.html_param['url_back'] = self.makeAppLinkUrl(url)

        self.writeAppHtml('gacha/supcard')
Example #14
0
    def process(self):

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

        # 購入可能な商品.
        self.putBuyableShopItemList()

        self.html_param['num_key'] = Defines.URLQUERY_NUMBER

        self.writeAppHtml('shop/shop')
Example #15
0
 def process(self):
     
     battleplayer = self.getBattlePlayer()
     if battleplayer is None or battleplayer.opponent == 0:
         # 対戦相手設定へ.
         self.redirectToOppSelect()
         return
     
     obj_list = self.getObjPlayerListByID([battleplayer.opponent])
     if not obj_list:
         # これも飛ばしておく.
         self.redirectToOppSelect()
         return
     
     self.setFromPage(Defines.FromPages.BATTLEPRE)
     
     v_player = self.getViewerPlayer()
     
     rankmaster = self.getBattleRankMaster()
     
     self.html_param['o_player'] = obj_list[0]
     
     self.html_param['player'] = Objects.player(self, v_player)
     self.html_param['battleplayer'] = Objects.battleplayer(self, battleplayer, rankmaster)
     
     # 最大ランク.
     model_mgr = self.getModelMgr()
     self.html_param['max_rank'] = BackendApi.get_battlerank_max(model_mgr, using=settings.DB_READONLY)
     
     # 残り対戦相手変更回数.
     self.html_param['opponent_change_restnum'] = BackendApi.get_battle_opponent_change_restcnt(model_mgr, battleplayer, rankmaster, using=settings.DB_READONLY)
     
     # アイテム.
     BackendApi.put_bprecover_uselead_info(self)
     
     # バトル開始URL.
     battleplayer = self.getBattlePlayer()
     url = UrlMaker.battledo(battleplayer.result)
     self.html_param['url_battle_do'] = self.makeAppLinkUrl(url)
     
     # 相手変更URL.
     url = UrlMaker.battleoppselect(battleplayer.change_cnt + 1)
     self.html_param['url_battle_oppselect'] = self.makeAppLinkUrl(url)
     
     # 金の鍵の獲得率.
     self.html_param['goldkey_rate'] = BackendApi.get_battle_goldkey_rate(model_mgr, battleplayer, rankmaster, using=settings.DB_READONLY)
     
     # 書き込み.
     if v_player.get_bp() < rankmaster.bpcost:
         self.writeAppHtml('battle/battleapnone')
     else:
         self.writeAppHtml('battle/battleselect')
Example #16
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 #17
0
    def getObjPlayerList(self,
                         playeridlist,
                         do_execute=True,
                         do_set_greet=False):
        arr = []
        if playeridlist:
            playerlist = BackendApi.get_players(self,
                                                playeridlist,
                                                [PlayerFriend, PlayerExp],
                                                using=settings.DB_READONLY)
            playerlist.sort(key=lambda x: playeridlist.index(x.id))

            persons = BackendApi.get_dmmplayers(self,
                                                playerlist,
                                                do_execute=False,
                                                using=settings.DB_READONLY)
            leaders = BackendApi.get_leaders(playeridlist,
                                             self.getModelMgr(),
                                             using=settings.DB_READONLY)

            model_mgr = self.getModelMgr()

            if do_set_greet:
                v_player = self.getViewerPlayer()
                greettimes = BackendApi.get_greettimes(
                    model_mgr,
                    v_player.id,
                    playeridlist,
                    using=settings.DB_READONLY)
            else:
                greettimes = {}

            friendnums = {}
            for playerid in playeridlist:
                friendnums[playerid] = BackendApi.get_friend_num(
                    playerid, model_mgr, using=settings.DB_READONLY)

            now = OSAUtil.get_now()
            if do_execute:
                self.execute_api()
            for player in playerlist:
                gtime = greettimes.get(player.id)
                data = Objects.player(self, player, persons.get(player.dmmid),
                                      leaders.get(player.id))
                data['friendnum'] = friendnums.get(player.id, 0)
                data['greetflag'] = not BackendApi.check_greettime(gtime, now)
                arr.append(data)
        return arr
Example #18
0
    def process(self):

        v_player = self.getViewerPlayer()
        self.getBattlePlayer(get_instance=True)
        rankmaster = self.getBattleRankMaster()

        self.setFromPage(Defines.FromPages.BATTLE)

        self.html_param['player'] = Objects.player(self, v_player)
        self.html_param['rankmaster'] = Objects.battlerank(self, rankmaster)

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

        # 書き込み.
        self.writeAppHtml('battle/battleaprecover')
Example #19
0
    def process(self):

        self.setFromPage(None)

        v_player = self.getViewerPlayer()
        battleplayer = self.getBattlePlayer()
        if battleplayer is None or not battleplayer.lpvtime or OSAUtil.get_now(
        ) <= battleplayer.lpvtime:
            self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battlelp()))
            return

        # 現在のランク.
        rankmaster = self.getBattleRankMaster()

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

        # バトル情報.
        self.html_param['battleplayer'] = Objects.battleplayer(
            self, battleplayer, rankmaster)

        # 対戦相手検索のUrl.
        self.html_param['url_battlepre'] = self.makeAppLinkUrl(
            UrlMaker.battlepre())

        # 気力回復のUrl.
        self.html_param['url_bprecover'] = self.makeAppLinkUrl(
            UrlMaker.bprecover())

        # 最大ランク.
        model_mgr = self.getModelMgr()
        self.html_param['max_rank'] = BackendApi.get_battlerank_max(
            model_mgr, using=settings.DB_READONLY)

        # 鍵情報.
        self.html_param['treasurekey'] = Objects.key(self, v_player)

        # イベント開催中判定.
        cur_eventmaster = BackendApi.get_current_battleevent_master(
            model_mgr, using=settings.DB_READONLY)
        self.html_param['battleevent'] = Objects.battleevent(
            self, cur_eventmaster) if cur_eventmaster else None
        self.html_param['url_battleevent_top'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_top())

        # 書き込み.
        self.writeAppHtml('battle/battle')
Example #20
0
        def apiend():
            obj_playerlist = []

            for i, player in enumerate(playerlist):
                obj_player = Objects.player(self, player,
                                            persons.get(player.dmmid),
                                            leaders.get(player.id))
                rankrecord = rankrecord_dict.get(player.id)
                rankname = None
                if rankrecord:
                    rankmaster = BackendApi.get_battleevent_rankmaster(
                        model_mgr,
                        eventid,
                        rankrecord.getRank(config),
                        using=settings.DB_READONLY)
                    if rankmaster:
                        rankname = rankmaster.name
                obj_player['event_rankname'] = rankname or u'----'

                # ライバルかどうかをフラグで持たせる。一応ライバルは [0] の位置に入ってる筈だけど、すり変わってるとバグがでそうなので。
                if is_rival and i == 0:
                    rival_key = BackendApi.make_is_rival_strings(
                        player.id, eventid)
                    obj_player['is_rival'] = True
                else:
                    rival_key = None
                    obj_player['is_rival'] = False

                is_battle_ok = True
                revenge = revengedict.get(player.id)
                if revenge:
                    url = UrlMaker.battleevent_battlepre(player.id, revenge.id)
                else:
                    url = UrlMaker.battleevent_battlepre(player.id,
                                                         rival_key=rival_key)
                    is_battle_ok = player.id in filtered_oidlist

                obj_player['url_eventbattle'] = self.makeAppLinkUrl(url)
                obj_player['is_battle_ok'] = is_battle_ok
                obj_player['power_total'] = deck_powers.get(player.id, 0)

                obj_playerlist.append(obj_player)

            # self.html_param['playerlist'] で勝負相手を決定している
            self.html_param['playerlist'] = obj_playerlist
Example #21
0
 def process(self):
     args = self.getUrlArgs('/infomations/view_panelmission/')
     uid = args.getInt(0)
     
     model_mgr = self.getModelMgr()
     
     self.html_param['now'] = OSAUtil.get_now()
     
     player = BackendApi.get_player(self, uid, [], using=backup_db, model_mgr=model_mgr)
     if player is None:
         self.putAlertToHtmlParam(u'存在しないプレイヤーです', alert_code=AlertCode.ERROR)
     else:
         person = BackendApi.get_dmmplayers(self, [player], using=backup_db).get(player.dmmid)
         self.html_param['player'] = Objects.player(self, player, person)
         
         # 現在のパネル.
         playerpanelmission = PlayerPanelMission.getByKey(uid, using=backup_db)
         cur_panelid = playerpanelmission.panel if playerpanelmission else 1
         
         # 進行情報.
         panelmissiondata_dict = dict([(model.mid, model) for model in PanelMissionData.fetchByOwner(uid, using=backup_db)])
         
         # 現在のパネルまでの進行情報.
         obj_panel_list = []
         for panelid in xrange(1, cur_panelid+1):
             panelmaster = BackendApi.get_panelmission_panelmaster(model_mgr, panelid, using=backup_db)
             if panelmaster is None:
                 continue
             
             missionmaster_list = BackendApi.get_panelmission_missionmaster_by_panelid(model_mgr, panelid, using=backup_db)
             panelmissiondata = panelmissiondata_dict.get(panelid)
             
             obj_mission_list = []
             is_cleared = cur_panelid < panelid
             for missionmaster in missionmaster_list:
                 obj_mission_list.append(self.__makeMissionObj(missionmaster, panelmissiondata, is_cleared))
             obj_panel_list.append({
                 'name' : panelmaster.name,
                 'current' : cur_panelid == panelid,
                 'missionlist' : obj_mission_list,
                 'stime' : panelmissiondata.stime if panelmissiondata else None
             })
         self.html_param['panellist'] = obj_panel_list[::-1]
     
     self.writeAppHtml('infomations/view_panelmission')
Example #22
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 #23
0
    def getObjPlayerList(self, playerlist, uidlist):
        obj_list = []
        if playerlist:
            model_mgr = self.getModelMgr()

            persons = BackendApi.get_dmmplayers(self,
                                                playerlist,
                                                using=settings.DB_READONLY,
                                                do_execute=True)
            leaders = BackendApi.get_leaders(uidlist,
                                             arg_model_mgr=model_mgr,
                                             using=settings.DB_READONLY)

            for player in playerlist:
                obj_player = Objects.player(self, player,
                                            persons.get(player.dmmid),
                                            leaders[player.id])
                obj_list.append(obj_player)

        return obj_list
Example #24
0
    def process(self):

        self.__cardlist = None

        model_mgr = self.getModelMgr()

        self.loadSortParams(default_sortby=Defines.CardSortType.HKLEVEL_REV)

        # プレイヤー情報.
        v_player = self.getViewerPlayer()
        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/baseselect')
Example #25
0
    def process(self):

        if not self.checkResult():
            return

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

        # 購入した商品.
        self.html_param['shopitem'] = self.makeShopObj()

        master = self.getShopMaster()
        self.html_param['buy_num'] = self.__buy_num * master.inum0

        # 遷移元チェック.
        self.putFromBackPageLinkUrl()

        # 購入可能な商品.
        #        self.putBuyableShopItemList()

        self.writeAppHtml('shop/buyresult')
Example #26
0
    def procYesno(self):
        """諦める確認.
        """
        # プレイヤー情報.
        v_player = self.getViewerPlayer()
        self.html_param['player'] = Objects.player(self, v_player)

        # ハプニング情報.
        self.putHappeningInfo()

        self.html_param['url_happening'] = self.makeAppLinkUrl(
            UrlMaker.happening())
        self.html_param['url_raidevent_battlepre'] = self.makeAppLinkUrl(
            UrlMaker.raidevent_battlepre())

        # 書き込みへのURL.
        url = UrlMaker.happeningcancel_do()
        self.html_param['url_happeningcancel_do'] = self.makeAppLinkUrl(url)

        happeningset = self.getHappening()
        eventid = HappeningUtil.get_raideventid(happeningset.happening.event)
        self.writeHtmlSwitchEvent('cancelyesno', eventid)
Example #27
0
    def process(self):

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

        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        # イベントマスター.
        eventmaster = self.getCurrentProduceEvent()
        mid = eventmaster.id

        # イベントスカウトのプレイ情報
        playdata = BackendApi.get_produceeventstage_playdata(model_mgr,
                                                             mid,
                                                             uid,
                                                             using=using)

        # 今いるステージ.
        stagemaster = BackendApi.get_current_produceeventstage_master(
            model_mgr, eventmaster, playdata, using=using)

        bossattack = False
        # 発生中のレイド情報.
        happeningraidset = self.getHappeningRaidSet()
        happeningset = None
        if happeningraidset:
            happeningset = happeningraidset.happening
        if happeningset:
            # レイドがある.
            if not happeningset.happening.is_end():
                bossattack = True

        # エリアボス出現
        areaboss_attack = False
        allcleared = BackendApi.check_event_boss_playable(
            playdata, stagemaster)
        boss = None
        if 0 < stagemaster.boss and allcleared:
            boss = BackendApi.get_boss(model_mgr,
                                       stagemaster.boss,
                                       using=settings.DB_READONLY)
            if boss is not None:
                areaboss_attack = True

        # エリアボス情報
        if areaboss_attack:
            # エリアボス戦へのURL
            self.html_param['areaboss'] = Objects.boss(self, boss)
            self.setFromPage(Defines.FromPages.PRODUCEEVENT, stagemaster.id)
            url = UrlMaker.bosspre(stagemaster.id)
            self.html_param['url_bossbattle'] = self.makeAppLinkUrl(url)

        # 現在のステージ情報
        obj_scout = self.makeStageObj(stagemaster,
                                      playdata,
                                      stagemaster.stage,
                                      bossattack=bossattack,
                                      areaboss_attack=areaboss_attack)
        self.__putParam('scout', obj_scout)

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

        # 宝箱の上限チェック.
        overlimit_treasure_list = BackendApi.get_treasuretype_list_overlimit(
            model_mgr, uid, using=using)
        self.__putParam('overlimit_treasure', overlimit_treasure_list)

        # スキップフラグ
        self.__putParam('flag_skip', BackendApi.get_scoutskip_flag(uid))
        # 全力探索フラグ
        self.__putParam('flag_search', BackendApi.get_scoutsearch_flag(uid))

        # 説明とランキングのリンク.
        self.putEventTopic(mid)

        self.writeHtml(eventmaster, 'scout/scout')
Example #28
0
    def process(self):

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

        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        # イベントマスター.
        eventmaster = self.getCurrentScoutEvent()
        mid = eventmaster.id

        # イベントプレイ情報
        playdata = BackendApi.get_event_playdata(model_mgr, mid, uid, using)

        # 今いるステージ.
        stage = BackendApi.get_current_scouteventstage_master(
            model_mgr, eventmaster, playdata, using=settings.DB_READONLY)
        stageid = stage.stage

        cardget_event = BackendApi.find_scout_event(
            playdata, Defines.ScoutEventType.GET_CARD)
        if cardget_event and not cardget_event.is_received:
            # カード獲得で離脱した.
            url = UrlMaker.scouteventresult(stage.id, playdata.alreadykey)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # プレイ情報.
        self.__putParam('scout',
                        Objects.scoutevent_stage(self, stage, playdata))

        # ボス出現.
        bossattack = False
        allcleared = BackendApi.check_event_boss_playable(playdata, stage)
        boss = None
        if 0 < stage.boss and allcleared:
            boss = BackendApi.get_boss(model_mgr, stage.boss, using=using)
            if boss is not None:
                bossattack = True

        # ステージ情報.
        obj_stage = self.makeStageObj(stage, playdata, stageid, bossattack)
        self.__putParam('stagelist', [obj_stage])

        # ボス
        if bossattack:
            # ボス戦へのURL.
            self.__putParam('boss', Objects.boss(self, boss))
            self.setFromPage(Defines.FromPages.SCOUTEVENT, stage.id)
            url = UrlMaker.bosspre(stage.id)
            self.html_param['url_bossbattle'] = self.makeAppLinkUrl(url)

        self.html_param['player'] = Objects.player(self, v_player, None)

        self.html_param['scoutevent'] = Objects.scouteventmaster(
            self, eventmaster, None)

        # フィーバー
        self.html_param['scouteventfever'] = Objects.scoutevent_fever(playdata)

        # 説明とランキングのリンク.
        self.putEventTopic(mid, 'top')

        # カードの上限チェック.
        if v_player.cardlimit <= BackendApi.get_cardnum(
                uid, arg_model_mgr=model_mgr, using=using):
            self.__putParam('overlimit_card', True)

        # 宝箱の上限チェック.
        overlimit_treasure_list = BackendApi.get_treasuretype_list_overlimit(
            model_mgr, uid, using=using)
        self.__putParam('overlimit_treasure', overlimit_treasure_list)

        self.__putParam('flag_skip', BackendApi.get_scoutskip_flag(uid))

        config = BackendApi.get_current_scouteventconfig(
            model_mgr, using=settings.DB_READONLY)
        max_stage = config.get_stage_max()
        is_all_open = max_stage is None
        self.__putParam('is_all_open', is_all_open)

        is_all_cleared = False
        if is_all_open:
            if allcleared and not bossattack:
                stagelist_all = BackendApi.get_event_stage_by_stagenumber(
                    model_mgr, mid, using=settings.DB_READONLY)
                stagelist_all.sort(key=lambda x: x.stage, reverse=True)
                is_all_cleared = stagelist_all[0].stage <= playdata.cleared
        else:
            is_all_cleared = max_stage <= playdata.cleared
        self.__putParam('is_all_cleared', is_all_cleared)

        # 短冊情報.
        BackendApi.put_scoutevent_tanzakudata(self, uid)

        self.writeScoutEventHTML('scout', eventmaster)
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 process(self):
        args = self.getUrlArgs('/produceeventscoutresult/')
        try:
            stageid = int(args.get(0))
            scoutkey = urllib.unquote(args.get(1))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

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

        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        eventmaster = BackendApi.get_current_produce_event_master(model_mgr,
                                                                  using=using)
        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
        mid = eventmaster.id
        self.eventmaster = eventmaster

        # 進行情報.
        playdata = BackendApi.get_produceeventstage_playdata(model_mgr,
                                                             mid,
                                                             uid,
                                                             using=using)
        if playdata and playdata.confirmkey == scoutkey:
            # DBからとり直すべき.
            playdata = BackendApi.get_produceeventstage_playdata(model_mgr,
                                                                 mid,
                                                                 uid,
                                                                 using=using,
                                                                 reflesh=True)

        if playdata is None or playdata.alreadykey != scoutkey:
            if settings_sub.IS_LOCAL:
                raise CabaretError(
                    u'キーが正しくありません %s vs %s' %
                    (playdata.alreadykey if playdata else 'None', scoutkey))
            url = self.makeAppLinkUrlRedirect(UrlMaker.produceevent_top())
            self.appRedirect(url)
            return

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

        # ステージ.
        stagemaster = BackendApi.get_produceevent_stagemaster(model_mgr,
                                                              stageid,
                                                              using=using)
        if stagemaster is None:
            url = self.makeAppLinkUrlRedirect(UrlMaker.produceevent_top())
            self.appRedirect(url)
            return
        obj_scout = self.makeStageObj(stagemaster, playdata, stagemaster.stage)
        self.html_param['scout'] = obj_scout

        self.putEventTopic(mid)

        eventlist = playdata.result.get('event', [])
        if not eventlist:
            raise CabaretError(u'スカウト実行の実装に問題があります')

        table = (
            (Defines.ScoutEventType.LEVELUP, self.procLevelup),
            (Defines.ScoutEventType.GET_CARD, self.procGetCard),
            (Defines.ScoutEventType.GET_TREASURE, self.procGetTreasure),
            (Defines.ScoutEventType.COMPLETE, self.procComplete),
            (Defines.ScoutEventType.HAPPENING, self.procHappening),
            (Defines.ScoutEventType.AP_NONE, self.procApNone),
            (Defines.ScoutEventType.NONE, self.procNone),
        )

        eventdict = {}
        for event in eventlist:
            eventdict[event.get_type()] = event
        self.__eventdict = eventdict

        # スカウト結果
        resultlist = playdata.result.get('result', [])
        self.html_param['scoutresultinfo'] = BackendApi.make_scoutresult_info(
            resultlist)

        for eventtype, func in table:
            event = eventdict.get(eventtype)
            if event:
                func(mid, stagemaster, playdata, event)
                return
        raise CabaretError(u'実行可能なスカウト内イベントがありません')