Beispiel #1
0
    def procHappening(self, mid, stagemaster, playdata, event):
        """ハプニング発生.
        """
        model_mgr = self.getModelMgr()
        happeningid = BackendApi.get_current_producehappeningid(
            model_mgr, playdata.uid, using=playdata.current_db, reflesh=True)
        happeningset = BackendApi.get_producehappening(
            model_mgr, happeningid, using=playdata.current_db)
        if happeningset is None:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'ハプニングが発生していません')
            url = UrlMaker.produceevent_top()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        happeningraidset = HappeningRaidSet(happeningset)
        self.html_param['happening'] = Objects.producehappening(
            self, happeningraidset)

        # レイドボス
        raidmaster = BackendApi.get_raid_master(model_mgr,
                                                happeningset.master.boss,
                                                using=settings.DB_READONLY)
        self.html_param['boss'] = Objects.raidmaster(self,
                                                     raidmaster,
                                                     is_produceevent=True)

        self.setFromPage(
            Defines.FromPages.PRODUCEEVENTSCOUT,
            (stagemaster.id, urllib.quote(playdata.confirmkey, '')))
        url = UrlMaker.producehappening()

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

        self.writeHtml(self.eventmaster, 'scout/happening')
Beispiel #2
0
 def cb():
     # ハプニング情報.
     obj_happening = Objects.producehappening(
         self, HappeningRaidSet(happeningset, raidboss), prizeinfo,
         persons.get(o_player.dmmid))
     self.html_param['happening'] = obj_happening
     return obj_happening
Beispiel #3
0
 def putHappeningInfo(self, do_get_end=False):
     """ハプニング情報作成.
     """
     happeningraidset = self.getHappeningRaidSet()
     if not happeningraidset:
         return
     
     happeningset = happeningraidset.happening
     if not do_get_end and happeningset.happening.is_end():
         return
     
     # 獲得した報酬.
     prizelist = self.getPooledPrizeList(happeningset.happening.is_canceled())
     prizeinfo = BackendApi.make_prizeinfo(self, prizelist, using=settings.DB_READONLY)
     
     # ハプニング情報.
     obj_happening = Objects.producehappening(self, happeningraidset, prizeinfo)
     self.html_param['happening'] = obj_happening
     
     return obj_happening
Beispiel #4
0
    def process(self):
        model_mgr = self.getModelMgr()

        event_config = BackendApi.get_current_produce_event_config(
            model_mgr, using=settings.DB_READONLY)

        args = self.getUrlArgs('/produceeventtop/')
        mid = args.getInt(0)
        eventmaster = None

        if not mid and event_config:
            mid = event_config.mid

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

        if not eventmaster:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)

        cur_eventmaster = self.getCurrentProduceEvent(quiet=True)
        is_open = cur_eventmaster and cur_eventmaster.id == mid
        v_player = self.getViewerPlayer()
        uid = v_player.id

        if is_open:
            # 発生中のレイド情報.
            happeningraidset = self.getHappeningRaidSet()
            happeningset = None
            if happeningraidset:
                happeningset = happeningraidset.happening
            if happeningset:
                # レイドがある.
                if (happeningset.happening.is_cleared()):
                    # 未確認の結果がある.
                    url = UrlMaker.raidresultanim(happeningset.id)
                    self.appRedirect(self.makeAppLinkUrlRedirect(url))
                    return
                elif not happeningset.happening.is_end():
                    obj_happening = Objects.producehappening(
                        self, happeningraidset)
                    obj_happening['url_battlepre'] = self.makeAppLinkUrl(
                        UrlMaker.produceevent_battlepre())
                    self.html_param['producehappening'] = obj_happening

            # デッキ編成へのリンクを上書き.
            self.setFromPage(Defines.FromPages.PRODUCEEVENT)
            self.html_param['url_deck_raid'] = self.makeAppLinkUrl(
                UrlMaker.deck_raid())
        # イベント情報.
        self.html_param['produceevent'] = Objects.produceevent(
            self, eventmaster, event_config)

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

        self.html_param['produce_card'] = BackendApi.create_produce_cardinfo(
            self, model_mgr, uid, eventmaster.id)

        # イベント専用スカウトのTOPページへのリンク.
        self.html_param['url_produceevent_scouttop'] = self.makeAppLinkUrl(
            UrlMaker.produceevent_scouttop())

        produce_score = ProduceEventScore.get_instance(
            model_mgr, uid, eventmaster.id, using=settings.DB_READONLY)
        self.html_param['produce_eventscore'] = produce_score.to_dict()

        self.html_param['produce_rank'] = BackendApi.get_ranking_rank(
            ProduceEventRanking, eventmaster.id, uid)

        self.html_param['shop_url'] = self.makeAppLinkUrl(UrlMaker.shop())

        # HTML 作成
        self.writeAppHtml('produce_event/top')
Beispiel #5
0
    def process(self):
        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()
        uid = v_player.id

        # 開催中判定.
        cur_eventmaster = self.getCurrentProduceEvent()
        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_produceeventid(
            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.produceraidend(happeningset.happening.id)))
            return

        produceeventraidmaster = BackendApi.get_produceevent_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_produce_event_config(
            model_mgr, using=settings.DB_READONLY)
        self.html_param['produceevent'] = Objects.produceevent(
            self, cur_eventmaster, config)

        # レイド情報.
        obj_happening = Objects.producehappening(self, happeningraidset)
        self.html_param['happening'] = obj_happening

        # 実行リンク 等倍と3倍.
        url = UrlMaker.produceraiddo(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))

        # イベントデータ.
        scorerecord = BackendApi.get_produceevent_scorerecord(
            model_mgr, mid, uid, using=settings.DB_READONLY)
        self.html_param['produceeventscore'] = Objects.produceevent_score(
            cur_eventmaster, scorerecord, None)

        # 特攻カード.
        #BackendApi.put_raidevent_specialcard_info(self, uid, produceeventraidmaster, 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()

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

        event_item_master = BackendApi.get_itemmaster(
            model_mgr, cur_eventmaster.useitem, using=settings.DB_READONLY)
        has_event_item_nums = BackendApi.get_item_nums(
            model_mgr, uid, [event_item_master.id], using=settings.DB_READONLY)
        if not has_event_item_nums:
            num = 0
        else:
            num = has_event_item_nums[event_item_master.id]
        self.html_param['event_item'] = {
            'name': event_item_master.name,
            'num': num
        }
        self.html_param['shop_url'] = self.makeAppLinkUrl(UrlMaker.shop())
        produce_score = ProduceEventScore.get_instance(
            model_mgr, uid, mid, using=settings.DB_READONLY)
        self.html_param['produce_eventscore'] = produce_score.to_dict()
        self.html_param['produce_rank'] = BackendApi.get_ranking_rank(
            ProduceEventRanking, mid, uid)

        self.writeHtml(cur_eventmaster, 'bossappear')