コード例 #1
0
 def process(self):
     
     now = OSAUtil.get_now()
     
     model_mgr = self.getModelMgr()
     
     config = BackendApi.get_current_battleeventconfig(model_mgr, using=settings.DB_READONLY)
     cur_eventmaster = None
     if config.mid and config.starttime <= now < config.epilogue_endtime:
         cur_eventmaster = BackendApi.get_battleevent_master(model_mgr, config.mid, using=settings.DB_READONLY)
     
     if cur_eventmaster is None:
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage()))
         return
     elif config.starttime <= now < config.endtime:
         self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False)
         if self.response.isEnd:
             return
     
     v_player = self.getViewerPlayer()
     uid = v_player.id
     
     # 現在の贈り物情報を確認.
     presentdata = BackendApi.get_battleeventpresent_pointdata(model_mgr, uid, cur_eventmaster.id, using=settings.DB_DEFAULT)
     pre_data = presentdata.getPreData()
     if pre_data is None:
         # 受け取り情報がない.
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage()))
         return
     
     # 達成を一応確認.
     cur_data = presentdata.getData()
     presentmaster = BackendApi.get_battleeventpresent_master(model_mgr, cur_eventmaster.id, cur_data['number'], using=settings.DB_READONLY)
     if presentmaster.point <= presentdata.point:
         # 達成済みで受け取っていない.
         playerrequest = BackendApi.get_playerrequest(model_mgr, uid)
         url = UrlMaker.battleevent_presentreceive(playerrequest.req_confirmkey)
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return
     
     presentmaster = BackendApi.get_battleeventpresent_master(model_mgr, cur_eventmaster.id, pre_data['number'], using=settings.DB_READONLY)
     
     # 演出後のページ.
     url = OSAUtil.addQuery(UrlMaker.battleevent_present(), Defines.URLQUERY_FLAG, 1)
     
     params = {
         'backUrl' : self.makeAppLinkUrl(url),
         'logoPre' : self.url_static_img + 'event/btevent/%s/' % cur_eventmaster.codename,
         'pre' : self.url_static_img,
         'item' : presentmaster.thumb,
     }
     
     # 演出へリダイレクト.
     self.appRedirectToEffect('btevent/event_extra_alcohol/effect.html', params)
コード例 #2
0
    def process(self):
        
        args = self.getUrlArgs('/profile/')
        owner_id = args.get(0, None)
        if owner_id is None or not str(owner_id).isdigit():
            raise CabaretError(u'表示するユーザIDが指定されていません.')
        
        v_player = self.getViewerPlayer()
        owner_id = int(owner_id)
        if owner_id == v_player.id:
            url = UrlMaker.mypage()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        
        clslist = [
            PlayerTutorial,
            PlayerExp,
            PlayerGold,
            PlayerAp,
            PlayerDeck,
            PlayerFriend,
            PlayerGachaPt,
            PlayerLogin,
            PlayerComment,
        ]
        playerlist = BackendApi.get_players(self, [owner_id], clslist, using=settings.DB_READONLY)
        o_player = None
        if 0 < len(playerlist):
            o_player = playerlist[0]
        
        if o_player is None or not o_player.is_tutorialend():
            raise CabaretError(u'このユーザIDは閲覧出来ません.')
        
        comments = self.readyProfileCommentRequest(o_player)
        
        self.putCardInfo(o_player)
        self.putFriendInfos(o_player)
        self.putBattleKOs(o_player)
        self.putRareLog(o_player)
        self.putGreetLog(o_player)
        
        persons = self.getDmmPlayerInfo(o_player)
        
        self.putIgnorelist(o_player)
        
        self.putPlayerInfo(o_player, persons.get(o_player.dmmid))
        self.putProfileComment(o_player, comments)

        if self.getFromPageName() == Defines.FromPages.CABACLUB_STORE:
            args = self.getFromPageArgs()
            mid = int(args[0]) if args and str(args[0]).isdigit() else None
            self.html_param['frompage_url'] = self.makeAppLinkUrlRedirect(UrlMaker.cabaclubrank(mid), add_frompage=False)
        
        self.writeAppHtml('profile')
コード例 #3
0
ファイル: anim.py プロジェクト: hitandaway100/caba
    def process(self):
        args = self.getUrlArgs('/happeninganim/')
        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

        master = self.getHappeningMaster()
        resultlist = v_player.happening_result.get('result', [])
        eventlist = v_player.happening_result.get('event', [])

        if eventlist:
            # ここで必要なのははじめの1件.
            event = eventlist[0]
        else:
            # なにも起きなかった.
            event = ScoutEventNone.create()

        eventKind = event.get_type()
        backUrl = None

        # イベント毎の設定.
        if eventKind == Defines.ScoutEventType.NONE:
            # そのままもう一回.
            backUrl = UrlMaker.happeningdo()
        elif eventKind in (Defines.ScoutEventType.LEVELUP,
                           Defines.ScoutEventType.COMPLETE):
            # 結果表示へ.
            backUrl = UrlMaker.happeningresultanim(key)

        # 結果表示へ.
        backUrl = backUrl or UrlMaker.happeningresult(key)

        params = BackendApi.make_scoutanim_params(self, master, eventlist,
                                                  resultlist)
        if params is None:
            # 演出不要.
            self.appRedirect(self.makeAppLinkUrlRedirect(backUrl))
            return

        params['backUrl'] = self.makeAppLinkUrl(backUrl)
        self.appRedirectToEffect('scout/effect.html', params)
コード例 #4
0
ファイル: pre.py プロジェクト: hitandaway100/caba
 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')
コード例 #5
0
ファイル: resultanim.py プロジェクト: hitandaway100/caba
    def process(self):

        model_mgr = self.getModelMgr()

        args = self.getUrlArgs('/battleeventresultanim/')
        eventid = args.getInt(0)
        rarity = args.getInt(1)
        piecenumber = args.getInt(2)
        is_complete = args.getInt(3)

        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

        swf_params = {}
        piecedata = battleresult.data.get('piecedata')
        if piecedata and not piecedata.get('is_item'):
            url = UrlMaker.battleevent_battlepiecepresent(
                eventid, piecedata['rarity'], piecedata['piece'],
                piecedata['is_complete'])
        else:
            url = UrlMaker.battleevent_battleresult(eventid)

        swf_params['backUrl'] = self.makeAppLinkUrl(url)

        # 結果によって演出を変更.
        data = battleresult.data
        if data['is_win']:
            self.appRedirectToEffect('youwin/effect.html', swf_params)
        else:
            self.appRedirectToEffect('youlose/effect.html', swf_params)
コード例 #6
0
 def process(self):
     v_player = self.getViewerPlayer()
     
     args = self.getUrlArgs('/gachado/')
     try:
         if settings_sub.IS_BENCH:
             mid = Handler._benchMaster.id
             key = v_player.req_confirmkey
         else:
             mid = int(args.get(0))
             key = urllib.unquote(args.get(1))
     except:
         raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)
     self.set_masterid(mid)
     
     self.__now = OSAUtil.get_now()
     
     if settings_sub.IS_BENCH:
         key = v_player.req_confirmkey
     
     if v_player.req_alreadykey == key:
         # 実行済み.
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'実行済みです')
         url = UrlMaker.gacharesult(mid, key)
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return
     elif v_player.req_confirmkey != key:
         # ブラウザバック等.
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'キーが正しくありません')
         url = UrlMaker.gacha()
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return
     
     model_mgr = self.getModelMgr()
     master = self.getGachaMaster()
     if not BackendApi.check_schedule(model_mgr, master.schedule):
         # 期限切れ.
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'期限切れ')
         url = UrlMaker.gacha()
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return
     
     if master.consumetype in Defines.GachaConsumeType.PAYMENT_TYPES and (not self.osa_util.is_admin_access or settings_sub.IS_LOCAL):
         if self.is_pc:
             self.procPc()
         else:
             self.procPayment()
     else:
         self.procFree()
コード例 #7
0
ファイル: materialselect.py プロジェクト: hitandaway100/caba
    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')
コード例 #8
0
ファイル: opplist.py プロジェクト: hitandaway100/caba
    def process(self):

        eventmaster = self.getCurrentBattleEvent()

        if not self.checkBattleEventUser():
            return

        args = self.getUrlArgs('/battleeventopplist/')
        target = args.get(0)

        table = {
            'revenge': self.procRevenge,
        }
        func = table.get(target, None)
        if func is None:
            func = self.procLevel
            target = 'lv'

        func(eventmaster, args)
        if self.response.isEnd:
            return

        v_player = self.getViewerPlayer()

        # バトルイベント.
        self.html_param['battleevent'] = Objects.battleevent(self, eventmaster)

        # 選択中の項目.
        self.html_param['cur_topic'] = target

        # 連勝数の表示.
        model_mgr = self.getModelMgr()
        user_cvictory_count = BackendApi.get_battleevent_continue_victory(
            model_mgr, v_player.id, eventmaster.id,
            using=settings.DB_READONLY).count
        self.put_user_continue_victory_data(user_cvictory_count)

        # リンク.
        self.html_param['url_battleevent_opplist_lv'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_opplist('lv'))
        self.html_param[
            'url_battleevent_opplist_revenge'] = self.makeAppLinkUrl(
                UrlMaker.battleevent_opplist('revenge'))
        self.html_param[
            'url_battleevent_opplist_update'] = self.makeAppLinkUrl(
                UrlMaker.battleevent_opplist(target, True))

        if eventmaster.is_goukon:
            self.writeAppHtml('gcevent/battletop')
        else:
            self.writeAppHtml('btevent/battletop')
コード例 #9
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')
コード例 #10
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')
コード例 #11
0
 def procYesno(self, args, config):
     """受け取り確認.
     """
     mid = args.getInt(2)
     master = self.getPromotionPrizeMaster(mid)
     if master is None:
         return
     
     model_mgr = self.getModelMgr()
     v_player = self.getViewerPlayer()
     uid = v_player.id
     
     requirement_id = master.rid
     
     # 達成条件問い合わせ.
     requirement_text = self.getRequirementText([requirement_id]).get(str(requirement_id))
     if not requirement_text:
         # 非公開.
         url = UrlMaker.promotion_prizelist(self.__appname)
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return
     
     # 達成確認.
     userdata = BackendApi.get_promotion_userdata(model_mgr, self.__appname, uid, [mid], using=settings.DB_READONLY).get(mid)
     if userdata is None or userdata.status == Defines.PromotionStatus.NONE:
         # 達成状況問い合わせ.
         flags = self.getRequirementStatus([mid])
         if flags.get(str(mid)):
             wrote_model_mgr, wrote_userdata_dict = db_util.run_in_transaction(Handler.tr_write_achieve, self.__appname, uid, [mid])
             wrote_model_mgr.write_end()
             userdata = wrote_userdata_dict.get(mid) or userdata
     
     obj_promotioninfo_data = None
     obj_promotioninfo = BackendApi.make_promotion_prizeinfo(self, self.__appname, [master], {mid:requirement_text}, {mid:userdata})
     if obj_promotioninfo:
         if obj_promotioninfo['list']:
             obj_promotioninfo_data = obj_promotioninfo['list'][0]
     
     if obj_promotioninfo_data is None:
         # 非対応.
         url = UrlMaker.promotion_prizelist(self.__appname)
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return
     
     self.html_param['promotioninfo_data'] = obj_promotioninfo_data
     
     # 受け取りリンク.
     self.html_param['url_promotion_do'] = self.makeAppLinkUrl(UrlMaker.promotion_prizereceive_do(self.__appname, mid))
     
     self.writeAppHtml('promotion/%s/yesno' % config.htmlname)
コード例 #12
0
ファイル: start.py プロジェクト: hitandaway100/caba
    def process(self):

        # OP閲覧判定.
        current_event = self.getCurrentRaidEvent()
        if current_event is None:
            # 通常はマイページへ遷移.
            url = UrlMaker.mypage()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        model_mgr = self.getModelMgr()
        config = BackendApi.get_current_raideventconfig(
            model_mgr, using=settings.DB_READONLY)
        flagrecord = self.getCurrentRaidFlagRecord()
        if flagrecord is None or not (config.starttime <= flagrecord.opvtime <
                                      config.endtime):
            # OPを見ていない.
            url = UrlMaker.raidevent_opening()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        mid = flagrecord.mid

        # タイムボーナス演出閲覧判定.
        #        now = OSAUtil.get_now()
        #        stime, etime = BackendApi.get_raidevent_timebonus_time(model_mgr, using=settings.DB_READONLY, now=now)
        #        if stime is None or etime is None:
        #            pass
        #        elif not (stime <= flagrecord.tbvtime < etime):
        #            # タイムボーナス演出を見ていない.
        #            url = UrlMaker.raidevent_timebonus()
        #            self.appRedirect(self.makeAppLinkUrlRedirect(url))
        #            return

        # 未確認結果判定.
        cur_happening = self.getHappening()
        if cur_happening:
            eventid = HappeningUtil.get_raideventid(
                cur_happening.happening.event)
            if eventid == mid:
                if (cur_happening.happening.is_cleared()
                        or cur_happening.happening.is_missed_and_not_end()):
                    # 未確認の結果がある.
                    url = UrlMaker.raidresultanim(cur_happening.id)
                    self.appRedirect(self.makeAppLinkUrlRedirect(url))
                    return

        # 通常はマイページへ遷移.
        url = UrlMaker.mypage()
        self.appRedirect(self.makeAppLinkUrlRedirect(url))
コード例 #13
0
    def putNextAreaInfo_PRODUCEEVENTSCOUT(self):
        model_mgr = self.getModelMgr()
        eventmaster = BackendApi.get_current_produce_event_master(
            model_mgr, using=settings.DB_READONLY)
        event_next_stage_getter = lambda: BackendApi.get_produceevent_next_stagemaster(
            model_mgr,
            eventmaster.id,
            self.getAreaMaster(),
            using=settings.DB_READONLY)
        self.__putEventNextAreaInfo(eventmaster, event_next_stage_getter)

        self.html_param['url_scout'] = self.makeAppLinkUrl(
            UrlMaker.produceevent_scouttop())
        self.html_param['url_produceevent_top'] = self.makeAppLinkUrl(
            UrlMaker.produceevent_top())
コード例 #14
0
ファイル: tradeyesno.py プロジェクト: hitandaway100/caba
    def __procEvent(self):
        """イベント用特殊処理.
        """
        cur_eventmaster = self.putRaidEventParams()
        if cur_eventmaster is None:
            # イベントが終わっている.
            self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.trade()))
            return

        v_player = self.getViewerPlayer()

        self.html_param['url_tradedo'] = self.makeAppLinkUrl(
            UrlMaker.tradedo('event', v_player.req_confirmkey))

        self.writeAppHtml('raidevent/tradeyesno')
コード例 #15
0
    def process(self):
        args = self.getUrlArgs('/promotiontop/')
        appname = args.get(0)
        is_recipient = bool(int(self.request.get(Defines.URLQUERY_FLAG, '0')))
        self.html_param['is_recipient'] = is_recipient
        
        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()
        if PlayerCrossPromotion.is_session():
            self.html_param['is_pc'] = self.is_pc
            if self.is_pc:
                # self.html_param['url_goh'] = 'http://rcv.ixd.dmm.com/api/surl?urid=NmcO0Hxz'
                # self.html_param['url_harepai'] = 'http://rcv.ixd.dmm.com/api/surl?urid=XzIUBerr'
                # self.html_param['url_sengoku'] = 'http://www.dmm.co.jp/netgame/feature/sengokuaibu.html'
                self.html_param['url_avst'] = 'http://www.dmm.co.jp/netgame/social/-/gadgets/=/app_id=445699/'
                self.html_param['url_noahs_gate'] = 'http://www.dmm.co.jp/netgame/social/-/gadgets/=/app_id=223705/'
            else:
                # self.html_param['url_goh'] = 'http://rcv.ixd.dmm.com/api/surl?urid=t6vJmS4X'
                # self.html_param['url_harepai'] = 'http://rcv.ixd.dmm.com/api/surl?urid=j9mnDsZP'
                # self.html_param['url_sengoku'] = 'http://www.dmm.co.jp/netgame/feature/sengokuaibu.html'
                self.html_param['url_avst'] = 'http://www.dmm.co.jp/netgame_s/avstrikers/'
                self.html_param['url_noahs_gate'] = 'http://sp.dmm.co.jp/netgame/gadgets/index/app_id/223705/'
            url_base = UrlMaker.promotion_top(appname)
            if is_recipient:
                self.html_param['url_cabaret'] = self.makeAppLinkUrl(url_base)
            else:
                self.html_param['url_recipient'] = self.makeAppLinkUrl(
                    OSAUtil.addQuery(url_base, Defines.URLQUERY_FLAG, '1'))

            # set display information for start time and end time of cross promotion
            start_date = '{d.month}/{d.day} {d.hour}:{d.minute:02}'.format(d=Defines.CROSS_PROMO_START_TIME)
            end_date = '{d.month}/{d.day} {d.hour}:{d.minute:02}'.format(d=Defines.CROSS_PROMO_END_TIME)
            self.html_param['cross_promo_time_limit'] = start_date + '〜' + end_date

            self.html_param['url_treasurelist'] = self.makeAppLinkUrl(UrlMaker.treasurelist())
            self.html_param['url_cabaclubtop'] = self.makeAppLinkUrl(UrlMaker.cabaclubtop())
            self.html_param['url_trade'] = self.makeAppLinkUrl(UrlMaker.trade())
            self.html_param['url_scout'] = self.makeAppLinkUrl(UrlMaker.scout())
            self.html_param['url_battle'] = self.makeAppLinkUrl(UrlMaker.battle())
            self.html_param['url_gacha'] = self.makeAppLinkUrl(
                OSAUtil.addQuery(
                    UrlMaker.gacha(),
                    Defines.URLQUERY_GTYPE,
                    Defines.GachaConsumeType.GTYPE_NAMES[Defines.GachaConsumeType.STEPUP2]
                )
            )

            player_cross_promotion = model_mgr.get_model(PlayerCrossPromotion, v_player.id)
            if player_cross_promotion:
                self.html_param['total_login_count'] = player_cross_promotion.total_login_count
            else:
                self.html_param['total_login_count'] = 0
            self.writeAppHtml('promotion/{0}/top'.format(appname))
            return
        else:
            # 開催期間外ならTopに飛ばす
            self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage()))
            return
コード例 #16
0
    def procResultAnim(self, args):
        """結果演出(イベント限定).
        """
        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()

        # ハプニングとレイド情報を取得.
        raidid = str(args.get(1, ''))
        happeningraidset = None
        if raidid:
            if raidid.isdigit():
                happeningraidset = BackendApi.get_producehappeningraidset(
                    model_mgr, int(raidid), using=settings.DB_READONLY)
            if happeningraidset is None or happeningraidset.raidboss is None:
                raise CabaretError(u'接客できない超太客です',
                                   CabaretError.Code.ILLEGAL_ARGS)
            elif happeningraidset.happening.happening.oid != v_player.id:
                raise CabaretError(u'接客できない超太客です',
                                   CabaretError.Code.ILLEGAL_ARGS)
            elif happeningraidset.happening.happening.is_active():
                raise CabaretError(u'この超太客はまだ終了していません',
                                   CabaretError.Code.ILLEGAL_ARGS)

            url = UrlMaker.produceraidend(raidid)
        else:
            # 未指定なので直前のバトルから.
            raidbattle = BackendApi.get_raid_battleresult(
                model_mgr, v_player.id, using=settings.DB_READONLY)
            if raidbattle is None:
                if settings_sub.IS_LOCAL:
                    raise CabaretError(u'想定外の遷移です')
                url = UrlMaker.mypage()
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
            raidid = raidbattle.raidid

            animdata = raidbattle.process
            # 演出用パラメータ.
            is_win = animdata.winFlag
            if is_win:
                # it should always be win
                url = UrlMaker.produceraidend(raidid)
            else:
                # for debug purposes
                # this should never happen
                url = UrlMaker.produceraidresult()

        self.appRedirect(self.makeAppLinkUrlRedirect(url))
コード例 #17
0
ファイル: explain.py プロジェクト: hitandaway100/caba
    def process(self):

        args = self.getUrlArgs('/produceeventexplain/')
        mid = args.getInt(0)
        ope = args.get(1)

        model_mgr = self.getModelMgr()
        eventmaster = None

        if mid:
            eventmaster = BackendApi.get_produce_event_master(
                model_mgr, mid, using=settings.DB_READONLY)

        if eventmaster is None:
            raise CabaretError(u'閲覧できないイベントです', CabaretError.Code.ILLEGAL_ARGS)

        # 開催中判定.
        cur_eventmaster = self.getCurrentProduceEvent(quiet=True)
        is_opened = cur_eventmaster and cur_eventmaster.id == mid

        self.html_param['is_opened'] = is_opened

        # イベント情報.
        config = BackendApi.get_current_produce_event_config(
            model_mgr, using=settings.DB_READONLY)
        self.html_param['produceevent'] = Objects.produceevent(
            self, eventmaster, config)

        v_player = self.getViewerPlayer()

        self.putEventTopic(mid, 'explain')

        self.html_param['current_topic'] = ope

        table = {
            'detail': self.__proc_detail,
            'prizes': self.__proc_prizes,
            'nominatecast': self.__proc_nominatecast,
            'ranking': self.__proc_ranking,
        }

        for k in table.keys():
            self.html_param['url_produceevent_explain_%s' %
                            k] = self.makeAppLinkUrl(
                                UrlMaker.produceevent_explain(mid, k))
        self.html_param['shop_url'] = self.makeAppLinkUrl(UrlMaker.shop())

        table.get(ope, self.__proc_detail)(eventmaster, is_opened)
コード例 #18
0
 def check(self):
     redirect_url = self.response.get('redirect_url', None)
     if not redirect_url:
         raise AppTestError(u'リダイレクト先が設定されていない')
     elif redirect_url.find(UrlMaker.raidevent_recipe_complete(self.__recipemaster.id)) == -1:
         raise AppTestError(u'リダイレクト先が正しくない')
     
     model_mgr = ModelRequestMgr()
     # 素材数.
     materialdata = BackendApi.get_raidevent_materialdata(model_mgr, self.__player0.id)
     if materialdata is None:
         raise AppTestError(u'素材情報が見つからない')
     elif 0 < sum([0 if materialdata.getMaterialNum(self.__eventmaster.id, i)==0 else 1 for i in xrange(Defines.RAIDEVENT_MATERIAL_KIND_MAX)]):
         raise AppTestError(u'素材数が想定外')
     
     # 交換回数.
     mixdata = BackendApi.get_raidevent_mixdata(model_mgr, self.__player0.id, self.__recipemaster.id)
     if mixdata is None:
         raise AppTestError(u'交換回数情報が見つからない')
     elif mixdata.getCount(self.__eventmaster.id) != (self.__mixdata.getCount(self.__eventmaster.id) + self.__trade_num):
         raise AppTestError(u'交換回数が想定外')
     
     # アイテム.
     itemnum = BackendApi.get_item_nums(model_mgr, self.__player0.id, [self.__itemmaster.id]).get(self.__itemmaster.id, None)
     if itemnum != (self.__item.num + self.__recipemaster.itemnum * self.__trade_num):
         raise AppTestError(u'アイテムの所持数が想定外 %s vs %s' % (itemnum, (self.__item.num + self.__recipemaster.itemnum)))
コード例 #19
0
ファイル: do.py プロジェクト: hitandaway100/caba
class Handler(CabaClubHandler):
    """称号交換書き込み.
    """
    def process(self):
        # 現在時刻.
        now = OSAUtil.get_now()
        # ModelRequestMgr.
        model_mgr = self.getModelMgr()
        # 交換する称号.
        args = self.getUrlArgs('/titledo/')
        mid = args.getInt(0)
        master = BackendApi.get_title_master(
            model_mgr, mid, using=settings.DB_READONLY) if mid else None
        if master is None:
            self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.titletop()))
            return
        # ユーザ情報.
        v_player = self.getViewerPlayer()
        uid = v_player.id
        # 書き込み.
        try:
            db_util.run_in_transaction(self.tr_write, uid, master, now)
        except CabaretError, err:
            if err.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            elif err.code == CabaretError.Code.ILLEGAL_ARGS:
                self.appRedirect(
                    self.makeAppLinkUrlRedirect(UrlMaker.titletop()))
                return
            else:
                raise
        # 書き込み結果のURL.
        url = UrlMaker.titleend(mid)
        self.appRedirect(self.makeAppLinkUrlRedirect(url))
コード例 #20
0
ファイル: apphandler.py プロジェクト: hitandaway100/caba
 def checkUserAgent(self):
     """UserAgentをチェック.
     """
     if self.check_support_terminal():
         return True
     self.appRedirect(self.makeAppLinkUrl(UrlMaker.no_support()))
     return False
コード例 #21
0
 def putHelpFriend(self, raidboss):
     """助けを借りるフレンド.
     """
     model_mgr = self.getModelMgr()
     v_player = self.getViewerPlayer()
     
     params = {}
     
     func_put_playerlist = None
     if self.request.get(Defines.URLQUERY_REM) == '1':
         # フレンドを外す.
         BackendApi.cancel_raidhelpcard(v_player.id, raidboss.id)
     else:
         helpleader = self.getSelectedFriendCard(raidboss.id)
         if helpleader:
             func_put_playerlist = self.putPlayerListByLeaderList(raidboss.id, [helpleader])
     
     friend_callopentime = BackendApi.get_raid_callfriend_opentime(v_player.id)
     if friend_callopentime:
         params['friend_call_opentime'] = Objects.timelimit(friend_callopentime)
     else:
         friend_num = BackendApi.get_friend_num(v_player.id, model_mgr, using=settings.DB_READONLY)
         if 0 < friend_num:
             url = UrlMaker.raidfriendselect(raidboss.id)
             params['url_friendselect'] = self.makeAppLinkUrl(url)
     
     # フレンドを外すリンク.
     url = self.request.url.replace(self.url_cgi, '')
     url = OSAUtil.addQuery(url, Defines.URLQUERY_REM, 1)
     params['url_helpfriend_cancel'] = self.makeAppLinkUrl(url)
     
     self.html_param.update(**params)
     
     return func_put_playerlist
コード例 #22
0
    def process(self):

        args = self.getUrlArgs('/transferreturncomplete/')
        mid = args.getInt(0)
        num = args.getInt(1) or 0

        model_mgr = self.getModelMgr()
        cardmaster = None
        if mid:
            cardmaster = BackendApi.get_cardmasters(
                [mid], arg_model_mgr=model_mgr,
                using=settings.DB_READONLY).get(mid)
        if cardmaster is None or not CardUtil.checkStockableMaster(
                cardmaster, raise_on_error=False):
            raise CabaretError(u'不正な遷移です.', CabaretError.Code.ILLEGAL_ARGS)

        # アルバムへのリンク.
        self.html_param['url_albumdetail'] = self.makeAppLinkUrl(
            UrlMaker.albumdetail(cardmaster.album))

        # カード情報.
        self.html_param['cardmaster'] = Objects.cardmaster(self, cardmaster)

        # 呼び戻した数.
        self.html_param['cardnum'] = num

        self.writeAppHtml('card/transferreturncomplete')
コード例 #23
0
ファイル: apphandler.py プロジェクト: hitandaway100/caba
 def __makeBackLinkUrlScout(self, args):
     if args and 0 < len(args) and str(args[0]).isdigit():
         model_mgr = self.getModelMgr()
         uid = self.getViewerPlayer().id
         mid = int(args[0])
         scoutkey = BackendApi.get_scoutkey(model_mgr,
                                            uid,
                                            mid,
                                            using=settings.DB_READONLY)
         url = UrlMaker.scoutdo(mid, scoutkey)
     else:
         url = UrlMaker.scout()
     return {
         'url': self.makeAppLinkUrl(url, add_frompage=False),
         'text': u'スカウトへ戻る'
     }
コード例 #24
0
ファイル: raidhelpsend.py プロジェクト: hitandaway100/caba
    def process(self):

        v_player = self.getViewerPlayer()

        happeningraidset = self.getHappeningRaidSet()
        if happeningraidset is None or not happeningraidset.happening.happening.is_boss_appeared(
        ):
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'レイドが発生していない')
            url = self.makeAppLinkUrlRedirect(UrlMaker.happening())
            self.appRedirect(url)
            return

        # レイド情報.
        raidboss = happeningraidset.raidboss
        if raidboss is None:
            raise CabaretError(u'レイド情報がありません', CabaretError.Code.UNKNOWN)
        elif not raidboss.raid.helpflag:
            to_other = self.request.get(Defines.URLQUERY_FLAG) == "1"

            try:
                model_mgr = db_util.run_in_transaction(self.tr_write,
                                                       v_player.id, to_other)
                model_mgr.write_end()
            except CabaretError:
                if settings_sub.IS_LOCAL:
                    raise

        url = self.makeAppLinkUrlRedirect(
            self.makeLinkRaidBattlePre(happeningraidset))
        self.appRedirect(url)
コード例 #25
0
ファイル: cardlist.py プロジェクト: hitandaway100/caba
    def process(self):

        args = self.getUrlArgs('/gachacardlist/')
        try:
            mid = int(args.get(0))
        except:
            raise CabaretError(u'表示できない引抜です', CabaretError.Code.ILLEGAL_ARGS)

        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

        # カード情報.
        info = BackendApi.make_gachabox_rateinfo(model_mgr,
                                                 gachamaster,
                                                 using=settings.DB_READONLY)
        self.html_param['gachacardlistinfo'] = info

        # 戻る.
        url = OSAUtil.addQuery(
            UrlMaker.gacha(), Defines.URLQUERY_CTYPE,
            Defines.GachaConsumeType.TO_TOPIC[gachamaster.consumetype])
        self.html_param['url_back'] = self.makeAppLinkUrl(url)

        self.writeAppHtml('gacha/cardlist')
コード例 #26
0
ファイル: album.py プロジェクト: hitandaway100/caba
 def process(self):
     
     v_player = self.getViewerPlayer()
     
     client = OSAUtil.get_cache_client()
     
     ctype = Defines.CharacterType.ALL
     rare = Defines.Rarity.ALL
     page = 0
     if self.request.method == 'GET':
         namespacebase = 'albumlistargs:%s'
         ctype = client.get(v_player.id, namespace=namespacebase % 'ctype') or ctype
         rare = client.get(v_player.id, namespace=namespacebase % 'rare') or rare
         page = client.get(v_player.id, namespace=namespacebase % 'page') or page
     
     try:
         ctype = int(self.request.get(Defines.URLQUERY_CTYPE, ctype))
         rare = int(self.request.get(Defines.URLQUERY_RARE, rare))
         page = int(self.request.get(Defines.URLQUERY_PAGE, page))
     except:
         ctype = Defines.CharacterType.ALL
         rare = Defines.Rarity.ALL
         page = 0
     
     model_mgr = self.getModelMgr()
     
     # プレイヤー情報.
     v_player = self.getViewerPlayer()
     
     # アルバム情報取得.
     offset = page * Defines.ALBUM_PAGE_CONTENT_NUM
     limit = Defines.ALBUM_PAGE_CONTENT_NUM + 1
     albumlist = BackendApi.get_album_list(self, v_player.id, ctype, rare, offset, limit, using=settings.DB_READONLY)
     has_nextpage = Defines.ALBUM_PAGE_CONTENT_NUM < len(albumlist)
     albumlist = albumlist[:Defines.ALBUM_PAGE_CONTENT_NUM]
     
     # アルバムリスト.
     self.html_param['album_list'] = albumlist
     self.html_param['cur_page'] = page + 1
     self.html_param['page_max'] = self.getAlbumPageNumMax(model_mgr, ctype, rare)
     
     self.html_param['ctype'] = ctype
     self.html_param['rare'] = rare
     
     url_base = UrlMaker.album()
     self.html_param['url_post'] = self.makeAppLinkUrl(url_base)
     
     url_base = OSAUtil.addQuery(url_base, Defines.URLQUERY_CTYPE, ctype)
     url_base = OSAUtil.addQuery(url_base, Defines.URLQUERY_RARE, rare)
     if 0 < page:
         self.html_param['url_page_prev'] = self.makeAppLinkUrl(OSAUtil.addQuery(url_base, Defines.URLQUERY_PAGE, page-1))
     if has_nextpage:
         self.html_param['url_page_next'] = self.makeAppLinkUrl(OSAUtil.addQuery(url_base, Defines.URLQUERY_PAGE, page+1))
     
     namespacebase = 'albumlistargs:%s'
     client.set(v_player.id, ctype, namespace=namespacebase % 'ctype')
     client.set(v_player.id, rare, namespace=namespacebase % 'rare')
     client.set(v_player.id, page, namespace=namespacebase % 'page')
     
     self.writeAppHtml('album/album')
コード例 #27
0
class Handler(CabaClubHandler):
    """キャバクラ経営店舗開店.
    """
    def process(self):
        # 現在時刻.
        self.__now = OSAUtil.get_now()
        # ModelRequestMgr.
        model_mgr = self.getModelMgr()
        # 店舗のマスターデータ.
        args = self.getUrlArgs('/cabaclubopen/')
        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
        mid = master.id
        # ユーザ情報.
        v_player = self.getViewerPlayer()
        uid = v_player.id
        try:
            db_util.run_in_transaction(self.tr_write, uid, master, self.__now)
        except CabaretError, err:
            if err.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            elif err.code == CabaretError.Code.ILLEGAL_ARGS:
                self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubstore(mid)))
                return
            else:
                raise
        # 店舗に戻る.
        self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubstore(mid)))
コード例 #28
0
    def process(self):
        args = self.getUrlArgs('/compositiondo/')
        try:
            if settings_sub.IS_BENCH:
                requestkey = OSAUtil.makeSessionID()
            else:
                self.__baseid = int(args.get(0))
                self.__materialidlist = self.getMaterialIdList()
                requestkey = urllib.unquote(args.get(1))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

        v_player = self.getViewerPlayer()

        try:
            model_mgr = db_util.run_in_transaction(Handler.tr_write,
                                                   v_player.id, self.__baseid,
                                                   self.__materialidlist,
                                                   requestkey)
            model_mgr.write_end()
        except CabaretError, e:
            if e.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            else:
                if settings_sub.IS_LOCAL:
                    raise CabaretError(u'合成できませんでした.%s' %
                                       CabaretError.getCodeString(e.code))
                url = UrlMaker.composition()
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
コード例 #29
0
 def putGreetLog(self, o_player):
     """あいさつ履歴.
     """
     NUM = 2
     model_mgr = self.getModelMgr()
     self.html_param['greetlog_list'] = BackendApi.get_greetlog_list(self, o_player.id, limit=NUM, arg_model_mgr=model_mgr, using=settings.DB_READONLY)
     self.html_param['url_greetlog'] = self.makeAppLinkUrl(UrlMaker.greetlog(o_player.id))
コード例 #30
0
class Handler(RaidEventBaseHandler):
    """レイドイベント交換書き込み.
    """
    
    @classmethod
    def getViewerPlayerClassList(cls):
        return [PlayerDeck]
    
    def process(self):
        
        args = self.getUrlArgs('/raideventrecipedo/')
        recipe_id = args.getInt(0)
        confirm_key = urllib.unquote(args.get(1))
        
        trade_num = self.getRecipeTradeNum()
        if not trade_num:
            return
        
        model_mgr = self.getModelMgr()
        eventmaster = self.getCurrentRaidTicketEvent()
        
        v_player = self.getViewerPlayer()
        uid = v_player.id
        eventid = eventmaster.id
        
        # レシピ.
        recipemaster = None
        if recipe_id:
            recipemaster = BackendApi.get_raidevent_recipemaster(model_mgr, recipe_id, using=settings.DB_READONLY)
        if recipemaster is None or recipemaster.eventid != eventid:
            url = UrlMaker.raidevent_recipe_list()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        
        if recipemaster.itype == Defines.ItemType.CARD:
            cardnum = BackendApi.get_cardnum(uid, model_mgr, using=settings.DB_READONLY)
            cardrest = v_player.cardlimit - cardnum
            card_trade_max = int(cardrest / recipemaster.itemnum)
            if card_trade_max < trade_num:
                url = UrlMaker.raidevent_recipe_list()
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
        
        try:
            model_mgr = db_util.run_in_transaction(self.tr_write, uid, eventmaster, recipemaster, trade_num, confirm_key)
            model_mgr.write_end()
        except CabaretError, err:
            if settings_sub.IS_LOCAL:
                raise
            elif err.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            else:
                url = UrlMaker.raidevent_recipe_yesno(recipe_id)
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
        
        # 結果ページヘ.
        url = UrlMaker.raidevent_recipe_complete(recipe_id)
        url = OSAUtil.addQuery(url, Defines.URLQUERY_NUMBER, trade_num)
        self.appRedirect(self.makeAppLinkUrlRedirect(url))