Esempio n. 1
0
 def checkOpponentId(self, oid, revengeid=None, do_redirect=True, args=None):
     """対戦出来る相手なのかチェック.
     """
     model_mgr = self.getModelMgr()
     v_player = self.getViewerPlayer()
     uid = v_player.id
     eventid = self.getCurrentBattleEvent().id
     
     oidlist = None
     if revengeid:
         revenge = BackendApi.get_battleevent_revenge(model_mgr, revengeid, using=settings.DB_READONLY)
         if revenge and uid == revenge.uid:
             oidlist = [revenge.oid]
     else:
         eventmaster = self.getCurrentBattleEvent()
         oidlist = BackendApi.get_battleevent_opponentidlist(model_mgr, eventmaster.id, uid, using=settings.DB_READONLY)
         if BackendApi._check_is_rival_strings(oid, eventid, args):
             if oid in oidlist:
                 oidlist.remove(oid)
                 oidlist.insert(0, oid)
             elif oid:
                 oidlist[0] = oid
         oidlist = BackendApi.filter_battleevent_opplist_by_battletime(model_mgr, uid, oidlist, using=settings.DB_READONLY)
     
     if oidlist and oid in oidlist:
         return True
     else:
         if do_redirect:
             target = 'revenge' if revengeid else 'lv'
             url = UrlMaker.battleevent_opplist(target)
             self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return False
Esempio n. 2
0
    def process(self):
        
        eventmaster = self.getCurrentBattleEvent()
        if not self.checkBattleEventUser():
            return
        
        args = self.getUrlArgs('/battleeventbattledo/')
        confirmkey = urllib.unquote(args.get(0) or '')
        oid = args.getInt(1)

        rival_index = BackendApi._check_is_rival_strings(oid, eventmaster.id, args)
        rival_key = BackendApi.get_rival_key(oid, eventmaster.id, args)

        if rival_key and rival_index == 3:
            revengeid = args.getInt(2)
        elif not rival_key:
            revengeid = args.getInt(2)
        else:
            revengeid = None

        rival_key = BackendApi.get_rival_key(oid, eventmaster.id, args)

        now = OSAUtil.get_now()
        v_player = self.getViewerPlayer()
        uid = v_player.id
        
        o_player = None
        if oid:
            o_player = BackendApi.get_player(self, oid, [PlayerFriend, PlayerExp], using=settings.DB_READONLY)
        
        if not o_player:
            url = UrlMaker.battleevent_opplist()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        elif not self.checkOpponentId(oid, revengeid, args=args):
            # 対戦できない相手.
            return
        
        model_mgr = self.getModelMgr()
        #piecedata = None
        if v_player.req_confirmkey == confirmkey:
            self.addloginfo(u'req_confirmkey==confirmkey')
            
            # 正しいリクエスト.
            
            # お互いのカード.
            v_deck = BackendApi.get_deck(v_player.id, model_mgr, using=settings.DB_READONLY)
            o_deck = BackendApi.get_deck(o_player.id, model_mgr, using=settings.DB_READONLY)
            v_deck_cardlist = BackendApi.get_cards(v_deck.to_array(), model_mgr, using=settings.DB_READONLY)
            o_deck_cardlist = BackendApi.get_cards(o_deck.to_array(), model_mgr, using=settings.DB_READONLY)
            self.addloginfo(u'get deck')
            
            # 現在の称号.
            titlemaster = BackendApi.get_current_title_master(model_mgr, v_player.id, now, using=settings.DB_READONLY)
            battleevent_power_up = titlemaster.battleevent_power_up if titlemaster else 0
            
            # 計算.
            rand = AppRandom()
            data = BackendApi.battle(v_player, v_deck_cardlist, o_player, o_deck_cardlist, rand, eventmaster=eventmaster, title_effect=battleevent_power_up)
            self.addloginfo(u'battle')

            v_deck_cardidlist = v_deck.to_array()
            o_deck_cardidlist = o_deck.to_array()
            
            eventrankmaster = self.getCurrentBattleRankMaster()
            v_rankrecord = self.getCurrentBattleRankRecord()
            
            o_rankrecord = BackendApi.get_battleevent_rankrecord(model_mgr, eventmaster.id, oid, using=settings.DB_READONLY)
            o_eventrankmaster = None
            if o_rankrecord:
                config = BackendApi.get_current_battleeventconfig(model_mgr, using=settings.DB_READONLY)
                o_eventrankmaster = BackendApi.get_battleevent_rankmaster(model_mgr, eventmaster.id, o_rankrecord.getRank(config), using=settings.DB_READONLY)
            self.addloginfo(u'get rankrecord')
            
            # グループ内順位.
            group = self.getCurrentBattleGroup()
            grouprankdata = BackendApi.make_battleevent_grouprankingdata(self, group, v_rankrecord.uid, now, using=settings.DB_READONLY, do_get_name=False)
            grouprank = grouprankdata['rank'] if grouprankdata else -1
            is_worst = grouprankdata['worst'] if grouprankdata else False
            self.addloginfo(u'make rankdata')

#             piecedata = self.present_piece(model_mgr, uid, eventmaster.id, data[0]['is_win'], rival_key)
            try:
                model_mgr = db_util.run_in_transaction(self.tr_write, eventmaster, eventrankmaster, o_eventrankmaster, uid, oid, v_deck_cardidlist, o_deck_cardidlist, data, grouprank, is_worst, revengeid, confirmkey, now, rival_key)
                self.addloginfo(u'write')
                model_mgr.write_end()
                self.addloginfo(u'write end')
            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
Esempio n. 3
0
    def process(self):

        eventmaster = self.getCurrentBattleEvent()
        if not self.checkBattleEventUser():
            return

        args = self.getUrlArgs('/battleeventbattlepre/')
        oid = args.getInt(0)

        rival_index = BackendApi._check_is_rival_strings(
            oid, eventmaster.id, args)
        rival_key = BackendApi.get_rival_key(oid, eventmaster.id, args)

        if rival_key and rival_index == 2:
            revengeid = args.getInt(1)
        elif not rival_key:
            revengeid = args.getInt(1)
        else:
            revengeid = None

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

        obj_v_player = None
        obj_o_player = None
        if oid:
            o_player = BackendApi.get_player(self,
                                             oid, [PlayerFriend, PlayerExp],
                                             using=settings.DB_READONLY)
            if o_player:
                tmp = self.getObjPlayerList([o_player, v_player])

                for obj_player in tmp:
                    if obj_player['id'] == oid:
                        obj_o_player = obj_player
                    elif obj_player['id'] == uid:
                        obj_v_player = obj_player
                if tmp:
                    obj_o_player = tmp[0]
        is_battle_ok = True
        if not obj_o_player:
            url = UrlMaker.battleevent_opplist()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        elif not self.checkOpponentId(
                oid, revengeid, do_redirect=revengeid, args=args):
            # 対戦できない相手.
            if revengeid:
                return
            is_battle_ok = False
        obj_o_player['is_battle_ok'] = is_battle_ok

        self.setFromPage(Defines.FromPages.BATTLEEVENTPRE,
                         [oid, revengeid, rival_key])

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

        # 各プレイヤーの情報.
        self.html_param['player'] = obj_v_player
        self.html_param['o_player'] = obj_o_player

        # ランク情報.
        rankrecord = self.getCurrentBattleRankRecord()
        obj_rankrecord = self.makeRankRecordObj(rankrecord)
        self.html_param['battleevent_rank'] = obj_rankrecord

        # 回復への導線.
        BackendApi.put_bprecover_uselead_info(self)

        # バトル開始URL.
        url = UrlMaker.battleevent_battledo(v_player.req_confirmkey,
                                            oid,
                                            revengeid,
                                            rival_key=rival_key)
        self.html_param['url_battle_do'] = self.makeAppLinkUrl(url)

        # 相手変更URL.
        target = 'revenge' if revengeid else 'lv'
        url = UrlMaker.battleevent_opplist(target)
        self.html_param['url_battle_oppselect'] = self.makeAppLinkUrl(url)

        # 書き込み.
        if eventmaster.is_goukon:
            self.writeAppHtml('gcevent/battleselect')
        else:
            self.writeAppHtml('btevent/battleselect')