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 putCardInfo(self, o_player): """カードの情報. """ model_mgr = self.getModelMgr() deck = BackendApi.get_deck(o_player.id, model_mgr, using=settings.DB_READONLY) leader = BackendApi.get_cards([deck.leader], model_mgr, using=settings.DB_READONLY)[0] # リーダー情報. self.html_param['leader'] = Objects.card(self, leader) cardlist = BackendApi.get_profile_newbie_cardlist(model_mgr, o_player.id, excludes=[deck.leader], using=settings.DB_READONLY) self.html_param['newbie_cardlist'] = [Objects.card(self, card) for card in cardlist]
def putDeck(self): """ロードしたデッキを埋め込む. """ if self.__v_deck: self.html_param['v_deck'] = [ Objects.card(self, cardset) for cardset in self.__v_deck ] if self.__o_deck: self.html_param['o_deck'] = [ Objects.card(self, cardset) for cardset in self.__o_deck ]
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): 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 procYesno(self): """タイプ選択確認. """ v_player = self.__getViewerPlayer() if v_player is None: return ptype = self.getSelectedType() if ptype is None: return model_mgr = self.getModelMgr() leader = BackendApi.get_defaultleaders( model_mgr, Defines.CharacterType.NAMES.keys(), using=settings.DB_READONLY).get(ptype) if leader: cardset = CardSet(BackendApi.create_card_by_master(leader), leader) self.html_param['leader'] = Objects.card(self, cardset) self.html_param['ptype'] = ptype self.html_param['is_first'] = self.__args.get(2) == '1' self.html_param['url_write'] = self.makeAppLinkUrl( UrlMaker.regist_write(ptype)) self.html_param['url_back'] = self.makeAppLinkUrl( UrlMaker.regist_select()) self.setTutorialHead(Defines.TutorialStatus.REGIST_SELECT) self.writeAppHtml('regist/yesno')
def procGetCard(self, mid, stagemaster, playdata, event): """カード獲得. """ if event.is_received: # 終了済み. if settings_sub.IS_LOCAL: raise CabaretError(u'判定済みです', CabaretError.Code.ALREADY_RECEIVED) self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.scouteventcardgetresult(stagemaster.id))) return model_mgr = self.getModelMgr() # 獲得したカード. cardid = event.card cardmaster = BackendApi.get_cardmasters([cardid], model_mgr, using=settings.DB_READONLY).get(cardid) if cardmaster is None: raise CabaretError(u'一度公開されたキャストが非公開にされました.危険です.', CabaretError.Code.INVALID_MASTERDATA) card = BackendApi.create_card_by_master(cardmaster) self.html_param['card'] = Objects.card(self, CardSet(card, cardmaster), is_new=event.is_new) self.html_param['silhouette'] = event.silhouette # 獲得判定へ飛ぶ. url = UrlMaker.scouteventcardget(stagemaster.id) self.html_param['url_exec'] = self.makeAppLinkUrl(url) # アイテム. BackendApi.put_scoutcard_uselead_info(self, UrlMaker.scouteventcardget(stagemaster.id)) self.html_param['num_key'] = Defines.URLQUERY_NUMBER self.writeScoutEventHTML('cardget', self.eventmaster)
def makeCardObject(self, cardset, deck): obj_card = Objects.card(self, cardset, deck=deck) if cardset.card.id == self.__baseid or cardset.card.protection or obj_card['deckmember']: raise CabaretError(u'ハメ管理に使用できないキャストです.', CabaretError.Code.ILLEGAL_ARGS) url = UrlMaker.evolutionmaterial(self.__baseid) obj_card['url_evolution'] = self.makeAppLinkUrl(url) return obj_card
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 makeCardObject(self, cardset, deck): obj_card = Objects.card(self, cardset, deck=deck) # ストック可能な数を埋め込む. stocknum = self.__getStockNum(cardset.master.album) obj_card.update(stock_num=stocknum, stockable_num=max( 0, Defines.ALBUM_STOCK_NUM_MAX - stocknum)) return obj_card
def makeCardObject(self, cardset, deck): data = Objects.card(self, cardset, deck=deck) url = UrlMaker.deckset(target=self.__target) url = OSAUtil.addQuery(url, Defines.URLQUERY_INDEX, self.__selected_index) url = OSAUtil.addQuery(url, Defines.URLQUERY_CARD, cardset.id) data['url_deck'] = self.makeAppLinkUrl(url) return data
def makeCompositionObjCardList(self, basecard, materialcard): obj_cardlist = [] url_next = self.makeAppLinkUrl(self.makeUrlNext()) for cardset in (basecard, materialcard): obj_card = Objects.card(self, cardset) obj_card['url_composition'] = url_next obj_card['url_evolution'] = url_next obj_cardlist.append(obj_card) return obj_cardlist
def proc_EVOL00_COMPLETE(self, basecard, materialcard): """ハメ管理完了. """ model_mgr = self.getModelMgr() basecard_post, _ = BackendApi.tutorial_evolution( model_mgr, basecard, materialcard, using=settings.DB_READONLY) obj_basecard_post = Objects.card(self, basecard_post) obj_basecard_post['master']['url_album'] = self.makeAppLinkUrl( self.makeUrlNext()) self.html_param['basecard_post'] = obj_basecard_post self.writeAppHtml('evolution/complete')
def putDeckParams(self, deckcardlist): obj_cardlist = [] cost_total = 0 power_total = 0 for card in deckcardlist: obj_card = Objects.card(self, card) power_total += obj_card['power'] cost_total += card.master.cost obj_cardlist.append(obj_card) self.html_param['cardlist'] = obj_cardlist self.html_param['cost_total'] = cost_total self.html_param['power_total'] = power_total
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 putDeckInfoParams(self): # デッキのカード. cardlist = self.getDeckCardList() obj_cardlist = [] cost_total = 0 power_total = 0 for card in cardlist: obj_card = Objects.card(self, card) power_total += obj_card['power'] cost_total += card.master.cost obj_cardlist.append(obj_card) self.html_param['cardlist'] = obj_cardlist self.html_param['cost_total'] = cost_total self.html_param['power_total'] = power_total
def proc_SCOUT00_CARDGET(self, area, scout, scout_cnt): """スカウト実行アニメーション(スカウト成功). """ v_player = self.getViewerPlayer(True) card = self.getLeaderCard() obj_scout = Objects.scout(self, v_player, scout, scout_cnt, []) obj_scout['url_exec'] = self.makeAppLinkUrl(self.makeUrlNext()) self.html_param['scout'] = obj_scout self.html_param['card'] = Objects.card(self, card, is_new=True) self.putPlayerInfo(scout_cnt=scout_cnt) self.writeAppHtml('scout/cardgetresult_success')
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 proc_SCOUT01_CARDGET(self, area, scout, scout_cnt): """スカウト実行アニメーション(スカウト成功). """ model_mgr = self.getModelMgr() v_player = self.getViewerPlayer(True) card = BackendApi.get_tutorial_scoutdropcard( model_mgr, v_player.ptype, using=settings.DB_READONLY) obj_scout = Objects.scout(self, v_player, scout, scout_cnt, []) obj_scout['url_exec'] = self.makeAppLinkUrl(self.makeUrlNext()) self.html_param['scout'] = obj_scout self.html_param['card'] = Objects.card(self, card, is_new=True) self.putPlayerInfo(scout_cnt=scout_cnt) self.writeAppHtml('scout/cardgetresult_success')
def proc_COMPOSITION00_COMPLETE(self, basecard, materialcard): """教育結果. """ model_mgr = self.getModelMgr() pre_level = basecard.card.level pre_power = basecard.power BackendApi.composition(model_mgr, basecard, [materialcard], False, using=settings.DB_READONLY) obj_card = Objects.card(self, basecard) self.html_param['basecard_post'] = obj_card self.html_param['url_next'] = self.makeAppLinkUrl(self.makeUrlNext()) self.html_param['power_add'] = obj_card['power'] - pre_power self.html_param['level_add'] = obj_card['level'] - pre_level self.html_param['skilllevel_add'] = 0 self.writeAppHtml('composition/complete')
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 process(self): model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() viewer_id = v_player.id deck = BackendApi.get_deck(viewer_id, model_mgr, using=settings.DB_READONLY) cardsetlist = BackendApi.get_card_list(viewer_id, arg_model_mgr=model_mgr, using=settings.DB_READONLY) self.json_result_param['cardlist'] = [ Objects.card(self, cardset, deck) for cardset in cardsetlist ] self.writeAppJson()
def putCardInfo(self): """カードの情報. """ model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() deck = BackendApi.get_deck(v_player.id, model_mgr, using=settings.DB_READONLY) cardlist = BackendApi.get_cards(deck.to_array(), model_mgr, using=settings.DB_READONLY) # 接客力の合計. power_total = 0 for card in cardlist: power_total += card.power self.html_param['power_total'] = power_total # デッキのカードをランダムで表示. disp_members = cardlist[:] random.shuffle(disp_members) cardset = disp_members[0] self.html_param['card'] = Objects.card(self, cardset, deck) # カード枚数. self.html_param['card_num'] = BackendApi.get_cardnum(v_player.id, model_mgr, using=settings.DB_READONLY)
def procDecide(self): """タイプ選択完了. """ v_player = self.getViewerPlayer() if v_player.tutorialstate != Defines.TutorialStatus.REGIST_COMPLETE: self.redirectToTop() return ptype = v_player.ptype model_mgr = self.getModelMgr() leader = BackendApi.get_defaultleaders( model_mgr, Defines.CharacterType.NAMES.keys(), using=settings.DB_READONLY).get(ptype) if leader: cardset = CardSet(BackendApi.create_card_by_master(leader), leader) self.html_param['leader'] = Objects.card(self, cardset) self.html_param['ptype'] = ptype self.html_param['url_enter'] = self.makeAppLinkUrl(UrlMaker.tutorial()) self.setTutorialHead(Defines.TutorialStatus.REGIST_COMPLETE) self.writeAppHtml('regist/decide')
def process(self): model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() try: oid = int(self.request.get(Defines.URLQUERY_ID) or v_player.id) except: raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS) deck = BackendApi.get_deck(oid, model_mgr, using=settings.DB_READONLY) cardidlist = deck.to_array() cardsetlist = BackendApi.get_cards(cardidlist, arg_model_mgr=model_mgr, using=settings.DB_READONLY) self.json_result_param['cardlist'] = [ Objects.card(self, cardset, deck) for cardset in cardsetlist ] self.writeAppJson()
def process(self): model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() self.setFromPage(Defines.FromPages.BATTLE) # 結果データ. battleresult = BackendApi.get_battleresult(model_mgr, v_player.id, using=settings.DB_READONLY) if battleresult is None: # 結果が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'結果がない') url = UrlMaker.battle() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 対戦相手. oid = battleresult.oid arr = BackendApi.get_players(self, [oid], [PlayerExp], using=settings.DB_READONLY) o_player = arr[0] if arr else None if o_player is None: # 相手が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'相手が存在しない') url = UrlMaker.battle() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return obj_v_player, obj_o_player = self.getObjPlayerList( [v_player, o_player]) obj_v_player['power_total'] = battleresult.data['v_power'] obj_o_player['power_total'] = battleresult.data['o_power'] obj_v_player['skilllist'] = battleresult.anim.make_html_skilllist(True) obj_o_player['skilllist'] = battleresult.anim.make_html_skilllist( False) self.html_param['player'] = obj_v_player self.html_param['o_player'] = obj_o_player if BackendApi.check_friend(v_player.id, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_receive( v_player.id, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_send(v_player.id, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass else: self.html_param['is_friendrequest_ok'] = True data = battleresult.data self.html_param['resultdata'] = data # 獲得したアイテム. prizes = data.get('prizes') if prizes: prizelist = BackendApi.get_prizelist(model_mgr, prizes, using=settings.DB_READONLY) self.html_param['prize'] = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) # レベルアップしたカード. obj_lebelupcardlist = [] levelupcardlist = BackendApi.get_cards(battleresult.levelupcard.keys(), model_mgr, using=settings.DB_READONLY) for levelupcard in levelupcardlist: obj_card = Objects.card(self, levelupcard) obj_card['level_add'] = battleresult.levelupcard.get( levelupcard.id, 0) obj_lebelupcardlist.append(obj_card) self.html_param['levelupcardlist'] = obj_lebelupcardlist # 回復アイテム. BackendApi.put_bprecover_uselead_info(self) # 続けて戦う. url = UrlMaker.battleoppselect(0) self.html_param['url_battlecontinue'] = self.makeAppLinkUrl(url) # html書き込み. if data['is_win']: # 金の鍵の獲得率. battleplayer = self.getBattlePlayer() rankmaster = self.getBattleRankMaster() self.html_param[ 'goldkey_rate'] = BackendApi.get_battle_goldkey_rate( model_mgr, battleplayer, rankmaster, using=settings.DB_READONLY) self.writeAppHtml('battle/battlewin') else: self.writeAppHtml('battle/battlelose')
def process(self): v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() # 合成結果. compositiondata = BackendApi.get_compositiondata( model_mgr, v_player.id, using=settings.DB_READONLY) # ベースカード. basecardset = BackendApi.get_cards([compositiondata.result_baseid], model_mgr, using=settings.DB_READONLY) if not basecardset or basecardset[0].card.mid != compositiondata.mid: if settings_sub.IS_LOCAL: raise CabaretError(u'教育したキャストが見つかりません.') url = UrlMaker.composition() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return basecardset = basecardset[0] self.html_param['basecard_post'] = Objects.card(self, basecardset) compositiondata.set_to_card(basecardset.card) self.html_param['basecard_pre'] = Objects.card(self, basecardset) # 素材カード. materialcardsetlist = BackendApi.get_cards( compositiondata.result_materialidlist, model_mgr, using=settings.DB_READONLY, deleted=True) self.html_param['cardlist'] = [ Objects.card(self, cardset) for cardset in materialcardsetlist ] # 経験値とレベル. self.html_param['exp'] = compositiondata.result_exp self.html_param['levelup'] = compositiondata.result_lvup # お金. self.html_param['cost'] = compositiondata.result_cost_gold # スキル. self.html_param['skilllevelup'] = compositiondata.result_skilllvup # 成功 or 大成功. self.html_param[ 'is_great_success'] = compositiondata.result_flag_great_success # 上昇値. level_pre = compositiondata.result_lvpre level_add = compositiondata.result_lvup power_add = 0 if 0 < level_add: basemaster = basecardset.master pow_pre = CardUtil.calcPower(basemaster.gtype, basemaster.basepower, basemaster.maxpower, level_pre, basemaster.maxlevel, basecardset.card.takeover) pow_post = CardUtil.calcPower(basemaster.gtype, basemaster.basepower, basemaster.maxpower, level_pre + level_add, basemaster.maxlevel, basecardset.card.takeover) power_add = pow_post - pow_pre self.html_param['power_add'] = power_add self.html_param['level_add'] = level_add self.html_param['skilllevel_add'] = compositiondata.result_skilllvup # 続けて合成のURL. url = UrlMaker.compositionmaterial(basecardset.id) self.html_param['url_continue'] = self.makeAppLinkUrl(url) self.writeAppHtml('composition/complete')
def process(self): model_mgr = self.getModelMgr() args = self.getUrlArgs('/battleeventbattleresult/') eventid = args.getInt(0) 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 self.setFromPage(Defines.FromPages.BATTLEEVENTPRE) data = battleresult.data # 対戦相手. oid = battleresult.oid arr = BackendApi.get_players(self, [oid], [PlayerExp], using=settings.DB_READONLY) o_player = arr[0] if arr else None if o_player is None: # 相手が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'相手が存在しない') url = UrlMaker.battleevent_top(eventid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return obj_v_player, obj_o_player = self.getObjPlayerList( [v_player, o_player]) rival_key = BackendApi.get_rival_key(oid, eventid, args) self.html_param['resultdata'] = data obj_v_player['power_total'] = data['v_power'] obj_o_player['power_total'] = data['o_power'] obj_v_player['sp_powup'] = (data.get('v_sp_powup') or 0) * data['fever_powerup_rate'] / 100 obj_o_player['sp_powup'] = data.get('o_sp_powup') or 0 obj_v_player['spt_powup'] = (data.get('v_spt_powup') or 0) * data['fever_powerup_rate'] / 100 obj_o_player['spt_powup'] = data.get('o_spt_powup') or 0 obj_v_player['skilllist'] = battleresult.anim.make_html_skilllist(True) obj_o_player['skilllist'] = battleresult.anim.make_html_skilllist( False) self.html_param['player'] = obj_v_player self.html_param['o_player'] = obj_o_player if BackendApi.check_friend(uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_receive( uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_send(uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass else: self.html_param['is_friendrequest_ok'] = True # 獲得したアイテム. prizes = data.get('prizes') if prizes: prizelist = BackendApi.get_prizelist(model_mgr, prizes, using=settings.DB_READONLY) self.html_param['prize'] = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) battle_ticket_num = self.get_base_battle_ticket_num(data) self.html_param['battle_ticket_num'] = battle_ticket_num self.html_param[ 'battle_ticket_bonus'] = self.get_player_battle_ticket_bonus( model_mgr, uid, battle_ticket_num, eventmaster) # レベルアップしたカード. obj_lebelupcardlist = [] levelupcardlist = BackendApi.get_cards(battleresult.levelupcard.keys(), model_mgr, using=settings.DB_READONLY) for levelupcard in levelupcardlist: obj_card = Objects.card(self, levelupcard) obj_card['level_add'] = battleresult.levelupcard.get( levelupcard.id, 0) obj_lebelupcardlist.append(obj_card) self.html_param['levelupcardlist'] = obj_lebelupcardlist # 回復アイテム. BackendApi.put_bprecover_uselead_info(self) # 獲得したポイント. scorerecord = BackendApi.get_battleevent_scorerecord( model_mgr, eventid, uid, using=settings.DB_READONLY) self.html_param['battleevent_score'] = self.makeScoreRecordObj( scorerecord, battleresult) # 特効キャスト分のポイント. effect_percent = data.get('effp', 0) if 0 < effect_percent: point_add = data['eventpoint'] point_base = int(point_add * 100 / (effect_percent + 100)) self.html_param['effect_point'] = point_add - point_base # 現在の贈り物情報を確認. presentdata = BackendApi.get_battleeventpresent_pointdata( model_mgr, uid, eventid, using=settings.DB_READONLY) if presentdata: cur_data = presentdata.getData() presentmaster = BackendApi.get_battleeventpresent_master( model_mgr, eventid, cur_data['number'], using=settings.DB_READONLY) self.html_param[ 'is_present_open'] = presentmaster.point <= presentdata.point else: self.html_param['is_present_open'] = False # トピック. self.putEventTopic(eventid) # 続けて競う. target = 'revenge' if data.get('revenge') else 'lv' self.html_param['url_battlecontinue'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist(target, do_update=True)) # グループ詳細. self.html_param['url_battleevent_group'] = self.makeAppLinkUrl( UrlMaker.battleevent_group()) self.html_param["battleevent"] = Objects.battleevent( self, eventmaster) if data['is_win']: piecedata = battleresult.data.get('piecedata') if piecedata: if piecedata.get('is_item'): # キャスト名. _, cardmaster = self.get_dirname_and_castname( eventid, piecedata['rarity']) # アイテム獲得. prizelist = BackendApi.get_prizelist( model_mgr, piecedata.get('item_prizeids') or [], using=settings.DB_READONLY) self.html_param['piece_dropiteminfo'] = dict( cardmaster=Objects.cardmaster(self, cardmaster), prize=BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY)) else: self.put_drop_castname(model_mgr, eventid, piecedata['rarity'], piecedata['piece']) self.writeAppHtml( '%s/battlewin' % ('gcevent' if eventmaster.is_goukon else 'btevent')) else: self.writeAppHtml( '%s/battlelose' % ('gcevent' if eventmaster.is_goukon else 'btevent'))
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 makeCardObject(self, cardset, deck): data = Objects.card(self, cardset, deck=deck) url = UrlMaker.cabaclubcastselectdo(self.__mid, self.__cardid, cardset.id) data['url_selectdo'] = self.makeAppLinkUrl(url) return data