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))
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)
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')
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)
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')
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')