コード例 #1
0
ファイル: regist.py プロジェクト: hitandaway100/caba
    def __procGoukon(self, eventmaster):
        """合コンバトルイベント.
        """
        model_mgr = self.getModelMgr()
        eventid = eventmaster.id

        basetime = DateTimeUtil.toLoginTime(OSAUtil.get_now())
        cdate = datetime.date(basetime.year, basetime.month, basetime.day)
        cur_group = self.getCurrentBattleGroup(do_search_log=False)

        # 設定済みの場合はイベントTOPへリダイレクト.
        if cur_group and cur_group.cdate == cdate:
            url = UrlMaker.battleevent_top(eventmaster.id)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # 最大ランク.
        config = BackendApi.get_current_battleeventconfig(
            model_mgr, using=settings.DB_READONLY)

        # 公開中のランク.
        rankmaster_list = BackendApi.get_battleevent_rankmaster_by_eventid(
            model_mgr, eventid, using=settings.DB_READONLY)
        rankmaster_list.sort(key=lambda x: x.rank)

        # 未設定で引数がある場合は書き込み.
        rank = str(self.request.get(Defines.URLQUERY_ID))
        if rank.isdigit():
            rank = int(rank)
            # ランクの公開確認.
            target_rankmaster = None
            for rankmaster in rankmaster_list:
                if rankmaster.rank == rank:
                    target_rankmaster = rankmaster
                    break
            if target_rankmaster:
                # 登録書き込み.
                v_player = self.getViewerPlayer()
                uid = v_player.id
                try:
                    db_util.run_in_transaction(self.tr_write, config,
                                               eventmaster, uid,
                                               v_player.level, rankmaster_list,
                                               rank).write_end()
                except CabaretError, err:
                    if err.code == CabaretError.Code.ALREADY_RECEIVED:
                        pass
                    elif settings_sub.IS_DEV:
                        raise
                    else:
                        url = UrlMaker.mypage()
                        self.appRedirect(self.makeAppLinkUrlRedirect(url))
                        return

                # 書き込み後はイベントTOPへ.
                url = UrlMaker.battleevent_top(eventmaster.id)
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
コード例 #2
0
ファイル: base.py プロジェクト: hitandaway100/caba
 def putEventTopic(self, mid, cur_topic='top'):
     """eventbase.htmlのトピック用のパラメータを埋め込む.
     """
     self.html_param['cur_topic'] = cur_topic
     
     # イベントTopのURL.
     url = UrlMaker.battleevent_top(mid)
     self.html_param['url_battleevent_top'] = self.makeAppLinkUrl(url)
     
     # イベント説明のURL.
     url = UrlMaker.battleevent_explain(mid)
     self.html_param['url_battleevent_explain'] = self.makeAppLinkUrl(url)
     
     # ランキングのURL.
     url = UrlMaker.battleevent_ranking(mid)
     self.html_param['url_battleevent_ranking'] = self.makeAppLinkUrl(url)
     
     table = (
         'detail',
         'prizes',
         'nomination',
         'faq',
     )
     for k in table:
         self.html_param['url_explain_%s' % k] = self.makeAppLinkUrl(UrlMaker.battleevent_explain(mid, k))
     
     # 贈り物.
     if BackendApi.get_battleeventpresent_master_by_eventdid(self.getModelMgr(), mid, using=settings.DB_READONLY):
         self.html_param['url_battleevent_present'] = self.makeAppLinkUrl(UrlMaker.battleevent_present())
     
     # ガチャページ.
     url = OSAUtil.addQuery(UrlMaker.gacha(), Defines.URLQUERY_GTYPE, Defines.GachaConsumeType.GTYPE_NAMES[Defines.GachaConsumeType.OMAKE])
     self.html_param['url_battleevent_gacha'] = self.makeAppLinkUrl(url)
コード例 #3
0
 def __proc_prizes_battlepoint(self, eventmaster, is_opened):
     """ランク別バトルポイント達成報酬.
     """
     model_mgr = self.getModelMgr()
     v_player = self.getViewerPlayer()
     uid = v_player.id
     
     # 自分のランク.
     myrank = self.__get_myrank(eventmaster)
     
     # 選択したランク.
     rankmaster = self.__get_selected_rank(eventmaster, myrank)
     if rankmaster is None:
         # ランクが存在しない.
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battleevent_top(eventmaster.id)))
         return
     
     # セレクトBOX.
     self.__put_rankmaster_list_for_selectbox(eventmaster, myrank)
     
     # 現在のポイント.
     rankscorerecord = BackendApi.get_battleevent_score_per_rank_record(model_mgr, uid, eventmaster.id, rankmaster.rank, using=settings.DB_READONLY)
     point = rankscorerecord.point if rankscorerecord else 0
     self.html_param['point'] = point
     
     # 報酬.
     prizedatalist = self.__make_pointprizelist(rankmaster.battlepointprizes, point)
     self.html_param['pointprizelist'] = prizedatalist
     
     self.writeHtml(eventmaster, 'bpsuccessbonus')
コード例 #4
0
ファイル: loginbonus.py プロジェクト: hitandaway100/caba
    def process(self):

        eventmaster = self.getCurrentBattleEvent()
        if not self.checkBattleEventUser(do_check_battle_open=False,
                                         do_check_loginbonus=False):
            return

        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()
        uid = v_player.id

        # ランクレコード取得.
        rankrecord = self.getCurrentBattleRankRecord()

        # 更新確認.
        config = BackendApi.get_current_battleeventconfig(
            self.getModelMgr(), using=settings.DB_READONLY)
        now = OSAUtil.get_now()
        received_data = None
        if rankrecord.isNeedUpdate(config, now=now):
            # 書き込み.
            try:
                model_mgr, received_data = db_util.run_in_transaction(
                    Handler.tr_write, eventmaster, uid, now)
                model_mgr.write_end()
            except CabaretError, err:
                if settings_sub.IS_LOCAL:
                    raise err
                else:
                    url = self.makeAppLinkUrlRedirect(
                        UrlMaker.battleevent_top(eventmaster.id))
                    self.appRedirect(url)
                    return
コード例 #5
0
ファイル: base.py プロジェクト: hitandaway100/caba
 def checkBattleEventUser(self, do_check_opening=True, do_check_battle_open=True, do_check_regist=True, do_check_loginbonus=True, do_check_emergency=True):
     """ユーザーチェック.
     """
     model_mgr = self.getModelMgr()
     
     if do_check_opening:
         uid = self.getViewerPlayer().id
         cur_eventmaster = self.getCurrentBattleEvent(quiet=True)
         if cur_eventmaster:
             if BackendApi.check_battleevent_lead_opening(model_mgr, uid, cur_eventmaster.id, using=settings.DB_READONLY):
                 # オープニングを見ていない.
                 url = UrlMaker.battleevent_opening()
                 self.appRedirect(self.makeAppLinkUrlRedirect(url))
                 return False
     
     config = BackendApi.get_current_battleeventconfig(model_mgr, using=settings.DB_READONLY)
     is_battleopen = self.isBattleOpen()
     
     if do_check_battle_open and not is_battleopen:
         # バトルが閉じている.
         url = UrlMaker.battleevent_top(config.mid)
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return False
     elif do_check_emergency and config.is_emergency:
         # 緊急停止.
         url = UrlMaker.battleevent_top(config.mid)
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return False
     else:
         cur_group = self.getCurrentBattleGroup(do_search_log=not is_battleopen)
         if do_check_regist and cur_group is None:
             # イベントに参加していない.
             if is_battleopen:
                 url = UrlMaker.battleevent_regist()
             else:
                 url = UrlMaker.battleevent_top(config.mid)
             self.appRedirect(self.makeAppLinkUrlRedirect(url))
             return False
         elif do_check_loginbonus:
             rankrecord = self.getCurrentBattleRankRecord()
             if rankrecord and rankrecord.isNeedUpdate(config):
                 url = UrlMaker.battleevent_loginbonus()
                 self.appRedirect(self.makeAppLinkUrlRedirect(url))
                 return False
     return True
コード例 #6
0
ファイル: base.py プロジェクト: hitandaway100/caba
 def preprocess(self):
     BattleHandler.preprocess(self)
     self.__current_event = None
     self.__current_event_flagrecord = None
     self.__current_event_scorerecord = None
     self.__current_event_rankrecord = None
     self.__current_event_group = None
     # イベントTopのURL.
     url = UrlMaker.battleevent_top()
     self.html_param['url_battleevent_top'] = self.makeAppLinkUrl(url)
コード例 #7
0
ファイル: resultanim.py プロジェクト: hitandaway100/caba
    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)
コード例 #8
0
ファイル: top.py プロジェクト: hitandaway100/caba
    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')
コード例 #9
0
 def __proc_prizes_group_ranking(self, eventmaster, is_opened):
     """ランク別ランキング報酬.
     """
     # 自分のランク.
     myrank = self.__get_myrank(eventmaster)
     
     # 選択したランク.
     rankmaster = self.__get_selected_rank(eventmaster, myrank)
     if rankmaster is None:
         # ランクが存在しない.
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battleevent_top(eventmaster.id)))
         return
     
     # セレクトBOX.
     self.__put_rankmaster_list_for_selectbox(eventmaster, myrank)
     
     # 報酬.
     prizedatalist = self.make_rankingprizelist(rankmaster.group_rankingprizes)
     self.html_param['rankingprizelist'] = prizedatalist
     
     self.writeHtml(eventmaster, 'daily_groupbonus')
コード例 #10
0
    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 now < config.endtime:
            cur_eventmaster = BackendApi.get_battleevent_master(
                model_mgr, config.mid, using=settings.DB_READONLY)

        if cur_eventmaster is None or not cur_eventmaster.is_goukon:
            self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage()))
            return

        v_player = self.getViewerPlayer()
        uid = v_player.id

        # 閲覧フラグを立てる.
        if BackendApi.check_battleevent_lead_scenario(
                model_mgr, uid, config.mid, using=settings.DB_READONLY):
            flagrecord = BackendApi.update_battleevent_flagrecord(
                cur_eventmaster.id, uid, scvtime=now)
            model_mgr.set_got_models([flagrecord])

        # 演出のパラメータ.
        effectpath = '%s/event_nakaoshi/effect.html' % cur_eventmaster.effectname
        params = {
            'backUrl':
            self.makeAppLinkUrl(UrlMaker.battleevent_top(cur_eventmaster.id)),
            'pre':
            self.url_static +
            'effect/sp/v2/%s/data/' % cur_eventmaster.effectname,
            'logo_img':
            'scenario/event_logo.png',
            'logo_w_img':
            'scenario/event_logo_w.png',
        }
        self.appRedirectToEffect(effectpath, params)
コード例 #11
0
ファイル: epilogue.py プロジェクト: hitandaway100/caba
    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.endtime < now:
            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

        v_player = self.getViewerPlayer()
        uid = v_player.id

        # EP閲覧フラグを立てる.
        if BackendApi.check_battleevent_lead_epilogue(
                model_mgr, uid, cur_eventmaster.id,
                using=settings.DB_READONLY):
            flagrecord = BackendApi.update_battleevent_flagrecord(
                cur_eventmaster.id, uid, epvtime=now)
            model_mgr.set_got_models([flagrecord])

        url = UrlMaker.battleevent_top(cur_eventmaster.id)
        if cur_eventmaster.ed:
            # 演出のパラメータ.
            effectpath = UrlMaker.event_scenario()
            dataUrl = self.makeAppLinkUrlEffectParamGet(
                'eventscenario/%d/last%s' % (cur_eventmaster.ed, url))
            self.appRedirectToEffect2(effectpath, dataUrl)
        else:
            # 演出なし.
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
コード例 #12
0
ファイル: anim.py プロジェクト: hitandaway100/caba
    def process(self):
        
        args = self.getUrlArgs('/battleeventbattleanim/')
        eventid = args.getInt(0)
        rarity = args.getInt(1)
        piecenumber = args.getInt(2)
        is_complete = args.getInt(3)
        if is_complete is None:
            is_complete = 0

        if eventid is None:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'引数がおかしい')
            self.redirectToTop()
            return
        
        model_mgr = self.getModelMgr()
        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 or not battleresult.anim:
            # 結果が存在しない.
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'結果がない')
            url = UrlMaker.battleevent_top(eventid)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        
        # 演出用パラメータ.
        if (not rarity is None) and (not piecenumber is None) and (not is_complete is None):
            dataUrl = self.makeAppLinkUrlEffectParamGet('battleevent/%d/%d/%d/%d/' % (eventid, rarity, piecenumber, is_complete))
        else:
            dataUrl = self.makeAppLinkUrlEffectParamGet('battleevent/%d/' % eventid)

        self.appRedirectToEffect2('battle2/effect2.html', dataUrl)
コード例 #13
0
ファイル: loginbonus.py プロジェクト: hitandaway100/caba
                        'rank_next': rankrecord.rank,
                    }

        basetime = DateTimeUtil.toLoginTime(OSAUtil.get_now())
        yesterday = datetime.date(basetime.year, basetime.month,
                                  basetime.day) - datetime.timedelta(days=1)
        target_grouplog = None
        for grouplog in BackendApi.get_battleevent_grouplog_dict(
                model_mgr, rankrecord.groups,
                using=settings.DB_READONLY).values():
            if grouplog.cdate == yesterday:
                target_grouplog = grouplog
                break
        if target_grouplog is None:
            url = self.makeAppLinkUrlRedirect(
                UrlMaker.battleevent_top(eventmaster.id))
            self.appRedirect(url)
            return
        elif eventmaster.is_goukon:
            # 合コンでは演出はない.
            if self.getFromPageName() == Defines.FromPages.BATTLEEVENT:
                args = self.getFromPageArgs()
                mid = int(args[0]) if args and str(args[0]).isdigit() else None
                url = self.makeAppLinkUrlRedirect(
                    UrlMaker.battleevent_top(mid))
            else:
                url = self.makeAppLinkUrlRedirect(UrlMaker.mypage())
            self.appRedirect(url)
            return
        elif received_data is None:
            url = self.makeAppLinkUrlRedirect(
コード例 #14
0
ファイル: result.py プロジェクト: hitandaway100/caba
    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'))
コード例 #15
0
ファイル: group.py プロジェクト: hitandaway100/caba
 def process(self):
     
     v_player = self.getViewerPlayer()
     uid = v_player.id
     
     eventmaster = self.getCurrentBattleEvent()
     if not self.checkBattleEventUser(do_check_battle_open=False):
         return
     
     model_mgr = self.getModelMgr()
     group = self.getCurrentBattleGroup(do_search_log=True)
     page = int(self.request.get(Defines.URLQUERY_PAGE) or 0)
     rankmaster = BackendApi.get_battleevent_rankmaster_byId(model_mgr, group.rankid, using=settings.DB_READONLY)
     
     if rankmaster is None:
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battleevent_top(eventmaster.id)))
         return
     
     now = OSAUtil.get_now()
     eventid = eventmaster.id
     
     if isinstance(group, BattleEventGroupLog):
         userdatalist = group.userdata
     else:
         scorerecords = BackendApi.get_battleevent_scorerecord_dict(model_mgr, eventid, group.useridlist[:], get_instance=True, using=settings.DB_READONLY)
         scorerecord_list = scorerecords.values()
         scorerecord_list.sort(key=lambda x:x.getPointToday(now), reverse=True)
         userdatalist = []
         pointpre = None
         for idx,scorerecord in enumerate(scorerecord_list):
             point = scorerecord.getPointToday(now)
             if pointpre is None or point < pointpre:
                 rank = idx + 1
                 pointpre = point
             userdata = BattleEventGroupUserData.createByScoreRecord(scorerecord, rank, now)
             userdatalist.append(userdata)
     userdatalist.sort(key=lambda x:x.grouprank)
     
     nummax = len(userdatalist)
     offset = page * Handler.CONTENT_NUM_PER_PAGE
     targetlist = userdatalist[offset:(offset + Handler.CONTENT_NUM_PER_PAGE)]
     
     obj_playerlist = []
     if targetlist:
         uidlist = [data.uid for data in targetlist]
         playerlist = BackendApi.get_players(self, uidlist, [PlayerExp], using=settings.DB_READONLY)
         obj_player_dict = dict([(obj_player['id'], obj_player) for obj_player in self.getObjPlayerList(playerlist)])
         
         for data in targetlist:
             obj_player = obj_player_dict.get(data.uid)
             if obj_player:
                 obj_player['event_rank'] = data.grouprank
                 obj_player['event_score'] = data.point
                 obj_player['is_me'] = uid == data.uid
                 obj_playerlist.append(obj_player)
     self.html_param['playerlist'] = obj_playerlist
     
     self.putPagenation(UrlMaker.battleevent_group(), page, nummax, Handler.CONTENT_NUM_PER_PAGE)
     
     self.putEventTopic(eventid)
     
     rankrecord = BackendApi.get_battleevent_rankrecord(model_mgr, rankmaster.eventid, uid, using=settings.DB_READONLY)
     self.html_param['battleevent_rank'] = Objects.battleevent_rank(self, rankrecord, rankmaster, group)
     
     if eventmaster.is_goukon:
         self.writeAppHtml('gcevent/grouprank')
     else:
         self.writeAppHtml('btevent/grouprank')
コード例 #16
0
         except CabaretError, err:
             if err.code == CabaretError.Code.ALREADY_RECEIVED:
                 pass
             elif settings_sub.IS_LOCAL:
                 raise err
             else:
                 url = self.makeAppLinkUrlRedirect(UrlMaker.battleevent_opplist())
                 self.appRedirect(url)
                 return
     elif v_player.req_alreadykey == confirmkey:
         # 処理済みのリクエスト.
         pass
     else:
         # おかしなリクエスト.
         model_mgr.delete_models_from_cache(PlayerRequest, [uid])
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battleevent_top(eventmaster.id)))
         return
     
     url = UrlMaker.battleevent_battleanim(eventmaster.id)
     self.appRedirect(self.makeAppLinkUrlRedirect(url))
 
 def tr_write(self, eventmaster, eventrankmaster, o_eventrankmaster, uid, oid, v_deck_cardidlist, o_deck_cardidlist, data, grouprank, is_worst, revengeid, confirmkey, now, rival_key):
     model_mgr = ModelRequestMgr()
     players = BackendApi.get_players(self, [uid, oid], [PlayerGold, PlayerExp, PlayerFriend], model_mgr=model_mgr)
     v_player = None
     o_player = None
     for player in players:
         if player.id == uid:
             v_player = player
         else:
             o_player = player
コード例 #17
0
ファイル: top.py プロジェクト: hitandaway100/caba
    def process(self):

        self.__execute_end_worklist = []

        model_mgr = self.getModelMgr()

        config = BackendApi.get_current_battleeventconfig(
            model_mgr, using=settings.DB_READONLY)

        args = self.getUrlArgs('/battleeventtop/')
        eventid = str(args.get(0))
        eventmaster = None

        if eventid and eventid.isdigit():
            eventid = int(eventid)
        elif config:
            eventid = config.mid

        if eventid:
            eventmaster = BackendApi.get_battleevent_master(
                model_mgr, eventid, using=settings.DB_READONLY)

        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
            return

        self.__eventmaster = eventmaster
        eventid = eventmaster.id
        cur_eventmaster = self.getCurrentBattleEvent(quiet=True)

        v_player = self.getViewerPlayer()
        uid = v_player.id

        is_open = cur_eventmaster and eventid == cur_eventmaster.id

        self.setFromPage(Defines.FromPages.BATTLEEVENT, eventid)

        if is_open:
            # 開催中.
            if self.isBattleOpen():
                # バトルが開いている時.
                self.procOpened()
            else:
                # バトルが閉じている時.
                self.procBattleClosed()
            # イベント参加KPI保存.
            BackendApi.save_kpi_battleevent_join(uid, self.is_pc)
        else:
            self.procClosed()

        if self.response.isEnd:
            return

        self.html_param['player'] = Objects.player(self, v_player)

        # イベント情報.
        battleevent = Objects.battleevent(self, eventmaster)
        self.html_param['battleevent'] = battleevent

        # バトルチケットの使用期限
        if is_open:
            self.html_param[
                'battle_ticket_expiry_date'] = self.get_battle_ticket_expiry_date(
                    config.ticket_endtime)

        BackendApi.check_battleevent_piececollection_userdata_and_create(
            model_mgr, uid, eventid)
        self.html_param['allrarity_piece'] = self.create_piece_image_paths(
            uid, eventid)

        # トピック.
        self.putEventTopic(eventid)

        # バトル履歴.
        if not eventmaster.is_goukon:
            loglist = BackendApi.get_battleevent_battlelog_list(
                model_mgr, uid, limit=1, using=settings.DB_READONLY)
            if loglist:
                func_battleloginfo = BackendApi.make_battleevent_battleloginfo(
                    self, loglist, do_execute=False)
                if func_battleloginfo:

                    def put_battleloginfo():
                        self.html_param['battleloglist'] = func_battleloginfo()

                    self.addExecuteApiWork(put_battleloginfo)

        # バトル履歴のリンク.
        self.html_param['url_battleevent_battlelog'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_loglist())
        tradeshop_urlparam = OSAUtil.addQuery(
            UrlMaker.trade(), Defines.URLQUERY_CTYPE,
            Defines.GachaConsumeType.GachaTopTopic.TICKET)
        self.html_param['url_battleticket_trade'] = self.makeAppLinkUrl(
            tradeshop_urlparam)
        battleticket = BackendApi.get_additional_gachaticket_nums(
            model_mgr,
            v_player.id,
            [Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET],
            using=settings.DB_READONLY)
        if battleticket:
            battle_ticket_num = battleticket[
                Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET].num
        else:
            battle_ticket_num = 0
        self.html_param['battleticket'] = {
            'name':
            Defines.GachaConsumeType.NAMES[
                Defines.GachaConsumeType.BATTLE_TICKET],
            'num':
            battle_ticket_num,
            'unit':
            Defines.ItemType.UNIT[Defines.ItemType.ADDITIONAL_GACHATICKET],
        }

        # グループ履歴のリンク.
        self.html_param['url_battleevent_grouplog'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_grouploglist(eventid))

        if not self.html_param.has_key('battleevent_rank'):
            # ランク情報がないのでデフォルトのを設定.
            if config.isFirstDay():
                rankmaster = BackendApi.get_battleevent_rankmaster(
                    model_mgr,
                    eventid,
                    eventmaster.rankstart,
                    using=settings.DB_READONLY)
            else:
                rankmaster = BackendApi.get_battleevent_rankmaster(
                    model_mgr,
                    eventid,
                    eventmaster.rankbeginer,
                    using=settings.DB_READONLY)
            self.html_param['battleevent_rank'] = Objects.battleevent_rank(
                self, None, rankmaster, None)

        self.executeApiWithWork()

        # 初心者フラグ.
        is_beginer = BackendApi.check_battleevent_beginer(
            model_mgr, uid, eventmaster, config, using=settings.DB_READONLY)
        self.html_param['is_beginer'] = is_beginer

        # ユーザーデータのチェック, カウントの取得
        user_cvictory_count = self.check_user_continue_victory_data(
            uid, eventid)
        self.put_user_continue_victory_data(user_cvictory_count)

        # ランキング.
        view_myrank = False
        view_beginer = self.request.get(Defines.URLQUERY_BEGINER) == "1"
        if not view_beginer or is_beginer:
            view_myrank = self.request.get(Defines.URLQUERY_FLAG) == "1"
        url_ranking = OSAUtil.addQuery(UrlMaker.battleevent_top(eventid),
                                       Defines.URLQUERY_FLAG, "0")
        url_myrank = OSAUtil.addQuery(UrlMaker.battleevent_top(eventid),
                                      Defines.URLQUERY_FLAG, "1")
        self.putRanking(uid,
                        eventid,
                        view_myrank,
                        url_ranking,
                        url_myrank,
                        view_beginer=view_beginer)

        if eventmaster.is_goukon:
            self.writeAppHtml('gcevent/top')
        else:
            self.writeAppHtml('btevent/top')
コード例 #18
0
ファイル: regist.py プロジェクト: hitandaway100/caba
            model_mgr, eventid, using=settings.DB_READONLY)
        rankmaster_list.sort(key=lambda x: x.rank)

        try:
            db_util.run_in_transaction(self.tr_write, config, eventmaster, uid,
                                       v_player.level,
                                       rankmaster_list).write_end()
        except CabaretError, err:
            if err.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            else:
                url = UrlMaker.mypage()
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return

        url = UrlMaker.battleevent_top()
        self.appRedirect(self.makeAppLinkUrlRedirect(url))

    def tr_write(self,
                 config,
                 eventmaster,
                 uid,
                 level,
                 rankmaster_list,
                 target_rank=None):
        """書き込み.
        """
        model_mgr = ModelRequestMgr()
        BackendApi.tr_battleevent_regist_group_for_user(
            model_mgr,
            config,