Ejemplo n.º 1
0
 def putFriendInfos(self, o_player):
     """仲間関係の情報とか.
     """
     v_player = self.getViewerPlayer()
     model_mgr = self.getModelMgr()
     # 仲間かどうか.
     self.html_param['is_friend'] = BackendApi.check_friend(v_player.id, o_player.id, model_mgr, using=settings.DB_READONLY)
     # 仲間申請中かどうか.
     self.html_param['did_send_friendrequest'] = BackendApi.check_friendrequest_send(v_player.id, o_player.id, model_mgr, using=settings.DB_READONLY)
     # 仲間申請を受けているかどうか.
     self.html_param['receive_friendrequest'] = BackendApi.check_friendrequest_receive(v_player.id, o_player.id, model_mgr, using=settings.DB_READONLY)
     # 仲間数.
     self.html_param['friend_num'] = BackendApi.get_friend_num(o_player.id, model_mgr, using=settings.DB_READONLY)
Ejemplo n.º 2
0
    def procYesno(self, v_player, fid):
        """外す確認.
        """
        model_mgr = self.getModelMgr()
        uid = v_player.id

        if not BackendApi.check_friend(
                uid, fid, model_mgr, using=settings.DB_READONLY):
            raise CabaretError(u'フレンドではありません', CabaretError.Code.NOT_DATA)

        playerlist = self.getObjPlayerList([fid])
        if len(playerlist) == 0:
            raise CabaretError(u'存在しないプレイヤーです', CabaretError.Code.NOT_DATA)
        player = playerlist[0]
        player['url_friendremove'] = self.makeAppLinkUrl(
            UrlMaker.friendremove_do(fid))
        self.html_param['player'] = player

        self.writeAppHtml('friend/removeyesno')
Ejemplo n.º 3
0
    def process(self):

        v_player = self.getViewerPlayer()

        args = self.getUrlArgs('/greet/')
        oid = args.get(0, None)
        o_player = None
        if str(oid).isdigit():
            playerlist = BackendApi.get_players(self, [int(oid)], [],
                                                using=settings.DB_READONLY)
            if playerlist:
                o_player = playerlist[0]
        if o_player is None:
            raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS)

        point_pre = v_player.gachapt
        point_post = v_player.gachapt
        errcode = 0

        model_mgr = self.getModelMgr()
        is_friend = BackendApi.check_friend(v_player.id,
                                            o_player.id,
                                            model_mgr,
                                            using=settings.DB_READONLY)

        try:
            model_mgr = db_util.run_in_transaction(Handler.tr_write,
                                                   v_player.id, o_player.id,
                                                   is_friend)
            model_mgr.write_end()
            playergachapt = model_mgr.get_wrote_model(PlayerGachaPt,
                                                      v_player.id)
            point_post = playergachapt.gachapt
        except CabaretError, e:
            if e.code in (CabaretError.Code.ALREADY_RECEIVED,
                          CabaretError.Code.OVER_LIMIT):
                # 同じ相手へのあいさつは2時間に1度.
                # あいさつは1日に300回まで.
                errcode = e.code
            else:
                raise
Ejemplo n.º 4
0
 def getSelectedFriendCard(self, raidid, do_set_default=True):
     """選択済みのリーダーカード.
     """
     v_player = self.getViewerPlayer()
     if not BackendApi.raid_is_can_callfriend(v_player.id):
         BackendApi.delete_raidhelpcard(v_player.id)
         return None
     
     model_mgr = self.getModelMgr()
     cardset = BackendApi.get_raidhelpcard(model_mgr, v_player.id, raidid, using=settings.DB_READONLY)
     
     if cardset:
         if not BackendApi.check_friend(v_player.id, cardset.card.uid, model_mgr, using=settings.DB_READONLY):
             BackendApi.delete_raidhelpcard(v_player.id)
             cardset = None
     
     if cardset is None and do_set_default and not BackendApi.check_raidhelpcard_canceled(model_mgr, v_player.id, raidid, using=settings.DB_READONLY):
         cardlist = self.getFriendLeaderCardList(1)
         if cardlist:
             cardset = cardlist[0]
             BackendApi.save_raidhelpcard(model_mgr, v_player.id, raidid, cardset, using=settings.DB_READONLY)
     return cardset
Ejemplo n.º 5
0
    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')
Ejemplo n.º 6
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'))
Ejemplo n.º 7
0
    def process(self):

        args = self.getUrlArgs('/greet_complete/')
        oid = args.get(0, None)
        errcode = args.get(1, None)
        point_pre = args.get(2, None)
        point_post = args.get(3, None)
        logid = args.get(4, None)

        if not (str(oid).isdigit() and str(errcode).isdigit()
                and str(point_pre).isdigit() and str(point_post).isdigit()):
            raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS)

        oid = int(args.get(0, None))
        errcode = int(args.get(1, None))
        point_pre = int(args.get(2, None))
        point_post = int(args.get(3, None))
        if logid:
            logid = int(logid)

        o_player = BackendApi.get_players(self, [oid], [],
                                          using=settings.DB_READONLY)
        if o_player:
            o_player = o_player[0]
        else:
            raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS)

        if not logid:
            url = UrlMaker.profile(o_player.id)
            url = self.makeAppLinkUrlRedirect(url)
            self.appRedirect(url)
            return

        persons = BackendApi.get_dmmplayers(self, [o_player],
                                            using=settings.DB_READONLY)
        self.html_param['person'] = Objects.person(self, o_player,
                                                   persons.get(o_player.dmmid))

        is_overlimit = False
        is_duplicate = False
        if errcode == CabaretError.Code.OK:
            pass
        elif errcode == CabaretError.Code.ALREADY_RECEIVED:
            is_duplicate = True
        elif errcode == CabaretError.Code.OVER_LIMIT:
            is_overlimit = True

        self.html_param['is_duplicate'] = is_duplicate
        self.html_param['is_overlimit'] = is_overlimit

        self.html_param['gacha_pt_pre'] = point_pre
        self.html_param['gacha_pt_post'] = point_post
        self.html_param['gacha_pt_add'] = point_post - point_pre

        url = UrlMaker.profile(oid)
        self.html_param['url_profile'] = self.makeAppLinkUrl(url)

        url = UrlMaker.greet_complete(o_player.id, errcode, point_pre,
                                      point_post, logid)
        self.html_param['url_self'] = self.makeAppLinkUrl(url)

        errtext = False
        comment = u''
        if self.request.method == 'POST':
            comment = self.request.get(self.KEY_GREET_COMMENT)

            if comment == u'':
                errtext = True

            # コメントのバイト数で比較
            if StrUtil.getByteLength(comment) > (
                    Defines.GREET_COMMENT_TEXT_MAX * 2):
                errtext = True

            if not errtext and self.is_pc:
                # JS API経由でtextidを取得済み
                textid = self.request.get(self.KEY_GREET_TEXTID)
            elif not errtext:
                data = InspectionPostRequestData()
                data.data = comment
                request = self.osa_util.makeApiRequest(ApiNames.InspectionPost,
                                                       data)
                self.addAppApiRequest('inspection_start', request)

                ret_data = self.execute_api()

                result = ret_data['inspection_start'].get()
                if isinstance(result, InspectionData):
                    textid = result.textId
                else:
                    if not settings_sub.IS_LOCAL:
                        errtext = True
                    else:
                        textid = '0000'

            if not errtext:
                v_player = self.getViewerPlayer()

                point_pre = v_player.gachapt
                point_post = v_player.gachapt

                model_mgr = self.getModelMgr()
                is_friend = BackendApi.check_friend(v_player.id,
                                                    o_player.id,
                                                    model_mgr,
                                                    using=settings.DB_READONLY)

                try:
                    model_mgr = db_util.run_in_transaction(
                        Handler.tr_write, v_player.id, o_player.id, is_friend,
                        logid, textid)
                    model_mgr.write_end()
                    playergachapt = model_mgr.get_wrote_model(
                        PlayerGachaPt, v_player.id)
                    if playergachapt:
                        point_post = playergachapt.gachapt
                except CabaretError, e:
                    if e.code in (CabaretError.Code.NOT_DATA):
                        url = UrlMaker.greet(o_player.id)
                        url = self.makeAppLinkUrlRedirect(url)
                        self.appRedirect(url)
                        return
                    else:
                        raise

                errcode = 0
                if point_pre >= point_post:
                    errcode = CabaretError.Code.ALREADY_RECEIVED
                url = UrlMaker.greet_comment_comp(o_player.id, errcode,
                                                  point_pre, point_post)
                url = self.makeAppLinkUrlRedirect(url)
                self.appRedirect(url)
                return