def proc_BOSS01_PRE(self, area, boss, deckcardlist): """ボス戦確認. """ self.html_param['area'] = Objects.area(self, area, None) self.html_param['boss'] = Objects.boss(self, boss) self.__putBossResultDeck(deckcardlist) self.html_param['url_bossbattle'] = self.makeAppLinkUrl( self.makeUrlNext()) self.writeAppHtml('tutorial/boss_tuto2')
def proc_BOSS00_RESULT(self, area, boss, deckcardlist): """ボス戦結果 敗北. """ self.html_param['area'] = Objects.area(self, area, None) self.html_param['boss'] = Objects.boss(self, boss, self.__getBossHp(boss, False)) self.__putBossResultDeck(deckcardlist) self.html_param['url_composition_material'] = self.makeAppLinkUrl( self.makeUrlNext()) self.writeAppHtml('boss/bosslose')
def process(self): model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() viewer_id = v_player.id arealist = BackendApi.get_playable_area_all(model_mgr, viewer_id, using=settings.DB_READONLY) playdata_dict = BackendApi.get_areaplaydata(model_mgr, viewer_id, [area.id for area in arealist], using=settings.DB_READONLY) self.json_result_param['arealist'] = [Objects.area(self, area, playdata_dict.get(area.id)) for area in arealist] self.writeAppJson()
def proc_SCOUT00_TOP(self, area, scout, scout_cnt): """スカウトTop. """ v_player = self.getViewerPlayer(True) self.html_param['area'] = Objects.area(self, area, None) obj_scout = Objects.scout(self, v_player, scout, scout_cnt, []) obj_scout['url_exec'] = self.makeAppLinkUrl(self.makeUrlNext()) self.html_param['scoutlist'] = [obj_scout] self.putPlayerInfo(scout_cnt=scout_cnt) self.writeAppHtml('scout/scout')
def proc_SCOUT02_RESULT(self, area, scout, scout_cnt): """宝箱獲得結果. """ v_player = self.getViewerPlayer(True) self.html_param['area'] = Objects.area(self, area, None) self.html_param['scout'] = Objects.scout(self, v_player, scout, scout_cnt, []) self.html_param['url_next'] = self.makeAppLinkUrl(self.makeUrlNext()) self.html_param['treasure_view'] = Objects.treasure_view( self, Defines.TreasureType.SILVER) self.putPlayerInfo(scout_cnt=scout_cnt) self.writeAppHtml('scout/treasureget')
def proc_BOSS01_RESULT(self, area, boss, deckcardlist): """ボス戦結果 勝利. """ model_mgr = self.getModelMgr() prizelist = BackendApi.get_prizelist(model_mgr, area.prizes, using=settings.DB_READONLY) self.html_param['area'] = Objects.area(self, area, None) self.html_param['boss'] = Objects.boss(self, boss, self.__getBossHp(boss, True)) self.__putBossResultDeck(deckcardlist) self.html_param['prize'] = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) self.html_param['url_next'] = self.makeAppLinkUrl(self.makeUrlNext()) self.writeAppHtml('boss/bosswin')
def _makeAreaObj_SCOUT(self, areamaster, playdata=None): return Objects.area(self, areamaster, playdata)
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() viewer_id = v_player.id page_contentnum = Defines.SCOUTAREAMAP_CONTENTNUM_PER_PAGE # 遊べるエリア. arealist = BackendApi.get_playable_area_all(model_mgr, viewer_id, using=settings.DB_READONLY) if not arealist: raise CabaretError(u'エリアがありません', CabaretError.Code.INVALID_MASTERDATA) arealist.sort(key=operator.attrgetter('id'), reverse=True) playdata_dict = BackendApi.get_areaplaydata( model_mgr, viewer_id, [area.id for area in arealist], using=settings.DB_READONLY) # 現在ページ. contentnum = len(arealist) page_max = max( 1, int((contentnum + page_contentnum - 1) / page_contentnum)) page = 0 try: page = min(page_max - 1, int(self.request.get(Defines.URLQUERY_PAGE, 0))) except: pass scoutidlist = [] # 現在エリア. cur_area = arealist[0] self.html_param['area'] = Objects.area(self, cur_area, playdata_dict.get(cur_area.id)) # 現在のスカウト. arr = BackendApi.get_scoutidlist_by_area(model_mgr, cur_area.id, using=settings.DB_READONLY) if not arr: raise CabaretError(u'エリアのスカウトがありません', CabaretError.Code.INVALID_MASTERDATA) arr.sort(reverse=True) scoutmasterdict = BackendApi.get_scout_dict(model_mgr, arr, using=settings.DB_READONLY) for scoutid in arr: master = scoutmasterdict.get(scoutid) if master and BackendApi.check_scout_playable( model_mgr, master, v_player, using=settings.DB_READONLY): scoutidlist.append(scoutid) break # ページのエリア. start = page * page_contentnum end = start + page_contentnum arealist = arealist[start:end] obj_arealist = [] for area in arealist: if area.id != cur_area.id: arr = BackendApi.get_scoutidlist_by_area( model_mgr, area.id, using=settings.DB_READONLY) if not arr: raise CabaretError(u'エリアのスカウトがありません', CabaretError.Code.INVALID_MASTERDATA) arr.sort(reverse=False) scoutidlist.append(arr[0]) obj_arealist.append( Objects.area(self, area, playdata_dict.get(area.id))) obj_scout_dict = dict([ (scout.area, Objects.scout(self, v_player, scout, 0, [])) for scout in BackendApi.get_scouts( model_mgr, scoutidlist, using=settings.DB_READONLY) ]) self.html_param['arealist'] = obj_arealist self.html_param['area_scout_dict'] = obj_scout_dict # ページング. url = UrlMaker.areamap() self.putPagenation(url, page, contentnum, page_contentnum) self.writeAppHtml('scout/areamap')
def process(self): args = self.getUrlArgs('/scoutresult/') try: scoutid = 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 # 進行情報. playdata = BackendApi.get_scoutprogress(model_mgr, v_player.id, [scoutid], using=using).get( scoutid, None) if playdata and playdata.confirmkey == scoutkey: # DBからとり直すべき. playdata = BackendApi.get_scoutprogress(model_mgr, v_player.id, [scoutid], using=settings.DB_DEFAULT, reflesh=True).get( scoutid, None) 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.scout()) self.appRedirect(url) return # プレイヤー. self.html_param['player'] = Objects.player(self, v_player) # スカウト. arr = BackendApi.get_scouts(model_mgr, [scoutid], using=using) scoutmaster = arr[0] if arr else None self.html_param['scout'] = self.makeScoutObj(scoutmaster, playdata) # エリアマスターデータ. areamaster = BackendApi.get_area(model_mgr, scoutmaster.area, using) if areamaster is None: url = self.makeAppLinkUrlRedirect(UrlMaker.scout()) self.appRedirect(url) return # エリアクリア情報. areaplaydata = BackendApi.get_areaplaydata(model_mgr, v_player.id, [areamaster.id], using).get(areamaster.id) self.html_param['area'] = Objects.area(self, areamaster, areaplaydata) # 続ける. url = UrlMaker.scoutdo(scoutmaster.id, playdata.confirmkey) self.html_param['url_scoutdo'] = self.makeAppLinkUrl(url) eventlist = playdata.result.get('event', []) if not eventlist: raise CabaretError(u'スカウト実行の実装に問題があります') # レイドイベント. BackendApi.put_raidevent_champagnedata(self, v_player.id) 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.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(scoutmaster, playdata, event) return raise CabaretError(u'実行可能なスカウト内イベントがありません')