Ejemplo n.º 1
0
 def writeHtmlSwitchEvent(self, name, eventid=None, eventmaster=None, basedir_normal='producehappening'):
     """イベントと通常のHTMLを切り替えて書き込む.
     """
     model_mgr = self.getModelMgr()
     if eventmaster is None:
         eventmaster = BackendApi.get_current_produce_event_master(model_mgr, using=settings.DB_READONLY)
     if eventmaster and (eventid is None or eventmaster.id == eventid):
         if not self.html_param.has_key('url_produceevent_top'):
             self.html_param['url_produceevent_top'] = self.makeAppLinkUrl(UrlMaker.produceevent_top(eventmaster.id))
         if not self.html_param.has_key('produceevent'):
             config = BackendApi.get_current_produce_event_config(model_mgr, using=settings.DB_READONLY)
             self.html_param['produceevent'] = Objects.produceevent(self, eventmaster, config)
         self.writeAppHtml('produce_event/%s' % name)
     else:
         self.writeAppHtml('%s/%s' % (basedir_normal, name))
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
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')
Ejemplo n.º 4
0
    def procResult(self, args):
        """ボス戦結果.
        """
        model_mgr = self.getModelMgr()

        v_player = self.getViewerPlayer()

        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.producehappening()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # レイド情報を取得.
        raidboss = BackendApi.get_raid(model_mgr,
                                       raidbattle.raidid,
                                       using=settings.DB_READONLY)
        if raidboss is None:
            raise CabaretError(u'超太客が存在しません', CabaretError.Code.NOT_DATA)

        animdata = raidbattle.process

        raidboss.raid.hp = animdata.bossHpPost
        if raidboss.raid.hp < 1:
            url = UrlMaker.produceraidend(raidbattle.raidid)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # 借りたカード.
        func_put_playerlist = None
        helpleadercard = raidbattle.getHelpCard()
        if helpleadercard:
            cardmaster = BackendApi.get_cardmasters(
                [helpleadercard.mid], model_mgr,
                using=settings.DB_READONLY).get(helpleadercard.mid)
            helpleader = CardSet(helpleadercard, cardmaster)
            func_put_playerlist = self.putPlayerListByLeaderList(
                raidbattle.raidid, [helpleader])

        # 与えたダメージ.
        self.html_param['damage'] = animdata.bossDamage
        specialcard_powup = getattr(animdata, 'specialcard_powup', 0)
        str_specialcard_powup = None
        if 0 < specialcard_powup:
            str_specialcard_powup = '+%s' % specialcard_powup
        elif specialcard_powup < 0:
            str_specialcard_powup = '%s' % specialcard_powup
        self.html_param['specialcard_powup'] = str_specialcard_powup

        # 属性ボーナス.
        weak_powup = getattr(animdata, 'weak_powup', 0)
        str_weak_powup = None
        if 0 < weak_powup:
            str_weak_powup = '+%s' % weak_powup
        elif weak_powup < 0:
            str_weak_powup = '%s' % weak_powup
        self.html_param['weak_powup'] = str_weak_powup

        # 発動したスキル.
        self.html_param['skilllist'] = animdata.make_html_skilllist()

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

        # 救援のUrl(フレンド).
        url = UrlMaker.raidhelpsend()
        self.html_param['url_helpsend'] = self.makeAppLinkUrl(url)
        self.html_param['url_helpsend_other'] = self.makeAppLinkUrl(
            OSAUtil.addQuery(url, Defines.URLQUERY_FLAG, "1"))

        # ハプニング情報.
        happeningset = BackendApi.get_producehappening(
            model_mgr, raidboss.id, using=settings.DB_READONLY)
        func_happeninginfo_callback = self.putHappeningInfo(happeningset,
                                                            raidboss,
                                                            do_execute=False)

        func_put_attacklog = None

        is_event = False
        produceeventmaster = None
        eventid = HappeningUtil.get_produceeventid(
            happeningset.happening.event)
        if eventid:
            produceeventmaster = BackendApi.get_produce_event_master(
                model_mgr, eventid, using=settings.DB_READONLY)

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

            # ダメージ履歴.
            func_put_attacklog = self.putRaidAttackLog(raidboss)

            # イベント用の設定.
            eventraidmaster = BackendApi.get_produceevent_raidmaster(
                model_mgr,
                produceeventmaster.id,
                raidboss.raid.mid,
                using=settings.DB_READONLY)
            BackendApi.put_raidevent_specialcard_info(
                self, v_player.id, eventraidmaster, using=settings.DB_READONLY)

            self.html_param['url_produceevent_top'] = self.makeAppLinkUrl(
                UrlMaker.produceevent_top(produceeventmaster.id))

            is_event = True

        # 戻るUrl.
        if raidboss.raid.oid == v_player.id:
            # 発見者.
            if is_event:
                url = UrlMaker.produceevent_battlepre()
            else:
                url = UrlMaker.producehappening()
        else:
            # 救援者.
            url = UrlMaker.raidhelpdetail(raidboss.raid.id)
        self.html_param['url_return'] = self.makeAppLinkUrl(url,
                                                            add_frompage=False)

        # デッキ情報.
        deckcardlist = self.getDeckCardList()
        self.__putDeckParams(deckcardlist)

        self.execute_api()
        func_happeninginfo_callback()

        if func_put_playerlist:
            func_put_playerlist()

        if func_put_attacklog:
            func_put_attacklog()

        eventid = HappeningUtil.get_produceeventid(
            happeningset.happening.event)
        self.writeHtmlSwitchEvent('bosslose',
                                  eventid,
                                  eventmaster=produceeventmaster)
Ejemplo n.º 5
0
    def process(self):
        
        try:
            # エリア.
            areaid = int(self.request.get(Defines.URLQUERY_AREA, 0)) or None
            #if self.is_pc and areaid is None:
            #    raise CabaretError()
        except:
            raise CabaretError(u'閲覧できないエリアです', CabaretError.Code.ILLEGAL_ARGS)
        
        v_player = self.getViewerPlayer()
        uid = v_player.id
        
        model_mgr = self.getModelMgr()
        
        using = settings.DB_READONLY
        
        # エリア.
        area = None
        if areaid:
            area = BackendApi.get_area(model_mgr, areaid, using)
        else:
            area = BackendApi.get_lastview_area(model_mgr, uid, using)
            if area is not None:
                areaid = area.id
        
        if area and not BackendApi.check_area_playable(model_mgr, area, uid, using):
            area = None
        
        if area is None:
            # 見つからなかったので最新のエリア.
            areaid = BackendApi.get_newbie_areaid(model_mgr, uid, using)
            area = BackendApi.get_area(model_mgr, areaid, using)
        
        # エリアクリア情報.
        areaplaydata = BackendApi.get_areaplaydata(model_mgr, uid, [area.id], using).get(area.id)
        self.__putParam('area', Objects.area(self, area, areaplaydata))
        
        # スカウト.
        scoutidlist = BackendApi.get_scoutidlist_by_area(model_mgr, area.id, using)
        scoutlist = BackendApi.get_scouts(model_mgr, scoutidlist, using)
        scoutlist.sort(key=operator.attrgetter('id'))
        
        # スカウト進行情報.
        pscoutidlist = scoutidlist[:]
        pscoutidlist.extend([scout.opencondition for scout in scoutlist if scout.opencondition])
        pscoutidlist = list(set(pscoutidlist))
        scoutplaydata_dict = BackendApi.get_scoutprogress(model_mgr, uid, pscoutidlist, using)
        
        obj_scoutlist = []
        allcleared = True
        for scout in scoutlist:
            if not BackendApi.check_scout_playable(model_mgr, scout, v_player, using):
                allcleared = False
                continue
            scoutplaydata = scoutplaydata_dict.get(scout.id)
            obj_scout = self.makeScoutObj(scout, scoutplaydata)
            obj_scoutlist.insert(0, obj_scout)
            if not obj_scout['cleared']:
                allcleared = False
        self.__putParam('scoutlist', obj_scoutlist)
        
        is_last_area = False
        if allcleared:
            if areaplaydata is None:
                # ボス出現.
                boss = BackendApi.get_boss(model_mgr, area.boss, using=using)
                if boss is None:
                    raise CabaretError(u'エリアにボスがいません.%d' % area.id, CabaretError.Code.INVALID_MASTERDATA)
                self.__putParam('boss', Objects.boss(self, boss))
                # ボス戦へのURL.
                url = UrlMaker.bosspre(areaid)
                self.html_param['url_bossbattle'] = self.makeAppLinkUrl(url)
            else:
                # クリア済み.
                next_area_id = BackendApi.get_next_areaid(model_mgr, area.id, using=settings.DB_READONLY)
                if next_area_id == area.id:
                    is_last_area = True
                else:
                    next_area = BackendApi.get_area(model_mgr, next_area_id, using=settings.DB_READONLY)
                    if not BackendApi.check_area_playable(model_mgr, next_area, uid, using=settings.DB_READONLY):
                        is_last_area = True
        self.html_param['is_last_area'] = is_last_area
        
        self.html_param['player'] = Objects.player(self, v_player, None)
        
        
        arealist = BackendApi.get_playable_area_all(model_mgr, uid, using=settings.DB_READONLY)
        prev_area = None
        post_area = None
        flag = False
        for tmparea in arealist:
            if flag:
                post_area = tmparea
                break
            elif area.id == tmparea.id:
                flag = True
            else:
                prev_area = tmparea
        
        url_base = UrlMaker.scout()
        # 前のエリア.
        if prev_area:
            url = OSAUtil.addQuery(url_base, Defines.URLQUERY_AREA, prev_area.id)
            self.html_param['url_area_prev'] = self.makeAppLinkUrl(url)
        # 次のエリア.
        if post_area:
            url = OSAUtil.addQuery(url_base, Defines.URLQUERY_AREA, post_area.id)
            self.html_param['url_area_next'] = self.makeAppLinkUrl(url)
        
        # カードの上限チェック.
        if v_player.cardlimit <= BackendApi.get_cardnum(uid, arg_model_mgr=model_mgr, using=using):
            self.__putParam('overlimit_card', True)
        
        # 宝箱の上限チェック.
        overlimit_treasure_list = BackendApi.get_treasuretype_list_overlimit(model_mgr, uid, using=using)
        self.__putParam('overlimit_treasure', overlimit_treasure_list)
        
        BackendApi.save_lastview_areaid(uid, areaid)

        # スキップフラグ
        self.__putParam('flag_skip', BackendApi.get_scoutskip_flag(uid))
        
        # レイドイベント.
        BackendApi.put_raidevent_champagnedata(self, uid)
        raideventmaster = BackendApi.get_current_raideventmaster(model_mgr, using=settings.DB_READONLY)
        if raideventmaster and raideventmaster.flag_dedicated_stage:
            self.html_param['url_raidevent_scouttop'] = self.makeAppLinkUrl(UrlMaker.raidevent_scouttop())
        
        # スカウトイベント.
        scouteventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=settings.DB_READONLY)
        if scouteventmaster:
            scouteventconfig = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY)
            self.html_param['scoutevent'] = Objects.scouteventmaster(self, scouteventmaster, scouteventconfig)
            self.html_param['url_scoutevent_top'] = self.makeAppLinkUrl(UrlMaker.scoutevent_top(scouteventmaster.id))

        # プロデュースイベント.
        produceeventmaster = BackendApi.get_current_produce_event_master(model_mgr, using=settings.DB_READONLY)
        if produceeventmaster:
            produceeventconfig = BackendApi.get_current_produce_event_config(model_mgr, using=settings.DB_READONLY)
            self.html_param['produceevent'] = Objects.produceevent(self, produceeventmaster, produceeventconfig)
            self.html_param['url_produceevent_scouttop'] = self.makeAppLinkUrl(UrlMaker.produceevent_scouttop())
        
        self.writeAppHtml('scout/scout')
Ejemplo n.º 6
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')