Exemplo n.º 1
0
    def procBattleClosed(self):
        """バトル終了.
        """
        # ユーザの状態チェック.
        if not self.checkBattleEventUser(do_check_battle_open=False,
                                         do_check_regist=False,
                                         do_check_emergency=False):
            return

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

        # ランク情報.
        rankrecord = BackendApi.get_battleevent_rankrecord(
            model_mgr, eventid, uid, using=settings.DB_READONLY)
        if rankrecord and rankrecord.groups:
            groupnum = len(rankrecord.groups)
            for i in xrange(groupnum):
                index = groupnum - (i + 1)
                func_rankinfo = self.makeRankRecordObj(
                    rankrecord,
                    groupid=rankrecord.groups[index],
                    player_num=2,
                    do_execute=False)
                if func_rankinfo:

                    def put_rankinfo():
                        self.html_param['battleevent_rank'] = func_rankinfo()

                    self.addExecuteApiWork(put_rankinfo)
                    break

        # スコア情報.
        scorerecord = BackendApi.get_battleevent_scorerecord(
            model_mgr, eventid, uid, using=settings.DB_READONLY)
        self.html_param['battleevent_score'] = self.makeScoreRecordObj(
            scorerecord)

        # グループの詳細へ.
        self.html_param['url_battleevent_group'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_group())
Exemplo n.º 2
0
    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'))
Exemplo n.º 3
0
 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')
Exemplo n.º 4
0
    def procOpened(self):
        """開催中.
        """
        # ユーザの状態チェック.
        if not self.checkBattleEventUser(do_check_battle_open=False,
                                         do_check_emergency=False):
            return

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

        if BackendApi.check_battleevent_lead_scenario(
                model_mgr, uid, eventid, using=settings.DB_READONLY):
            # 中押し演出を見ていない.
            url = UrlMaker.battleevent_scenario()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return False

        # ランク情報.
        rankrecord = BackendApi.get_battleevent_rankrecord(
            model_mgr, eventid, uid, using=settings.DB_READONLY)
        func_rankinfo = self.makeRankRecordObj(rankrecord,
                                               player_num=2,
                                               do_execute=False)

        # スコア情報.
        scorerecord = BackendApi.get_battleevent_scorerecord(
            model_mgr, eventid, uid, using=settings.DB_READONLY)
        rank_beginer = BackendApi.get_battleevent_rank(eventid,
                                                       uid,
                                                       is_beginer=True)
        obj_scorerecord = self.makeScoreRecordObj(scorerecord,
                                                  rank_beginer=rank_beginer)
        self.html_param['battleevent_score'] = obj_scorerecord

        if func_rankinfo:

            def put_rankinfo():
                obj_rankinfo = func_rankinfo()
                self.html_param['battleevent_rank'] = obj_rankinfo

                # グループ内ランキング報酬.
                prizeinfo = None
                if 0 < obj_scorerecord['point']:
                    grouprank = obj_rankinfo['grouprankingdata']['rank']

                    rankmaster = BackendApi.get_battleevent_rankmaster(
                        model_mgr,
                        eventid,
                        obj_rankinfo['rank'],
                        using=settings.DB_READONLY)
                    if rankmaster:
                        prizeidlist = []
                        for data in rankmaster.group_rankingprizes:
                            if not data.get('prize') or not (data['rank_min']
                                                             <= grouprank <=
                                                             data['rank_max']):
                                continue
                            prizeidlist.extend(data.get('prize'))
                        prizelist = BackendApi.get_prizelist(
                            model_mgr, prizeidlist, using=settings.DB_READONLY)
                        prizeinfo = BackendApi.make_prizeinfo(
                            self, prizelist, using=settings.DB_READONLY)
                self.html_param['prize'] = prizeinfo

            self.addExecuteApiWork(put_rankinfo)

        # グループの詳細へ.
        self.html_param['url_battleevent_group'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_group())

        url = UrlMaker.battleevent_explain(eventid, 'prizes')
        self.html_param['url_prizes_group_ranking'] = self.makeAppLinkUrl(
            OSAUtil.addQuery(url, Defines.URLQUERY_CTYPE, 'group_ranking'))

        # バトルTOPへ.
        self.html_param['url_battleevent_opplist'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_opplist())