def procStar(self, mid, stagemaster, playdata, event): """星獲得. """ model_mgr = self.getModelMgr() config = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY) obj_scouteventmaster = Objects.scouteventmaster(self, self.eventmaster, config) self.html_param['scoutevent'] = obj_scouteventmaster self.html_param['star_add'] = event.num self.writeScoutEventHTML('eventstarget', self.eventmaster)
def procEventGacha(self, mid, stagemaster, playdata, event): """イベントガチャポイント. """ model_mgr = self.getModelMgr() config = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY) obj_scouteventmaster = Objects.scouteventmaster(self, self.eventmaster, config) self.html_param['scoutevent'] = obj_scouteventmaster self.html_param['point_add'] = event.point self.writeScoutEventHTML('eventgachaptget', self.eventmaster)
def process(self): args = self.getUrlArgs('/sceventexplain/') 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_scouteventmaster( model_mgr, mid, using=settings.DB_READONLY) if eventmaster is None: raise CabaretError(u'閲覧できないイベントです', CabaretError.Code.ILLEGAL_ARGS) # 開催中判定. cur_eventmaster = self.getCurrentScoutEvent(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_scouteventconfig( model_mgr, using=settings.DB_READONLY) self.html_param['scoutevent'] = Objects.scouteventmaster( self, eventmaster, config) 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.scoutevent_explain(mid, k)) table.get(ope, self.__proc_detail)(eventmaster, is_opened)
def process(self): model_mgr = self.getModelMgr() # 引数. args = self.getUrlArgs('/sceventmovie/') stage = args.getInt(0) # イベントマスターID. eventmaster = self.getCurrentScoutEvent(do_check_schedule=True) eventid = eventmaster.id # 対象のステージ. eventstagemaster = None if stage: eventstagemaster = BackendApi.get_event_stage_by_stagenumber(model_mgr, eventid, stage, using=settings.DB_READONLY) # 動画の閲覧可否. eventmovieid = None if stage == 0 and eventmaster.movie_op: # オープニング用. eventmovieid = eventmaster.movie_op elif eventstagemaster and eventstagemaster.movie: # イベント進行状況. v_player = self.getViewerPlayer() uid = v_player.id playdata = BackendApi.get_event_playdata(model_mgr, eventid, uid, using=settings.DB_READONLY) if stage < playdata.stage: eventmovieid = eventstagemaster.movie eventmoviemaster = None if eventmovieid: eventmoviemaster = BackendApi.get_eventmovie_master(model_mgr, eventmovieid, using=settings.DB_READONLY) # イベント情報. config = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY) self.html_param['scoutevent'] = Objects.scouteventmaster(self, eventmaster, config) if eventmoviemaster: # 動画詳細. self.__procDetail(eventmaster, eventstagemaster, eventmoviemaster) else: # 動画一覧. self.__procList(eventmaster)
def process(self): args = self.getUrlArgs('/sceventtippopulatecomplete/') tanzaku_number = args.getInt(0) tip_num = args.getInt(1) if not tip_num or tip_num < 1: # チップ数が不正. url = UrlMaker.scoutevent_top() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return model_mgr = self.getModelMgr() using = settings.DB_READONLY eventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=using) if eventmaster is None: raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED) mid = eventmaster.id # 短冊のマスターデータ. tanzakumaster = BackendApi.get_scoutevent_tanzakumaster( model_mgr, mid, tanzaku_number, using=settings.DB_READONLY) if tanzakumaster is None: # 存在しない短冊. url = UrlMaker.scoutevent_top() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return self.html_param['scoutevent'] = Objects.scouteventmaster( self, eventmaster, None) self.html_param['scoutevent_tanzaku'] = Objects.scoutevent_tanzaku( self, tanzakumaster) self.html_param['tip_add'] = tip_num # トピック. self.putEventTopic(mid) self.writeScoutEventHTML('tip_populate_complete', eventmaster)
def process(self): v_player = self.getViewerPlayer() uid = v_player.id model_mgr = self.getModelMgr() using = settings.DB_READONLY # イベントマスター. eventmaster = self.getCurrentScoutEvent() mid = eventmaster.id # イベントプレイ情報 playdata = BackendApi.get_event_playdata(model_mgr, mid, uid, using) # 今いるステージ. stage = BackendApi.get_current_scouteventstage_master( model_mgr, eventmaster, playdata, using=settings.DB_READONLY) stageid = stage.stage cardget_event = BackendApi.find_scout_event( playdata, Defines.ScoutEventType.GET_CARD) if cardget_event and not cardget_event.is_received: # カード獲得で離脱した. url = UrlMaker.scouteventresult(stage.id, playdata.alreadykey) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # プレイ情報. self.__putParam('scout', Objects.scoutevent_stage(self, stage, playdata)) # ボス出現. bossattack = False allcleared = BackendApi.check_event_boss_playable(playdata, stage) boss = None if 0 < stage.boss and allcleared: boss = BackendApi.get_boss(model_mgr, stage.boss, using=using) if boss is not None: bossattack = True # ステージ情報. obj_stage = self.makeStageObj(stage, playdata, stageid, bossattack) self.__putParam('stagelist', [obj_stage]) # ボス if bossattack: # ボス戦へのURL. self.__putParam('boss', Objects.boss(self, boss)) self.setFromPage(Defines.FromPages.SCOUTEVENT, stage.id) url = UrlMaker.bosspre(stage.id) self.html_param['url_bossbattle'] = self.makeAppLinkUrl(url) self.html_param['player'] = Objects.player(self, v_player, None) self.html_param['scoutevent'] = Objects.scouteventmaster( self, eventmaster, None) # フィーバー self.html_param['scouteventfever'] = Objects.scoutevent_fever(playdata) # 説明とランキングのリンク. self.putEventTopic(mid, 'top') # カードの上限チェック. 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) self.__putParam('flag_skip', BackendApi.get_scoutskip_flag(uid)) config = BackendApi.get_current_scouteventconfig( model_mgr, using=settings.DB_READONLY) max_stage = config.get_stage_max() is_all_open = max_stage is None self.__putParam('is_all_open', is_all_open) is_all_cleared = False if is_all_open: if allcleared and not bossattack: stagelist_all = BackendApi.get_event_stage_by_stagenumber( model_mgr, mid, using=settings.DB_READONLY) stagelist_all.sort(key=lambda x: x.stage, reverse=True) is_all_cleared = stagelist_all[0].stage <= playdata.cleared else: is_all_cleared = max_stage <= playdata.cleared self.__putParam('is_all_cleared', is_all_cleared) # 短冊情報. BackendApi.put_scoutevent_tanzakudata(self, uid) self.writeScoutEventHTML('scout', eventmaster)
def process(self): args = self.getUrlArgs('/happeningend/') model_mgr = self.getModelMgr() happeningid = str(args.get(0, '')) happeningraid = None if happeningid.isdigit(): happeningraid = BackendApi.get_happeningraidset( model_mgr, int(happeningid), using=settings.DB_READONLY) if happeningraid is None: raise CabaretError(u'ハプニングが見つかりません', CabaretError.Code.ILLEGAL_ARGS) # プレイヤー情報. v_player = self.getViewerPlayer() happeningset = happeningraid.happening raideventid = HappeningUtil.get_raideventid( happeningset.happening.event) if happeningset.happening.is_end( ) and not happeningset.happening.is_missed_and_not_end(): pass else: if happeningset.happening.is_cleared(): if v_player.id == happeningset.happening.oid: # 終了書き込みをさせる. if settings_sub.IS_LOCAL: raise CabaretError(u'まだ終わっていません') url = UrlMaker.raidend(happeningset.happening.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return else: pass elif happeningset.happening.is_missed_and_not_end(): if v_player.id == happeningset.happening.oid: # 終了書き込みをさせる. if settings_sub.IS_LOCAL and not self.request.get('_test'): raise CabaretError(u'終了処理を行っていません') elif raideventid: self.appRedirect( self.makeAppLinkUrlRedirect(UrlMaker.happening())) return else: self.writeHappeningMissed(happeningset.id) else: pass else: if settings_sub.IS_LOCAL: raise CabaretError(u'まだ終わっていません') url = UrlMaker.happening() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return eventmaster = None if raideventid: eventmaster = BackendApi.get_raideventmaster( model_mgr, raideventid, using=settings.DB_READONLY) if eventmaster: # イベント開催中. self.html_param['url_raidevent_top'] = self.makeAppLinkUrl( UrlMaker.raidevent_top(eventmaster.id)) self.html_param['prize'] = None if eventmaster.flag_dedicated_stage: self.html_param[ 'url_raidevent_scouttop'] = self.makeAppLinkUrl( UrlMaker.raidevent_scouttop()) if happeningset.happening.is_canceled(): # キャンセル. self.html_param['cancel'] = True self.writeAppHtml('raidevent/failed') elif happeningset.happening.is_missed(): # 失敗. self.html_param['cancel'] = False self.writeAppHtml('raidevent/failed') else: # 成功. url = UrlMaker.raidend(happeningset.happening.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return else: model_mgr = self.getModelMgr() # スカウトイベント. 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_scouttop'] = self.makeAppLinkUrl( UrlMaker.scoutevent()) # ハプニングの報酬. prizeinfo = None if v_player.id == happeningset.happening.oid: prizelist = self.getPooledPrizeList( happeningset.happening.is_canceled()) if prizelist: prizeinfo = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) # 成否. if happeningset.happening.state in (Defines.HappeningState.END, Defines.HappeningState.CLEAR): # ハプニング情報. self.html_param['happening'] = Objects.happening( self, happeningraid, prizeinfo) # レイドの報酬. self.html_param['raidprize'] = Objects.raidprize( self, v_player, happeningraid.raidboss, happeningset.happening.items.get('dropitems', [])) self.writeAppHtml('happening/prizeget') else: self.html_param['prize'] = prizeinfo self.html_param['cancel'] = happeningset.happening.is_canceled( ) self.writeAppHtml('happening/failed')
def process(self): model_mgr = self.getModelMgr() now = OSAUtil.get_now() # スカウトイベントの設定. config = BackendApi.get_current_scouteventconfig( model_mgr, using=settings.DB_READONLY) if config.mid == 0 or config.present_endtime < now: # 交換が終了している. url = UrlMaker.scoutevent_top(config.mid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return eventid = config.mid eventmaster = BackendApi.get_scouteventmaster( model_mgr, eventid, using=settings.DB_READONLY) # 説明とランキングのリンク. self.putEventTopic(eventid, '') if self.request.method == 'POST': self.__procPost(eventmaster) if self.response.isEnd: return v_player = self.getViewerPlayer() uid = v_player.id record = BackendApi.get_scoutevent_presentnums_record( model_mgr, eventid, uid, get_instance=True, using=settings.DB_READONLY) # プレイヤー情報. self.html_param['player'] = Objects.player(self, v_player) # イベントデータ. obj_scoutevent = Objects.scouteventmaster(self, eventmaster, config) self.html_param['scoutevent'] = obj_scoutevent # ハート所持数. self.html_param['scoutevent_heartnum'] = record.point # 各項目. presentprizemasterlist = BackendApi.get_scoutevent_presentprizemaster_by_eventid( model_mgr, eventid, using=settings.DB_READONLY) obj_presentprizelist = [] flag_allreceived = True for presentprizemaster in presentprizemasterlist: obj_presentprize = BackendApi.make_scoutevent_presentprizeinfo( self, presentprizemaster, record) obj_presentprizelist.append(obj_presentprize) if not obj_presentprize['all_received']: flag_allreceived = False self.html_param['scoutevent_presentprizelist'] = obj_presentprizelist self.html_param['scoutevent_flag_allreceived'] = flag_allreceived # 書き込み先URL. self.html_param['url_post'] = self.makeAppLinkUrl( UrlMaker.scouteventproduce()) target_number = None try: target_number = int(self.request.get(Defines.URLQUERY_NUMBER)) except: pass if target_number is not None and target_number == record.result_number: # 投入結果. pointprizemaster = BackendApi.get_scoutevent_presentprizemaster( model_mgr, eventid, record.result_number, using=settings.DB_READONLY) if pointprizemaster: prize_table = pointprizemaster.get_pointprizes( record.result_pointpre + 1, record.result_pointpost) prizeinfo = None if prize_table: prizeidlist = prize_table.values()[0] prizelist = BackendApi.get_prizelist( model_mgr, prizeidlist, using=settings.DB_READONLY) prizeinfo = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) self.html_param[ 'scoutevent_present_result'] = Objects.scoutevent_present_result( self, record.result_pointpost - record.result_pointpre, prizeinfo) self.writeScoutEventHTML('present', eventmaster)
def process(self): args = self.getUrlArgs('/sceventcardgetresult/') try: stageid = int(args.get(0)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() using = settings.DB_READONLY eventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=using) if eventmaster is None: raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED) mid = eventmaster.id # 進行情報. playdata = BackendApi.get_event_playdata(model_mgr, mid, v_player.id, using) target_event = BackendApi.find_scout_event( playdata, Defines.ScoutEventType.GET_CARD) if target_event is None: if settings_sub.IS_LOCAL: raise CabaretError(u'女の子を発見していません') url = self.makeAppLinkUrlRedirect(UrlMaker.scoutevent()) self.appRedirect(url) return elif not target_event.is_received: if settings_sub.IS_LOCAL: raise CabaretError(u'まだ女の子をスカウトしていません') url = self.makeAppLinkUrlRedirect( UrlMaker.scouteventresult(stageid, playdata.alreadykey)) self.appRedirect(url) return # プレイヤー. self.html_param['player'] = Objects.player(self, v_player) # 獲得したカード. cardmaster = BackendApi.get_cardmasters([target_event.card], arg_model_mgr=model_mgr, using=using).get( target_event.card) card = BackendApi.create_card_by_master(cardmaster) cardset = CardSet(card, cardmaster) self.html_param['card'] = Objects.card(self, cardset, is_new=target_event.is_new) # ステージ. arr = BackendApi.get_event_stages(model_mgr, [stageid], using=using) stagemaster = arr[0] if arr else None self.html_param['scout'] = self.makeStageObj(stagemaster, playdata, stagemaster.stage) # フィーバー self.html_param['scouteventfever'] = Objects.scoutevent_fever(playdata) # スカウト結果. resultlist = playdata.result.get('result', []) self.html_param['scoutresultinfo'] = BackendApi.make_scoutresult_info( resultlist) # イベントポイント self.putEventPoint(mid, v_player.id, playdata) config = BackendApi.get_current_scouteventconfig( model_mgr, using=settings.DB_READONLY) obj_scouteventmaster = Objects.scouteventmaster( self, eventmaster, config) self.html_param['scoutevent'] = obj_scouteventmaster if target_event.is_success: if target_event.autosell: # 自動退店. self.html_param['autosell'] = target_event.autosell self.html_param['_gold_add'] = target_event.sellprice self.html_param['_ckt'] = getattr(target_event, 'sellprice_treasure', 0) self.writeScoutEventHTML('cardgetresult_success', eventmaster) else: self.writeScoutEventHTML('cardgetresult_failed', eventmaster)
def process(self): args = self.getUrlArgs('/sceventresult/') try: stageid = int(args.get(0)) scoutkey = urllib.unquote(args.get(1)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() using = settings.DB_READONLY eventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=using) if eventmaster is None: raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED) mid = eventmaster.id self.eventmaster = eventmaster # 進行情報. playdata = BackendApi.get_event_playdata(model_mgr, mid, v_player.id, using) if playdata and playdata.confirmkey == scoutkey: # DBからとり直すべき. playdata = BackendApi.get_event_playdata(model_mgr, mid, v_player.id, using=settings.DB_DEFAULT, reflesh=True) if playdata is None or playdata.alreadykey != scoutkey: if settings_sub.IS_LOCAL: raise CabaretError(u'キーが正しくありません %s vs %s' % (playdata.alreadykey if playdata else 'None', scoutkey)) url = self.makeAppLinkUrlRedirect(UrlMaker.scoutevent()) self.appRedirect(url) return # プレイヤー. self.html_param['player'] = Objects.player(self, v_player) # ステージ. arr = BackendApi.get_event_stages(model_mgr, [stageid], using=using) stagemaster = arr[0] if arr else None if stagemaster is None: url = self.makeAppLinkUrlRedirect(UrlMaker.scoutevent()) self.appRedirect(url) return self.html_param['scout'] = self.makeStageObj(stagemaster, playdata, stagemaster.stage) # フィーバー. self.html_param['scouteventfever'] = Objects.scoutevent_fever(playdata) # イベントポイント. self.putEventPoint(mid, v_player.id, playdata) # エリアクリア情報. self.html_param['stage'] = Objects.scoutevent_stage(self, stagemaster, playdata) # 続ける. url = UrlMaker.scouteventdo(stagemaster.id, playdata.confirmkey) self.html_param['url_scoutdo'] = self.makeAppLinkUrl(url) eventlist = playdata.result.get('event', []) if not eventlist: raise CabaretError(u'スカウト実行の実装に問題があります') config = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY) obj_scouteventmaster = Objects.scouteventmaster(self, self.eventmaster, config) self.html_param['scoutevent'] = obj_scouteventmaster table = ( (Defines.ScoutEventType.LEVELUP, self.procLevelup), (Defines.ScoutEventType.GET_CARD, self.procGetCard), (Defines.ScoutEventType.GET_TREASURE, self.procGetTreasure), (Defines.ScoutEventType.COMPLETE, self.procComplete), (Defines.ScoutEventType.HAPPENING, self.procHappening), (Defines.ScoutEventType.EVENTGACHA, self.procEventGacha), (Defines.ScoutEventType.LOVETIME_STAR, self.procStar), (Defines.ScoutEventType.AP_NONE, self.procApNone), (Defines.ScoutEventType.NONE, self.procNone), ) eventdict = {} for event in eventlist: eventdict[event.get_type()] = event self.__eventdict = eventdict # スカウト結果. resultlist = playdata.result.get('result', []) self.html_param['scoutresultinfo'] = BackendApi.make_scoutresult_info(resultlist) for eventtype, func in table: event = eventdict.get(eventtype) if event: func(mid, stagemaster, playdata, event) return raise CabaretError(u'実行可能なスカウト内イベントがありません')
def process(self): args = self.getUrlArgs('/sceventranking/') str_eventid = str(args.get(0)) view_myrank = args.get(1) == '1' model_mgr = self.getModelMgr() eventmaster = None mid = None if str_eventid.isdigit(): mid = int(str_eventid) eventmaster = BackendApi.get_scouteventmaster( model_mgr, mid, using=settings.DB_READONLY) if eventmaster is None: raise CabaretError(u'閲覧できないイベントです', CabaretError.Code.ILLEGAL_ARGS) # 開催中判定. cur_eventmaster = self.getCurrentScoutEvent(quiet=True) if cur_eventmaster and cur_eventmaster.id == mid: is_opened = True else: is_opened = False self.html_param['is_opened'] = is_opened self.putEventTopic(mid, 'ranking') # イベント情報. config = BackendApi.get_current_scouteventconfig( model_mgr, using=settings.DB_READONLY) obj_scouteventmaster = Objects.scouteventmaster( self, eventmaster, config) self.html_param['scoutevent'] = obj_scouteventmaster v_player = self.getViewerPlayer() uid = v_player.id # 初心者判定. is_beginer = BackendApi.check_scoutevent_beginer( model_mgr, uid, eventmaster, config=config, 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 url_scoutevent_ranking = UrlMaker.scoutevent_ranking(mid, False) url_scoutevent_myrank = UrlMaker.scoutevent_ranking(mid, True) self.putRanking(uid, mid, view_myrank, url_scoutevent_ranking, url_scoutevent_myrank, view_beginer=view_beginer) self.writeScoutEventHTML('ranking', eventmaster)
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')