def process(self): now = OSAUtil.get_now() model_mgr = self.getModelMgr() config = BackendApi.get_current_battleeventconfig(model_mgr, using=settings.DB_READONLY) cur_eventmaster = None if config.mid and config.starttime <= now < config.epilogue_endtime: cur_eventmaster = BackendApi.get_battleevent_master(model_mgr, config.mid, using=settings.DB_READONLY) if cur_eventmaster is None: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) return elif config.starttime <= now < config.endtime: self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False) if self.response.isEnd: return v_player = self.getViewerPlayer() uid = v_player.id # 現在の贈り物情報を確認. presentdata = BackendApi.get_battleeventpresent_pointdata(model_mgr, uid, cur_eventmaster.id, using=settings.DB_DEFAULT) pre_data = presentdata.getPreData() if pre_data is None: # 受け取り情報がない. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) return # 達成を一応確認. cur_data = presentdata.getData() presentmaster = BackendApi.get_battleeventpresent_master(model_mgr, cur_eventmaster.id, cur_data['number'], using=settings.DB_READONLY) if presentmaster.point <= presentdata.point: # 達成済みで受け取っていない. playerrequest = BackendApi.get_playerrequest(model_mgr, uid) url = UrlMaker.battleevent_presentreceive(playerrequest.req_confirmkey) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return presentmaster = BackendApi.get_battleeventpresent_master(model_mgr, cur_eventmaster.id, pre_data['number'], using=settings.DB_READONLY) # 演出後のページ. url = OSAUtil.addQuery(UrlMaker.battleevent_present(), Defines.URLQUERY_FLAG, 1) params = { 'backUrl' : self.makeAppLinkUrl(url), 'logoPre' : self.url_static_img + 'event/btevent/%s/' % cur_eventmaster.codename, 'pre' : self.url_static_img, 'item' : presentmaster.thumb, } # 演出へリダイレクト. self.appRedirectToEffect('btevent/event_extra_alcohol/effect.html', params)
def process(self): args = self.getUrlArgs('/profile/') owner_id = args.get(0, None) if owner_id is None or not str(owner_id).isdigit(): raise CabaretError(u'表示するユーザIDが指定されていません.') v_player = self.getViewerPlayer() owner_id = int(owner_id) if owner_id == v_player.id: url = UrlMaker.mypage() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return clslist = [ PlayerTutorial, PlayerExp, PlayerGold, PlayerAp, PlayerDeck, PlayerFriend, PlayerGachaPt, PlayerLogin, PlayerComment, ] playerlist = BackendApi.get_players(self, [owner_id], clslist, using=settings.DB_READONLY) o_player = None if 0 < len(playerlist): o_player = playerlist[0] if o_player is None or not o_player.is_tutorialend(): raise CabaretError(u'このユーザIDは閲覧出来ません.') comments = self.readyProfileCommentRequest(o_player) self.putCardInfo(o_player) self.putFriendInfos(o_player) self.putBattleKOs(o_player) self.putRareLog(o_player) self.putGreetLog(o_player) persons = self.getDmmPlayerInfo(o_player) self.putIgnorelist(o_player) self.putPlayerInfo(o_player, persons.get(o_player.dmmid)) self.putProfileComment(o_player, comments) if self.getFromPageName() == Defines.FromPages.CABACLUB_STORE: args = self.getFromPageArgs() mid = int(args[0]) if args and str(args[0]).isdigit() else None self.html_param['frompage_url'] = self.makeAppLinkUrlRedirect(UrlMaker.cabaclubrank(mid), add_frompage=False) self.writeAppHtml('profile')
def process(self): args = self.getUrlArgs('/happeninganim/') try: key = urllib.unquote(args.get(0)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() # 進行情報. if v_player.req_alreadykey != key: if settings_sub.IS_LOCAL: raise CabaretError(u'キーが正しくありません %s vs %s' % (v_player.req_alreadykey, key)) url = self.makeAppLinkUrlRedirect(UrlMaker.happening()) self.appRedirect(url) return master = self.getHappeningMaster() resultlist = v_player.happening_result.get('result', []) eventlist = v_player.happening_result.get('event', []) if eventlist: # ここで必要なのははじめの1件. event = eventlist[0] else: # なにも起きなかった. event = ScoutEventNone.create() eventKind = event.get_type() backUrl = None # イベント毎の設定. if eventKind == Defines.ScoutEventType.NONE: # そのままもう一回. backUrl = UrlMaker.happeningdo() elif eventKind in (Defines.ScoutEventType.LEVELUP, Defines.ScoutEventType.COMPLETE): # 結果表示へ. backUrl = UrlMaker.happeningresultanim(key) # 結果表示へ. backUrl = backUrl or UrlMaker.happeningresult(key) params = BackendApi.make_scoutanim_params(self, master, eventlist, resultlist) if params is None: # 演出不要. self.appRedirect(self.makeAppLinkUrlRedirect(backUrl)) return params['backUrl'] = self.makeAppLinkUrl(backUrl) self.appRedirectToEffect('scout/effect.html', params)
def process(self): battleplayer = self.getBattlePlayer() if battleplayer is None or battleplayer.opponent == 0: # 対戦相手設定へ. self.redirectToOppSelect() return obj_list = self.getObjPlayerListByID([battleplayer.opponent]) if not obj_list: # これも飛ばしておく. self.redirectToOppSelect() return self.setFromPage(Defines.FromPages.BATTLEPRE) v_player = self.getViewerPlayer() rankmaster = self.getBattleRankMaster() self.html_param['o_player'] = obj_list[0] self.html_param['player'] = Objects.player(self, v_player) self.html_param['battleplayer'] = Objects.battleplayer(self, battleplayer, rankmaster) # 最大ランク. model_mgr = self.getModelMgr() self.html_param['max_rank'] = BackendApi.get_battlerank_max(model_mgr, using=settings.DB_READONLY) # 残り対戦相手変更回数. self.html_param['opponent_change_restnum'] = BackendApi.get_battle_opponent_change_restcnt(model_mgr, battleplayer, rankmaster, using=settings.DB_READONLY) # アイテム. BackendApi.put_bprecover_uselead_info(self) # バトル開始URL. battleplayer = self.getBattlePlayer() url = UrlMaker.battledo(battleplayer.result) self.html_param['url_battle_do'] = self.makeAppLinkUrl(url) # 相手変更URL. url = UrlMaker.battleoppselect(battleplayer.change_cnt + 1) self.html_param['url_battle_oppselect'] = self.makeAppLinkUrl(url) # 金の鍵の獲得率. self.html_param['goldkey_rate'] = BackendApi.get_battle_goldkey_rate(model_mgr, battleplayer, rankmaster, using=settings.DB_READONLY) # 書き込み. if v_player.get_bp() < rankmaster.bpcost: self.writeAppHtml('battle/battleapnone') else: self.writeAppHtml('battle/battleselect')
def process(self): model_mgr = self.getModelMgr() args = self.getUrlArgs('/battleeventresultanim/') eventid = args.getInt(0) rarity = args.getInt(1) piecenumber = args.getInt(2) is_complete = args.getInt(3) eventmaster = None if eventid: eventmaster = BackendApi.get_battleevent_master( model_mgr, eventid, using=settings.DB_READONLY) if eventmaster is None: if settings_sub.IS_LOCAL: raise CabaretError(u'引数がおかしい') self.redirectToTop() return v_player = self.getViewerPlayer() uid = v_player.id # 結果データ. battleresult = BackendApi.get_battleevent_battleresult( model_mgr, eventid, uid, using=settings.DB_READONLY) if battleresult is None: # 結果が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'結果がない') url = UrlMaker.battleevent_top(eventid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return swf_params = {} piecedata = battleresult.data.get('piecedata') if piecedata and not piecedata.get('is_item'): url = UrlMaker.battleevent_battlepiecepresent( eventid, piecedata['rarity'], piecedata['piece'], piecedata['is_complete']) else: url = UrlMaker.battleevent_battleresult(eventid) swf_params['backUrl'] = self.makeAppLinkUrl(url) # 結果によって演出を変更. data = battleresult.data if data['is_win']: self.appRedirectToEffect('youwin/effect.html', swf_params) else: self.appRedirectToEffect('youlose/effect.html', swf_params)
def process(self): v_player = self.getViewerPlayer() args = self.getUrlArgs('/gachado/') try: if settings_sub.IS_BENCH: mid = Handler._benchMaster.id key = v_player.req_confirmkey else: mid = int(args.get(0)) key = urllib.unquote(args.get(1)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) self.set_masterid(mid) self.__now = OSAUtil.get_now() if settings_sub.IS_BENCH: key = v_player.req_confirmkey if v_player.req_alreadykey == key: # 実行済み. if settings_sub.IS_LOCAL: raise CabaretError(u'実行済みです') url = UrlMaker.gacharesult(mid, key) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return elif v_player.req_confirmkey != key: # ブラウザバック等. if settings_sub.IS_LOCAL: raise CabaretError(u'キーが正しくありません') url = UrlMaker.gacha() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return model_mgr = self.getModelMgr() master = self.getGachaMaster() if not BackendApi.check_schedule(model_mgr, master.schedule): # 期限切れ. if settings_sub.IS_LOCAL: raise CabaretError(u'期限切れ') url = UrlMaker.gacha() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return if master.consumetype in Defines.GachaConsumeType.PAYMENT_TYPES and (not self.osa_util.is_admin_access or settings_sub.IS_LOCAL): if self.is_pc: self.procPc() else: self.procPayment() else: self.procFree()
def process(self): self.__cardlist = None args = self.getUrlArgs('/compositionmaterial/') try: self.__baseid = int(args.get(0)) except: if settings_sub.IS_LOCAL: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) url = UrlMaker.composition() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() # ベースカード. basecard = BackendApi.get_cards([self.__baseid], model_mgr, using=settings.DB_READONLY) if not basecard or basecard[0].card.uid != v_player.id: if settings_sub.IS_LOCAL: raise CabaretError(u'不正なキャストです.%d' % self.__baseid) url = UrlMaker.composition() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return basecard = basecard[0] self.html_param['basecard'] = Objects.card(self, basecard) self.__basecard = basecard self.loadSortParams( default_sortby=Defines.CardSortType.RARE, default_ckind_type=Defines.CardKind.ListFilterType.ALL_KIND) # プレイヤー情報. self.html_param['player'] = Objects.player(self, v_player) # カード所持数. cardnum = BackendApi.get_cardnum(v_player.id, model_mgr, using=settings.DB_READONLY) self.html_param['cardnum'] = cardnum # カード. self.putCardList() # 確認ページのUrl. url = UrlMaker.compositionyesno(self.__baseid) self.html_param['url_yesno'] = self.makeAppLinkUrl(url) self.writeCompositionHtml('composition/materialselect')
def process(self): eventmaster = self.getCurrentBattleEvent() if not self.checkBattleEventUser(): return args = self.getUrlArgs('/battleeventopplist/') target = args.get(0) table = { 'revenge': self.procRevenge, } func = table.get(target, None) if func is None: func = self.procLevel target = 'lv' func(eventmaster, args) if self.response.isEnd: return v_player = self.getViewerPlayer() # バトルイベント. self.html_param['battleevent'] = Objects.battleevent(self, eventmaster) # 選択中の項目. self.html_param['cur_topic'] = target # 連勝数の表示. model_mgr = self.getModelMgr() user_cvictory_count = BackendApi.get_battleevent_continue_victory( model_mgr, v_player.id, eventmaster.id, using=settings.DB_READONLY).count self.put_user_continue_victory_data(user_cvictory_count) # リンク. self.html_param['url_battleevent_opplist_lv'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist('lv')) self.html_param[ 'url_battleevent_opplist_revenge'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist('revenge')) self.html_param[ 'url_battleevent_opplist_update'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist(target, True)) if eventmaster.is_goukon: self.writeAppHtml('gcevent/battletop') else: self.writeAppHtml('btevent/battletop')
def process(self): v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() # 合成結果. evolutiondata = BackendApi.get_evolutiondata( model_mgr, v_player.id, using=settings.DB_READONLY) # ベースカード. basecardset = BackendApi.get_cards([evolutiondata.result_baseid], model_mgr, using=settings.DB_READONLY) if not basecardset: if settings_sub.IS_LOCAL: raise CabaretError(u'ハメ管理したキャストが見つかりません.') url = UrlMaker.evolution() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return basecardset = basecardset[0] self.html_param['basecard_post'] = Objects.card(self, basecardset) pre_master = BackendApi.get_cardmasters( [evolutiondata.mid], model_mgr, using=settings.DB_READONLY).get(evolutiondata.mid) if pre_master is None or (pre_master.albumhklevel + 1) != basecardset.master.albumhklevel: if settings_sub.IS_LOCAL: raise CabaretError(u'ハメ管理前のキャストが見つかりません.') url = UrlMaker.evolution() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return pre_card = copy(basecardset.card) evolutiondata.set_to_card(pre_card) pre_cardset = CardSet(pre_card, pre_master) self.html_param['basecard_pre'] = Objects.card(self, pre_cardset) # 素材カード. materialcard = BackendApi.get_cards([evolutiondata.result_materialid], model_mgr, using=settings.DB_READONLY, deleted=True) if not materialcard: if settings_sub.IS_LOCAL: raise CabaretError(u'ハメ管理に使用したキャストが見つかりません.') url = UrlMaker.evolution() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return self.html_param['materialcard'] = Objects.card(self, materialcard[0]) self.writeAppHtml('evolution/complete')
def process(self): # 現在時刻. self.__now = OSAUtil.get_now() # ModelRequestMgr. model_mgr = self.getModelMgr() # ユーザ情報. v_player = self.getViewerPlayer() uid = v_player.id # 店舗のマスターデータ. args = self.getUrlArgs('/cabaclubcastselect/') mid = args.getInt(0) master = None if mid: master = BackendApi.get_cabaretclub_store_master( model_mgr, mid, using=settings.DB_READONLY) if master is None: self.appRedirect( self.makeAppLinkUrlRedirect(UrlMaker.cabaclubtop())) return self.__mid = master.id # 削除するID. cardid = args.getInt(1) card = None obj_card = None if cardid: cardlist = BackendApi.get_cards([cardid], model_mgr, using=settings.DB_READONLY) if not cardlist or cardlist[0].card.uid != uid: # カードの指定おかしい. self.appRedirect( self.makeAppLinkUrlRedirect(UrlMaker.cabaclubstore(mid))) return card = cardlist[0] obj_card = Objects.card(self, card) obj_card['url_remove'] = self.makeAppLinkUrl( UrlMaker.cabaclubcastremove(mid, cardid)) self.__cardid = cardid or 0 # 絞り込みのパラメータ. self.loadSortParams(default_sortby=Defines.CardSortType.COST_REV, default_ckind_type=Defines.CardKind.NORMAL, default_maxrare=Defines.Rarity.LIST[-1]) # カード情報埋め込み. self.putCardList() # HTML書き出し. self.html_param.update( current_card=obj_card, url_store=self.makeAppLinkUrl(UrlMaker.cabaclubstore(mid)), ) self.writeBoxHtml('cabaclub/castselect')
def procYesno(self, args, config): """受け取り確認. """ mid = args.getInt(2) master = self.getPromotionPrizeMaster(mid) if master is None: return model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() uid = v_player.id requirement_id = master.rid # 達成条件問い合わせ. requirement_text = self.getRequirementText([requirement_id]).get(str(requirement_id)) if not requirement_text: # 非公開. url = UrlMaker.promotion_prizelist(self.__appname) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 達成確認. userdata = BackendApi.get_promotion_userdata(model_mgr, self.__appname, uid, [mid], using=settings.DB_READONLY).get(mid) if userdata is None or userdata.status == Defines.PromotionStatus.NONE: # 達成状況問い合わせ. flags = self.getRequirementStatus([mid]) if flags.get(str(mid)): wrote_model_mgr, wrote_userdata_dict = db_util.run_in_transaction(Handler.tr_write_achieve, self.__appname, uid, [mid]) wrote_model_mgr.write_end() userdata = wrote_userdata_dict.get(mid) or userdata obj_promotioninfo_data = None obj_promotioninfo = BackendApi.make_promotion_prizeinfo(self, self.__appname, [master], {mid:requirement_text}, {mid:userdata}) if obj_promotioninfo: if obj_promotioninfo['list']: obj_promotioninfo_data = obj_promotioninfo['list'][0] if obj_promotioninfo_data is None: # 非対応. url = UrlMaker.promotion_prizelist(self.__appname) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return self.html_param['promotioninfo_data'] = obj_promotioninfo_data # 受け取りリンク. self.html_param['url_promotion_do'] = self.makeAppLinkUrl(UrlMaker.promotion_prizereceive_do(self.__appname, mid)) self.writeAppHtml('promotion/%s/yesno' % config.htmlname)
def process(self): # OP閲覧判定. current_event = self.getCurrentRaidEvent() if current_event is None: # 通常はマイページへ遷移. url = UrlMaker.mypage() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return model_mgr = self.getModelMgr() config = BackendApi.get_current_raideventconfig( model_mgr, using=settings.DB_READONLY) flagrecord = self.getCurrentRaidFlagRecord() if flagrecord is None or not (config.starttime <= flagrecord.opvtime < config.endtime): # OPを見ていない. url = UrlMaker.raidevent_opening() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return mid = flagrecord.mid # タイムボーナス演出閲覧判定. # now = OSAUtil.get_now() # stime, etime = BackendApi.get_raidevent_timebonus_time(model_mgr, using=settings.DB_READONLY, now=now) # if stime is None or etime is None: # pass # elif not (stime <= flagrecord.tbvtime < etime): # # タイムボーナス演出を見ていない. # url = UrlMaker.raidevent_timebonus() # self.appRedirect(self.makeAppLinkUrlRedirect(url)) # return # 未確認結果判定. cur_happening = self.getHappening() if cur_happening: eventid = HappeningUtil.get_raideventid( cur_happening.happening.event) if eventid == mid: if (cur_happening.happening.is_cleared() or cur_happening.happening.is_missed_and_not_end()): # 未確認の結果がある. url = UrlMaker.raidresultanim(cur_happening.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 通常はマイページへ遷移. url = UrlMaker.mypage() self.appRedirect(self.makeAppLinkUrlRedirect(url))
def putNextAreaInfo_PRODUCEEVENTSCOUT(self): model_mgr = self.getModelMgr() eventmaster = BackendApi.get_current_produce_event_master( model_mgr, using=settings.DB_READONLY) event_next_stage_getter = lambda: BackendApi.get_produceevent_next_stagemaster( model_mgr, eventmaster.id, self.getAreaMaster(), using=settings.DB_READONLY) self.__putEventNextAreaInfo(eventmaster, event_next_stage_getter) self.html_param['url_scout'] = self.makeAppLinkUrl( UrlMaker.produceevent_scouttop()) self.html_param['url_produceevent_top'] = self.makeAppLinkUrl( UrlMaker.produceevent_top())
def __procEvent(self): """イベント用特殊処理. """ cur_eventmaster = self.putRaidEventParams() if cur_eventmaster is None: # イベントが終わっている. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.trade())) return v_player = self.getViewerPlayer() self.html_param['url_tradedo'] = self.makeAppLinkUrl( UrlMaker.tradedo('event', v_player.req_confirmkey)) self.writeAppHtml('raidevent/tradeyesno')
def process(self): args = self.getUrlArgs('/promotiontop/') appname = args.get(0) is_recipient = bool(int(self.request.get(Defines.URLQUERY_FLAG, '0'))) self.html_param['is_recipient'] = is_recipient model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() if PlayerCrossPromotion.is_session(): self.html_param['is_pc'] = self.is_pc if self.is_pc: # self.html_param['url_goh'] = 'http://rcv.ixd.dmm.com/api/surl?urid=NmcO0Hxz' # self.html_param['url_harepai'] = 'http://rcv.ixd.dmm.com/api/surl?urid=XzIUBerr' # self.html_param['url_sengoku'] = 'http://www.dmm.co.jp/netgame/feature/sengokuaibu.html' self.html_param['url_avst'] = 'http://www.dmm.co.jp/netgame/social/-/gadgets/=/app_id=445699/' self.html_param['url_noahs_gate'] = 'http://www.dmm.co.jp/netgame/social/-/gadgets/=/app_id=223705/' else: # self.html_param['url_goh'] = 'http://rcv.ixd.dmm.com/api/surl?urid=t6vJmS4X' # self.html_param['url_harepai'] = 'http://rcv.ixd.dmm.com/api/surl?urid=j9mnDsZP' # self.html_param['url_sengoku'] = 'http://www.dmm.co.jp/netgame/feature/sengokuaibu.html' self.html_param['url_avst'] = 'http://www.dmm.co.jp/netgame_s/avstrikers/' self.html_param['url_noahs_gate'] = 'http://sp.dmm.co.jp/netgame/gadgets/index/app_id/223705/' url_base = UrlMaker.promotion_top(appname) if is_recipient: self.html_param['url_cabaret'] = self.makeAppLinkUrl(url_base) else: self.html_param['url_recipient'] = self.makeAppLinkUrl( OSAUtil.addQuery(url_base, Defines.URLQUERY_FLAG, '1')) # set display information for start time and end time of cross promotion start_date = '{d.month}/{d.day} {d.hour}:{d.minute:02}'.format(d=Defines.CROSS_PROMO_START_TIME) end_date = '{d.month}/{d.day} {d.hour}:{d.minute:02}'.format(d=Defines.CROSS_PROMO_END_TIME) self.html_param['cross_promo_time_limit'] = start_date + '〜' + end_date self.html_param['url_treasurelist'] = self.makeAppLinkUrl(UrlMaker.treasurelist()) self.html_param['url_cabaclubtop'] = self.makeAppLinkUrl(UrlMaker.cabaclubtop()) self.html_param['url_trade'] = self.makeAppLinkUrl(UrlMaker.trade()) self.html_param['url_scout'] = self.makeAppLinkUrl(UrlMaker.scout()) self.html_param['url_battle'] = self.makeAppLinkUrl(UrlMaker.battle()) self.html_param['url_gacha'] = self.makeAppLinkUrl( OSAUtil.addQuery( UrlMaker.gacha(), Defines.URLQUERY_GTYPE, Defines.GachaConsumeType.GTYPE_NAMES[Defines.GachaConsumeType.STEPUP2] ) ) player_cross_promotion = model_mgr.get_model(PlayerCrossPromotion, v_player.id) if player_cross_promotion: self.html_param['total_login_count'] = player_cross_promotion.total_login_count else: self.html_param['total_login_count'] = 0 self.writeAppHtml('promotion/{0}/top'.format(appname)) return else: # 開催期間外ならTopに飛ばす self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) return
def procResultAnim(self, args): """結果演出(イベント限定). """ model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() # ハプニングとレイド情報を取得. raidid = str(args.get(1, '')) happeningraidset = None if raidid: if raidid.isdigit(): happeningraidset = BackendApi.get_producehappeningraidset( model_mgr, int(raidid), using=settings.DB_READONLY) if happeningraidset is None or happeningraidset.raidboss is None: raise CabaretError(u'接客できない超太客です', CabaretError.Code.ILLEGAL_ARGS) elif happeningraidset.happening.happening.oid != v_player.id: raise CabaretError(u'接客できない超太客です', CabaretError.Code.ILLEGAL_ARGS) elif happeningraidset.happening.happening.is_active(): raise CabaretError(u'この超太客はまだ終了していません', CabaretError.Code.ILLEGAL_ARGS) url = UrlMaker.produceraidend(raidid) else: # 未指定なので直前のバトルから. 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.mypage() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return raidid = raidbattle.raidid animdata = raidbattle.process # 演出用パラメータ. is_win = animdata.winFlag if is_win: # it should always be win url = UrlMaker.produceraidend(raidid) else: # for debug purposes # this should never happen url = UrlMaker.produceraidresult() self.appRedirect(self.makeAppLinkUrlRedirect(url))
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 check(self): redirect_url = self.response.get('redirect_url', None) if not redirect_url: raise AppTestError(u'リダイレクト先が設定されていない') elif redirect_url.find(UrlMaker.raidevent_recipe_complete(self.__recipemaster.id)) == -1: raise AppTestError(u'リダイレクト先が正しくない') model_mgr = ModelRequestMgr() # 素材数. materialdata = BackendApi.get_raidevent_materialdata(model_mgr, self.__player0.id) if materialdata is None: raise AppTestError(u'素材情報が見つからない') elif 0 < sum([0 if materialdata.getMaterialNum(self.__eventmaster.id, i)==0 else 1 for i in xrange(Defines.RAIDEVENT_MATERIAL_KIND_MAX)]): raise AppTestError(u'素材数が想定外') # 交換回数. mixdata = BackendApi.get_raidevent_mixdata(model_mgr, self.__player0.id, self.__recipemaster.id) if mixdata is None: raise AppTestError(u'交換回数情報が見つからない') elif mixdata.getCount(self.__eventmaster.id) != (self.__mixdata.getCount(self.__eventmaster.id) + self.__trade_num): raise AppTestError(u'交換回数が想定外') # アイテム. itemnum = BackendApi.get_item_nums(model_mgr, self.__player0.id, [self.__itemmaster.id]).get(self.__itemmaster.id, None) if itemnum != (self.__item.num + self.__recipemaster.itemnum * self.__trade_num): raise AppTestError(u'アイテムの所持数が想定外 %s vs %s' % (itemnum, (self.__item.num + self.__recipemaster.itemnum)))
class Handler(CabaClubHandler): """称号交換書き込み. """ def process(self): # 現在時刻. now = OSAUtil.get_now() # ModelRequestMgr. model_mgr = self.getModelMgr() # 交換する称号. args = self.getUrlArgs('/titledo/') mid = args.getInt(0) master = BackendApi.get_title_master( model_mgr, mid, using=settings.DB_READONLY) if mid else None if master is None: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.titletop())) return # ユーザ情報. v_player = self.getViewerPlayer() uid = v_player.id # 書き込み. try: db_util.run_in_transaction(self.tr_write, uid, master, now) except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass elif err.code == CabaretError.Code.ILLEGAL_ARGS: self.appRedirect( self.makeAppLinkUrlRedirect(UrlMaker.titletop())) return else: raise # 書き込み結果のURL. url = UrlMaker.titleend(mid) self.appRedirect(self.makeAppLinkUrlRedirect(url))
def checkUserAgent(self): """UserAgentをチェック. """ if self.check_support_terminal(): return True self.appRedirect(self.makeAppLinkUrl(UrlMaker.no_support())) return False
def putHelpFriend(self, raidboss): """助けを借りるフレンド. """ model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() params = {} func_put_playerlist = None if self.request.get(Defines.URLQUERY_REM) == '1': # フレンドを外す. BackendApi.cancel_raidhelpcard(v_player.id, raidboss.id) else: helpleader = self.getSelectedFriendCard(raidboss.id) if helpleader: func_put_playerlist = self.putPlayerListByLeaderList(raidboss.id, [helpleader]) friend_callopentime = BackendApi.get_raid_callfriend_opentime(v_player.id) if friend_callopentime: params['friend_call_opentime'] = Objects.timelimit(friend_callopentime) else: friend_num = BackendApi.get_friend_num(v_player.id, model_mgr, using=settings.DB_READONLY) if 0 < friend_num: url = UrlMaker.raidfriendselect(raidboss.id) params['url_friendselect'] = self.makeAppLinkUrl(url) # フレンドを外すリンク. url = self.request.url.replace(self.url_cgi, '') url = OSAUtil.addQuery(url, Defines.URLQUERY_REM, 1) params['url_helpfriend_cancel'] = self.makeAppLinkUrl(url) self.html_param.update(**params) return func_put_playerlist
def process(self): args = self.getUrlArgs('/transferreturncomplete/') mid = args.getInt(0) num = args.getInt(1) or 0 model_mgr = self.getModelMgr() cardmaster = None if mid: cardmaster = BackendApi.get_cardmasters( [mid], arg_model_mgr=model_mgr, using=settings.DB_READONLY).get(mid) if cardmaster is None or not CardUtil.checkStockableMaster( cardmaster, raise_on_error=False): raise CabaretError(u'不正な遷移です.', CabaretError.Code.ILLEGAL_ARGS) # アルバムへのリンク. self.html_param['url_albumdetail'] = self.makeAppLinkUrl( UrlMaker.albumdetail(cardmaster.album)) # カード情報. self.html_param['cardmaster'] = Objects.cardmaster(self, cardmaster) # 呼び戻した数. self.html_param['cardnum'] = num self.writeAppHtml('card/transferreturncomplete')
def __makeBackLinkUrlScout(self, args): if args and 0 < len(args) and str(args[0]).isdigit(): model_mgr = self.getModelMgr() uid = self.getViewerPlayer().id mid = int(args[0]) scoutkey = BackendApi.get_scoutkey(model_mgr, uid, mid, using=settings.DB_READONLY) url = UrlMaker.scoutdo(mid, scoutkey) else: url = UrlMaker.scout() return { 'url': self.makeAppLinkUrl(url, add_frompage=False), 'text': u'スカウトへ戻る' }
def process(self): v_player = self.getViewerPlayer() happeningraidset = self.getHappeningRaidSet() if happeningraidset is None or not happeningraidset.happening.happening.is_boss_appeared( ): if settings_sub.IS_LOCAL: raise CabaretError(u'レイドが発生していない') url = self.makeAppLinkUrlRedirect(UrlMaker.happening()) self.appRedirect(url) return # レイド情報. raidboss = happeningraidset.raidboss if raidboss is None: raise CabaretError(u'レイド情報がありません', CabaretError.Code.UNKNOWN) elif not raidboss.raid.helpflag: to_other = self.request.get(Defines.URLQUERY_FLAG) == "1" try: model_mgr = db_util.run_in_transaction(self.tr_write, v_player.id, to_other) model_mgr.write_end() except CabaretError: if settings_sub.IS_LOCAL: raise url = self.makeAppLinkUrlRedirect( self.makeLinkRaidBattlePre(happeningraidset)) self.appRedirect(url)
def process(self): args = self.getUrlArgs('/gachacardlist/') try: mid = int(args.get(0)) except: raise CabaretError(u'表示できない引抜です', CabaretError.Code.ILLEGAL_ARGS) model_mgr = self.getModelMgr() # マスターデータ. gachamaster = BackendApi.get_gachamaster(model_mgr, mid, using=settings.DB_READONLY) if gachamaster is None: raise CabaretError(u'表示できない引抜です', CabaretError.Code.ILLEGAL_ARGS) self.html_param['gacha_name'] = gachamaster.name # カード情報. info = BackendApi.make_gachabox_rateinfo(model_mgr, gachamaster, using=settings.DB_READONLY) self.html_param['gachacardlistinfo'] = info # 戻る. url = OSAUtil.addQuery( UrlMaker.gacha(), Defines.URLQUERY_CTYPE, Defines.GachaConsumeType.TO_TOPIC[gachamaster.consumetype]) self.html_param['url_back'] = self.makeAppLinkUrl(url) self.writeAppHtml('gacha/cardlist')
def process(self): v_player = self.getViewerPlayer() client = OSAUtil.get_cache_client() ctype = Defines.CharacterType.ALL rare = Defines.Rarity.ALL page = 0 if self.request.method == 'GET': namespacebase = 'albumlistargs:%s' ctype = client.get(v_player.id, namespace=namespacebase % 'ctype') or ctype rare = client.get(v_player.id, namespace=namespacebase % 'rare') or rare page = client.get(v_player.id, namespace=namespacebase % 'page') or page try: ctype = int(self.request.get(Defines.URLQUERY_CTYPE, ctype)) rare = int(self.request.get(Defines.URLQUERY_RARE, rare)) page = int(self.request.get(Defines.URLQUERY_PAGE, page)) except: ctype = Defines.CharacterType.ALL rare = Defines.Rarity.ALL page = 0 model_mgr = self.getModelMgr() # プレイヤー情報. v_player = self.getViewerPlayer() # アルバム情報取得. offset = page * Defines.ALBUM_PAGE_CONTENT_NUM limit = Defines.ALBUM_PAGE_CONTENT_NUM + 1 albumlist = BackendApi.get_album_list(self, v_player.id, ctype, rare, offset, limit, using=settings.DB_READONLY) has_nextpage = Defines.ALBUM_PAGE_CONTENT_NUM < len(albumlist) albumlist = albumlist[:Defines.ALBUM_PAGE_CONTENT_NUM] # アルバムリスト. self.html_param['album_list'] = albumlist self.html_param['cur_page'] = page + 1 self.html_param['page_max'] = self.getAlbumPageNumMax(model_mgr, ctype, rare) self.html_param['ctype'] = ctype self.html_param['rare'] = rare url_base = UrlMaker.album() self.html_param['url_post'] = self.makeAppLinkUrl(url_base) url_base = OSAUtil.addQuery(url_base, Defines.URLQUERY_CTYPE, ctype) url_base = OSAUtil.addQuery(url_base, Defines.URLQUERY_RARE, rare) if 0 < page: self.html_param['url_page_prev'] = self.makeAppLinkUrl(OSAUtil.addQuery(url_base, Defines.URLQUERY_PAGE, page-1)) if has_nextpage: self.html_param['url_page_next'] = self.makeAppLinkUrl(OSAUtil.addQuery(url_base, Defines.URLQUERY_PAGE, page+1)) namespacebase = 'albumlistargs:%s' client.set(v_player.id, ctype, namespace=namespacebase % 'ctype') client.set(v_player.id, rare, namespace=namespacebase % 'rare') client.set(v_player.id, page, namespace=namespacebase % 'page') self.writeAppHtml('album/album')
class Handler(CabaClubHandler): """キャバクラ経営店舗開店. """ def process(self): # 現在時刻. self.__now = OSAUtil.get_now() # ModelRequestMgr. model_mgr = self.getModelMgr() # 店舗のマスターデータ. args = self.getUrlArgs('/cabaclubopen/') mid = args.getInt(0) master = None if mid: master = BackendApi.get_cabaretclub_store_master(model_mgr, mid, using=settings.DB_READONLY) if master is None: # 存在しない. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubtop())) return mid = master.id # ユーザ情報. v_player = self.getViewerPlayer() uid = v_player.id try: db_util.run_in_transaction(self.tr_write, uid, master, self.__now) except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass elif err.code == CabaretError.Code.ILLEGAL_ARGS: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubstore(mid))) return else: raise # 店舗に戻る. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubstore(mid)))
def process(self): args = self.getUrlArgs('/compositiondo/') try: if settings_sub.IS_BENCH: requestkey = OSAUtil.makeSessionID() else: self.__baseid = int(args.get(0)) self.__materialidlist = self.getMaterialIdList() requestkey = urllib.unquote(args.get(1)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() try: model_mgr = db_util.run_in_transaction(Handler.tr_write, v_player.id, self.__baseid, self.__materialidlist, requestkey) model_mgr.write_end() except CabaretError, e: if e.code == CabaretError.Code.ALREADY_RECEIVED: pass else: if settings_sub.IS_LOCAL: raise CabaretError(u'合成できませんでした.%s' % CabaretError.getCodeString(e.code)) url = UrlMaker.composition() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return
def putGreetLog(self, o_player): """あいさつ履歴. """ NUM = 2 model_mgr = self.getModelMgr() self.html_param['greetlog_list'] = BackendApi.get_greetlog_list(self, o_player.id, limit=NUM, arg_model_mgr=model_mgr, using=settings.DB_READONLY) self.html_param['url_greetlog'] = self.makeAppLinkUrl(UrlMaker.greetlog(o_player.id))
class Handler(RaidEventBaseHandler): """レイドイベント交換書き込み. """ @classmethod def getViewerPlayerClassList(cls): return [PlayerDeck] def process(self): args = self.getUrlArgs('/raideventrecipedo/') recipe_id = args.getInt(0) confirm_key = urllib.unquote(args.get(1)) trade_num = self.getRecipeTradeNum() if not trade_num: return model_mgr = self.getModelMgr() eventmaster = self.getCurrentRaidTicketEvent() v_player = self.getViewerPlayer() uid = v_player.id eventid = eventmaster.id # レシピ. recipemaster = None if recipe_id: recipemaster = BackendApi.get_raidevent_recipemaster(model_mgr, recipe_id, using=settings.DB_READONLY) if recipemaster is None or recipemaster.eventid != eventid: url = UrlMaker.raidevent_recipe_list() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return if recipemaster.itype == Defines.ItemType.CARD: cardnum = BackendApi.get_cardnum(uid, model_mgr, using=settings.DB_READONLY) cardrest = v_player.cardlimit - cardnum card_trade_max = int(cardrest / recipemaster.itemnum) if card_trade_max < trade_num: url = UrlMaker.raidevent_recipe_list() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return try: model_mgr = db_util.run_in_transaction(self.tr_write, uid, eventmaster, recipemaster, trade_num, confirm_key) model_mgr.write_end() except CabaretError, err: if settings_sub.IS_LOCAL: raise elif err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: url = UrlMaker.raidevent_recipe_yesno(recipe_id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 結果ページヘ. url = UrlMaker.raidevent_recipe_complete(recipe_id) url = OSAUtil.addQuery(url, Defines.URLQUERY_NUMBER, trade_num) self.appRedirect(self.makeAppLinkUrlRedirect(url))