Exemple #1
0
    def check(self):
        keys = ('redirect_url', )
        for k in keys:
            if self.response.get(k, None) is None:
                raise AppTestError(u'%sが設定されていない' % k)

        # 書き込み後の進行情報.
        playdata = self.getWroteEventScoutPlayData()
        self.checkEventCommonResult(playdata)

        stagemaster = self.getStageByNumber(self.eventplaydata.stage)

        # URLを確認.
        redirect_url = self.response['redirect_url']
        if redirect_url.find('/raideventscoutanim/{}/{}'.format(
                stagemaster.id, playdata.alreadykey)) == -1:
            raise AppTestError(u'リダイレクト先が正しくない')

        # 進行度.
        if playdata.progress == 0:
            raise AppTestError(u'進行度が進んでいない')

        events = self.checkEventScoutResultEvent(
            playdata,
            [Defines.ScoutEventType.LEVELUP, Defines.ScoutEventType.COMPLETE])

        # レベルアップの結果を検証.
        playerexp = PlayerExp.getByKey(playdata.uid)
        levelupevent = events[Defines.ScoutEventType.LEVELUP]
        if playerexp.level != levelupevent.level:
            raise AppTestError(u'レベルアップイベントに正しくレベルが設定されていない.{} vs {}'.format(
                playerexp.level, levelupevent.level))
    def check(self):
        model_mgr = ModelRequestMgr()

        # 進行情報があるかを確認.
        playdata = ScoutPlayData.getByKey(
            ScoutPlayData.makeID(self.__player0.id, self.__scout.id))
        if playdata is None:
            raise AppTestError(u'進行情報が保存されていない')
        elif playdata.progress == 0:
            raise AppTestError(u'進行度が進んでいない')

        # 報酬.
        resultlist = playdata.result.get('result', None)
        if not resultlist:
            raise AppTestError(u'結果が設定されていない')

        for result in resultlist:
            self.__player0.exp += result['exp_add']
            self.__player0.gold += result['gold_add']

        # お金確認.
        playergold = PlayerGold.getByKey(playdata.uid)
        if playergold.gold != self.__player0.gold:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(playdata.uid)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # イベント設定されているか.
        eventlist = playdata.result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')

        # ハプニング発生のイベントが設定されているか.
        targetevent = None
        for event in eventlist:
            if event.get_type() == Defines.ScoutEventType.HAPPENING:
                targetevent = event
        if targetevent is None:
            raise AppTestError(u'ハプニング発生イベントが設定されていない')
        elif targetevent.happening != self.__happeningmaster.id:
            raise AppTestError(
                u'ハプニング発生イベントに正しくハプニングが設定されていない.%d vs %d' %
                (targetevent.happening, self.__happeningmaster.id))

        happeningset = BackendApi.get_current_happening(
            model_mgr, self.__player0.id)
        if happeningset is None or happeningset.happening.mid != self.__happeningmaster.id:
            raise AppTestError(u'ハプニングが開始されていない.')

        raidboss = BackendApi.get_raid(
            model_mgr,
            happeningset.id,
            happening_eventvalue=HappeningUtil.make_raideventvalue(
                self.__eventmaster.id))
        record = raidboss.getDamageRecord(self.__player0.id)
        if not record.champagne:
            raise AppTestError(u'シャンパンコールのフラグが立っていない.')
Exemple #3
0
    def checkEventCommonResult(self, playdata):
        """共通の実行結果を確認.
        """
        if playdata is None:
            raise AppTestError(u'進行情報が保存されていない')
        elif playdata.alreadykey != self.eventplaydata.confirmkey:
            raise AppTestError(u'重複確認用のキーが正しくない')

        # 報酬.
        resultlist = playdata.result.get('result', None)
        if resultlist is None:
            raise AppTestError(u'結果が設定されていない')

        post_exp = self.player.exp
        post_gold = self.player.gold
        for result in resultlist:
            post_exp += result['exp_add']
            post_gold += result['gold_add']

        # お金確認.
        playergold = PlayerGold.getByKey(playdata.uid)
        if playergold.gold != post_gold:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(playdata.uid)
        if playerexp.exp != post_exp:
            raise AppTestError(u'経験値が正しくない')

        # イベント設定されているか.
        eventlist = playdata.result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')
Exemple #4
0
    def check(self):
        self.checkResponseStatus()

        # 進行情報があるかを確認.
        playdata = ScoutPlayData.getByKey(
            ScoutPlayData.makeID(self.__player0.id, self.__scout.id))
        if playdata is None:
            raise AppTestError(u'進行情報が保存されていない')
        elif playdata.progress == 0:
            raise AppTestError(u'進行度が進んでいない')

        # 報酬.
        resultlist = playdata.result.get('result', None)
        if not resultlist:
            raise AppTestError(u'結果が設定されていない')

        for result in resultlist:
            self.__player0.exp += result['exp_add']
            self.__player0.gold += result['gold_add']

        # お金確認.
        playergold = PlayerGold.getByKey(playdata.uid)
        if playergold.gold != self.__player0.gold:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(playdata.uid)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # デッキコスト.
        playerdeck = PlayerDeck.getByKey(playdata.uid)
        if playerdeck.deckcapacityscout != (self.__player0.deckcapacityscout +
                                            1):
            raise AppTestError(u'デッキコスト上限が正しくない')

        # イベント設定されているか.
        eventlist = playdata.result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')

        # レベルアップとスカウト完了のイベントが設定されているか.
        levelupevent = None
        completeevent = None
        for event in eventlist:
            if event.get_type() == Defines.ScoutEventType.LEVELUP:
                levelupevent = event
            elif event.get_type() == Defines.ScoutEventType.COMPLETE:
                completeevent = event
        if levelupevent is None:
            raise AppTestError(u'レベルアップイベントが設定されていない')
        elif completeevent is None:
            raise AppTestError(u'スカウト完了イベントが設定されていない')
        elif playerexp.level != levelupevent.level:
            raise AppTestError(u'レベルアップイベントに正しくレベルが設定されていない.%d vs %d' %
                               (playerexp.level, levelupevent.level))
        elif playdata.mid != completeevent.scoutid:
            raise AppTestError(u'完了イベントに正しくスカウトIDが設定されていない.%d vs %d' %
                               (playdata.mid, completeevent.scoutid))
Exemple #5
0
    def check(self):
        self.checkResponseStatus()

        # 進行情報があるかを確認.
        happening = Happening.getByKey(self.__happening.id)
        playerhappening = PlayerHappening.getByKey(self.__player0.id)

        if happening is None or happening.progress == 0:
            raise AppTestError(u'進行情報が保存されていない')

        # 報酬.
        resultlist = playerhappening.happening_result.get('result', None)
        if resultlist is None:
            raise AppTestError(u'結果が設定されていない')

        gold_add = 0
        for result in resultlist:
            self.__player0.exp += result['exp_add']
            gold_add += result['gold_add']

        # お金確認.
        if happening.gold != gold_add:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(self.__player0.id)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # イベント設定されているか.
        eventlist = playerhappening.happening_result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')

        # レベルアップとスカウト完了のイベントが設定されているか.
        levelupevent = None
        completeevent = None
        for event in eventlist:
            if event.get_type() == Defines.ScoutEventType.LEVELUP:
                levelupevent = event
            elif event.get_type() == Defines.ScoutEventType.COMPLETE:
                completeevent = event
        if levelupevent is None:
            raise AppTestError(u'レベルアップイベントが設定されていない')
        elif completeevent is None:
            raise AppTestError(u'スカウト完了イベントが設定されていない')
        elif playerexp.level != levelupevent.level:
            raise AppTestError(u'レベルアップイベントに正しくレベルが設定されていない.%d vs %d' %
                               (playerexp.level, levelupevent.level))
        elif happening.mid != completeevent.scoutid:
            raise AppTestError(u'完了イベントに正しくハプニングIDが設定されていない.%d vs %d' %
                               (happening.mid, completeevent.scoutid))

        # レイド.
        raid = Raid.getByKey(self.__happening.id)
        if raid is None:
            raise AppTestError(u'レイドが発生していない.')
Exemple #6
0
    def check(self):
        self.checkResponseStatus()

        # 進行情報があるかを確認.
        happening = Happening.getByKey(self.__happening.id)
        playerhappening = PlayerHappening.getByKey(self.__player0.id)

        if happening is None or happening.progress == 0:
            raise AppTestError(u'進行情報が保存されていない')

        # 報酬.
        resultlist = playerhappening.happening_result.get('result', None)
        if resultlist is None:
            raise AppTestError(u'結果が設定されていない')

        gold_add = 0
        for result in resultlist:
            self.__player0.exp += result['exp_add']
            gold_add += result['gold_add']

        # お金確認.
        if happening.gold != gold_add:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(self.__player0.id)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # イベント設定されているか.
        eventlist = playerhappening.happening_result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')

        # アイテム獲得のイベントが設定されているか.
        targetevent = None
        for event in eventlist:
            if event.get_type() == Defines.ScoutEventType.GET_ITEM:
                targetevent = event
        if targetevent is None:
            raise AppTestError(u'アイテム獲得が設定されていない')
        elif targetevent.item != self.__itemmaster.id:
            raise AppTestError(u'イベントのアイテムIDが正しくない')

        # 報酬リストにアイテムが入っているか.
        if not happening.idDropped(Defines.ItemType.ITEM,
                                   self.__itemmaster.id):
            raise AppTestError(u'報酬リストにアイテムが設定されていない')
Exemple #7
0
    def check(self):
        self.checkResponseStatus()

        model_mgr = ModelRequestMgr()

        # 進行情報があるかを確認.
        playdata = ScoutPlayData.getByKey(
            ScoutPlayData.makeID(self.__player0.id, self.__scout.id))
        if playdata is None:
            raise AppTestError(u'進行情報が保存されていない')
        elif playdata.progress == 0:
            raise AppTestError(u'進行度が進んでいない')

        # 報酬.
        resultlist = playdata.result.get('result', None)
        if not resultlist:
            raise AppTestError(u'結果が設定されていない')

        for result in resultlist:
            self.__player0.exp += result['exp_add']
            self.__player0.gold += result['gold_add']

        # お金確認.
        playergold = PlayerGold.getByKey(playdata.uid)
        if playergold.gold != self.__player0.gold:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(playdata.uid)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # 宝箱獲得のイベントが設定されているか.
        targetevent = BackendApi.find_scout_event(
            playdata, Defines.ScoutEventType.GET_TREASURE)
        if targetevent is None:
            raise AppTestError(u'宝箱獲得イベントが設定されていない')
        elif targetevent.treasuretype != Defines.TreasureType.GOLD:
            raise AppTestError(u'宝箱獲得イベントに正しくカードが設定されていない.%d' %
                               targetevent.treasuretype)

        treasure_num = BackendApi.get_treasure_num(model_mgr,
                                                   Defines.TreasureType.GOLD,
                                                   self.__player0.id)
        if (self.__treasure_num + 1) != treasure_num:
            raise AppTestError(u'宝箱の所持数が想定外.%d vs %d' %
                               ((self.__treasure_num + 1), treasure_num))
Exemple #8
0
    def check(self):
        self.checkResponseStatus()

        # 進行情報があるかを確認.
        happening = Happening.getByKey(self.__happening.id)
        playerhappening = PlayerHappening.getByKey(self.__player0.id)

        if happening is None:
            raise AppTestError(u'進行情報が保存されていない')

        # 報酬.
        resultlist = playerhappening.happening_result.get('result', None)
        if resultlist is None:
            raise AppTestError(u'結果が設定されていない')

        gold_add = 0
        for result in resultlist:
            self.__player0.exp += result['exp_add']
            gold_add += result['gold_add']

        # お金確認.
        if happening.gold != gold_add:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(self.__player0.id)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # イベント設定されているか.
        eventlist = playerhappening.happening_result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')

        # イベント設定されているか.
        eventlist = playerhappening.happening_result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')

        # 体力不足のイベントが設定されているか.
        targetevent = None
        for event in eventlist:
            if event.get_type() == Defines.ScoutEventType.AP_NONE:
                targetevent = event
        if targetevent is None:
            raise AppTestError(u'体力不足イベントが設定されていない')
Exemple #9
0
    def check(self):
        self.checkResponseStatus()

        # 進行情報があるかを確認.
        playdata = ScoutPlayData.getByKey(
            ScoutPlayData.makeID(self.__player0.id, self.__scout.id))
        if playdata is None:
            raise AppTestError(u'進行情報が保存されていない')
        elif playdata.progress == 0:
            raise AppTestError(u'進行度が進んでいない')

        # 報酬.
        resultlist = playdata.result.get('result', None)
        if not resultlist:
            raise AppTestError(u'結果が設定されていない')

        for result in resultlist:
            self.__player0.exp += result['exp_add']
            self.__player0.gold += result['gold_add']

        # お金確認.
        playergold = PlayerGold.getByKey(playdata.uid)
        if playergold.gold != self.__player0.gold:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(playdata.uid)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # イベント設定されているか.
        eventlist = playdata.result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')

        # レベルアップのイベントが設定されているか.
        targetevent = None
        for event in eventlist:
            if event.get_type() == Defines.ScoutEventType.LEVELUP:
                targetevent = event
        if targetevent is None:
            raise AppTestError(u'レベルアップイベントが設定されていない')
        elif playerexp.level != targetevent.level:
            raise AppTestError(u'イベントに正しくレベルが設定されていない.%d vs %d' %
                               (playerexp.level, targetevent.level))
Exemple #10
0
 def check(self):
     self.checkResponseStatus()
     
     # 進行情報があるかを確認.
     happening = Happening.getByKey(self.__happening.id)
     playerhappening = PlayerHappening.getByKey(self.__player0.id)
     
     if happening is None or happening.progress == 0:
         raise AppTestError(u'進行情報が保存されていない')
     
     # 報酬.
     resultlist = playerhappening.happening_result.get('result', None)
     if resultlist is None:
         raise AppTestError(u'結果が設定されていない')
     
     gold_add = 0
     for result in resultlist:
         self.__player0.exp += result['exp_add']
         gold_add += result['gold_add']
     
     # お金確認.
     if happening.gold != gold_add:
         raise AppTestError(u'お金が正しくない')
     
     # 経験値.
     playerexp = PlayerExp.getByKey(self.__player0.id)
     if playerexp.exp != self.__player0.exp:
         raise AppTestError(u'お金が正しくない')
     
     # イベント設定されているか.
     eventlist = playerhappening.happening_result.get('event', None)
     if not eventlist:
         raise AppTestError(u'イベントが設定されていない')
     
     # レベルアップのイベントが設定されているか.
     targetevent = None
     for event in eventlist:
         if event.get_type() == Defines.ScoutEventType.LEVELUP:
             targetevent = event
     if targetevent is None:
         raise AppTestError(u'レベルアップイベントが設定されていない')
     elif playerexp.level != targetevent.level:
         raise AppTestError(u'イベントに正しくレベルが設定されていない.%d vs %d' % (playerexp.level, targetevent.level))
Exemple #11
0
    def check(self):
        self.checkResponseStatus()

        # 進行情報があるかを確認.
        playdata = ScoutPlayData.getByKey(
            ScoutPlayData.makeID(self.__player0.id, self.__scout.id))
        if playdata is None:
            raise AppTestError(u'進行情報が保存されていない')

        # 報酬.
        resultlist = playdata.result.get('result', None)
        if resultlist is None:
            raise AppTestError(u'結果が設定されていない')

        for result in resultlist:
            self.__player0.exp += result['exp_add']
            self.__player0.gold += result['gold_add']

        # お金確認.
        playergold = PlayerGold.getByKey(playdata.uid)
        if playergold.gold != self.__player0.gold:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(playdata.uid)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # イベント設定されているか.
        eventlist = playdata.result.get('event', None)
        if not eventlist:
            raise AppTestError(u'イベントが設定されていない')

        # 体力不足のイベントが設定されているか.
        targetevent = None
        for event in eventlist:
            if event.get_type() == Defines.ScoutEventType.AP_NONE:
                targetevent = event
        if targetevent is None:
            raise AppTestError(u'体力不足イベントが設定されていない')
Exemple #12
0
    def check(self):
        self.checkResponseStatus()

        # 進行情報があるかを確認.
        playdata = ScoutPlayData.getByKey(
            ScoutPlayData.makeID(self.__player0.id, self.__scout.id))
        if playdata is None:
            raise AppTestError(u'進行情報が保存されていない')
        elif playdata.progress == 0:
            raise AppTestError(u'進行度が進んでいない')

        # 報酬.
        resultlist = playdata.result.get('result', None)
        if not resultlist:
            raise AppTestError(u'結果が設定されていない')

        for result in resultlist:
            self.__player0.exp += result['exp_add']
            self.__player0.gold += result['gold_add']

        # お金確認.
        playergold = PlayerGold.getByKey(playdata.uid)
        if playergold.gold != self.__player0.gold:
            raise AppTestError(u'お金が正しくない')

        # 経験値.
        playerexp = PlayerExp.getByKey(playdata.uid)
        if playerexp.exp != self.__player0.exp:
            raise AppTestError(u'お金が正しくない')

        # カード獲得のイベントが設定されているか.
        targetevent = BackendApi.find_scout_event(
            playdata, Defines.ScoutEventType.GET_CARD)
        if targetevent is None:
            raise AppTestError(u'カード獲得イベントが設定されていない')
        elif targetevent.card != self.__cardmaster.id:
            raise AppTestError(u'カード獲得イベントに正しくカードが設定されていない.%d vs %d' %
                               (targetevent.card, self.__cardmaster.id))
        elif targetevent.is_received:
            raise AppTestError(u'カード受取判定済になってしまっている')
    def __proc_normal(self, model_mgr, redisdb, config, eventmaster,
                      rankmaster_dict, now, logintime, cdate):
        """通常のバトルイベント.
        """
        eventrankmaster = rankmaster_dict.get(eventmaster.rankstart)

        print 'start for normal'

        print '================================'
        print 'save level.'
        rediskey = "battleevent_preparation"
        redisdb.delete(rediskey)

        uid = PlayerExp.max_value('id')
        LIMIT = 500
        while 0 < uid:
            pipe = redisdb.pipeline()

            uidlist = range(max(0, uid - LIMIT) + 1, uid + 1)
            playerexplist = PlayerExp.getByKey(uidlist,
                                               using=settings.DB_READONLY)
            tutorialend_uid_list = [
                model.id for model in PlayerTutorial.getByKey(
                    uidlist, using=settings.DB_READONLY)
                if model.tutorialstate == Defines.TutorialStatus.COMPLETED
            ]
            for playerexp in playerexplist:
                if not playerexp.id in tutorialend_uid_list:
                    continue
                pipe.zadd(rediskey, playerexp.id, playerexp.level)

            pipe.execute()
            uid -= LIMIT

        print '================================'
        print 'allocate start.'
        data = redisdb.zrevrange(rediskey,
                                 0,
                                 1,
                                 withscores=True,
                                 score_cast_func=RedisModel.value_to_int)
        if data:
            level = data[0][1]
            groupid = 0
            while 0 < level:
                uidlist = [
                    RedisModel.value_to_int(uid)
                    for uid in redisdb.zrangebyscore(rediskey, level, level)
                    if RedisModel.value_to_int(uid)
                ]
                if uidlist:
                    random.shuffle(uidlist)
                    model_mgr, group = db_util.run_in_transaction(
                        Command.tr_write, groupid, eventmaster,
                        eventrankmaster, uidlist, now)
                    model_mgr.write_end()
                    if group and not group.fixed:
                        groupid = group.id
                    else:
                        groupid = 0
                level -= 1

        print '================================'
        print 'save rankuidset.'
        for rankmaster in rankmaster_dict.values():
            print "eventid=%s, rank=%s" % (rankmaster.eventid, rankmaster.rank)
            BackendApi.save_battleevent_rankuidset(rankmaster.eventid,
                                                   rankmaster.rank)

        # 後片付け.
        redisdb.delete(rediskey)

        print '================================'
        print 'all done.'