Exemple #1
0
    def handle(self, *args, **options):
        print '================================'
        print 'init_tradeshop'
        print '================================'

        model_mgr = ModelRequestMgr()

        # メンテナンス確認
        appconfig = BackendApi.get_appconfig(model_mgr)
        if not appconfig.is_maintenance():
            print u'メンテナンスモードにしてください'
            return
        print 'check maintenance...OK\n'

        delete_target_model_cls_list = (
            UserLogTradeShop,
            PlayerTradeShop,
            TradeShopPlayerData,
        )

        def tr():
            for model_cls in delete_target_model_cls_list:
                tablename = model_cls.get_tablename()
                query_string = 'truncate table `{}`;'.format(tablename)
                Query.execute_update(query_string, [], False)
                print 'delete...{}'.format(tablename)

        db_util.run_in_transaction(tr)

        print '================================'
        print 'all done.'
Exemple #2
0
    def update_cabaretclub_proceed(self, uid, storemaster_all_dict,
                                   section_lasttime):
        store_list = CabaClubStorePlayerData.fetchByOwner(
            uid, using=settings.DB_READONLY)
        if not store_list:
            return

        open_stores = [store for store in store_list if store.is_open]
        for store in open_stores:
            storemaster = storemaster_all_dict[store.mid]
            store_set = CabaclubStoreSet(storemaster, store)
            lasttime = min(
                section_lasttime,
                store_set.get_limit_time() - timedelta(microseconds=1))
            if (lasttime - store.utime
                ).total_seconds() < storemaster.customer_interval:
                return

            try:
                db_util.run_in_transaction(self.tr_write, uid, storemaster,
                                           lasttime)
            except CabaretError as err:
                if err.code == CabaretError.Code.ALREADY_RECEIVED:
                    pass
                else:
                    DbgLogger.write_error(err.value)
                    raise
Exemple #3
0
 def process(self):
     # 現在時刻.
     self.__now = OSAUtil.get_now()
     # ModelRequestMgr.
     model_mgr = self.getModelMgr()
     # 店舗のマスターデータ.
     args = self.getUrlArgs('/cabaclubcanceldo/')
     mid = args.getInt(0)
     master = None
     if mid:
         master = BackendApi.get_cabaretclub_store_master(model_mgr, mid, using=settings.DB_READONLY)
     if master is None:
         self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubtop()))
         return
     # ユーザ情報.
     v_player = self.getViewerPlayer()
     uid = v_player.id
     # 書き込み.
     try:
         db_util.run_in_transaction(self.tr_write, uid, master, self.__now)
     except CabaretError, err:
         if err.code == CabaretError.Code.ALREADY_RECEIVED:
             pass
         elif err.code == CabaretError.Code.ILLEGAL_ARGS:
             self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubstore(mid)))
             return
         else:
             raise
Exemple #4
0
 def processNormal(self, target):
     """通常設定.
     """
     try:
         # 選択したカード.
         cardid = int(self.request.get(Defines.URLQUERY_CARD))
         # 設定する場所.
         idx = int(self.request.get(Defines.URLQUERY_INDEX))
     except:
         raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)
     
     v_player = self.getViewerPlayer()
     model_mgr = self.getModelMgr()
     uid = v_player.id
     
     if target == 'raid':
         # レイド.
         deck = BackendApi.get_raid_deck(uid, model_mgr, using=settings.DB_READONLY)
     else:
         deck = BackendApi.get_deck(uid, model_mgr, using=settings.DB_READONLY)
     
     # デッキ.
     cardidlist = deck.to_array()
     if idx == -1:
         # デッキから指定のカードを外す.
         if deck.leader == cardid:
             raise CabaretError(u'No.1は外せません', CabaretError.Code.ILLEGAL_ARGS)
         elif cardid in cardidlist:
             cardidlist.remove(cardid)
         else:
             # 設定済み.
             return
     else:
         idx = min(max(0, idx), len(cardidlist))
         if cardid in cardidlist:
             if idx < len(cardidlist):
                 if cardidlist[idx] == cardid:
                     # 設定済み.
                     return
                 else:
                     # 入れ替え.
                     cardidlist[cardidlist.index(cardid)] = cardidlist[idx]
                     cardidlist[idx] = cardid
             else:
                 # 削除して末尾に追加.
                 cardidlist.remove(cardid)
                 cardidlist.append(cardid)
         else:
             if idx < len(cardidlist):
                 cardidlist[idx] = cardid
             else:
                 # 末尾に追加.
                 cardidlist.append(cardid)
     
     # 書き込み.
     if target == 'raid':
         wrote_model_mgr = db_util.run_in_transaction(Handler.tr_write_raid, v_player, cardidlist)
     else:
         wrote_model_mgr = db_util.run_in_transaction(Handler.tr_write, v_player, cardidlist)
     wrote_model_mgr.write_end()
Exemple #5
0
    def check_offerwall(self, model_mgr, v_player):
        # DXP OfferWall.
        dxpdata = BackendApi.get_model(model_mgr, PlayerDXPWallConversion, v_player.id, using=settings.DB_READONLY)
        if self.check_incentive(dxpdata, v_player.level) and dxpdata.is_received is False:
            
            # incentive を設定する.
            dxpapi = DXPAPI(is_rel=self.is_rel)
            conversion_id = dxpapi.get_wall_conversion(self.app_id, v_player.dmmid)

            if dxpdata.is_set_conversion is False and conversion_id:
                set_conversion_result = dxpapi.set_wall_conversion(conversion_id)
            elif dxpdata.is_set_conversion:
                set_conversion_result = dxpdata.is_set_conversion
            else:
                set_conversion_result = False
            
            if dxpdata.is_set_incentive is False:
                set_incentive_result = self.set_incentive(dxpapi, conversion_id)
            elif dxpdata.is_set_incentive:
                set_incentive_result = dxpdata.is_set_incentive
            else:
                set_incentive_result = False

            incentive_ok = None
            if (dxpdata.is_set_incentive or set_incentive_result) and \
               dxpdata.is_prize_incentive is False:
                incentive_ok = self.get_incentive(dxpapi, self.app_id, v_player.dmmid)

            if incentive_ok is not None:
                db_util.run_in_transaction(self.tr_incentive, v_player.id, set_conversion_result, set_incentive_result, incentive_ok)
            elif incentive_ok is None and (dxpdata.is_set_conversion or set_incentive_result) \
                and dxpdata.is_received is False:
                db_util.run_in_transaction(self.tr_incentive, v_player.id, set_conversion_result, set_incentive_result, True)
    def initialize(self, limit, offset):
        """ バトルチケットの初期化を行なう.
        """
        # バトルチケットの取得.
        tickets = GachaTicket.fetchValues(
            filters={'mid': self.battleticket_id},
            limit=limit,
            offset=offset,
            using=settings.DB_DEFAULT)
        if len(tickets) <= 0:
            return None

        def tr():
            model_mgr = ModelRequestMgr()
            for ticket in tickets:
                if ticket.num == 0:
                    continue
                print 'mid: {}, num: {} => 0'.format(ticket.mid, ticket.num)
                ticket.num = 0
                model_mgr.set_save(ticket)
            model_mgr.write_all()
            model_mgr.write_end()
            return model_mgr

        try:
            db_util.run_in_transaction(tr)
        except CabaretError, err:
            print 'error...%s' % err.value
            return
Exemple #7
0
    def setUp(self):
        ua_type = Defines.CabaClubEventUAType.LIVEN_UP
        # ユーザーを用意.
        self.__player = self.create_dummy(DummyType.PLAYER)
        # 店舗を用意.
        cabaclub_dummy = self.setUpCabaclub(self.__player)
        self.__cabaclub_dummy = cabaclub_dummy
        self.__storemaster = cabaclub_dummy.stores[ua_type]
        self.__eventmaster = cabaclub_dummy.events[ua_type]
        # 前回更新時間を戻しておく.
        storeplayerdata = cabaclub_dummy.storeplayerdata[ua_type]
        storeplayerdata.is_open = True
        storeplayerdata.event_id = self.__eventmaster.id
        storeplayerdata.etime = cabaclub_dummy.now
        storeplayerdata.save()

        # ユーザアクション実行.
        def tr():
            model_mgr = ModelRequestMgr()
            BackendApi.tr_cabaclubstore_useraction(model_mgr, self.__player.id,
                                                   self.__storemaster,
                                                   cabaclub_dummy.now)
            model_mgr.write_all()
            model_mgr.write_end()

        db_util.run_in_transaction(tr)
Exemple #8
0
    def process(self):
        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        eventmaster = BackendApi.get_current_scouteventmaster(model_mgr,
                                                              using=using)
        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
        mid = eventmaster.id

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

        # 短冊情報.
        obj_tanzakulist = BackendApi.put_scoutevent_tanzakudata(self, uid)
        if not obj_tanzakulist:
            # 短冊が無いイベント.
            url = UrlMaker.scoutevent_top()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        obj_tanzaku = None

        # 短冊所持情報.
        tanzakudata = BackendApi.get_scoutevent_tanzakucastdata(
            model_mgr, uid, mid, using=settings.DB_READONLY)
        current_cast_number = tanzakudata.current_cast if tanzakudata else -1
        if current_cast_number != -1:
            for obj in obj_tanzakulist:
                if obj['number'] == current_cast_number:
                    obj_tanzaku = obj
                    break

            # 一応データの不具合を防いでおく.
            if obj_tanzaku is None:
                if settings_sub.IS_DEV:
                    raise CabaretError(
                        u'存在しないキャストを指名しています.{}'.format(current_cast_number))

                def tr():
                    model_mgr = ModelRequestMgr()
                    BackendApi.tr_scoutevent_nominate_cast(
                        model_mgr, uid, mid, None)
                    model_mgr.write_all()
                    return model_mgr

                try:
                    db_util.run_in_transaction(tr).write_end()
                except CabaretError, err:
                    if err.code == CabaretError.Code.ALREADY_RECEIVED:
                        pass
                    else:
                        raise
                url = UrlMaker.scouteventcastnomination()
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
Exemple #9
0
    def __procGoukon(self, eventmaster):
        """合コンバトルイベント.
        """
        model_mgr = self.getModelMgr()
        eventid = eventmaster.id

        basetime = DateTimeUtil.toLoginTime(OSAUtil.get_now())
        cdate = datetime.date(basetime.year, basetime.month, basetime.day)
        cur_group = self.getCurrentBattleGroup(do_search_log=False)

        # 設定済みの場合はイベントTOPへリダイレクト.
        if cur_group and cur_group.cdate == cdate:
            url = UrlMaker.battleevent_top(eventmaster.id)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # 最大ランク.
        config = BackendApi.get_current_battleeventconfig(
            model_mgr, using=settings.DB_READONLY)

        # 公開中のランク.
        rankmaster_list = BackendApi.get_battleevent_rankmaster_by_eventid(
            model_mgr, eventid, using=settings.DB_READONLY)
        rankmaster_list.sort(key=lambda x: x.rank)

        # 未設定で引数がある場合は書き込み.
        rank = str(self.request.get(Defines.URLQUERY_ID))
        if rank.isdigit():
            rank = int(rank)
            # ランクの公開確認.
            target_rankmaster = None
            for rankmaster in rankmaster_list:
                if rankmaster.rank == rank:
                    target_rankmaster = rankmaster
                    break
            if target_rankmaster:
                # 登録書き込み.
                v_player = self.getViewerPlayer()
                uid = v_player.id
                try:
                    db_util.run_in_transaction(self.tr_write, config,
                                               eventmaster, uid,
                                               v_player.level, rankmaster_list,
                                               rank).write_end()
                except CabaretError, err:
                    if err.code == CabaretError.Code.ALREADY_RECEIVED:
                        pass
                    elif settings_sub.IS_DEV:
                        raise
                    else:
                        url = UrlMaker.mypage()
                        self.appRedirect(self.makeAppLinkUrlRedirect(url))
                        return

                # 書き込み後はイベントTOPへ.
                url = UrlMaker.battleevent_top(eventmaster.id)
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
Exemple #10
0
 def procShopDo(self, master_id, buy_count, payment_id):
     """ショップ実行.
     決済情報を確認して課金レコードを作成.
     """
     try:
         mid = int(master_id)
         buynum = int(buy_count)
         if not (0 < buynum <= Defines.BUY_NUM_MAX):
             raise
     except:
         raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)
     
     self.set_shop_masterid(mid)
     now = OSAUtil.get_now()
     
     # プレイヤー情報.
     v_player = self.getViewerPlayer()
     
     # 購入可能かをチェック.
     master = self.getShopMaster()
     buydata = self.getShopBuyData(True)
     if buydata is None:
         mgr = db_util.run_in_transaction(Handler.tr_write_buydata, v_player.id, master.id)
         mgr.write_end()
         buydata = mgr.get_wrote_model(ShopItemBuyData, ShopItemBuyData.makeID(v_player.id, master.id))
     
     sku_id = '%s%s' % (Handler.PAYMENT_TYPE_SHOP, master_id)
     item = PaymentItem()
     item.itemId = sku_id
     item.unitPrice = master.price
     item.quantity = buynum
     self.checkPaymentRecord(payment_id, [item])
     if self.response.isEnd:
         return
     
     model_mgr = self.getModelMgr()
     if not BackendApi.check_buyable_shopitem(model_mgr, v_player, master, buydata, buynum, now, using=settings.DB_READONLY):
         if settings_sub.IS_LOCAL:
             raise CabaretError(u'購入できない')
         # リダイレクトせずにステータス500を返す
         #url = UrlMaker.shop()
         #self.appRedirect(self.makeAppLinkUrlRedirect(url))
         self.response.clear()
         self.response.set_status(500)
         self.response.end()
         return
     
     # ここまで来たら購入出来るのが確定..
     item.itemId = master.id
     
     paymentdata = PaymentData()
     paymentdata.paymentId = payment_id
     paymentdata.status = PaymentData.Status.START
     paymentdata.paymentItems = [item]
     
     mgr = db_util.run_in_transaction(Handler.tr_create_entry_shop, v_player, paymentdata, now)
     mgr.write_end()
        def write():
            def tr(codelist, mid):
                model_mgr = ModelRequestMgr()
                for code in codelist:
                    model = SerialCode()
                    model.serial = code
                    model.mid = mid
                    model_mgr.set_save(model)
                model_mgr.write_all()
                return model_mgr

            db_util.run_in_transaction(tr, codelist, mid).write_end()
    def process(self):

        args = self.getUrlArgs('/battleeventpresentreceive/')
        confirmkey = urllib.unquote(args.get(0) or '')

        now = OSAUtil.get_now()

        model_mgr = self.getModelMgr()

        # 対象のイベント.
        config = BackendApi.get_current_battleeventconfig(
            model_mgr, using=settings.DB_READONLY)
        cur_eventmaster = None
        if config.mid and config.starttime <= now < config.epilogue_endtime:
            cur_eventmaster = BackendApi.get_battleevent_master(
                model_mgr, config.mid, using=settings.DB_READONLY)

        if cur_eventmaster is None:
            self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage()))
            return
        elif config.starttime <= now < config.endtime:
            self.checkBattleEventUser(do_check_battle_open=False,
                                      do_check_regist=False)
            if self.response.isEnd:
                return

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

        # 次を選ぶ.
        presentmaster_list = BackendApi.get_battleeventpresent_master_by_eventdid(
            model_mgr, cur_eventmaster.id,
            using=settings.DB_READONLY).values()
        presentmaster_next = BackendApi.choice_battleeventpresent(
            model_mgr,
            uid,
            cur_eventmaster.id,
            using=settings.DB_READONLY,
            presentmaster_list=presentmaster_list)

        try:
            db_util.run_in_transaction(Handler.tr_write, uid,
                                       cur_eventmaster.id, confirmkey,
                                       presentmaster_next).write_end()
        except CabaretError, err:
            BackendApi.get_battleeventpresent_pointdata(
                model_mgr, uid, cur_eventmaster.id)
            if err.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            else:
                raise
Exemple #13
0
    def process(self):
        try:
            tanzaku_number = int(self.request.get(Defines.URLQUERY_ID))
            tanzaku_num = int(self.request.get(Defines.URLQUERY_NUMBER))
        except:
            raise CabaretError(u'引数が想定外', CabaretError.Code.ILLEGAL_ARGS)

        args = self.getUrlArgs('/sceventtiptradedo/')
        confirmkey = args.get(0)

        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        eventmaster = BackendApi.get_current_scouteventmaster(model_mgr,
                                                              using=using)
        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
        mid = eventmaster.id

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

        # 短冊情報.
        tanzakumaster = BackendApi.get_scoutevent_tanzakumaster(
            model_mgr, mid, tanzaku_number, using=settings.DB_READONLY)
        if tanzakumaster is None:
            if settings_sub.IS_DEV:
                raise CabaretError(u'存在しない短冊です',
                                   CabaretError.Code.ILLEGAL_ARGS)
            url = UrlMaker.scouteventtiptrade()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        def tr(uid, eventmaster, tanzakumaster, num, confirmkey):
            model_mgr = ModelRequestMgr()
            BackendApi.tr_scoutevent_trade_tip(model_mgr, uid, eventmaster,
                                               tanzakumaster, num, confirmkey)
            model_mgr.write_all()
            return model_mgr

        try:
            db_util.run_in_transaction(tr, uid, eventmaster, tanzakumaster,
                                       tanzaku_num, confirmkey).write_end()
        except CabaretError, err:
            if err.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            else:
                raise
Exemple #14
0
    def handle(self, *args, **options):
        delete_target_model_cls_list = (PlayerCrossPromotion, )

        def tr():
            for model_cls in delete_target_model_cls_list:
                tablename = model_cls.get_tablename()
                query_string = "truncate table `%s`;" % tablename
                Query.execute_update(query_string, [], False)
                print 'delete...%s' % tablename

        db_util.run_in_transaction(tr)

        if args and args[0] == 'set_user_status':
            self.set_user_status()
    def handle(self, *args, **options):
        print('=======================')
        print('fix_cabaclubrank_record')
        print('=======================')
        mid = 1
        BATCH_SIZE = 500

        model_mgr = ModelRequestMgr()
        self.all_clear_weekly(model_mgr)
        self.all_clear_eventrankmaster(model_mgr)

        max_uid = UserLogCabaClubStore.max_value('uid')
        for i in range(max_uid):
            uid = i+1;
            db_util.run_in_transaction(self.tr_write, uid, mid)
 def handle(self, *args, **options):
     
     print '================================'
     print 'update_happeningend'
     print '================================'
     
     # 有効期限.
     now = OSAUtil.get_now()
     limittime = now - datetime.timedelta(seconds=600)
     
     # レイド発生中で期限切れのハプニングを取得.
     happeninglist = Happening.fetchValues(['id'], {'state':Defines.HappeningState.CLEAR, 'etime__lte':limittime}, limit=30000, using=backup_db)
     
     def tr(happeningid):
         model_mgr = ModelRequestMgr()
         happening = Happening.getByKeyForUpdate(happeningid)
         raidboss = BackendApi.get_raid(model_mgr, happening.id, happening_eventvalue=happening.event)
         BackendApi.tr_happening_end(model_mgr, happening, raidboss)
         model_mgr.write_all()
         return model_mgr
     
     for happening in happeninglist:
         try:
             model_mgr = db_util.run_in_transaction(tr, happening.id)
             model_mgr.write_end()
         except CabaretError, err:
             if err.code == CabaretError.Code.ALREADY_RECEIVED:
                 pass
             else:
                 raise
         print 'update %d end' % happening.id
Exemple #17
0
    def process(self):

        v_player = self.getViewerPlayer()

        happeningraidset = self.getHappeningRaidSet()
        if happeningraidset is None or not happeningraidset.happening.happening.is_boss_appeared(
        ):
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'レイドが発生していない')
            url = self.makeAppLinkUrlRedirect(UrlMaker.happening())
            self.appRedirect(url)
            return

        # レイド情報.
        raidboss = happeningraidset.raidboss
        if raidboss is None:
            raise CabaretError(u'レイド情報がありません', CabaretError.Code.UNKNOWN)
        elif not raidboss.raid.helpflag:
            to_other = self.request.get(Defines.URLQUERY_FLAG) == "1"

            try:
                model_mgr = db_util.run_in_transaction(self.tr_write,
                                                       v_player.id, to_other)
                model_mgr.write_end()
            except CabaretError:
                if settings_sub.IS_LOCAL:
                    raise

        url = self.makeAppLinkUrlRedirect(
            self.makeLinkRaidBattlePre(happeningraidset))
        self.appRedirect(url)
Exemple #18
0
    def process(self):
        args = self.getUrlArgs('/compositiondo/')
        try:
            if settings_sub.IS_BENCH:
                requestkey = OSAUtil.makeSessionID()
            else:
                self.__baseid = int(args.get(0))
                self.__materialidlist = self.getMaterialIdList()
                requestkey = urllib.unquote(args.get(1))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

        v_player = self.getViewerPlayer()

        try:
            model_mgr = db_util.run_in_transaction(Handler.tr_write,
                                                   v_player.id, self.__baseid,
                                                   self.__materialidlist,
                                                   requestkey)
            model_mgr.write_end()
        except CabaretError, e:
            if e.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            else:
                if settings_sub.IS_LOCAL:
                    raise CabaretError(u'合成できませんでした.%s' %
                                       CabaretError.getCodeString(e.code))
                url = UrlMaker.composition()
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
    def handle(self, *args, **options):

        print '================================'
        print 'update_missed_happening'
        print '================================'

        # 有効期限.
        now = OSAUtil.get_now()
        limittime = now

        # レイド発生中で期限切れのハプニングを取得.
        happeninglist = Happening.fetchValues(['id'], {
            'state': Defines.HappeningState.ACTIVE,
            'etime__lte': limittime
        },
                                              limit=30000,
                                              using=backup_db)

        def tr(happeningid):
            model_mgr = ModelRequestMgr()
            BackendApi.tr_happening_missed(model_mgr, happeningid)
            model_mgr.write_all()
            return model_mgr

        for happening in happeninglist:
            try:
                model_mgr = db_util.run_in_transaction(tr, happening.id)
                model_mgr.write_end()
            except CabaretError, err:
                if err.code == CabaretError.Code.ALREADY_RECEIVED:
                    pass
                else:
                    raise
            print 'update %d end' % happening.id
 def write_end(function, cls):
     try:
         tmp_model_mgr = db_util.run_in_transaction(function)
     except CabaretError, err:
         print "An error occured when tring to update %s", cls
         print "error...%s" % err.value
         return
Exemple #21
0
 def writeUseCabaClubBarrierItem(self, itemmaster, usenum, confirmkey):
     """バリアアイテム使用.
     """
     v_player = self.getViewerPlayer()
     # 書き込み.
     model_mgr = db_util.run_in_transaction(self.tr_write_use_cabaclubbarrieritem, v_player.id, itemmaster, confirmkey)
     model_mgr.write_end()
Exemple #22
0
 def writeUseCabaClubPreferentialItem(self, itemmaster, usenum, confirmkey):
     """優待券配布使用.
     """
     v_player = self.getViewerPlayer()
     # 書き込み.
     model_mgr = db_util.run_in_transaction(self.tr_write_use_cabaclubpreferentialitem, v_player.id, itemmaster, confirmkey)
     model_mgr.write_end()
Exemple #23
0
    def proc_update_requirement(self, appname):
        """達成状態を変更.
        """
        level = self.request.get('level')
        if not level.isdigit():
            self.__setResultInfo(u'レベルは1以上の数値で入力してください', True)
            return

        model_mgr = self.getModelMgr()
        maxlevel = BackendApi.get_playermaxlevel(model_mgr,
                                                 using=settings.DB_READONLY)
        level = max(0, min(maxlevel, int(level)))

        v_player = self.getViewerPlayer()

        def tr(uid, level):
            model_mgr = ModelRequestMgr()
            player = BackendApi.get_player(self,
                                           uid, [PlayerExp],
                                           model_mgr=model_mgr)
            playerexp = BackendApi.get_playerlevelexp_bylevel(level, model_mgr)
            if playerexp is None:
                playerexp = BackendApi.get_playerlevelexp_bylevel(
                    maxlevel, model_mgr)
            player.exp = 0
            BackendApi.tr_add_exp(model_mgr, player, playerexp.exp)
            model_mgr.write_all()
            return model_mgr, player.getModel(PlayerExp)

        model_mgr, playerexp = db_util.run_in_transaction(
            tr, v_player.id, level)
        model_mgr.write_end()

        v_player.setModel(playerexp)
        self.__setResultInfo(u'プレイヤーレベルを%dに変更しました' % level)
Exemple #24
0
class Command(BaseCommand):
    def handle(self, *args, **options):
        print '================================'
        print 'reset player is_get_targetrarity'
        print '================================'

        resetdata = GachaBoxResetPlayerData.fetchValues(using=backup_db)
        resetdata_uid = [reset.id for reset in resetdata]

        playerlist = Player.fetchValues(using=backup_db,
                                        excludes={'id__in': resetdata_uid})

        users = [
            player for player in playerlist if player.id not in resetdata_uid
        ]

        # update is_get_targetrarity
        try:
            db_util.run_in_transaction(self.tr_update, resetdata)
        except CabaretError, err:
            print 'error...{}'.format(err.value)

        # add users that were not previously in GachaBoxResetPlayerData
        # add set their is_get_targetrarity to True
        try:
            db_util.run_in_transaction(self.tr_write, users)
        except CabaretError, err:
            print 'error...{}'.format(err.value)
Exemple #25
0
 def process(self):
     # プレイヤー情報.
     v_player = self.getViewerPlayer()
     # 実行.
     try:
         model_mgr, result = db_util.run_in_transaction(
             self.tr_write, v_player.id, OSAUtil.get_now())
         model_mgr.write_end()
     except CabaretError:
         # うまく実行できない.
         if settings_sub.IS_DEV:
             # マスターデータが正しくないとかあるだろうからそのチェック用.
             raise
         self.redirectToTop()
         return
     # 演出へリダイレクト.
     url = None
     if result:
         url = self.makeUrlBySugorokuResult(result, False)
         if url:
             url = self.addSugorokuResultQueryString(url, result)
     if url is None:
         # 演出の表示が必要ない.
         url = UrlMaker.mypage()
     if settings_sub.IS_BENCH:
         self.response.set_status(200)
         self.response.send()
     else:
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
Exemple #26
0
    def procWrite(self):
        """タイプ選択書き込み.
        """
        v_player = self.__getViewerPlayer()
        if v_player is None:
            return
        ptype = self.getSelectedType()
        if ptype is None:
            return

        try:
            if self.is_active_dxp():
                is_set_conversion = self.get_is_set_conversion()
            else:
                is_set_conversion = False
            model_mgr = db_util.run_in_transaction(self.tr_write_regist,
                                                   v_player.id, ptype,
                                                   is_set_conversion)
            model_mgr.write_end()
        except CabaretError, err:
            if err.code == CabaretError.Code.ALREADY_RECEIVED:
                if settings_sub.IS_LOCAL:
                    raise CabaretError(u'登録済みです')
            else:
                raise
Exemple #27
0
 def updateTutoState(self, tutostate):
     v_player = self.getViewerPlayer(True)
     if v_player.tutorialstate != tutostate:
         try:
             if tutostate == Defines.TutorialStatus.COMPLETED:
                 model_mgr = db_util.run_in_transaction(
                     self.tr_write_tutoend, v_player.id)
             else:
                 model_mgr = db_util.run_in_transaction(
                     self.tr_update_tutostate, v_player.id, tutostate)
             model_mgr.write_end()
         except CabaretError, err:
             if err.code == CabaretError.Code.ALREADY_RECEIVED:
                 pass
             else:
                 raise
Exemple #28
0
    def __procPost(self, eventmaster):
        """投入書き込み.
        """
        # 引数取得.
        try:
            requestkey = self.request.get(Defines.URLQUERY_FLAG) or ''
            target_number = int(self.request.get(Defines.URLQUERY_NUMBER))
        except:
            return
        if not requestkey:
            return

        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()

        eventid = eventmaster.id
        uid = v_player.id

        # 項目のマスター.
        presentprizemaster = BackendApi.get_scoutevent_presentprizemaster(
            model_mgr, eventid, target_number, using=settings.DB_READONLY)
        if presentprizemaster is None:
            return

        # 書き込み.
        try:
            model_mgr = db_util.run_in_transaction(Handler.tr_write, uid,
                                                   presentprizemaster,
                                                   requestkey)
            model_mgr.write_end()
        except CabaretError, err:
            if err.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            else:
                return
Exemple #29
0
    def process(self):
        req_args = self.getUrlArgs('/reprintticket_tradeshopdo/')

        try:
            trademasterid = int(req_args.get(0))
            confirmkey = urllib.unquote(req_args.get(1))
            num = int(self.request.get(Defines.URLQUERY_NUMBER, None))
        except:
            raise CabaretError(u'リクエストが正しくありません', CabaretError.Code.ILLEGAL_ARGS)
        model_mgr = self.getModelMgr()
        self.check_validation(model_mgr, trademasterid, num)
        v_player = self.getViewerPlayer()

        try:
            model_mgr = db_util.run_in_transaction(self.tr_write, v_player.id, trademasterid, confirmkey, num)
            model_mgr.write_end()
        except CabaretError, err:
            if settings_sub.IS_LOCAL:
                raise
            elif err.code == CabaretError.Code.ALREADY_RECEIVED:
                pass
            else:
                url = UrlMaker.reprintticket_tradeshopyesno(trademasterid)
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
Exemple #30
0
    def process(self):
        args = self.getUrlArgs('/sceventcardget/')
        try:
            stageid = int(args.get(0))
            itemid = int(self.request.get(Defines.URLQUERY_ID, 0))
            usenum = int(self.request.get(Defines.URLQUERY_NUMBER, 0))
            if not (0 <= usenum):
                raise
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

        v_player = self.getViewerPlayer()
        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        eventmaster = BackendApi.get_current_scouteventmaster(model_mgr,
                                                              using=using)
        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
        mid = eventmaster.id

        # アイテムの確認.
        itemmaster = None
        if itemid:
            if not itemid in Defines.ItemEffect.SCOUT_CARD_ITEMS:
                if settings_sub.IS_LOCAL:
                    raise CabaretError(u'使用できないアイテムです')
                playdata = BackendApi.get_event_playdata(
                    model_mgr, mid, v_player.id, using)
                if playdata:
                    url = UrlMaker.scouteventresult(stageid,
                                                    playdata.alreadykey)
                    self.appRedirect(self.makeAppLinkUrlRedirect(url))
                else:
                    self.redirectToTop()
                return
            itemmaster = BackendApi.get_itemmaster(model_mgr,
                                                   itemid,
                                                   using=settings.DB_READONLY)
            if itemmaster is None:
                raise CabaretError(u'アイテムが見つかりません',
                                   CabaretError.Code.INVALID_MASTERDATA)

        playerconfigdata = BackendApi.get_playerconfigdata(v_player.id)

        try:
            model_mgr = db_util.run_in_transaction(
                Handler.tr_write, mid, v_player.id, stageid, itemmaster,
                usenum, playerconfigdata.autosell_rarity)
            model_mgr.write_end()
        except CabaretError, err:
            if settings_sub.IS_LOCAL:
                raise
            elif err.code == CabaretError.Code.ALREADY_RECEIVED:
                # 判定済み.
                pass
            else:
                raise