def process(self): try: str_idlist = self.request.get(Defines.URLQUERY_ID, '').split(',') uidlist = list(set([int(str_id) for str_id in str_idlist if str_id.isdigit()])) except: uidlist = None v_player = self.getViewerPlayer() viewer_id = v_player.id playerlist = None if uidlist: tmp_uidlist = uidlist[:] playerlist = [] if viewer_id in tmp_uidlist: # 自分自身. tmp_uidlist.remove(viewer_id) playerlist.append(BackendApi.get_players(self, [viewer_id], Handler.VIEWER_MODELS, using=settings.DB_READONLY)[0]) # 他のプレイヤー. playerlist.extend(BackendApi.get_players(self, tmp_uidlist, Handler.OTHERS_MODELS, using=settings.DB_READONLY)) if not playerlist: raise CabaretError(u'指定したプレイヤーが見つかりませんでした', CabaretError.Code.NOT_DATA) # リーダーカード. model_mgr = self.getModelMgr() leaders = BackendApi.get_leaders(uidlist, model_mgr, using=settings.DB_READONLY) # レスポンス用のオブジェクトに変換. obj_playerlist = [Objects.player(self, player, leader=leaders[player.id]) for player in playerlist] self.json_result_param['playerlist'] = obj_playerlist self.writeAppJson()
def process(self): args = self.getUrlArgs('/shopyesno/') try: mid = int(args.get(0)) buy_num = int(self.request.get(Defines.URLQUERY_NUMBER)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) # プレイヤー情報. v_player = self.getViewerPlayer() self.html_param['player'] = Objects.player(self, v_player) self.set_masterid(mid) master = self.getShopMaster() if master is None or master.consumetype == Defines.ShopConsumeType.PAYMENT: # 不正な遷移. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.shop())) return # 購入する数. self.html_param['buy_num'] = buy_num # 購入する商品. self.html_param['shopitem'] = self.makeShopObj() # 購入するURL. url = UrlMaker.shopdo(mid, v_player.req_confirmkey) url = OSAUtil.addQuery(url, Defines.URLQUERY_NUMBER, buy_num) self.html_param['url_buy'] = self.makeAppLinkUrl(url) # 遷移元チェック. self.putFromBackPageLinkUrl() self.writeAppHtml('shop/yesno')
def getObjPlayerList(self, playerlist): obj_list = [] if playerlist: model_mgr = self.getModelMgr() persons = BackendApi.get_dmmplayers(self, playerlist, using=settings.DB_READONLY, do_execute=False) self.execute_api() for player in playerlist: deck = BackendApi.get_deck(player.id, arg_model_mgr=model_mgr, using=settings.DB_READONLY) cardsetlist = BackendApi.get_cards(deck.to_array(), arg_model_mgr=model_mgr, using=settings.DB_READONLY) leader = cardsetlist[0] obj_player = Objects.player(self, player, persons.get(player.dmmid), leader) power_total = leader.power deckmember = [] for cardset in cardsetlist[1:]: obj_card = Objects.card(self, cardset) power_total += obj_card['power'] deckmember.append(obj_card) obj_player['deckmember'] = deckmember obj_player['power_total'] = power_total obj_list.append(obj_player) return obj_list
def get_obj_playerlist(self, uidscoresetlist): model_mgr = self.getModelMgr() obj_playerlist = [] uidscoreset = dict(uidscoresetlist) uidscoreset_keys = uidscoreset.keys() playerlist = BackendApi.get_players(self, uidscoreset_keys, using=settings.DB_READONLY) persons = BackendApi.get_dmmplayers(self, playerlist, using=settings.DB_READONLY, do_execute=False) self.execute_api() leaders = BackendApi.get_leaders(uidscoreset_keys, arg_model_mgr=model_mgr, using=settings.DB_READONLY) for player in playerlist: obj_player = Objects.player(self, player, persons.get(player.dmmid), leaders.get(player.id)) score, rank = uidscoreset[player.id] obj_player['event_score'] = score obj_player['event_rank'] = rank obj_playerlist.append(obj_player) obj_playerlist.sort(key=lambda x: x['event_score'], reverse=True) return obj_playerlist
def process(self): self.__cardlist_all = None self.__cardlist = None self.__filtered_by_skill_cardlist = None self.__skilllist = None model_mgr = self.getModelMgr() self.loadSortParams() # プレイヤー情報. v_player = self.getViewerPlayer() 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() # スキル一覧. skilllist = self.getSkillMasterList() self.html_param['skillmasterlist'] = [ Objects.skillmaster(skill) for skill in skilllist ] self.writeCompositionHtml('composition/baseselect')
def process(self): args = self.getUrlArgs('/scoutcardgetresult/') try: scoutid = int(args.get(0)) 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) 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.scout()) self.appRedirect(url) return elif not target_event.is_received: if settings_sub.IS_LOCAL: raise CabaretError(u'まだ女の子をスカウトしていません') url = self.makeAppLinkUrlRedirect(UrlMaker.scoutresult(scoutid, 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_scouts(model_mgr, [scoutid], using=using) scoutmaster = arr[0] if arr else None self.html_param['scout'] = self.makeScoutObj(scoutmaster, playdata) # スカウト結果. resultlist = playdata.result.get('result', []) self.html_param['scoutresultinfo'] = BackendApi.make_scoutresult_info(resultlist) # レイドイベント. BackendApi.put_raidevent_champagnedata(self, v_player.id) 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.writeAppHtml('scout/cardgetresult_success') else: self.writeAppHtml('scout/cardgetresult_failed')
def putPlayerInfo(self, person=None, leader=None, scout_cnt=0): self.reflectScoutResult(scout_cnt) v_player = self.getViewerPlayer(True) self.html_param['player'] = Objects.player(self, v_player, person, leader)
def execute_end(): for leader in leaderlist: player = playerdict.get(leader.card.uid) if not player: continue person = persons[player.dmmid] obj_player = Objects.player(self, player, person, leader) obj_player['url_friendselect'] = self.makeAppLinkUrl(UrlMaker.raidfriendset(raidid, leader.card.uid), False) obj_playerlist.append(obj_player)
def process(self): args = self.getUrlArgs('/evolutionyesno/') try: self.__baseid = int(args.get(0)) self.__materialid = self.getMaterialId() except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() # ベースカード. basecard = BackendApi.get_cards([self.__baseid], model_mgr, using=settings.DB_READONLY) basecard = basecard[0] if len(basecard) else None if not self.checkBaseCard(basecard): return evolmaster = BackendApi.get_evolution_cardmaster(model_mgr, basecard.master, using=settings.DB_READONLY) if evolmaster is None: raise CabaretError(u'ハメ管理後のキャストが設定されていません.', CabaretError.Code.INVALID_MASTERDATA) self.html_param['basecard'] = Objects.card(self, basecard) self.__basecard = basecard # プレイヤー情報. self.html_param['player'] = Objects.player(self, v_player) # デッキ情報. deck = BackendApi.get_deck(v_player.id, model_mgr, using=settings.DB_READONLY) basecard_post = CardSet(basecard.card, evolmaster) cost_over, deck_none = BackendApi.check_evol_deckcost(model_mgr, v_player, basecard_post, using=settings.DB_READONLY) self.html_param['deckcapacity_over'] = cost_over self.html_param['deck_none'] = deck_none # 素材カード. materialcard = BackendApi.get_cards([self.__materialid], model_mgr, using=settings.DB_READONLY) materialcard = materialcard[0] if len(materialcard) else None if not self.checkMaterialCard(basecard, materialcard, deck): return self.html_param['materialcard'] = Objects.card(self, materialcard) self.__materialcard = materialcard # 消費ゴールド. cost = evolmaster.evolcost self.html_param['cost'] = cost self.html_param['cost_over'] = v_player.gold < cost self.html_param['gold_post'] = v_player.gold - cost self.html_param['cardnum'] = BackendApi.get_cardnum(v_player.id, model_mgr, using=settings.DB_READONLY) BackendApi.get_evolutiondata(model_mgr, v_player.id, using=settings.DB_READONLY) # 書き込みへのURL. url = UrlMaker.evolutiondo(self.__baseid, v_player.req_confirmkey) self.html_param['url_do'] = self.makeAppLinkUrl(OSAUtil.addQuery(url, Defines.URLQUERY_CARD, self.__materialcard.id)) self.writeAppHtml('evolution/yesno')
def process(self): model_mgr = self.getModelMgr() # プレイヤー情報 v_player = self.getViewerPlayer() obj_player = Objects.player(self, v_player) # 交換レートリスト取得 #tradelist = BackendApi.get_tradeshopmaster_all(model_mgr, using=settings.DB_READONLY) #tradelist.sort(key=...) # カード所持数 cardnum = BackendApi.get_cardnum(v_player.id, model_mgr, using=settings.DB_READONLY) cardrest = v_player.cardlimit - cardnum is_cardnum_max = cardrest < 1 obj_tradelist = [] limited_masters = {} # ストック制限があるマスター. # slide_cards = {} # スライド表示するカード. header_img_list = {} # ヘッダ画像. self.putFromBackPageLinkUrl() self.html_param['player'] = obj_player self.html_param['tradelist'] = obj_tradelist self.html_param['headerlist'] = header_img_list # self.html_param['slidelist'] = obj_slidelist # 必要か判断出来ない tradeshopmaster = BackendApi.get_current_tradeshopmaster( model_mgr, using=settings.DB_READONLY) if tradeshopmaster is None: raise CabaretError(u'交換所の開催期間外です', CabaretError.Code.EVENT_CLOSED) userdata = None userpoint = BackendApi.get_tradeshop_userpoint(model_mgr, v_player.id) if userpoint is None: userdata = PlayerTradeShop.createInstance(uid) userpoint = userdata.point self.html_param['user_point'] = userpoint self.html_param['itemdata'] = self.get_tradeitem_list( model_mgr, tradeshopmaster.trade_shop_item_master_ids, userpoint) tradeshopitemmasters = BackendApi.get_tradeshopitemmaster_list( model_mgr, tradeshopmaster.trade_shop_item_master_ids) tradecount_data = BackendApi.get_tradeshopitem_tradecountdata( model_mgr, v_player.id, tradeshopitemmasters) model_mgr = db_util.run_in_transaction(self.tr_write, userdata, tradecount_data) model_mgr.write_end() self.writeAppHtml('tradeshop/top')
def process(self): args = self.getUrlArgs('/happeningresult/') 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 self.html_param['player'] = Objects.player(self, v_player) # ハプニング. self.putHappeningInfo() # 続ける. url = UrlMaker.happeningdo(v_player.req_confirmkey) self.html_param['url_exec'] = self.makeAppLinkUrl(url) # 諦める. url = UrlMaker.happeningcancel_yesno() self.html_param['url_happeningcancel_yesno'] = self.makeAppLinkUrl(url) # レイド. self.putRaidHelpList() eventlist = v_player.happening_result.get('event', []) if not eventlist: raise CabaretError(u'ハプニング実行の実装に問題があります') table = ( (Defines.ScoutEventType.AP_NONE, self.procApNone), (Defines.ScoutEventType.GET_ITEM, self.procGetItem), ) eventdict = {} for event in eventlist: eventdict[event.get_type()] = event self.__eventdict = eventdict for eventtype, func in table: event = eventdict.get(eventtype) if event: func(event) return raise CabaretError(u'実行可能なハプニング内イベントがありません')
def putRanking(self, uid, eventid, view_myrank, url_battleevent_ranking, url_battleevent_myrank, view_beginer=False): model_mgr = self.getModelMgr() page = int(self.request.get(Defines.URLQUERY_PAGE) or 0) if view_myrank: score = BackendApi.get_battleevent_score(eventid, uid) if score: # 自分のランクのページヘ. index = BackendApi.get_battleevent_rankindex(eventid, uid, is_beginer=view_beginer) offset = max(0, index - int((self.CONTENT_NUM_MAX_PER_PAGE+1) / 2)) uidscoresetlist = BackendApi.fetch_uid_by_battleeventrank(eventid, self.CONTENT_NUM_MAX_PER_PAGE, offset, withrank=True, is_beginer=view_beginer) else: uidscoresetlist = [] else: uidscoresetlist = self.getUidScoreSetList(eventid, page, is_beginer=view_beginer) obj_playerlist = [] if uidscoresetlist: uidscoreset = dict(uidscoresetlist) playerlist = BackendApi.get_players(self, uidscoreset.keys(), [PlayerExp], using=settings.DB_READONLY) persons = BackendApi.get_dmmplayers(self, playerlist, using=settings.DB_READONLY, do_execute=False) leaders = BackendApi.get_leaders(uidscoreset.keys(), arg_model_mgr=model_mgr, using=settings.DB_READONLY) self.execute_api() for player in playerlist: obj_player = Objects.player(self, player, persons.get(player.dmmid), leaders.get(player.id)) score, rank = uidscoreset[player.id] obj_player['event_score'] = score obj_player['event_rank'] = rank obj_player['is_me'] = uid == player.id obj_playerlist.append(obj_player) obj_playerlist.sort(key=lambda x:x['event_score'], reverse=True) self.html_param['ranking_playerlist'] = obj_playerlist contentnum = BackendApi.get_battleevent_rankernum(eventid, is_beginer=view_beginer) self.html_param['is_view_myrank'] = view_myrank self.html_param['is_view_beginer'] = view_beginer self.html_param['url_battleevent_ranking'] = self.makeAppLinkUrl(url_battleevent_ranking) + "#ranking" self.html_param['url_battleevent_myrank'] = self.makeAppLinkUrl(url_battleevent_myrank) + "#ranking" self.html_param['url_battleevent_ranking_beginer'] = self.makeAppLinkUrl(OSAUtil.addQuery(url_battleevent_ranking, Defines.URLQUERY_BEGINER, 1)) + "#ranking" self.html_param['url_battleevent_myrank_beginer'] = self.makeAppLinkUrl(OSAUtil.addQuery(url_battleevent_myrank, Defines.URLQUERY_BEGINER, 1)) + "#ranking" url_base = OSAUtil.addQuery(url_battleevent_myrank if view_myrank else url_battleevent_ranking, Defines.URLQUERY_BEGINER, int(view_beginer)) if not view_myrank: self.putPagenation(url_base, page, contentnum, self.CONTENT_NUM_MAX_PER_PAGE, "ranking")
def process(self): args = self.getUrlArgs('/gachasupcard/') try: mid = int(args.get(0)) subbox = int(args.get(1)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() self.html_param['player'] = Objects.player(self, v_player) 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 # カード情報. if subbox == 0: info = BackendApi.make_stepup_rateinfo(self, gachamaster, using=settings.DB_READONLY) self.html_param['gachacardlistinfo'] = info elif 0 < gachamaster.rarity_fixed_boxid and subbox == 1: subboxinfo = BackendApi.make_stepup_rateinfo( self, gachamaster, subbox=True, using=settings.DB_READONLY) self.html_param['gachacardlistinfo'] = subboxinfo # スライド情報. BackendApi.put_gachaslidecarddata(self, [gachamaster]) # ガチャページに戻る. consumetype, tabengname = gachamaster.consumetype, gachamaster.tabengname url = UrlMaker.gacha() if consumetype in Defines.GachaConsumeType.PAYMENT_TYPES: url = OSAUtil.addQuery( url, Defines.URLQUERY_GTYPE, Defines.GachaConsumeType.GTYPE_NAMES[consumetype]) if tabengname: url = OSAUtil.addQuery(url, Defines.URLQUERY_GTAB, tabengname) else: url = OSAUtil.addQuery( url, Defines.URLQUERY_CTYPE, Defines.GachaConsumeType.TO_TOPIC[consumetype]) self.html_param['url_back'] = self.makeAppLinkUrl(url) self.writeAppHtml('gacha/supcard')
def process(self): # プレイヤー情報. v_player = self.getViewerPlayer() self.html_param['player'] = Objects.player(self, v_player) # 購入可能な商品. self.putBuyableShopItemList() self.html_param['num_key'] = Defines.URLQUERY_NUMBER self.writeAppHtml('shop/shop')
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): 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 getObjPlayerList(self, playeridlist, do_execute=True, do_set_greet=False): arr = [] if playeridlist: playerlist = BackendApi.get_players(self, playeridlist, [PlayerFriend, PlayerExp], using=settings.DB_READONLY) playerlist.sort(key=lambda x: playeridlist.index(x.id)) persons = BackendApi.get_dmmplayers(self, playerlist, do_execute=False, using=settings.DB_READONLY) leaders = BackendApi.get_leaders(playeridlist, self.getModelMgr(), using=settings.DB_READONLY) model_mgr = self.getModelMgr() if do_set_greet: v_player = self.getViewerPlayer() greettimes = BackendApi.get_greettimes( model_mgr, v_player.id, playeridlist, using=settings.DB_READONLY) else: greettimes = {} friendnums = {} for playerid in playeridlist: friendnums[playerid] = BackendApi.get_friend_num( playerid, model_mgr, using=settings.DB_READONLY) now = OSAUtil.get_now() if do_execute: self.execute_api() for player in playerlist: gtime = greettimes.get(player.id) data = Objects.player(self, player, persons.get(player.dmmid), leaders.get(player.id)) data['friendnum'] = friendnums.get(player.id, 0) data['greetflag'] = not BackendApi.check_greettime(gtime, now) arr.append(data) return arr
def process(self): v_player = self.getViewerPlayer() self.getBattlePlayer(get_instance=True) rankmaster = self.getBattleRankMaster() self.setFromPage(Defines.FromPages.BATTLE) self.html_param['player'] = Objects.player(self, v_player) self.html_param['rankmaster'] = Objects.battlerank(self, rankmaster) # アイテム. BackendApi.put_bprecover_uselead_info(self) # 書き込み. self.writeAppHtml('battle/battleaprecover')
def process(self): self.setFromPage(None) v_player = self.getViewerPlayer() battleplayer = self.getBattlePlayer() if battleplayer is None or not battleplayer.lpvtime or OSAUtil.get_now( ) <= battleplayer.lpvtime: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battlelp())) return # 現在のランク. rankmaster = self.getBattleRankMaster() # プレイヤー. self.html_param['player'] = Objects.player(self, v_player) # バトル情報. self.html_param['battleplayer'] = Objects.battleplayer( self, battleplayer, rankmaster) # 対戦相手検索のUrl. self.html_param['url_battlepre'] = self.makeAppLinkUrl( UrlMaker.battlepre()) # 気力回復のUrl. self.html_param['url_bprecover'] = self.makeAppLinkUrl( UrlMaker.bprecover()) # 最大ランク. model_mgr = self.getModelMgr() self.html_param['max_rank'] = BackendApi.get_battlerank_max( model_mgr, using=settings.DB_READONLY) # 鍵情報. self.html_param['treasurekey'] = Objects.key(self, v_player) # イベント開催中判定. cur_eventmaster = BackendApi.get_current_battleevent_master( model_mgr, using=settings.DB_READONLY) self.html_param['battleevent'] = Objects.battleevent( self, cur_eventmaster) if cur_eventmaster else None self.html_param['url_battleevent_top'] = self.makeAppLinkUrl( UrlMaker.battleevent_top()) # 書き込み. self.writeAppHtml('battle/battle')
def apiend(): obj_playerlist = [] for i, player in enumerate(playerlist): obj_player = Objects.player(self, player, persons.get(player.dmmid), leaders.get(player.id)) rankrecord = rankrecord_dict.get(player.id) rankname = None if rankrecord: rankmaster = BackendApi.get_battleevent_rankmaster( model_mgr, eventid, rankrecord.getRank(config), using=settings.DB_READONLY) if rankmaster: rankname = rankmaster.name obj_player['event_rankname'] = rankname or u'----' # ライバルかどうかをフラグで持たせる。一応ライバルは [0] の位置に入ってる筈だけど、すり変わってるとバグがでそうなので。 if is_rival and i == 0: rival_key = BackendApi.make_is_rival_strings( player.id, eventid) obj_player['is_rival'] = True else: rival_key = None obj_player['is_rival'] = False is_battle_ok = True revenge = revengedict.get(player.id) if revenge: url = UrlMaker.battleevent_battlepre(player.id, revenge.id) else: url = UrlMaker.battleevent_battlepre(player.id, rival_key=rival_key) is_battle_ok = player.id in filtered_oidlist obj_player['url_eventbattle'] = self.makeAppLinkUrl(url) obj_player['is_battle_ok'] = is_battle_ok obj_player['power_total'] = deck_powers.get(player.id, 0) obj_playerlist.append(obj_player) # self.html_param['playerlist'] で勝負相手を決定している self.html_param['playerlist'] = obj_playerlist
def process(self): args = self.getUrlArgs('/infomations/view_panelmission/') uid = args.getInt(0) model_mgr = self.getModelMgr() self.html_param['now'] = OSAUtil.get_now() player = BackendApi.get_player(self, uid, [], using=backup_db, model_mgr=model_mgr) if player is None: self.putAlertToHtmlParam(u'存在しないプレイヤーです', alert_code=AlertCode.ERROR) else: person = BackendApi.get_dmmplayers(self, [player], using=backup_db).get(player.dmmid) self.html_param['player'] = Objects.player(self, player, person) # 現在のパネル. playerpanelmission = PlayerPanelMission.getByKey(uid, using=backup_db) cur_panelid = playerpanelmission.panel if playerpanelmission else 1 # 進行情報. panelmissiondata_dict = dict([(model.mid, model) for model in PanelMissionData.fetchByOwner(uid, using=backup_db)]) # 現在のパネルまでの進行情報. obj_panel_list = [] for panelid in xrange(1, cur_panelid+1): panelmaster = BackendApi.get_panelmission_panelmaster(model_mgr, panelid, using=backup_db) if panelmaster is None: continue missionmaster_list = BackendApi.get_panelmission_missionmaster_by_panelid(model_mgr, panelid, using=backup_db) panelmissiondata = panelmissiondata_dict.get(panelid) obj_mission_list = [] is_cleared = cur_panelid < panelid for missionmaster in missionmaster_list: obj_mission_list.append(self.__makeMissionObj(missionmaster, panelmissiondata, is_cleared)) obj_panel_list.append({ 'name' : panelmaster.name, 'current' : cur_panelid == panelid, 'missionlist' : obj_mission_list, 'stime' : panelmissiondata.stime if panelmissiondata else None }) self.html_param['panellist'] = obj_panel_list[::-1] self.writeAppHtml('infomations/view_panelmission')
def process(self): self.__cardlist = None args = self.getUrlArgs('/evolutionmaterial/') try: self.__baseid = int(args.get(0)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() # ベースカード. basecard = BackendApi.get_cards([self.__baseid], model_mgr, using=settings.DB_READONLY) basecard = basecard[0] if len(basecard) else None if not self.checkBaseCard(basecard): return evolmaster = BackendApi.get_evolution_cardmaster( model_mgr, basecard.master, using=settings.DB_READONLY) if evolmaster is None: raise CabaretError(u'ハメ管理後のキャストが設定されていません.', CabaretError.Code.INVALID_MASTERDATA) self.html_param['basecard'] = Objects.card(self, basecard) self.__basecard = basecard self.loadSortParams() # プレイヤー情報. 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() self.writeEvolutionHtml('evolution/materialselect')
def getObjPlayerList(self, playerlist, uidlist): obj_list = [] if playerlist: model_mgr = self.getModelMgr() persons = BackendApi.get_dmmplayers(self, playerlist, using=settings.DB_READONLY, do_execute=True) leaders = BackendApi.get_leaders(uidlist, arg_model_mgr=model_mgr, using=settings.DB_READONLY) for player in playerlist: obj_player = Objects.player(self, player, persons.get(player.dmmid), leaders[player.id]) obj_list.append(obj_player) return obj_list
def process(self): self.__cardlist = None model_mgr = self.getModelMgr() self.loadSortParams(default_sortby=Defines.CardSortType.HKLEVEL_REV) # プレイヤー情報. v_player = self.getViewerPlayer() 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() self.writeEvolutionHtml('evolution/baseselect')
def process(self): if not self.checkResult(): return # プレイヤー情報. v_player = self.getViewerPlayer() self.html_param['player'] = Objects.player(self, v_player) # 購入した商品. self.html_param['shopitem'] = self.makeShopObj() master = self.getShopMaster() self.html_param['buy_num'] = self.__buy_num * master.inum0 # 遷移元チェック. self.putFromBackPageLinkUrl() # 購入可能な商品. # self.putBuyableShopItemList() self.writeAppHtml('shop/buyresult')
def procYesno(self): """諦める確認. """ # プレイヤー情報. v_player = self.getViewerPlayer() self.html_param['player'] = Objects.player(self, v_player) # ハプニング情報. self.putHappeningInfo() self.html_param['url_happening'] = self.makeAppLinkUrl( UrlMaker.happening()) self.html_param['url_raidevent_battlepre'] = self.makeAppLinkUrl( UrlMaker.raidevent_battlepre()) # 書き込みへのURL. url = UrlMaker.happeningcancel_do() self.html_param['url_happeningcancel_do'] = self.makeAppLinkUrl(url) happeningset = self.getHappening() eventid = HappeningUtil.get_raideventid(happeningset.happening.event) self.writeHtmlSwitchEvent('cancelyesno', eventid)
def process(self): v_player = self.getViewerPlayer() uid = v_player.id model_mgr = self.getModelMgr() using = settings.DB_READONLY # イベントマスター. eventmaster = self.getCurrentProduceEvent() mid = eventmaster.id # イベントスカウトのプレイ情報 playdata = BackendApi.get_produceeventstage_playdata(model_mgr, mid, uid, using=using) # 今いるステージ. stagemaster = BackendApi.get_current_produceeventstage_master( model_mgr, eventmaster, playdata, using=using) bossattack = False # 発生中のレイド情報. happeningraidset = self.getHappeningRaidSet() happeningset = None if happeningraidset: happeningset = happeningraidset.happening if happeningset: # レイドがある. if not happeningset.happening.is_end(): bossattack = True # エリアボス出現 areaboss_attack = False allcleared = BackendApi.check_event_boss_playable( playdata, stagemaster) boss = None if 0 < stagemaster.boss and allcleared: boss = BackendApi.get_boss(model_mgr, stagemaster.boss, using=settings.DB_READONLY) if boss is not None: areaboss_attack = True # エリアボス情報 if areaboss_attack: # エリアボス戦へのURL self.html_param['areaboss'] = Objects.boss(self, boss) self.setFromPage(Defines.FromPages.PRODUCEEVENT, stagemaster.id) url = UrlMaker.bosspre(stagemaster.id) self.html_param['url_bossbattle'] = self.makeAppLinkUrl(url) # 現在のステージ情報 obj_scout = self.makeStageObj(stagemaster, playdata, stagemaster.stage, bossattack=bossattack, areaboss_attack=areaboss_attack) self.__putParam('scout', obj_scout) # プレーヤーの情報 self.html_param['player'] = Objects.player(self, v_player, None) # 宝箱の上限チェック. 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)) # 全力探索フラグ self.__putParam('flag_search', BackendApi.get_scoutsearch_flag(uid)) # 説明とランキングのリンク. self.putEventTopic(mid) self.writeHtml(eventmaster, 'scout/scout')
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): self.__include_rare = False args = self.getUrlArgs('/compositionyesno/') try: self.__baseid = int(args.get(0)) self.__materialidlist = self.getMaterialIdList() 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.loadSortParams() # プレイヤー情報. self.html_param['player'] = Objects.player(self, v_player) # カード. self.putCardList() if not self._put_cardlist: if settings_sub.IS_LOCAL: raise CabaretError(u'素材が選ばれていません') url = UrlMaker.composition() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return card_masters = { m.master for m in self._put_cardlist if m.master.ckind == Defines.CardKind.SKILL } is_not_skillup = False for card_master in card_masters: if card_master.id != Defines.MasterData.TIARA_ID and card_master.rare < basecard.master.rare: is_not_skillup = True break self.html_param['not_skillup'] = is_not_skillup # 消費ゴールド. cost = BackendApi.calc_composition_cost(basecard, self._put_cardlist) self.html_param['cost'] = cost self.html_param['cost_over'] = v_player.gold < cost self.html_param['gold_post'] = v_player.gold - cost self.html_param['cardnum'] = BackendApi.get_cardnum( v_player.id, model_mgr, using=settings.DB_READONLY) # 書き込みへのURL. str_cardidlist = ','.join( [str(cardset.card.id) for cardset in self._put_cardlist]) url = UrlMaker.compositiondo(self.__baseid, v_player.req_confirmkey) self.html_param['url_do'] = self.makeAppLinkUrl( OSAUtil.addQuery(url, Defines.URLQUERY_CARD, str_cardidlist)) self.html_param['flag_include_rare'] = self.__include_rare self.writeAppHtml('composition/yesno')
def process(self): args = self.getUrlArgs('/produceeventscoutresult/') try: stageid = int(args.get(0)) scoutkey = urllib.unquote(args.get(1)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() uid = v_player.id model_mgr = self.getModelMgr() using = settings.DB_READONLY eventmaster = BackendApi.get_current_produce_event_master(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_produceeventstage_playdata(model_mgr, mid, uid, using=using) if playdata and playdata.confirmkey == scoutkey: # DBからとり直すべき. playdata = BackendApi.get_produceeventstage_playdata(model_mgr, mid, uid, using=using, 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.produceevent_top()) self.appRedirect(url) return # プレイヤー. self.html_param['player'] = Objects.player(self, v_player) # ステージ. stagemaster = BackendApi.get_produceevent_stagemaster(model_mgr, stageid, using=using) if stagemaster is None: url = self.makeAppLinkUrlRedirect(UrlMaker.produceevent_top()) self.appRedirect(url) return obj_scout = self.makeStageObj(stagemaster, playdata, stagemaster.stage) self.html_param['scout'] = obj_scout self.putEventTopic(mid) eventlist = playdata.result.get('event', []) if not eventlist: raise CabaretError(u'スカウト実行の実装に問題があります') 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(mid, stagemaster, playdata, event) return raise CabaretError(u'実行可能なスカウト内イベントがありません')