Exemplo n.º 1
0
    def check(self):
        model_mgr = ModelRequestMgr()
        # 結果が保存されているか.
        battleresult = BackendApi.get_battleresult(model_mgr, self.__player.id)
        if battleresult is None:
            raise AppTestError(u'結果が保存されていない')
        elif battleresult.result != Defines.BattleResultCode.WIN:
            raise AppTestError(u'結果が想定と違う.%d' % battleresult.result)

        # 連勝数が増えているか.
        battleplayer = BackendApi.get_battleplayer(model_mgr, self.__player.id)
        if battleplayer.win_continuity != (self.__battleplayer.win_continuity +
                                           1):
            raise AppTestError(u'連勝数が正しくない.%d vs %d' %
                               (battleplayer.win_continuity,
                                (self.__battleplayer.win_continuity + 1)))
        elif battleplayer.opponent != 0:
            raise AppTestError(u'対戦相手が残っている.')

        # 金の鍵を獲得したか.
        playerkey = PlayerKey.getByKey(self.__player.id)
        if playerkey.goldkey != 1:
            raise AppTestError(u'金の鍵が増えていない.')

        # プレゼントが増えているか.
        if (self.__present_num + 1) != BackendApi.get_present_num(
                self.__player.id):
            raise AppTestError(u'プレゼントが届いていない')

        # お金が増えているか.
        playergold = model_mgr.get_model(PlayerGold, self.__player.id)
        if playergold.gold != (self.__player.gold + 100):
            raise AppTestError(u'報酬のお金が付与されていない')
Exemplo n.º 2
0
    def get_data(self):
        """FQ5課金ユーザ.
        """
        # 1日のDate.
        s_time = DateTimeUtil.strToDateTime(self.date.strftime("%Y%m01"),
                                            "%Y%m%d")

        # 集計終了時間.
        e_time = DateTimeUtil.toBaseTime(self.date, 23, 59, 59)

        # 対象のガチャ.
        filters = {
            'consumetype__in': Defines.GachaConsumeType.PAYMENT_TYPES,
        }
        gachamasterlist = GachaMaster.fetchValues(filters=filters,
                                                  order_by='id',
                                                  using=backup_db)

        model_mgr = ModelRequestMgr()

        result = []
        for gachamaster in gachamasterlist:
            if gachamaster.schedule:
                # 期間チェック.
                master = model_mgr.get_model(ScheduleMaster,
                                             gachamaster.schedule,
                                             using=backup_db)
                if master and ((master.stime <= master.etime <= s_time) or
                               (e_time < master.stime <= master.etime)):
                    # 期間外.
                    continue
            # FQ5UU.
            cnt = FQ5PaymentSet.countByRange(s_time, e_time, gachamaster.id)
            result.append((gachamaster.id, cnt))
        return result
Exemplo n.º 3
0
    def check(self):
        model_mgr = ModelRequestMgr()
        # 結果が保存されているか.
        battleresult = BackendApi.get_battleevent_battleresult(
            model_mgr, self.__eventmaster.id, self.__player0.id)
        if battleresult is None:
            raise AppTestError(u'結果が保存されていない')
        elif battleresult.result != Defines.BattleResultCode.LOSE:
            raise AppTestError(u'結果が想定と違う.%d' % battleresult.result)

        # バトルポイント.
        def checkScore(point, today_pre, total_pre, today_test, total_test):
            pointmin = int(point * self.__eventrankmaster.pointrandmin / 100)
            pointmax = int(point * self.__eventrankmaster.pointrandmax / 100)
            if pointmin <= (today_test -
                            today_pre) <= pointmax and pointmin <= (
                                total_test - total_pre) <= pointmax:
                return True
            else:
                return False

        point0 = self.__eventrankmaster.battlepoint_l
        point1 = self.__eventrankmaster.battlepointreceive
        scorerecord0 = BackendApi.get_battleevent_scorerecord(
            model_mgr, self.__eventmaster.id, self.__player0.id)
        scorerecord1 = BackendApi.get_battleevent_scorerecord(
            model_mgr, self.__eventmaster.id, self.__player1.id)
        if scorerecord0 is None:
            raise AppTestError(u'スコアレコードが作られていない')
        elif not checkScore(point0, self.__score0[0], self.__score0[1],
                            scorerecord0.getPointToday(),
                            scorerecord0.point_total):
            raise AppTestError(u'スコアレコードが正しくない')
        elif scorerecord0.getWinToday() != 0:
            raise AppTestError(u'勝利数が正しくない')

        if scorerecord1 is None:
            raise AppTestError(u'受けた方のスコアレコードが作られていない')
        elif not checkScore(point1, self.__score1[0], self.__score1[1],
                            scorerecord1.getPointToday(),
                            scorerecord1.point_total):
            raise AppTestError(u'受けた方のスコアレコードが正しくない')

        # 履歴が増えているか.
        if (self.__log_num0 + 1) != BackendApi.get_battleevent_battlelog_num(
                model_mgr, self.__player0.id):
            raise AppTestError(u'勝った方の履歴数が正しくない')
        elif (self.__log_num1 + 1) != BackendApi.get_battleevent_battlelog_num(
                model_mgr, self.__player1.id):
            raise AppTestError(u'負けた方の履歴数が正しくない')

        # プレゼントが増えているか.
        if (self.__present_num + 1) != BackendApi.get_present_num(
                self.__player0.id):
            raise AppTestError(u'プレゼントが届いていない')

        # お金が増えているか.
        playergold = model_mgr.get_model(PlayerGold, self.__player0.id)
        if playergold.gold != (self.__player0.gold + 100):
            raise AppTestError(u'報酬のお金が付与されていない')
    def handle(self, *args, **options):
        print '================================'
        print 'repair_boxgachaplayerdata'
        print '================================'

        model_mgr = ModelRequestMgr()
        try:
            target_uid = int(args[0])
        except:
            print 'invalid argument'
            return
        is_write = (args[1] if len(args) == 2 else '0') == 'write'

        try:
            if is_write:
                db_util.run_in_transaction(self.tr, target_uid)
                print('id : {}'.format(target_uid))
            else:
                data = model_mgr.get_model(GachaBoxResetPlayerData,
                                           target_uid,
                                           using=settings.DB_DEFAULT)
                print 'id : {}, resetcount: {}, is_get_targetrarity: {}'.format(
                    data.id, data.resetcount, data.is_get_targetrarity)
        except:
            print 'error: {}'.format(target_uid)

        print '================================'
        print 'all done.'
Exemplo n.º 5
0
 def tr():
     model_mgr = ModelRequestMgr()
     playerfriend = model_mgr.get_model(PlayerFriend, v_player.id)
     playerfriend.friendnum = friend_num
     model_mgr.set_save(playerfriend)
     model_mgr.write_all()
     return model_mgr, playerfriend
Exemplo n.º 6
0
 def tr(model_cls, uid, status_table):
     model_mgr = ModelRequestMgr()
     for k, v in status_table.items():
         key = model_cls.makeID(uid, k)
         model = model_mgr.get_model(model_cls, key, get_instance=True)
         if model.status != v:
             model.status = v
             if model.status == Defines.PromotionStatus.RECEIVED:
                 model.rtime = OSAUtil.get_now()
             model_mgr.set_save(model)
     model_mgr.write_all()
     return model_mgr
 def tr(rows):
     model_mgr = ModelRequestMgr()
     
     for row in rows:
         key = LevelUpBonusPlayerData.makeID(int(row[0]), Defines.LEVELUP_BONUS_VERSION)
         playerdata = model_mgr.get_model(LevelUpBonusPlayerData, key)
         if not playerdata:
             print "irregular user {}".format(row[0])
         else:
             playerdata.last_prize_level = row[1]
             model_mgr.set_save(playerdata)
     model_mgr.write_all()
     model_mgr.write_end()
Exemplo n.º 8
0
    def check(self):
        model_mgr = ModelRequestMgr()
        # 結果が保存されているか.
        battleresult = BackendApi.get_battleevent_battleresult(
            model_mgr, self.__eventmaster.id, self.__player0.id)
        if battleresult is None:
            raise AppTestError(u'結果が保存されていない')
        elif battleresult.result != Defines.BattleResultCode.WIN:
            raise AppTestError(u'結果が想定と違う.%d' % battleresult.result)

        # バトルポイント.
        def checkScore(point, today_pre, total_pre, today_test, total_test):
            pointmin = int(point * self.__eventrankmaster.pointrandmin / 100)
            pointmax = int(point * self.__eventrankmaster.pointrandmax / 100)
            if pointmin <= (today_test -
                            today_pre) <= pointmax and pointmin <= (
                                total_test - total_pre) <= pointmax:
                return True
            else:
                return False

        point = self.__eventrankmaster.battlepoint_w
        point += max(
            0, self.__player1.level -
            self.__player0.level) * self.__eventrankmaster.battlepoint_lv
        scorerecord0 = BackendApi.get_battleevent_scorerecord(
            model_mgr, self.__eventmaster.id, self.__player0.id)
        scorerecord1 = BackendApi.get_battleevent_scorerecord(
            model_mgr, self.__eventmaster.id, self.__player1.id)
        if scorerecord0 is None:
            raise AppTestError(u'勝った方のスコアレコードが作られていない')
        elif not checkScore(point, self.__score0[0], self.__score0[1],
                            scorerecord0.getPointToday(),
                            scorerecord0.point_total):
            raise AppTestError(u'スコアレコードが正しくない')
        elif (scorerecord0.getWinToday() - 1) != self.__score0[2]:
            raise AppTestError(u'勝利数が正しくない')

        if scorerecord1 and self.__score1 != (scorerecord1.getPointToday(),
                                              scorerecord1.point_total,
                                              scorerecord1.getWinToday()):
            raise AppTestError(u'負けた方のスコアレコードが正しくない')

        # 履歴が増えているか.
        if (self.__log_num0 + 1) != BackendApi.get_battleevent_battlelog_num(
                model_mgr, self.__player0.id):
            raise AppTestError(u'勝った方の履歴数が正しくない')
        elif (self.__log_num1 + 1) != BackendApi.get_battleevent_battlelog_num(
                model_mgr, self.__player1.id):
            raise AppTestError(u'負けた方の履歴数が正しくない')

        # 仕返しレコードが更新されているか.
        revenge = BattleEventRevenge.getByKey(self.__revenge.id)
        if revenge is None:
            raise AppTestError(u'仕返しレコードがない')
        elif revenge.uid != self.__player1.id or revenge.oid != self.__player0.id:
            raise AppTestError(u'仕返しレコードが正しく更新されていない')

        # プレゼントが増えているか.
        if (self.__present_num + 1) != BackendApi.get_present_num(
                self.__player0.id):
            raise AppTestError(u'プレゼントが届いていない')

        # お金が増えているか.
        playergold = model_mgr.get_model(PlayerGold, self.__player0.id)
        if playergold.gold != (self.__player0.gold + 100):
            raise AppTestError(u'報酬のお金が付与されていない')
Exemplo n.º 9
0
    def createRaidLog(self, player0, happeningstate, is_help):
        """履歴作成.
        """
        player1 = self.create_dummy(DummyType.PLAYER)

        if is_help:
            owner = player1
            friend = player0
        else:
            owner = player0
            friend = player1

        # アイテム.
        itemmaster = self.create_dummy(DummyType.ITEM_MASTER)
        data = ScoutDropItemData.create(
            Defines.ItemType.ITEM,
            itemmaster.id,
            filters={'ptype': Defines.CharacterType.TYPE_001},
            rate=10000)
        items = [data.get_dropitem_dict()]

        # 報酬.
        prize = self.create_dummy(DummyType.PRIZE_MASTER,
                                  gold=100,
                                  gachapt=10,
                                  item=itemmaster)

        # レイドマスター.
        raidmaster = self.create_dummy(DummyType.RAID_MASTER,
                                       hp=1,
                                       prizes=[prize.id],
                                       helpprizes=[prize.id],
                                       cabaretking=100,
                                       demiworld=10)

        # ハプニング.
        happeningmaster = self.create_dummy(DummyType.HAPPENING_MASTER,
                                            raidmaster.id,
                                            items=items)

        # ハプニング情報.
        happening = self.create_dummy(DummyType.HAPPENING,
                                      owner.id,
                                      happeningmaster.id,
                                      progress=happeningmaster.execution)

        # レイド.
        raidboss = self.create_dummy(DummyType.RAID, owner, happeningmaster,
                                     happening)
        raidboss.addDamageRecord(owner.id, 1)
        raidboss.refrectDamageRecord()
        raidboss.raid.save()

        # 救援.
        def addRequest(v_player, o_player):
            model_mgr = ModelRequestMgr()
            BackendApi.tr_add_friendrequest(model_mgr, v_player, o_player)
            model_mgr.write_all()
            model_mgr.write_end()

        def addFriend(v_player, o_player):
            model_mgr = ModelRequestMgr()
            BackendApi.tr_add_friend(model_mgr, v_player.id, o_player.id)
            model_mgr.write_all()
            model_mgr.write_end()

        addRequest(owner, friend)
        addFriend(friend, owner)

        if happeningstate == Defines.HappeningState.CANCEL:
            model_mgr = ModelRequestMgr()
            BackendApi.tr_happening_cancel(model_mgr, owner, happeningmaster)
            model_mgr.write_all()
            model_mgr.write_end()
        else:
            model_mgr = ModelRequestMgr()
            BackendApi.tr_send_raidhelp(model_mgr, owner.id)
            model_mgr.write_all()
            model_mgr.write_end()

            raidboss.addDamageRecord(friend.id, 1)
            raidboss.refrectDamageRecord()
            raidboss.raid.save()

            if happeningstate == Defines.HappeningState.END:
                if is_help:
                    attacker = friend
                    helper = owner
                else:
                    attacker = owner
                    helper = friend

                deck = BackendApi.get_deck(attacker.id)
                deckcardlist = BackendApi.get_cards(deck.to_array())
                friendcard = BackendApi.get_leaders([helper.id]).get(helper.id)

                model_mgr = ModelRequestMgr()
                playerrequest = model_mgr.get_model(PlayerRequest, attacker.id)
                attacker.setModel(playerrequest)
                BackendApi.tr_raidbattle(model_mgr, raidboss.id,
                                         attacker.req_confirmkey, attacker,
                                         raidmaster, deckcardlist, friendcard,
                                         False)
                model_mgr.write_all()
                model_mgr.write_end()

            elif happeningstate == Defines.HappeningState.MISS:
                model_mgr = ModelRequestMgr()
                happening.etime = OSAUtil.get_now()
                model_mgr.set_save(happening)
                model_mgr.write_all()
                model_mgr.write_end()

                model_mgr = ModelRequestMgr()
                BackendApi.tr_happening_missed(model_mgr, happening.id)
                model_mgr.write_all()
                model_mgr.write_end()

        raidlog = BackendApi.get_raidlog_by_raidid(model_mgr, player0.id,
                                                   happening.id)
        return raidlog
Exemplo n.º 10
0
 def handle(self, *args, **options):
     
     print '================================'
     print 'create_benchmark_csv'
     print '================================'
     
     
     USER_ID_START = OSAUtil.BENCH_USER_ID_START
     USER_NUM = 0
     if args:
         USER_NUM = int(args[0])
     USER_NUM = max(OSAUtil.BENCH_USER_ID_NUM, USER_NUM)
     
     print '================================'
     print 'USER_NUM=%d' % USER_NUM
     
     LEVEL = 1
     GOLD = 100000
     GACHA_PT = 3000
     CARD_NUM = 100
     CARD_LIMIT = CARD_NUM + 50
     FRIEND = 50
     FRIEND_REQUEST = 50
     FRIEND_EMPTY = 50
     FRIENDLIMIT = FRIEND + FRIEND_REQUEST * 2 + FRIEND_EMPTY
     RAID_ENDTIME = DateTimeUtil.strToDateTime("20150101", "%Y%m%d")
     RAIDLOG = 100
     GREETLOG = 100
     PRESENT = int(100 / len(Defines.ItemType.PRESENT_TYPES.keys()))
     PRESENT_LIMITTIME = DateTimeUtil.strToDateTime("20150101", "%Y%m%d")
     ITEM_RNUM = 50
     ITEM_VNUM = 50
     DECK_CAPACITY = 1000000
     CABARET_TREASURE = 100000
     
     TREASURE_NUM = 20
     
     OUTPUT_DIR = os.path.join(settings_sub.TMP_DOC_ROOT, 'dummy')
     csvmgr = ModelCSVManager(OUTPUT_DIR)
     
     model_mgr = ModelRequestMgr()
     
     # 各種マスターデータ.
     levelexpmaster = model_mgr.get_model(PlayerLevelExpMaster, LEVEL)
     item_all = model_mgr.get_mastermodel_all(ItemMaster)
     card_all = [master for master in model_mgr.get_mastermodel_all(CardMaster) if master.ckind == Defines.CardKind.NORMAL and master.hklevel == 1]
     happeningall = model_mgr.get_mastermodel_all(HappeningMaster)
     arealist = model_mgr.get_mastermodel_all(AreaMaster, order_by='id')[:2]
     scoutlist = ScoutMaster.fetchValues(filters={'area__in':[area.id for area in arealist]}, order_by='id')
     treasure_gold_all = model_mgr.get_mastermodel_all(TreasureGoldMaster)
     treasure_silver_all = model_mgr.get_mastermodel_all(TreasureSilverMaster)
     treasure_bronze_all = model_mgr.get_mastermodel_all(TreasureBronzeMaster)
     
     now = OSAUtil.get_now()
     
     print '================================'
     print 'players..'
     
     class ModelList:
         def __init__(self):
             self.modellist_all = []
         
         def add(self, modellist):
             csvmgr.setModelList(modellist)
     
     modellist_all = ModelList()
     
     for i in xrange(USER_NUM):
         modellist = []
         
         uid = i + USER_ID_START
         
         # プレイヤー作成.
         player = self.install(uid)
         
         # タイプ決定とか.
         self.regist(player, levelexpmaster, GOLD, GACHA_PT, FRIENDLIMIT, CARD_LIMIT, DECK_CAPACITY, CABARET_TREASURE)
         
         modellist.append(player.getModel(Player))
         for model_cls in ModelPlayer.Meta.MODELS:
             p = player.getModel(model_cls)
             if p:
                 modellist.append(p)
         
         # スカウト完了.
         for scout in scoutlist:
             playdata = ScoutPlayData.makeInstance(ScoutPlayData.makeID(uid, scout.id))
             playdata.progress = scout.execution
             modellist.append(playdata)
             
             # フレンドの近況.
             logdata = ScoutClearLog.makeData(player.id, scout.id)
             modellist.append(logdata)
         
         for area in arealist:
             model = AreaPlayData.makeInstance(AreaPlayData.makeID(uid, area.id))
             model.clevel = levelexpmaster.level
             modellist.append(model)
             
             # フレンドの近況.
             logdata = BossWinLog.makeData(player.id, area.id)
             modellist.append(logdata)
         
         # カード付与.
         playercard = player.getModel(PlayerCard)
         cardidlist = []
         for _ in xrange(CARD_NUM):
             playercard.card += 1
             cardid = Card.makeID(uid, playercard.card)
             
             cardmaster = random.choice(card_all)
             card = BackendApi.create_card_by_master(cardmaster)
             card.id = cardid
             card.uid = uid
             modellist.append(card)
             
             cardidlist.append(cardid)
         
         # デッキ設定.
         deck = Deck()
         deck.id = uid
         deck.set_from_array(cardidlist[:Defines.DECK_CARD_NUM_MAX])
         modellist.append(deck)
         
         # カード獲得フラグ.
         for cardmaster in card_all:
             cardacquisition = CardAcquisition.makeInstance(CardAcquisition.makeID(uid, cardmaster.id))
             cardacquisition.maxlevel = cardmaster.maxlevel
             modellist.append(cardacquisition)
             
             albumacquisition = AlbumAcquisition.makeInstance(AlbumAcquisition.makeID(uid, cardmaster.album))
             modellist.append(albumacquisition)
         
         # アイテム.
         for itemmaster in item_all:
             item = Item.makeInstance(Item.makeID(uid, itemmaster.id))
             item.rnum = ITEM_RNUM
             item.vnum = ITEM_VNUM
             modellist.append(item)
         
         # レイド履歴.
         states = (Defines.HappeningState.END, Defines.HappeningState.MISS, Defines.HappeningState.CANCEL)
         for lognumber in xrange(RAIDLOG):
             happeningmaster = random.choice(happeningall)
             raidmaster = BackendApi.get_raid_master(model_mgr, happeningmaster.boss)
             self.putRaidLog(modellist, player, happeningmaster, raidmaster, states[lognumber % len(states)])
         
         # レイド.
         happeningmaster = random.choice(happeningall)
         raidmaster = BackendApi.get_raid_master(model_mgr, happeningmaster.boss)
         self.putRaid(modellist, player, happeningmaster, raidmaster, RAID_ENDTIME)
         
         # プレゼント.
         def putPresent(itype, itemid, itemvalue):
             presentlist = BackendApi.create_present(model_mgr, 0, uid, itype, itemid, itemvalue, Defines.TextMasterID.ACCESS_BONUS, PRESENT_LIMITTIME, do_set_save=False)
             modellist.extend(presentlist)
             presentlist = BackendApi.create_present(model_mgr, 0, uid, itype, itemid, itemvalue, Defines.TextMasterID.ACCESS_BONUS, now, do_set_save=False)
             modellist.extend(presentlist)
         
         for _ in xrange(PRESENT):
             putPresent(Defines.ItemType.GOLD, 0, 1000)
             putPresent(Defines.ItemType.GACHA_PT, 0, 10)
             putPresent(Defines.ItemType.ITEM, random.choice(item_all).id, 1)
             putPresent(Defines.ItemType.CARD, random.choice(card_all).id, 1)
             putPresent(Defines.ItemType.RAREOVERTICKET, 0, 1)
             putPresent(Defines.ItemType.TRYLUCKTICKET, 0, 1)
             putPresent(Defines.ItemType.MEMORIESTICKET, 0, 1)
             putPresent(Defines.ItemType.GACHATICKET, 0, 1)
             putPresent(Defines.ItemType.GOLDKEY, 0, 1)
             putPresent(Defines.ItemType.SILVERKEY, 0, 1)
         
         # 宝箱.
         def makeTreasure(masterlist, model_cls, etime):
             master = random.choice(masterlist)
             model = model_cls()
             model.uid = uid
             model.mid = master.id
             model.etime = etime
             modellist.append(model)
         
         for _ in xrange(TREASURE_NUM):
             makeTreasure(treasure_gold_all, TreasureGold, now)
             makeTreasure(treasure_gold_all, TreasureGold, PRESENT_LIMITTIME)
             
             makeTreasure(treasure_silver_all, TreasureSilver, now)
             makeTreasure(treasure_silver_all, TreasureSilver, PRESENT_LIMITTIME)
             
             makeTreasure(treasure_bronze_all, TreasureBronze, now)
             makeTreasure(treasure_bronze_all, TreasureBronze, PRESENT_LIMITTIME)
         
         modellist_all.add(modellist)
         
         print 'complete uid=%d' % uid
     
     print '================================'
     print 'friends..'
     
     # ユーザーがそろっていないと作れないレコード.
     for i in xrange(USER_NUM):
         modellist = []
         
         uid = i + USER_ID_START
         
         # フレンド設定.
         self.putFriends(modellist, uid, USER_ID_START, USER_NUM, FRIEND, FRIEND_REQUEST)
         
         # あいさつ履歴.
         fid = uid
         for _ in xrange(GREETLOG):
             fid = ((fid - USER_ID_START + 1) % USER_NUM) + USER_ID_START
             while fid == uid:
                 fid = ((fid - USER_ID_START + 1) % USER_NUM) + USER_ID_START
             
             model = GreetLog()
             model.fromid = fid
             model.toid = uid
             modellist.append(model)
         
         modellist_all.add(modellist)
         
         print 'complete uid=%d' % uid
     
     csvmgr.output()
     
     print '================================'
     print 'all done..'