class ScoutMaster(BaseMasterWithThumbnail): """スカウトのマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') area = models.PositiveIntegerField(db_index=True, verbose_name=u'エリア') opencondition = models.PositiveIntegerField( db_index=True, default=0, verbose_name=u'開放条件(スカウトクリア) 0で常時開放') execution = models.PositiveSmallIntegerField(default=1, verbose_name=u'クリアまでのポチポチ回数') apcost = models.PositiveSmallIntegerField(default=0, verbose_name=u'消費体力') exp = models.PositiveIntegerField(default=0, verbose_name=u'獲得経験値') goldmin = models.PositiveIntegerField(default=0, verbose_name=u'獲得ポケットマネー最小値') goldmax = models.PositiveIntegerField(default=0, verbose_name=u'獲得ポケットマネー最大値') eventrate_drop = models.PositiveSmallIntegerField(default=0, verbose_name=u'カード発見発生率') eventrate_happening = models.PositiveSmallIntegerField( default=0, verbose_name=u'ハプニング発生率') eventrate_treasure = models.PositiveSmallIntegerField( default=0, verbose_name=u'宝箱発見発生率') dropitems = JsonCharField(default=list, verbose_name=u'カード出現テーブル') happenings = JsonCharField(default=list, verbose_name=u'発生するハプニング') treasuregold = models.PositiveSmallIntegerField(default=0, verbose_name=u'金の宝箱出現率') treasuresilver = models.PositiveSmallIntegerField(default=0, verbose_name=u'銀の宝箱出現率') treasurebronze = models.PositiveSmallIntegerField(default=0, verbose_name=u'銅の宝箱出現率')
class CurrentRaidEventConfig(Singleton): """開催中または開催予定のレイド. """ class Meta: app_label = settings_sub.APP_NAME abstract = False mid = models.PositiveIntegerField(default=0, verbose_name=u'イベントのマスターID') starttime = AppDateTimeField(default=OSAUtil.get_now, verbose_name=u'開始時間') endtime = AppDateTimeField(default=OSAUtil.get_now, verbose_name=u'終了時間') prize_flag = models.PositiveIntegerField(default=0, verbose_name=u'ランキング報酬配布フラグ') bigtime = AppDateTimeField(default=OSAUtil.get_datetime_max, verbose_name=u'大ボス出現時間') ticket_endtime = AppDateTimeField(default=OSAUtil.get_now, verbose_name=u'秘宝交換とガチャ公開終了時間') timebonus_time = JsonCharField(default=list, verbose_name=u'タイムボーナス時間') combobonus_opentime = JsonCharField(default=list, verbose_name=u'コンボボーナス公開開始時間') feverchance_opentime = JsonCharField(default=list, verbose_name=u'フィーバーチャンス公開開始時間') fastbonus_opentime = JsonCharField(default=list, verbose_name=u'秘宝ボーナス公開開始時間') epilogue_endtime = AppDateTimeField(default=OSAUtil.get_now, verbose_name=u'エピローグ終了時間') beginer_prize_flag = models.PositiveIntegerField(default=0, verbose_name=u'新店舗ランキング報酬配布フラグ') stageschedule = JsonCharField(default=list, verbose_name=u'途中追加されるステージのスケジュール') def get_stage_max(self, now=None): """現在の最大ステージ数. 無制限の場合はNone. """ stage_max = None if self.stageschedule: now = now or OSAUtil.get_now() self.stageschedule.sort(key=lambda x:x['time']) for data in self.stageschedule: if data['time'] <= now: continue stage_max = data['stage'] - 1 break return stage_max
class DefaultCardMaster(BaseMaster): """デフォルト所持カードのマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False ctype = models.PositiveSmallIntegerField(primary_key=True, verbose_name=u'タイプ', choices=dict_to_choices(Defines.CharacterType.NAMES)) leader = models.PositiveIntegerField(db_index=True, verbose_name=u'リーダー') members = JsonCharField(default=list, verbose_name=u'メンバー', help_text=u'ユーザー登録時にデッキに設定します') box = JsonCharField(default=list, verbose_name=u'BOX', help_text=u'ユーザー登録時にBOXに設定します')
class RaidMaster(BaseMaster): """レイドのマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') name = models.CharField(default='', max_length=48, verbose_name=u'名前') commentappear = models.TextField(default='', verbose_name=u'出現時(挑発)コメント') commentwin = models.TextField(default='', verbose_name=u'勝利(ユーザが勝利)時コメント') commentwin_full = models.TextField(default='', verbose_name=u'大成功時コメント') commentlose = models.TextField(default='', verbose_name=u'敗北(ユーザが敗北)時コメント') thumb = models.CharField(default='', max_length=96, verbose_name=u'サムネイル') hprate_min = models.PositiveIntegerField(default=100, verbose_name=u'HPの変動幅の下限[%]') hprate_max = models.PositiveIntegerField(default=100, verbose_name=u'HPの変動幅の上限値[%]') hpbase = models.PositiveIntegerField(default=0, verbose_name=u'HP基本値') hpgrowth = models.PositiveIntegerField(default=0, verbose_name=u'HP成長度') defensebase = models.PositiveIntegerField(default=0, verbose_name=u'防御力基本値') defensegrowth = models.PositiveIntegerField(default=0, verbose_name=u'防御力成長度') bpcost = models.PositiveSmallIntegerField(default=20, verbose_name=u'気力消費量') bpcost_strong = models.PositiveSmallIntegerField( default=50, verbose_name=u'気力消費量(強攻撃)') bpcost_first = models.SmallIntegerField(default=-1, verbose_name=u'気力消費量(初回)', help_text=u'0より小さい場合は無効') bpcost_first_other = models.SmallIntegerField( default=-1, verbose_name=u'気力消費量(発見者以外の初回)', help_text=u'0より小さい場合は無効') prizes = JsonCharField(default=list, verbose_name=u'発見者の報酬') helpprizes = JsonCharField(default=list, verbose_name=u'救援の報酬') cabaretkingbase = models.PositiveIntegerField(default=0, verbose_name=u'キャバ王の秘宝基本値') cabaretkinggrowth = models.PositiveIntegerField(default=0, verbose_name=u'キャバ王の秘宝成長度') demiworldbase = models.PositiveIntegerField(default=0, verbose_name=u'キャバ王の秘宝(救援)基本値') demiworldgrowth = models.PositiveIntegerField( default=0, verbose_name=u'キャバ王の秘宝(救援)成長度') max_level = models.PositiveIntegerField(default=100, verbose_name=u'ボスの最大レベル') ctype = models.PositiveSmallIntegerField( verbose_name=u'ボスの属性', default=Defines.CharacterType.NONE, choices=dict_to_choices(Defines.CharacterType.BOSS_NAMES)) weakbonus = JsonCharField(verbose_name=u'属性ボーナス', default=list, help_text=u'[[属性,倍率%],..]') items = JsonCharField(default=list, verbose_name=u'アイテム出現テーブル')
class RaidEventScoutStageMaster(EventScoutStageMaster): """イベントスカウトのステージマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False happenings_timebonus = JsonCharField(default=list, verbose_name=u'レイド出現テーブル(タイムボーナス)') happenings_big = JsonCharField(default=list, verbose_name=u'大ボス出現後レイド出現テーブル') happenings_timebonus_big = JsonCharField( default=list, verbose_name=u'大ボス出現後レイド出現テーブル(タイムボーナス)')
class AreaMaster(BaseMasterWithThumbnail): """エリアのマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') opencondition = models.PositiveIntegerField(default=0, verbose_name=u'開放条件(エリアクリア)') schedule = models.PositiveIntegerField(default=0, verbose_name=u'開放期間') boss = models.PositiveIntegerField(verbose_name=u'ボスID') prizes = JsonCharField(default=list, verbose_name=u'クリア報酬') girls = JsonCharField(default=list, verbose_name=u'出現する女性')
class PresentEveryoneLoginBonusMaster(PresentEveryoneBase): """ログインボーナス時に配付する全プレ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False prizes_daily = JsonCharField(default=dict, verbose_name=u'日別に配付するもの', help_text=u'{"日数":[報酬ID,...],...}という形式で') s_date = models.DateField(default=datetime.date.today, verbose_name=u'配布開始日') e_date = models.DateField(default=datetime.date.today, verbose_name=u'配布終了日', db_index=True) everyday = models.BooleanField(default=False, verbose_name=u'期間中毎日配布フラグ', help_text=u'フラグが立っているときは毎日配布します') @property def s_time(self): return DateTimeUtil.toLoginTime( DateTimeUtil.dateToDateTime(self.s_date)) @property def e_time(self): return DateTimeUtil.toLoginTime( DateTimeUtil.dateToDateTime(self.e_date))
class ScoutEventHappeningTableMaster(BaseMaster): """スカウトイベントの曜日別ハプニング発生テーブルマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = PositiveBigIntegerField(primary_key=True, verbose_name=u'ID') eventid = models.PositiveIntegerField(db_index=True, verbose_name=u'イベントマスターID') wday = models.PositiveSmallIntegerField( default=0, verbose_name=u'曜日', choices=[(w, u'{}:{}'.format(w, Defines.WeekDay.NAMES[w])) for w in Defines.WeekDay.LIST]) happenings = JsonCharField(default=list, verbose_name=u'発生するハプニング') @staticmethod def makeID(eventid, wday): return (eventid << 32) + wday @staticmethod def makeInstance(key): ins = ScoutEventHappeningTableMaster() ins.id = key ins.eventid = int(key >> 32) ins.wday = int(key & 0xffffffff) return ins
class GachaBoxGachaDetailMaster(BaseMaster): class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ガチャID') allowreset_rarity = models.PositiveIntegerField( default=0, verbose_name=u'リセット許可レアリティ', choices=dict_to_choices(Defines.Rarity.NAMES)) allowreset_cardidlist = JsonCharField(default=list, verbose_name=u'リセット許可カードIDリスト') limit_resettime = models.PositiveIntegerField(default=0, verbose_name=u'リセット可能回数') prizelist = JsonCharField(default=list, verbose_name=u'BOX引き切り報酬') textid = models.PositiveIntegerField(default=0, verbose_name=u'報酬文言')
class PanelMissionMissionMaster(BaseMaster): """パネルミッションのミッション. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') name = models.CharField(max_length=64, verbose_name=u'名前') panel = models.PositiveSmallIntegerField(db_index=True, verbose_name=u'パネルID') number = models.PositiveSmallIntegerField(verbose_name=u'ミッション番号') image_pre = models.CharField(default='', max_length=96, verbose_name=u'達成前のパネル画像') image_post = models.CharField(default='', max_length=96, verbose_name=u'達成後のパネル画像') prizes = JsonCharField(default=list, verbose_name=u'達成報酬') prize_text = models.PositiveIntegerField(default=0, verbose_name=u'達成報酬テキスト') condition_type = models.PositiveSmallIntegerField(default=0, verbose_name=u'達成条件種別', choices=dict_to_choices(Defines.PanelMissionCondition.NAMES)) condition_value1 = models.PositiveSmallIntegerField(default=0, verbose_name=u'達成条件の値1') condition_value2 = models.PositiveSmallIntegerField(default=0, verbose_name=u'達成条件の値2') condition_text = models.TextField(default='', verbose_name=u'達成条件の説明', blank=True) @classmethod def makeID(cls, panel, number): return (panel << 16) + number @classmethod def makeInstance(cls, key): model = cls() primary_key_column = cls.get_primarykey_column() setattr(model, primary_key_column, key) model.panel = (key >> 16) model.number = key & 0xffff return model
class ScheduleMaster(BaseMaster): """スケジュール. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') stime = AppDateTimeField(default=OSAUtil.get_now, verbose_name=u'公開開始時間') etime = AppDateTimeField(db_index=True, default=OSAUtil.get_now, verbose_name=u'公開終了時間') wday = models.PositiveSmallIntegerField(default=Defines.WeekDay.ALL, verbose_name=u'曜日指定', choices=dict_to_choices( Defines.WeekDay.NAMES)) shour = models.PositiveSmallIntegerField(default=0, verbose_name=u'日毎の開始時間(時)', choices=numberitems(0, 24)) sminute = models.PositiveSmallIntegerField(default=0, verbose_name=u'日毎の開始時間(分)', choices=numberitems(0, 60)) timelimit = models.PositiveSmallIntegerField(default=0, verbose_name=u'日毎の制限時間(分)') target = JsonCharField(default=list, verbose_name=u'対象のユーザID下一桁')
class CardMaster(BaseMasterWithThumbnail): """カードマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') ckind = models.PositiveSmallIntegerField(default=Defines.CardKind.NORMAL, choices=dict_to_choices(Defines.CardKind.NAMES), verbose_name=u'カードの種類(通常or教育or進化)') gtype = models.PositiveSmallIntegerField(default=Defines.CardGrowthType.BALANCE, choices=dict_to_choices(Defines.CardGrowthType.NAMES), verbose_name=u'成長タイプ(早熟orバランスor晩成)') cost = models.PositiveSmallIntegerField(default=0, verbose_name=u'コスト') basepower = models.PositiveIntegerField(default=1, verbose_name=u'接客力(基礎値)') maxpower = models.PositiveIntegerField(default=1, verbose_name=u'接客力(最大値)') maxlevel = models.PositiveIntegerField(default=1, verbose_name=u'最大レベル') skill = models.PositiveIntegerField(verbose_name=u'サービス(スキル)') albumhklevel = PositiveBigIntegerField(unique=True, verbose_name=u'(アルバム番号<<32)+ハメ管理レベル') basematerialexp = models.PositiveIntegerField(verbose_name=u'強化素材経験値(基礎)') maxmaterialexp = models.PositiveIntegerField(verbose_name=u'強化素材経験値(最大)') baseprice = models.PositiveIntegerField(verbose_name=u'売値(基礎)') maxprice = models.PositiveIntegerField(verbose_name=u'売値(最大)') evolcost = models.PositiveIntegerField(verbose_name=u'進化費用') dmmurl = JsonCharField(verbose_name=u'DMMの動画ページのURL', default=list, blank=True) @classmethod def makeAlbumHklevel(cls, album, hklevel): return (album << 32) + hklevel @property def album(self): return int(self.albumhklevel >> 32) @property def hklevel(self): return int(self.albumhklevel & 0xffffffff)
class RaidEventRaidMaster(BaseMaster): """イベント用レイドデータ. RaidMasterのイベント用拡張. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = PositiveBigIntegerField(primary_key=True, verbose_name=u'ID') eventid = models.PositiveIntegerField(db_index=True, verbose_name=u'レイドイベントマスターID') mid = models.PositiveIntegerField(db_index=True, verbose_name=u'レイドマスターID') specialcard = JsonCharField(default=list, verbose_name=u'特効キャスト') specialcard_treasure = JsonCharField(default=list, verbose_name=u'特攻ボーナス秘宝獲得率UP') ownerpoint = models.PositiveIntegerField(default=0, verbose_name=u'発見者報酬ポイント基本値') ownerpoint_growth = models.PositiveIntegerField(default=0, verbose_name=u'発見者報酬ポイント成長度') mvppoint = models.PositiveIntegerField(default=0, verbose_name=u'MVP報酬ポイント基本値') mvppoint_growth = models.PositiveIntegerField(default=0, verbose_name=u'MVP報酬ポイント成長度') ownerpoint_timebonus = models.PositiveIntegerField(default=0, verbose_name=u'発見者報酬ポイント(タイムボーナス)基本値') ownerpoint_timebonus_growth = models.PositiveIntegerField(default=0, verbose_name=u'発見者報酬ポイント(タイムボーナス)成長度') mvppoint_timebonus = models.PositiveIntegerField(default=0, verbose_name=u'MVP報酬ポイント(タイムボーナス)基本値') mvppoint_timebonus_growth = models.PositiveIntegerField(default=0, verbose_name=u'MVP報酬ポイント(タイムボーナス)成長度') big = models.BooleanField(default=False, verbose_name=u'大ボスフラグ') pointrandmin = models.PositiveSmallIntegerField(default=100, verbose_name=u'報酬ポイント乱数下限(%)') pointrandmax = models.PositiveSmallIntegerField(default=100, verbose_name=u'報酬ポイント乱数上限(%)') # エイプリルフール. champagne = TinyIntField(default=0, verbose_name=u'獲得できるシャンパンの数') material = TinyIntField(default=0, verbose_name=u'発見者の材料番号(0〜2)', choices=[(i, i) for i in xrange(Defines.RAIDEVENT_MATERIAL_KIND_MAX)]) material_droprate = models.PositiveSmallIntegerField(default=0, verbose_name=u'発見者の材料ドロップ率(0〜1000)') material_num_min = models.PositiveSmallIntegerField(default=0, verbose_name=u'発見者の材料個数の最小') material_num_max = models.PositiveSmallIntegerField(default=0, verbose_name=u'発見者の材料個数の最大') material_help = TinyIntField(default=0, verbose_name=u'救援者の材料番号(0〜2)', choices=[(i, i) for i in xrange(Defines.RAIDEVENT_MATERIAL_KIND_MAX)]) material_droprate_help = models.PositiveSmallIntegerField(default=0, verbose_name=u'救援者の材料ドロップ率(0〜1000)') material_num_min_help = models.PositiveSmallIntegerField(default=0, verbose_name=u'救援者の材料個数の最小') material_num_max_help = models.PositiveSmallIntegerField(default=0, verbose_name=u'救援者の材料個数の最大') @staticmethod def makeID(eventid, mid): return (eventid << 32) + mid @staticmethod def makeInstance(key): ins = RaidEventRaidMaster() ins.id = key ins.eventid = int(key>>32) ins.mid = int(key&0xffffffff) return ins
class HappeningMaster(BaseMasterWithThumbnail): """ハプニングのマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') execution = models.PositiveSmallIntegerField(verbose_name=u'クリアまでのポチポチ回数') apcost = models.PositiveSmallIntegerField(verbose_name=u'消費体力') exp = models.PositiveIntegerField(verbose_name=u'獲得経験値') goldmin = models.PositiveIntegerField(verbose_name=u'獲得ポケットマネー最小値') goldmax = models.PositiveIntegerField(verbose_name=u'獲得ポケットマネー最大値') items = JsonCharField(default=list, verbose_name=u'アイテム出現テーブル') timelimit = models.PositiveIntegerField(verbose_name=u'制限時間[sec]') boss = models.PositiveIntegerField(verbose_name=u'レイドボス') girls = JsonCharField(default=list, verbose_name=u'出現する女性')
class ProduceEventMaster(BaseMaster): """プロデュースイベントのマスターデータです """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') name = models.CharField(verbose_name=u'名前', max_length=48) subname = models.CharField(verbose_name=u'イベントサブタイトル', max_length=64, blank=True, default='') htmlname = models.CharField(verbose_name=u'HTML演出ディレクトリ名', max_length=48) rankingprizes = JsonCharField(verbose_name=u'ランキング報酬') rankingprize_text = models.PositiveIntegerField(verbose_name=u'ランキング報酬文言') pointprizes = JsonCharField(verbose_name=u'ポイント達成報酬') pointprize_text = models.PositiveIntegerField(verbose_name=u'ポイント達成報酬文言') raidtable = JsonCharField(verbose_name=u'レイド出現テーブル') raidtable_big = JsonCharField(verbose_name=u'大ボス出現後レイド出現テーブル') raidtable_full = JsonCharField(verbose_name=u'レイド出現テーブル(全力探索)') raidtable_big_full = JsonCharField(verbose_name=u'大ボス出現後レイド出現テーブル(全力探索)') useitem = models.PositiveSmallIntegerField(verbose_name=u'超接客で使用するアイテムID') changeitem = models.PositiveSmallIntegerField( verbose_name=u'専用アイテムと交換するためのアイテムID') op = models.PositiveIntegerField(default=0, verbose_name=u'オープニング演出ID') ed = models.PositiveIntegerField(default=0, verbose_name=u'エンディング演出ID') specialcard = JsonCharField(default=list, verbose_name=u'特効カード', help_text=u'[[カードID,倍率],[カードID,倍率],...]') img_appeal = JsonCharField(default=list, verbose_name=u'訴求画像リスト', blank=True) @property def codename(self): return self.htmlname.split('/')[-1] def get_produce_castmasters(self, filters=None, order_by=None, using=settings.DB_DEFAULT): filter_dict = {'event_id': self.id} if isinstance(filters, dict): filter_dict.update(filters) masters = ProduceCastMaster.fetchValues(filters=filter_dict, order_by=order_by, using=using) if not masters: raise CabaretError(u'プロデュースキャストが設定されていません', code=CabaretError.Code.INVALID_MASTERDATA) return masters def get_pointprizes(self, point_min=1, point_max=None): return get_pointprizes(self.pointprizes, point_min, point_max)
class GachaHeaderMaster(BaseMaster): """一枚絵をスライド表示する画像設定. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ガチャID') header = JsonCharField(default=list, verbose_name=u'表示する画像')
class GachaSlideCastMaster(BaseMaster): """スライド表示するキャスト設定. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ガチャID') castlist = JsonCharField(default=list, verbose_name=u'表示するキャスト')
class ScoutEventTanzakuCastMaster(BaseMaster): """スカウトイベント逢引システムキャストマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = PositiveBigIntegerField(primary_key=True, verbose_name=u'ID') eventid = models.PositiveIntegerField(db_index=True, verbose_name=u'イベントマスターID') number = models.PositiveSmallIntegerField(default=0, verbose_name=u'イベント別通し番号', choices=[(i, i) for i in xrange(5)]) castname = models.CharField(max_length=64, verbose_name=u'キャストの名前') castthumb = models.CharField(max_length=128, verbose_name=u'キャスト画像(.png)', blank=True) castbg = models.CharField(max_length=128, verbose_name=u'キャスト背景画像(.png)', blank=True) castthumb_small = models.CharField(max_length=128, verbose_name=u'キャスト画像小(.png)', blank=True) tanzakuname = models.CharField(max_length=48, default=u'短冊', blank=True, verbose_name=u'短冊の名前') tanzakuunit = models.CharField(max_length=48, default=u'枚', blank=True, verbose_name=u'短冊の単位') tanzakuthumb = models.CharField(max_length=128, verbose_name=u'短冊画像(.png)', blank=True) prizes = JsonCharField(default=list, verbose_name=u'業績報酬テーブル') prize_text = models.PositiveIntegerField(default=0, verbose_name=u'業績報酬テキスト') tanzaku = models.PositiveSmallIntegerField(default=0, verbose_name=u'指名に必要な短冊数') tip_rate = models.PositiveSmallIntegerField(default=0, verbose_name=u'短冊1枚のチップ交換レート') tip_quota = models.PositiveSmallIntegerField(default=0, verbose_name=u'業績報酬のチップ規定数') @staticmethod def makeID(eventid, number): return (eventid << 32) + number @staticmethod def makeInstance(key): ins = ScoutEventTanzakuCastMaster() ins.id = key ins.eventid = int(key >> 32) ins.number = int(key & 0xffffffff) return ins
class BaseTreasureTable(BaseMaster): """宝箱テーブル. """ class Meta: abstract = True id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') name = models.CharField(max_length=48, verbose_name=u'テーブル名', help_text=u'アプリでは使用しません') thumb = models.CharField(max_length=48, verbose_name=u'宝箱Top画像') schedule = models.PositiveIntegerField(default=0, verbose_name=u'期間') table = JsonCharField(default=list, verbose_name=u'出現する宝箱')
class CabaClubMaster(BaseMaster): """キャバクラシステムの設定. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') week = models.PositiveIntegerField( default=0, unique=True, verbose_name=u'年と週', help_text=u'2015年5週目は201505,2015年10週目は201510') name = models.CharField(max_length=48, verbose_name=u'名前') customer_prizes = JsonCharField(default=list, verbose_name=u'集客数達成報酬', help_text=u'[[報酬ID,出現率(1-10000)],...]') customer_prize_text = models.PositiveIntegerField( default=0, verbose_name=u'集客数達成報酬文言ID') customer_prize_interval = models.PositiveIntegerField( default=0, verbose_name=u'集客数報酬獲得抽選の間隔') cr_correction = JsonCharField(default=dict, verbose_name=u'キャストレアリティ補正(%)') ctype_customer_correction = JsonCharField(default=dict, verbose_name=u'キャスト属性集客補正(%)') ctype_proceeds_correction = JsonCharField(default=dict, verbose_name=u'キャスト属性売上補正(%)') for attr in ('cr_correction', ): for rare in Defines.Rarity.LIST: exec """def get_{attr}_{name}(self): return self.{attr}.get('{rare}', 100)""".format( attr=attr, rare=rare, name=Defines.Rarity.NAMES[rare].lower()) exec """def set_{attr}_{name}(self, v): self.{attr}['{rare}']=v""".format(attr=attr, rare=rare, name=Defines.Rarity.NAMES[rare].lower()) for attr in ('ctype_customer_correction', 'ctype_proceeds_correction'): for ctype in Defines.CharacterType.LIST: exec """def get_{attr}_{ctype}(self): return self.{attr}.get('{ctype}', 100)""".format(attr=attr, ctype=ctype) exec """def set_{attr}_{ctype}(self, v): self.{attr}['{ctype}']=v""".format(attr=attr, ctype=ctype)
class BattleEventPresentContentMaster(BaseMasterWithThumbnail): """バトルイベントのポイントプレゼントの中身マスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') prizes = JsonCharField(default=list, verbose_name=u'報酬IDのリスト') prize_text = models.PositiveIntegerField(default=0, verbose_name=u'報酬の文言') pri = models.PositiveSmallIntegerField(default=0, verbose_name=u'一覧表示の優先度')
class PresentEveryoneRecord(BaseMaster): """実際に配付する全プレレコード. """ class Meta: app_label = settings_sub.APP_NAME abstract = False date = models.DateField(primary_key=True, verbose_name=u'配布日') mid_loginbonus = JsonCharField(default=list, verbose_name=u'全プレ(LB)のIDリスト') mid_mypage = JsonCharField(default=list, verbose_name=u'全プレ(マイページ)のIDリスト') @classmethod def pkey_to_str(cls, pkey): return pkey.strftime("%Y-%m-%d") @classmethod def str_to_pkey(cls, st): return DateTimeUtil.datetimeToDate(DateTimeUtil.strToDateTime( st, dtformat="%Y-%m-%d"), logintime=False)
class AccessBonusMaster(BaseMaster): """アクセス日数ボーナス. """ class Meta: app_label = settings_sub.APP_NAME abstract = False day = models.PositiveSmallIntegerField(primary_key=True, verbose_name=u'日数(0は毎日)') thumb = models.CharField(max_length=48, verbose_name=u'サムネイル') prizes = JsonCharField(default=list, verbose_name=u'報酬')
class PresentEveryoneBase(BaseMaster): """全プレのベース. """ class Meta: abstract = True id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') name = models.CharField(max_length=48, verbose_name=u'名前', help_text=u'アプリでは使用しません') prizes = JsonCharField(default=list, verbose_name=u'配付するもの') textid = models.PositiveIntegerField(verbose_name=u'プレゼントの文言')
class RankingGachaWholePrizeQueue(BaseModel): """ランキングガチャ総計pt報酬配布キュー. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = PositiveAutoField(primary_key=True, verbose_name=u'ID') boxid = models.PositiveIntegerField(verbose_name=u'BoxID') point = PositiveBigIntegerField(verbose_name=u'総計pt') prizes = JsonCharField(default=list, verbose_name=u'総計pt報酬') ctime = AppDateTimeField(default=OSAUtil.get_now, verbose_name=u'作成時間')
class PromotionPrizeMasterBase(BaseMasterWithName): """クロスプロモーション報酬マスターデータ. """ class Meta: abstract = True app_label = settings_sub.APP_NAME id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') rid = models.PositiveIntegerField(default=0, verbose_name=u'条件ID') schedule = models.PositiveIntegerField(default=0, verbose_name=u'スケジュール') prizes = JsonCharField(default=list, verbose_name=u'報酬') prize_text = models.PositiveIntegerField(default=0, verbose_name=u'報酬テキストID')
class LoginBonusSugorokuMapMaster(BaseMaster): """すごろくログインボーナスのマップ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') name = models.CharField(max_length=48, verbose_name=u'名前') effectname = models.CharField(max_length=64, verbose_name=u'演出名') prize = JsonCharField(default=list, verbose_name=u'達成済み報酬') prize_text = models.PositiveIntegerField(default=0, verbose_name=u'達成済み報酬テキストID')
class LoginBonusSugorokuMaster(BaseMaster): """すごろくログインボーナス. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveIntegerField(primary_key=True, verbose_name=u'ID') name = models.CharField(max_length=48, verbose_name=u'名前') maps = JsonCharField(default=list, verbose_name=u'使用するマップID') def getMapIDByLap(self, lap): return self.maps[lap % len(self.maps)]
class LevelUpBonusMaster(BaseMaster): """アイテムのマスターデータ. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = models.PositiveSmallIntegerField(primary_key=True, verbose_name=u'ID') version = models.PositiveSmallIntegerField(default=0, verbose_name=u'バージョン番号') level = models.PositiveSmallIntegerField(default=0, verbose_name=u'到達レベル') prize_id = JsonCharField(default=list, verbose_name=u'プライズIDのリスト') levelupbonus_text = models.PositiveIntegerField( default=0, verbose_name=u'レベルアップ達成ボーナス報酬文言')
class LoginBonusTimeLimitedDaysMaster(BaseMaster): """期限付きログインボーナス. """ class Meta: app_label = settings_sub.APP_NAME abstract = False id = PositiveBigIntegerField(primary_key=True, verbose_name=u'ID') mid = models.PositiveIntegerField(verbose_name=u'マスターID') day = models.PositiveSmallIntegerField(verbose_name=u'日数') thumb = models.CharField(default='', max_length=128, verbose_name=u'サムネイル') prizes = JsonCharField(default=list, verbose_name=u'報酬') # 演出用パラメータ. bg = models.CharField(max_length=96, verbose_name=u'背景画像', blank=True) text_logo = models.CharField(max_length=128, verbose_name=u'演出文言(ロゴ表示時)', blank=True) text_start = models.CharField(max_length=128, verbose_name=u'演出文言(開始)', blank=True) text_itemlist = models.CharField(max_length=128, verbose_name=u'演出文言(報酬一覧)', blank=True) text_itemget = models.CharField(max_length=128, verbose_name=u'演出文言(アイテム獲得)', blank=True) text_itemnext = models.CharField(max_length=128, verbose_name=u'演出文言(明日のアイテム)', blank=True) text_end = models.CharField(max_length=128, verbose_name=u'演出文言(終了,タッチ待ち)', blank=True) item_x = models.PositiveSmallIntegerField(verbose_name=u'アイテムの表示位置(x)', default=80) item_y = models.PositiveSmallIntegerField(verbose_name=u'アイテムの表示位置(y)', default=200) @staticmethod def makeID(mid, day): return (mid << 32) + day @classmethod def makeInstance(cls, key): model = cls() model.id = key model.mid = int(key >> 32) model.day = int(key & 0xffffffff) return model