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'報酬のお金が付与されていない')
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
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.'
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
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()
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'報酬のお金が付与されていない')
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
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..'