Пример #1
0
    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')
Пример #2
0
 def process(self):
     
     args = self.getUrlArgs('/battleeventexplain/')
     eventid = args.getInt(0)
     ope = args.get(1)
     
     model_mgr = self.getModelMgr()
     eventmaster = None
     if eventid:
         eventmaster = BackendApi.get_battleevent_master(model_mgr, eventid, using=settings.DB_READONLY)
     
     if eventmaster is None:
         raise CabaretError(u'閲覧できないイベントです', CabaretError.Code.ILLEGAL_ARGS)
     
     v_player = self.getViewerPlayer()
     uid = v_player.id
     
     # 開催中判定.
     cur_eventmaster = self.getCurrentBattleEvent(quiet=True)
     if cur_eventmaster and cur_eventmaster.id == eventid:
         is_opened = True
         do_check_loginbonus = not cur_eventmaster.is_goukon
         if not self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False, do_check_emergency=False, do_check_loginbonus=do_check_loginbonus):
             return
     else:
         is_opened = False
     self.html_param['is_opened'] = is_opened
     
     # イベント情報.
     self.html_param['battleevent'] = Objects.battleevent(self, eventmaster)
     
     # スコア.
     scorerecord = BackendApi.get_battleevent_scorerecord(model_mgr, eventid, uid, using=settings.DB_READONLY)
     rank = BackendApi.get_battleevent_rank(eventid, uid)
     self.html_param['battleevent_score'] = Objects.battleevent_score(self, scorerecord, rank)
     
     self.putEventTopic(eventid, 'explain')
     
     self.html_param['current_topic'] = ope
     
     table = {
         'detail' : self.__proc_detail,
         'prizes' : self.__proc_prizes,
         'nomination' : self.__proc_nomination,
         'faq' : self.__proc_faq,
     }
     for k in table.keys():
         self.html_param['url_explain_%s' % k] = self.makeAppLinkUrl(UrlMaker.battleevent_explain(eventid, k))
     table.get(ope, self.__proc_detail)(eventmaster, is_opened)
Пример #3
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')
Пример #4
0
 def process(self):
     args = self.getUrlArgs('/battleeventteaser/')
     mid = args.getInt(0)
     
     def redirectToMypage():
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage()))
     
     model_mgr = self.getModelMgr()
     now = OSAUtil.get_now()
     config = BackendApi.get_current_battleeventconfig(model_mgr, using=settings.DB_READONLY)
     mid = mid or config.mid
     
     eventmaster = BackendApi.get_battleevent_master(model_mgr, config.mid, using=settings.DB_READONLY)
     if eventmaster is None or not eventmaster.is_goukon:
         # 合コンイベントじゃない.
         redirectToMypage()
         return
     
     # ティザー期間判定.
     is_teaser_open = config.mid == mid and now < config.starttime
     self.html_param['is_teaser_open'] = is_teaser_open
     
     # イベント情報.
     self.html_param['battleevent'] = Objects.battleevent(self, eventmaster, now)
     
     if is_teaser_open:
         # ティザー期間中.
         v_player = self.getViewerPlayer()
         rankrecord = BackendApi.get_battleevent_rankrecord(model_mgr, eventmaster.id, v_player.id, using=settings.DB_READONLY)
         if rankrecord:
             # 登録済み.
             self.__procRegistered(config, eventmaster, rankrecord)
         else:
             self.__procNotRegistered(config, eventmaster)
         if self.response.isEnd:
             return
     
     self.writeAppHtml('gcevent/teaser_info')
Пример #5
0
    def process(self):

        args = self.getUrlArgs('/battleeventranking/')
        eventid = args.getInt(0)
        view_myrank = args.getInt(1) == 1

        model_mgr = self.getModelMgr()
        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

        # 開催中判定.
        cur_eventmaster = self.getCurrentBattleEvent(quiet=True)
        if cur_eventmaster and cur_eventmaster.id == eventid:
            is_opened = True
            if not self.checkBattleEventUser(do_check_battle_open=False,
                                             do_check_regist=False,
                                             do_check_emergency=False):
                return
        else:
            is_opened = False
        self.html_param['is_opened'] = is_opened

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

        self.putEventTopic(eventid, 'ranking')

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

        url_battleevent_ranking = UrlMaker.battleevent_ranking(eventid, False)
        url_battleevent_myrank = UrlMaker.battleevent_ranking(eventid, True)

        # 初心者判定.
        is_beginer = BackendApi.check_battleevent_beginer(
            model_mgr, uid, eventmaster, using=settings.DB_READONLY)
        self.html_param['is_beginer'] = is_beginer

        # ランキング.
        view_beginer = self.request.get(Defines.URLQUERY_BEGINER) == "1"
        if view_beginer and not is_beginer:
            view_myrank = False
        self.putRanking(uid,
                        eventid,
                        view_myrank,
                        url_battleevent_ranking,
                        url_battleevent_myrank,
                        view_beginer=view_beginer)

        if eventmaster.is_goukon:
            self.writeAppHtml('gcevent/ranking')
        else:
            self.writeAppHtml('btevent/ranking')
Пример #6
0
    def process(self):

        model_mgr = self.getModelMgr()

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

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

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

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

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

        self.setFromPage(Defines.FromPages.BATTLEEVENTPRE)

        data = battleresult.data

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    # アイテム獲得.
                    prizelist = BackendApi.get_prizelist(
                        model_mgr,
                        piecedata.get('item_prizeids') or [],
                        using=settings.DB_READONLY)
                    self.html_param['piece_dropiteminfo'] = dict(
                        cardmaster=Objects.cardmaster(self, cardmaster),
                        prize=BackendApi.make_prizeinfo(
                            self, prizelist, using=settings.DB_READONLY))
                else:
                    self.put_drop_castname(model_mgr, eventid,
                                           piecedata['rarity'],
                                           piecedata['piece'])
            self.writeAppHtml(
                '%s/battlewin' %
                ('gcevent' if eventmaster.is_goukon else 'btevent'))
        else:
            self.writeAppHtml(
                '%s/battlelose' %
                ('gcevent' if eventmaster.is_goukon else 'btevent'))
Пример #7
0
class Handler(BattleEventBaseHandler):
    """バトルイベント参加.
    バトル公開中だけ受け付ける.
    バトル公開中にグループに所属していないユーザーが対象.
    合コンイベントの時は登録ページ.
    """
    @classmethod
    def getViewerPlayerClassList(cls):
        return [PlayerExp]

    def process(self):

        eventmaster = self.getCurrentBattleEvent()
        if not self.checkBattleEventUser(do_check_regist=False,
                                         do_check_loginbonus=False):
            return

        if eventmaster.is_goukon:
            self.__procGoukon(eventmaster)
        else:
            self.__procNormal(eventmaster)

    def __procGoukon(self, eventmaster):
        """合コンバトルイベント.
        """
        model_mgr = self.getModelMgr()
        eventid = eventmaster.id

        basetime = DateTimeUtil.toLoginTime(OSAUtil.get_now())
        cdate = datetime.date(basetime.year, basetime.month, basetime.day)
        cur_group = self.getCurrentBattleGroup(do_search_log=False)

        # 設定済みの場合はイベントTOPへリダイレクト.
        if cur_group and cur_group.cdate == cdate:
            url = UrlMaker.battleevent_top(eventmaster.id)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # 最大ランク.
        config = BackendApi.get_current_battleeventconfig(
            model_mgr, using=settings.DB_READONLY)

        # 公開中のランク.
        rankmaster_list = BackendApi.get_battleevent_rankmaster_by_eventid(
            model_mgr, eventid, using=settings.DB_READONLY)
        rankmaster_list.sort(key=lambda x: x.rank)

        # 未設定で引数がある場合は書き込み.
        rank = str(self.request.get(Defines.URLQUERY_ID))
        if rank.isdigit():
            rank = int(rank)
            # ランクの公開確認.
            target_rankmaster = None
            for rankmaster in rankmaster_list:
                if rankmaster.rank == rank:
                    target_rankmaster = rankmaster
                    break
            if target_rankmaster:
                # 登録書き込み.
                v_player = self.getViewerPlayer()
                uid = v_player.id
                try:
                    db_util.run_in_transaction(self.tr_write, config,
                                               eventmaster, uid,
                                               v_player.level, rankmaster_list,
                                               rank).write_end()
                except CabaretError, err:
                    if err.code == CabaretError.Code.ALREADY_RECEIVED:
                        pass
                    elif settings_sub.IS_DEV:
                        raise
                    else:
                        url = UrlMaker.mypage()
                        self.appRedirect(self.makeAppLinkUrlRedirect(url))
                        return

                # 書き込み後はイベントTOPへ.
                url = UrlMaker.battleevent_top(eventmaster.id)
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return

        # 未設定で引数がない場合は選択ページ.
        # イベント情報.
        self.html_param['battleevent'] = Objects.battleevent(self, eventmaster)

        # 各ランクの情報.
        obj_rank_list = []
        rankmaster_list.sort(key=lambda x: x.rank, reverse=True)
        for rankmaster in rankmaster_list:
            obj_rank = BackendApi.make_battleevent_rank_selectobj(
                self, rankmaster)
            obj_rank_list.append(obj_rank)
        self.html_param['battleevent_rank_select'] = obj_rank_list

        # 書き込み実行URL.
        url = UrlMaker.battleevent_regist()
        self.html_param['url_do'] = self.makeAppLinkUrl(url)

        self.putEventTopic(eventmaster.id)

        self.writeAppHtml('gcevent/start')
Пример #8
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

        # 現在の贈り物情報を確認.
        cur_number = None
        presentdata = BackendApi.get_battleeventpresent_pointdata(
            model_mgr, uid, cur_eventmaster.id, using=settings.DB_READONLY)
        if presentdata:
            cur_data = presentdata.getData()
            cur_number = cur_data['number']
        self.html_param['cur_number'] = cur_number

        client = localcache.Client()
        key = 'battleeventpresent_contentlist:%s' % config.mid
        obj_contentlist = client.get(key)
        if obj_contentlist is None:
            presentmasterlist = BackendApi.get_battleeventpresent_master_by_eventdid(
                model_mgr, config.mid, using=settings.DB_READONLY).values()
            presentmasterlist.sort(key=lambda x: x.number)

            obj_contentlist = []
            for presentmaster in presentmasterlist:
                tmp_dict = dict(presentmaster.contents)
                contentmasterlist = BackendApi.get_battleeventpresent_content_master_list(
                    model_mgr, tmp_dict.keys(), using=settings.DB_READONLY)
                contentmasterlist.sort(key=lambda x: x.pri, reverse=True)
                prizeinfo_list = []
                for contentmaster in contentmasterlist:
                    prizelist = BackendApi.get_prizelist(
                        model_mgr,
                        contentmaster.prizes,
                        using=settings.DB_READONLY)
                    prizeinfo = BackendApi.make_prizeinfo(
                        self, prizelist, using=settings.DB_READONLY)
                    prizeinfo['name'] = contentmaster.name
                    prizeinfo_list.append(prizeinfo)
                obj = Objects.battleevent_present_content(
                    self, presentmaster, prizeinfo_list)
                obj_contentlist.append(obj)
            client.set(key, obj_contentlist)
        self.html_param['battleeventpresent_contentlist'] = obj_contentlist

        # 贈り物確認のリンク.
        url = UrlMaker.battleevent_present()
        self.html_param['url_battleevent_present'] = self.makeAppLinkUrl(url)

        # イベント情報.
        self.html_param['battleevent'] = Objects.battleevent(
            self, cur_eventmaster, now)

        # HTML書き出し.
        self.writeAppHtml(
            '%s/presentlist' %
            ('gcevent' if cur_eventmaster.is_goukon else 'btevent'))
Пример #9
0
    def process(self):

        eventmaster = self.getCurrentBattleEvent()
        if not self.checkBattleEventUser():
            return

        args = self.getUrlArgs('/battleeventbattlepre/')
        oid = args.getInt(0)

        rival_index = BackendApi._check_is_rival_strings(
            oid, eventmaster.id, args)
        rival_key = BackendApi.get_rival_key(oid, eventmaster.id, args)

        if rival_key and rival_index == 2:
            revengeid = args.getInt(1)
        elif not rival_key:
            revengeid = args.getInt(1)
        else:
            revengeid = None

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

        obj_v_player = None
        obj_o_player = None
        if oid:
            o_player = BackendApi.get_player(self,
                                             oid, [PlayerFriend, PlayerExp],
                                             using=settings.DB_READONLY)
            if o_player:
                tmp = self.getObjPlayerList([o_player, v_player])

                for obj_player in tmp:
                    if obj_player['id'] == oid:
                        obj_o_player = obj_player
                    elif obj_player['id'] == uid:
                        obj_v_player = obj_player
                if tmp:
                    obj_o_player = tmp[0]
        is_battle_ok = True
        if not obj_o_player:
            url = UrlMaker.battleevent_opplist()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        elif not self.checkOpponentId(
                oid, revengeid, do_redirect=revengeid, args=args):
            # 対戦できない相手.
            if revengeid:
                return
            is_battle_ok = False
        obj_o_player['is_battle_ok'] = is_battle_ok

        self.setFromPage(Defines.FromPages.BATTLEEVENTPRE,
                         [oid, revengeid, rival_key])

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

        # 各プレイヤーの情報.
        self.html_param['player'] = obj_v_player
        self.html_param['o_player'] = obj_o_player

        # ランク情報.
        rankrecord = self.getCurrentBattleRankRecord()
        obj_rankrecord = self.makeRankRecordObj(rankrecord)
        self.html_param['battleevent_rank'] = obj_rankrecord

        # 回復への導線.
        BackendApi.put_bprecover_uselead_info(self)

        # バトル開始URL.
        url = UrlMaker.battleevent_battledo(v_player.req_confirmkey,
                                            oid,
                                            revengeid,
                                            rival_key=rival_key)
        self.html_param['url_battle_do'] = self.makeAppLinkUrl(url)

        # 相手変更URL.
        target = 'revenge' if revengeid else 'lv'
        url = UrlMaker.battleevent_opplist(target)
        self.html_param['url_battle_oppselect'] = self.makeAppLinkUrl(url)

        # 書き込み.
        if eventmaster.is_goukon:
            self.writeAppHtml('gcevent/battleselect')
        else:
            self.writeAppHtml('btevent/battleselect')
Пример #10
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

        view_result = self.request.get(Defines.URLQUERY_FLAG) == '1'

        # 現在の贈り物情報を確認.
        presentdata = BackendApi.get_battleeventpresent_pointdata(
            model_mgr,
            uid,
            cur_eventmaster.id,
            using=(settings.DB_DEFAULT
                   if view_result else settings.DB_READONLY))
        if presentdata is None:
            raise CabaretError(u'このイベントでは閲覧できません')

        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

        # 結果表示フラグ.
        if view_result and presentdata.precontent:
            contentmaster = BackendApi.get_battleeventpresent_content_master(
                model_mgr, presentdata.precontent, using=settings.DB_READONLY)
            prizelist = BackendApi.get_prizelist(model_mgr,
                                                 contentmaster.prizes,
                                                 using=settings.DB_READONLY)
            self.html_param['prize'] = BackendApi.make_prizeinfo(
                self, prizelist, using=settings.DB_READONLY)

        # 現在の贈り物情報.
        self.html_param['battleeventpresent'] = Objects.battleevent_present(
            self, presentmaster, presentdata)

        # イベント情報.
        self.html_param['battleevent'] = Objects.battleevent(
            self, cur_eventmaster, now)

        # 対戦相手一覧のリンク.
        url = UrlMaker.battleevent_opplist()
        self.html_param['url_battleevent_opplist'] = self.makeAppLinkUrl(url)

        # 報酬一覧のリンク.
        url = UrlMaker.battleevent_presentlist()
        self.html_param['url_battleevent_presentlist'] = self.makeAppLinkUrl(
            url)

        # HTML書き出し.
        self.writeAppHtml(
            '%s/present' %
            ('gcevent' if cur_eventmaster.is_goukon else 'btevent'))
Пример #11
0
    def process(self):

        self.__execute_end_worklist = []

        model_mgr = self.getModelMgr()

        config = BackendApi.get_current_battleeventconfig(
            model_mgr, using=settings.DB_READONLY)

        args = self.getUrlArgs('/battleeventtop/')
        eventid = str(args.get(0))
        eventmaster = None

        if eventid and eventid.isdigit():
            eventid = int(eventid)
        elif config:
            eventid = config.mid

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

        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
            return

        self.__eventmaster = eventmaster
        eventid = eventmaster.id
        cur_eventmaster = self.getCurrentBattleEvent(quiet=True)

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

        is_open = cur_eventmaster and eventid == cur_eventmaster.id

        self.setFromPage(Defines.FromPages.BATTLEEVENT, eventid)

        if is_open:
            # 開催中.
            if self.isBattleOpen():
                # バトルが開いている時.
                self.procOpened()
            else:
                # バトルが閉じている時.
                self.procBattleClosed()
            # イベント参加KPI保存.
            BackendApi.save_kpi_battleevent_join(uid, self.is_pc)
        else:
            self.procClosed()

        if self.response.isEnd:
            return

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

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

        # バトルチケットの使用期限
        if is_open:
            self.html_param[
                'battle_ticket_expiry_date'] = self.get_battle_ticket_expiry_date(
                    config.ticket_endtime)

        BackendApi.check_battleevent_piececollection_userdata_and_create(
            model_mgr, uid, eventid)
        self.html_param['allrarity_piece'] = self.create_piece_image_paths(
            uid, eventid)

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

        # バトル履歴.
        if not eventmaster.is_goukon:
            loglist = BackendApi.get_battleevent_battlelog_list(
                model_mgr, uid, limit=1, using=settings.DB_READONLY)
            if loglist:
                func_battleloginfo = BackendApi.make_battleevent_battleloginfo(
                    self, loglist, do_execute=False)
                if func_battleloginfo:

                    def put_battleloginfo():
                        self.html_param['battleloglist'] = func_battleloginfo()

                    self.addExecuteApiWork(put_battleloginfo)

        # バトル履歴のリンク.
        self.html_param['url_battleevent_battlelog'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_loglist())
        tradeshop_urlparam = OSAUtil.addQuery(
            UrlMaker.trade(), Defines.URLQUERY_CTYPE,
            Defines.GachaConsumeType.GachaTopTopic.TICKET)
        self.html_param['url_battleticket_trade'] = self.makeAppLinkUrl(
            tradeshop_urlparam)
        battleticket = BackendApi.get_additional_gachaticket_nums(
            model_mgr,
            v_player.id,
            [Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET],
            using=settings.DB_READONLY)
        if battleticket:
            battle_ticket_num = battleticket[
                Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET].num
        else:
            battle_ticket_num = 0
        self.html_param['battleticket'] = {
            'name':
            Defines.GachaConsumeType.NAMES[
                Defines.GachaConsumeType.BATTLE_TICKET],
            'num':
            battle_ticket_num,
            'unit':
            Defines.ItemType.UNIT[Defines.ItemType.ADDITIONAL_GACHATICKET],
        }

        # グループ履歴のリンク.
        self.html_param['url_battleevent_grouplog'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_grouploglist(eventid))

        if not self.html_param.has_key('battleevent_rank'):
            # ランク情報がないのでデフォルトのを設定.
            if config.isFirstDay():
                rankmaster = BackendApi.get_battleevent_rankmaster(
                    model_mgr,
                    eventid,
                    eventmaster.rankstart,
                    using=settings.DB_READONLY)
            else:
                rankmaster = BackendApi.get_battleevent_rankmaster(
                    model_mgr,
                    eventid,
                    eventmaster.rankbeginer,
                    using=settings.DB_READONLY)
            self.html_param['battleevent_rank'] = Objects.battleevent_rank(
                self, None, rankmaster, None)

        self.executeApiWithWork()

        # 初心者フラグ.
        is_beginer = BackendApi.check_battleevent_beginer(
            model_mgr, uid, eventmaster, config, using=settings.DB_READONLY)
        self.html_param['is_beginer'] = is_beginer

        # ユーザーデータのチェック, カウントの取得
        user_cvictory_count = self.check_user_continue_victory_data(
            uid, eventid)
        self.put_user_continue_victory_data(user_cvictory_count)

        # ランキング.
        view_myrank = False
        view_beginer = self.request.get(Defines.URLQUERY_BEGINER) == "1"
        if not view_beginer or is_beginer:
            view_myrank = self.request.get(Defines.URLQUERY_FLAG) == "1"
        url_ranking = OSAUtil.addQuery(UrlMaker.battleevent_top(eventid),
                                       Defines.URLQUERY_FLAG, "0")
        url_myrank = OSAUtil.addQuery(UrlMaker.battleevent_top(eventid),
                                      Defines.URLQUERY_FLAG, "1")
        self.putRanking(uid,
                        eventid,
                        view_myrank,
                        url_ranking,
                        url_myrank,
                        view_beginer=view_beginer)

        if eventmaster.is_goukon:
            self.writeAppHtml('gcevent/top')
        else:
            self.writeAppHtml('btevent/top')