Beispiel #1
0
    def putRaidEventParams(self, eventmaster=None):
        """レイドイベント用の交換パラメータ.
        """
        model_mgr = self.getModelMgr()
        if eventmaster is None:
            eventmaster = self.getCurrentEventMaster()

        if eventmaster:
            v_player = self.getViewerPlayer()
            uid = v_player.id

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

            # スコア.
            scorerecord = BackendApi.get_raidevent_scorerecord(
                model_mgr, eventmaster.id, uid, using=settings.DB_READONLY)
            rank = BackendApi.get_raidevent_rank(eventmaster.id, uid)
            self.html_param['raideventscore'] = Objects.raidevent_score(
                eventmaster, scorerecord, rank)

        return eventmaster
Beispiel #2
0
    def process(self):

        args = self.getUrlArgs('/raideventexplain/')
        str_eventid = str(args.get(0))
        ope = args.get(1)

        model_mgr = self.getModelMgr()
        eventmaster = None
        mid = None
        if str_eventid.isdigit():
            mid = int(str_eventid)
            eventmaster = BackendApi.get_raideventmaster(
                model_mgr, mid, using=settings.DB_READONLY)

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

        # 開催中判定.
        cur_eventmaster = self.getCurrentRaidEvent(quiet=True)
        if cur_eventmaster and cur_eventmaster.id == mid:
            is_opened = True
        else:
            is_opened = False
        self.html_param['is_opened'] = is_opened

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

        # スコア.
        v_player = self.getViewerPlayer()
        scorerecord = BackendApi.get_raidevent_scorerecord(
            model_mgr, eventmaster.id, v_player.id, using=settings.DB_READONLY)
        rank = BackendApi.get_raidevent_rank(eventmaster.id, v_player.id)
        self.html_param['raideventscore'] = Objects.raidevent_score(
            eventmaster, scorerecord, rank)

        self.putEventTopic(mid, '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.raidevent_explain(mid, k))
        table.get(ope, self.__proc_detail)(eventmaster, is_opened)
Beispiel #3
0
 def process(self):
     
     model_mgr = self.getModelMgr()
     v_player = self.getViewerPlayer()
     uid = v_player.id
     
     # 開催中判定.
     cur_eventmaster = self.getCurrentRaidEvent()
     mid = cur_eventmaster.id
     
     # 現在発生中のレイド.
     happeningraidset = self.getHappeningRaidSet()
     if happeningraidset is None or happeningraidset.raidboss is None:
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage()))
         return
     
     # イベントのレイド判定.
     happeningset = happeningraidset.happening
     raidboss = happeningraidset.raidboss
     eventid = HappeningUtil.get_raideventid(happeningset.happening.event)
     if happeningset.happening.oid != uid:
         # 自分のじゃないのは救援詳細へ.
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.raidhelpdetail(happeningset.id)))
         return
     elif eventid != mid:
         # イベントじゃないレイド.
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.happening()))
         return
     elif not happeningset.happening.is_active():
         # 終了済み.
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.raidend(happeningset.happening.id)))
         return
     
     raideventraidmaster = BackendApi.get_raidevent_raidmaster(model_mgr, cur_eventmaster.id, raidboss.master.id, using=settings.DB_READONLY)
     
     # キャストを借りる.
     func_put_playerlist = self.putHelpFriend(raidboss)
     
     # ダメージ履歴.
     func_put_attacklog = self.putRaidAttackLog(raidboss)
     
     # イベント情報.
     config = BackendApi.get_current_raideventconfig(model_mgr, using=settings.DB_READONLY)
     self.html_param['raidevent'] = Objects.raidevent(self, cur_eventmaster, config)
     
     # レイド情報.
     obj_happening = Objects.happening(self, happeningraidset)
     self.html_param['happening'] = obj_happening
     
     # 実行リンク 等倍と3倍.
     url = UrlMaker.raiddo(raidboss.id, v_player.req_confirmkey)
     self.html_param['url_exec'] = self.makeAppLinkUrl(url)
     self.html_param['url_exec_strong'] = self.makeAppLinkUrl(OSAUtil.addQuery(url, Defines.URLQUERY_STRONG, 1))
     
     # 諦める.
     self.html_param['url_happeningcancel_yesno'] = self.makeAppLinkUrl(UrlMaker.happeningcancel_yesno())
     
     # 初心者フラグ.
     is_beginer = BackendApi.check_raidevent_beginer(model_mgr, uid, cur_eventmaster, config, using=settings.DB_READONLY)
     self.html_param['is_beginer'] = is_beginer
     
     # イベントデータ.
     scorerecord = BackendApi.get_raidevent_scorerecord(model_mgr, mid, uid, using=settings.DB_READONLY)
     rank = BackendApi.get_raidevent_rank(cur_eventmaster.id, uid)
     rank_beginer = BackendApi.get_raidevent_rank(cur_eventmaster.id, uid, is_beginer=True)
     self.html_param['raideventscore'] = Objects.raidevent_score(cur_eventmaster, scorerecord, rank, rank_beginer)
     
     # 特攻カード.
     BackendApi.put_raidevent_specialcard_info(self, uid, raideventraidmaster, using=settings.DB_READONLY)
     
     # このページに戻ってくるリンク.
     self.setFromPage(Defines.FromPages.HAPPENING, happeningset.id)
     BackendApi.put_bprecover_uselead_info(self)
     self.html_param['url_deck_raid'] = self.makeAppLinkUrl(UrlMaker.deck_raid())
     
     # デッキ情報.
     deckcardlist = self.getDeckCardList()
     self.putDeckParams(deckcardlist)
     
     self.execute_api()
     if func_put_attacklog:
         func_put_attacklog()
     if func_put_playerlist:
         func_put_playerlist()
     
     # 説明とランキングのリンク.
     url = UrlMaker.raidevent_top(mid)
     self.html_param['url_raidevent_top'] = self.makeAppLinkUrl(url)
     
     self.html_param['player'] = Objects.player(self, v_player)
     
     self.writeHtml(cur_eventmaster, 'bossappear')
Beispiel #4
0
            # MVP.
            mvp_uidlist = raidboss.getMVPList()
            self.html_param['mvp_uidlist'] = mvp_uidlist

            # それ以外の協力したユーザー.
            func_raidattacklog_callback = self.putRaidAttackLog(raidboss)

            # 秘宝所持数.
            scorerecord = BackendApi.get_raidevent_scorerecord(
                model_mgr,
                raideventid,
                v_player.id,
                using=settings.DB_READONLY)
            rank = BackendApi.get_raidevent_rank(raideventid, v_player.id)
            self.html_param['raideventscore'] = Objects.raidevent_score(
                raideventmaster, scorerecord, rank)
            # 報酬受取り判定.
            flag = False
            flagrecord = BackendApi.get_raidevent_flagrecord(
                model_mgr,
                raideventid,
                v_player.id,
                using=settings.DB_READONLY)
            if scorerecord:
                if scorerecord.destroy and BackendApi.choice_raidevent_notfixed_destroy_prizeids(
                        raideventmaster, scorerecord.destroy, flagrecord,
                        False):
                    flag = True
                elif scorerecord.destroy_big and BackendApi.choice_raidevent_notfixed_destroy_prizeids(
                        raideventmaster, scorerecord.destroy_big, flagrecord,
                        True):
Beispiel #5
0
 def process(self):
     
     args = self.getUrlArgs('/raidhelpdetail/')
     raidid = str(args.get(0, ''))
     
     if not raidid.isdigit():
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'レイドIDの指定がおかしい')
         self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.happening()), u'Illegal ID.')
         return
     raidid = int(raidid)
     
     model_mgr = self.getModelMgr()
     v_player = self.getViewerPlayer()
     uid = v_player.id
     
     # レイド情報.
     raidboss = BackendApi.get_raid(model_mgr, raidid, using=settings.DB_READONLY)
     if raidboss is None:
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'存在しないレイド')
         raidlog = BackendApi.get_raidlog_by_raidid(model_mgr, uid, raidid, using=settings.DB_READONLY)
         if raidlog:
             self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.raidlogdetail(raidlog.id)), u'Raid not Found.')
         else:
             self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.happening()), u'Raid not Found and Log not Found.')
         return
     elif raidboss.raid.oid == uid:
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'自分のレイド')
         self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.happening()), u'Mine.')
         return
     
     happeningset = BackendApi.get_happening(model_mgr, raidid, using=settings.DB_READONLY)
     is_end = False
     if happeningset.happening.is_active():
         # 参加可能かを確認.
         if not BackendApi.check_raid_joinable(model_mgr, raidboss, uid, using=settings.DB_READONLY):
             # もう一度開催確認.
             happeningset = BackendApi.get_happening(ModelRequestMgr(), raidid, using=settings.DB_DEFAULT)
             if happeningset.happening.is_active():
                 if settings_sub.IS_LOCAL:
                     raise CabaretError(u'参加できないレイド')
                 self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.happening()), u'Cannot Join.')
                 return
             else:
                 # チェック中に終了した.
                 is_end = True
     else:
         is_end = True
     
     BackendApi.reset_raidboss_eventraidmaster(model_mgr, raidboss, happeningset.happening.event, using=settings.DB_READONLY)
     
     # プレイヤー情報.
     self.html_param['player'] = Objects.player(self, v_player)
     
     # ダメージ履歴.
     func_put_attacklog = self.putRaidAttackLog(raidboss)
     # お助け.
     func_put_playerlist = self.putHelpFriend(raidboss)
     
     # ハプニング情報.
     o_players = BackendApi.get_players(self, [happeningset.happening.oid], [], using=settings.DB_READONLY)
     dmmid = ''
     if o_players:
         o_player = o_players[0]
         dmmid = o_player.dmmid
         persons = BackendApi.get_dmmplayers(self, o_players, using=settings.DB_READONLY, do_execute=False)
     else:
         persons = {}
     
     if not is_end:
         # デッキ情報.
         deckcardlist = self.getDeckCardList()
         self.putDeckParams(deckcardlist)
     
     self.execute_api()
     
     obj_happening = Objects.happening(self, HappeningRaidSet(happeningset, raidboss), o_person=persons.get(dmmid))
     self.html_param['happening'] = obj_happening
     
     if func_put_attacklog or func_put_playerlist:
         if func_put_attacklog:
             func_put_attacklog()
         if func_put_playerlist:
             func_put_playerlist()
     
     self.setFromPage(Defines.FromPages.RAID, raidid)
     BackendApi.put_bprecover_uselead_info(self)
     
     self.html_param['url_deck_raid'] = self.makeAppLinkUrl(UrlMaker.deck_raid())
     
     # 実行Url.
     url = UrlMaker.raiddo(raidboss.id, v_player.req_confirmkey)
     self.html_param['url_exec_strong'] = self.makeAppLinkUrl(OSAUtil.addQuery(url, Defines.URLQUERY_STRONG, 1))
     self.html_param['url_exec'] = self.makeAppLinkUrl(url)
     self.html_param['url_trade'] = self.makeAppLinkUrl(UrlMaker.trade(), add_frompage=True)
     
     cur_eventmaster = BackendApi.get_current_raideventmaster(model_mgr, using=settings.DB_READONLY)
     eventid = HappeningUtil.get_raideventid(happeningset.happening.event)
     if cur_eventmaster and cur_eventmaster.id == eventid:
         # イベント情報.
         config = BackendApi.get_current_raideventconfig(model_mgr, using=settings.DB_READONLY)
         self.html_param['raidevent'] = Objects.raidevent(self, cur_eventmaster, config)
         
         # イベントデータ.
         scorerecord = BackendApi.get_raidevent_scorerecord(model_mgr, cur_eventmaster.id, uid, using=settings.DB_READONLY)
         rank = BackendApi.get_raidevent_rank(cur_eventmaster.id, uid)
         self.html_param['raideventscore'] = Objects.raidevent_score(cur_eventmaster, scorerecord, rank)
         
         # 特攻カード.
         raideventraidmaster = BackendApi.get_raidevent_raidmaster(model_mgr, cur_eventmaster.id, raidboss.master.id, using=settings.DB_READONLY)
         BackendApi.put_raidevent_specialcard_info(self, uid, raideventraidmaster, using=settings.DB_READONLY)
         
         self.html_param['url_raidevent_top'] = self.makeAppLinkUrl(UrlMaker.raidevent_top(cur_eventmaster.id))
         
         self.html_param['is_end'] = is_end
         
         self.writeAppHtml('raidevent/bossappear')
     elif is_end:
         self.writeAppHtml('raid/helpend')
     else:
         self.writeAppHtml('raid/helpdetail')
Beispiel #6
0
 def process(self):
     
     model_mgr = self.getModelMgr()
     
     config = BackendApi.get_current_raideventconfig(model_mgr, using=settings.DB_READONLY)
     
     args = self.getUrlArgs('/raideventtop/')
     mid = str(args.get(0))
     eventmaster = None
     
     if mid and mid.isdigit():
         mid = int(mid)
     elif config:
         mid = config.mid
     
     if mid:
         eventmaster = BackendApi.get_raideventmaster(model_mgr, mid, using=settings.DB_READONLY)
     
     if eventmaster is None:
         raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED)
         return
     
     cur_eventmaster = self.getCurrentRaidEvent(quiet=True)
     
     mid = eventmaster.id
     
     # 開催中判定.
     is_open = cur_eventmaster and cur_eventmaster.id == mid
     
     v_player = self.getViewerPlayer()
     uid = v_player.id
     scorerecord = BackendApi.get_raidevent_scorerecord(model_mgr, mid, uid, using=settings.DB_READONLY)
     flagrecord = BackendApi.get_raidevent_flagrecord(model_mgr, mid, uid, using=settings.DB_READONLY)
     
     # イベント情報.
     self.html_param['raidevent'] = Objects.raidevent(self, eventmaster, config)
     
     # 説明とランキングのリンク.
     self.putEventTopic(mid, 'top')
     
     if is_open:
         # 救援(1件だけ).
         func_raidhelp = self.putRaidHelpList(do_execute=False, limit=1)
         self.html_param['url_raidhelp_list'] = self.makeAppLinkUrl(UrlMaker.raidevent_helplist())
         
         # 履歴(1件だけ).
         raidlogidlist = BackendApi.get_raidlog_idlist(model_mgr, v_player.id, 0, 1, using=settings.DB_READONLY)
         raidloglist = BackendApi.get_raidlogs(model_mgr, raidlogidlist, using=settings.DB_READONLY).values()
         func_raidlog = BackendApi.put_list_raidlog_obj(self, raidloglist)
         self.html_param['url_raidloglist'] = self.makeAppLinkUrl(UrlMaker.raidloglist())
         
         # 発生中のレイド情報.
         happeningraidset = self.getHappeningRaidSet()
         happeningset = None
         if happeningraidset:
             happeningset = happeningraidset.happening
         if happeningset:
             # レイドがある.
             if (happeningset.happening.is_cleared() or happeningset.happening.is_missed_and_not_end()):
                 # 未確認の結果がある.
                 url = UrlMaker.raidresultanim(happeningset.id)
                 self.appRedirect(self.makeAppLinkUrlRedirect(url))
                 return
             elif not happeningset.happening.is_end():
                 obj_happening = Objects.happening(self, happeningraidset)
                 obj_happening['url_battlepre'] = self.makeAppLinkUrl(UrlMaker.raidevent_battlepre())
                 self.html_param['happening'] = obj_happening
         
         # デッキ編成へのリンクを上書き.
         self.setFromPage(Defines.FromPages.RAIDEVENT)
         self.html_param['url_deck_raid'] = self.makeAppLinkUrl(UrlMaker.deck_raid())
     elif BackendApi.check_raidevent_lead_epilogue(model_mgr, uid, mid, using=settings.DB_READONLY):
         # EDを見ないといけない.
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.raidevent_epilogue()))
         return
     
     # 報酬受取り判定.
     flag = False
     if scorerecord:
         if flagrecord is None:
             flagrecord = BackendApi.update_raideventflagrecord(model_mgr, eventmaster.id, uid, OSAUtil.get_datetime_max())
         if scorerecord.destroy and BackendApi.choice_raidevent_notfixed_destroy_prizeids(eventmaster, scorerecord.destroy, flagrecord, False):
             flag = True
         elif scorerecord.destroy_big and BackendApi.choice_raidevent_notfixed_destroy_prizeids(eventmaster, scorerecord.destroy_big, flagrecord, True):
             flag = True
     if flag:
         self.html_param['url_raidevent_prizereceive'] = self.makeAppLinkUrl(UrlMaker.raidevent_prizereceive_do(mid, v_player.req_confirmkey))
     
     # イベント秘宝所持数.
     # 討伐回数.
     rank = BackendApi.get_raidevent_rank(mid, uid)
     rank_beginer = BackendApi.get_raidevent_rank(mid, uid, is_beginer=True)
     self.html_param['raideventscore'] = Objects.raidevent_score(eventmaster, scorerecord, rank, rank_beginer)
     
     # イベントガチャのリンク.
     self.putEventGachaUrl()
     
     # 初心者フラグ.
     is_beginer = BackendApi.check_raidevent_beginer(model_mgr, uid, eventmaster, config, using=settings.DB_READONLY)
     self.html_param['is_beginer'] = is_beginer
     
     # ランキング.
     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.raidevent_top(mid), Defines.URLQUERY_FLAG, "0")
     url_myrank = OSAUtil.addQuery(UrlMaker.raidevent_top(mid), Defines.URLQUERY_FLAG, "1")
     self.putRanking(uid, mid, view_myrank, url_ranking, url_myrank, view_beginer)
     
     # シャンパン.
     self.putChampagneData()
     
     # 素材.
     self.putMaterialHtml()
     
     # 交換所のURL.
     self.putRecipeUrl()
     
     if eventmaster.flag_dedicated_stage:
         # イベント専用ステージ情報.
         eventstageplaydata = BackendApi.get_raideventstage_playdata(model_mgr, mid, uid, using=settings.DB_READONLY)
         # 現在のステージ.
         cur_stagemaster = BackendApi.get_current_raideventstage_master(model_mgr, eventmaster, eventstageplaydata, using=settings.DB_READONLY)
         if cur_stagemaster is None:
             raise CabaretError(u'ステージが存在いません', CabaretError.Code.INVALID_MASTERDATA)
         
         # 現在のステージ情報.
         progress = eventstageplaydata.progress
         confirmkey = eventstageplaydata.confirmkey
         self.html_param['raideventstage'] = Objects.raidevent_stage(self, v_player, cur_stagemaster.stage, cur_stagemaster, progress, confirmkey)
         
         # イベント専用スカウトのTOPページへのリンク.
         self.html_param['url_raidevent_scouttop'] = self.makeAppLinkUrl(UrlMaker.raidevent_scouttop())
     
     self.execute_api()
     if is_open:
         if func_raidhelp:
             func_raidhelp()
         func_raidlog()
         
         # イベント参加のKPIを保存.
         BackendApi.save_kpi_raidevent_join(uid, self.is_pc)
     
     self.writeHtml(eventmaster, 'top')