zenno: lint fixes
This commit is contained in:
@@ -1,15 +1,17 @@
|
||||
import * as z from 'zod';
|
||||
|
||||
const Scenarios = z.array(z.object({
|
||||
scenario_id: z.int32(),
|
||||
name: z.string(),
|
||||
title: z.string(),
|
||||
}));
|
||||
const Scenarios = z.array(
|
||||
z.object({
|
||||
scenario_id: z.int32(),
|
||||
name: z.string(),
|
||||
title: z.string(),
|
||||
}),
|
||||
);
|
||||
|
||||
export type Scenario = z.infer<typeof Scenarios>[number];
|
||||
|
||||
export async function scenarios(): Promise<Scenario[]> {
|
||||
const r = await fetch('/api/global/scenario');
|
||||
const u = await r.json();
|
||||
return Scenarios.parse(u);
|
||||
const r = await fetch('/api/global/scenario');
|
||||
const u = await r.json();
|
||||
return Scenarios.parse(u);
|
||||
}
|
||||
|
||||
+396
-398
@@ -6,406 +6,404 @@ import * as bakushinSR from './testdata/support-20042-bakushin-SR.json';
|
||||
import * as bakushinSSR from './testdata/support-30083-bakushin-SSR.json';
|
||||
|
||||
test.for([
|
||||
{ rarity: support.Rarity.R, exp: 0, level: 1 },
|
||||
{ rarity: support.Rarity.R, exp: 5, level: 2 },
|
||||
{ rarity: support.Rarity.R, exp: 10, level: 2 },
|
||||
{ rarity: support.Rarity.R, exp: 40510, level: 40 },
|
||||
{ rarity: support.Rarity.SR, exp: 0, level: 1 },
|
||||
{ rarity: support.Rarity.SR, exp: 10, level: 2 },
|
||||
{ rarity: support.Rarity.SR, exp: 20, level: 2 },
|
||||
{ rarity: support.Rarity.SR, exp: 74990, level: 45 },
|
||||
{ rarity: support.Rarity.SSR, exp: 0, level: 1 },
|
||||
{ rarity: support.Rarity.SSR, exp: 15, level: 2 },
|
||||
{ rarity: support.Rarity.SSR, exp: 30, level: 2 },
|
||||
{ rarity: support.Rarity.SSR, exp: 118185, level: 50 },
|
||||
{ rarity: support.Rarity.R, exp: 0, level: 1 },
|
||||
{ rarity: support.Rarity.R, exp: 5, level: 2 },
|
||||
{ rarity: support.Rarity.R, exp: 10, level: 2 },
|
||||
{ rarity: support.Rarity.R, exp: 40510, level: 40 },
|
||||
{ rarity: support.Rarity.SR, exp: 0, level: 1 },
|
||||
{ rarity: support.Rarity.SR, exp: 10, level: 2 },
|
||||
{ rarity: support.Rarity.SR, exp: 20, level: 2 },
|
||||
{ rarity: support.Rarity.SR, exp: 74990, level: 45 },
|
||||
{ rarity: support.Rarity.SSR, exp: 0, level: 1 },
|
||||
{ rarity: support.Rarity.SSR, exp: 15, level: 2 },
|
||||
{ rarity: support.Rarity.SSR, exp: 30, level: 2 },
|
||||
{ rarity: support.Rarity.SSR, exp: 118185, level: 50 },
|
||||
])('level($rarity, $exp) -> $level', ({ rarity, exp, level }) => expect(support.level(rarity, exp)).toBe(level));
|
||||
|
||||
describe('effects', () => {
|
||||
describe('Bakushin R', () => {
|
||||
test('level 1', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 1);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 5 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 0 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 2', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 2);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 5 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 0 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 5', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 5);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 6 },
|
||||
{ type: support.EffectType.MoodEffect, value: 10 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 10 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 10 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 2 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 5 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 6', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 6);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 6 },
|
||||
{ type: support.EffectType.MoodEffect, value: 10 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 10 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 10 },
|
||||
{ type: support.EffectType.RaceBonus, value: 2 },
|
||||
{ type: support.EffectType.FanBonus, value: 3 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 6 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 39', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 39);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.MoodEffect, value: 25 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 20 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 5 },
|
||||
{ type: support.EffectType.FanBonus, value: 14 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 35 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 40', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 40);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.MoodEffect, value: 25 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 1 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 20 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 5 },
|
||||
{ type: support.EffectType.FanBonus, value: 15 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 35 },
|
||||
],
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Bakushin R', () => {
|
||||
test('level 1', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 1);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 5 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 0 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 2', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 2);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 5 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 0 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 5', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 5);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 6 },
|
||||
{ type: support.EffectType.MoodEffect, value: 10 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 10 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 10 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 2 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 5 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 6', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 6);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 6 },
|
||||
{ type: support.EffectType.MoodEffect, value: 10 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 10 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 10 },
|
||||
{ type: support.EffectType.RaceBonus, value: 2 },
|
||||
{ type: support.EffectType.FanBonus, value: 3 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 6 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 39', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 39);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.MoodEffect, value: 25 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 20 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 5 },
|
||||
{ type: support.EffectType.FanBonus, value: 14 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 35 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 40', () => {
|
||||
const got = support.effects(bakushinR as support.SupportCard, 40);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.MoodEffect, value: 25 },
|
||||
{ type: support.EffectType.SpeedBonus, value: 1 },
|
||||
{ type: support.EffectType.InitialSpeed, value: 20 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 5 },
|
||||
{ type: support.EffectType.FanBonus, value: 15 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 35 },
|
||||
],
|
||||
});
|
||||
});
|
||||
});
|
||||
describe('Bakushin SR', () => {
|
||||
test('level 1', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 1);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 10 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 0 },
|
||||
{ type: support.EffectType.InitialPower, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 0 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 2', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 2);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 10 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 0 },
|
||||
{ type: support.EffectType.InitialPower, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 0 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 5', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 5);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 11 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 0 },
|
||||
{ type: support.EffectType.InitialPower, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 3 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 5 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 24', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 24);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 5 },
|
||||
{ type: support.EffectType.InitialPower, value: 15 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 4 },
|
||||
{ type: support.EffectType.FanBonus, value: 14 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 33 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 25', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 25);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 5 },
|
||||
{ type: support.EffectType.InitialPower, value: 15 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 5 },
|
||||
{ type: support.EffectType.FanBonus, value: 15 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 35 },
|
||||
],
|
||||
unique: {
|
||||
name: 'The Perfect Morning Greeting!',
|
||||
description: 'Friendship Bonus and Specialty Priority',
|
||||
card_level: 25,
|
||||
type: support.EffectType.FriendshipBonus,
|
||||
args: [10],
|
||||
type2: support.EffectType.SpecialtyPriority,
|
||||
args2: [20],
|
||||
idle_mode_sub_rate: 0,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
test('level 44', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 44);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 20 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 5 },
|
||||
{ type: support.EffectType.InitialPower, value: 20 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 9 },
|
||||
{ type: support.EffectType.FanBonus, value: 19 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 49 },
|
||||
],
|
||||
unique: {
|
||||
name: 'The Perfect Morning Greeting!',
|
||||
description: 'Friendship Bonus and Specialty Priority',
|
||||
card_level: 25,
|
||||
type: support.EffectType.FriendshipBonus,
|
||||
args: [10],
|
||||
type2: support.EffectType.SpecialtyPriority,
|
||||
args2: [20],
|
||||
idle_mode_sub_rate: 0,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
test('level 45', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 45);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 20 },
|
||||
{ type: support.EffectType.PowerBonus, value: 1 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 5 },
|
||||
{ type: support.EffectType.InitialPower, value: 20 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 10 },
|
||||
{ type: support.EffectType.FanBonus, value: 20 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 50 },
|
||||
],
|
||||
unique: {
|
||||
name: 'The Perfect Morning Greeting!',
|
||||
description: 'Friendship Bonus and Specialty Priority',
|
||||
card_level: 25,
|
||||
type: support.EffectType.FriendshipBonus,
|
||||
args: [10],
|
||||
type2: support.EffectType.SpecialtyPriority,
|
||||
args2: [20],
|
||||
idle_mode_sub_rate: 0,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Bakushin SR', () => {
|
||||
test('level 1', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 1);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 10 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 0 },
|
||||
{ type: support.EffectType.InitialPower, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 0 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 2', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 2);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 10 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 0 },
|
||||
{ type: support.EffectType.InitialPower, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 0 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 5', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 5);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 11 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 0 },
|
||||
{ type: support.EffectType.InitialPower, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 3 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 5 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 24', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 24);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 5 },
|
||||
{ type: support.EffectType.InitialPower, value: 15 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 4 },
|
||||
{ type: support.EffectType.FanBonus, value: 14 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 33 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 25', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 25);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 5 },
|
||||
{ type: support.EffectType.InitialPower, value: 15 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 5 },
|
||||
{ type: support.EffectType.FanBonus, value: 15 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 35 },
|
||||
],
|
||||
unique: {
|
||||
name: 'The Perfect Morning Greeting!',
|
||||
description: 'Friendship Bonus and Specialty Priority',
|
||||
card_level: 25,
|
||||
type: support.EffectType.FriendshipBonus,
|
||||
args: [10],
|
||||
type2: support.EffectType.SpecialtyPriority,
|
||||
args2: [20],
|
||||
idle_mode_sub_rate: 0,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
test('level 44', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 44);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 20 },
|
||||
{ type: support.EffectType.PowerBonus, value: 0 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 5 },
|
||||
{ type: support.EffectType.InitialPower, value: 20 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 9 },
|
||||
{ type: support.EffectType.FanBonus, value: 19 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 49 },
|
||||
],
|
||||
unique: {
|
||||
name: 'The Perfect Morning Greeting!',
|
||||
description: 'Friendship Bonus and Specialty Priority',
|
||||
card_level: 25,
|
||||
type: support.EffectType.FriendshipBonus,
|
||||
args: [10],
|
||||
type2: support.EffectType.SpecialtyPriority,
|
||||
args2: [20],
|
||||
idle_mode_sub_rate: 0,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
test('level 45', () => {
|
||||
const got = support.effects(bakushinSR as support.SupportCard, 45);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 20 },
|
||||
{ type: support.EffectType.PowerBonus, value: 1 },
|
||||
{ type: support.EffectType.TrainingEffectiveness, value: 5 },
|
||||
{ type: support.EffectType.InitialPower, value: 20 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 10 },
|
||||
{ type: support.EffectType.FanBonus, value: 20 },
|
||||
{ type: support.EffectType.SpecialtyPriority, value: 50 },
|
||||
],
|
||||
unique: {
|
||||
name: 'The Perfect Morning Greeting!',
|
||||
description: 'Friendship Bonus and Specialty Priority',
|
||||
card_level: 25,
|
||||
type: support.EffectType.FriendshipBonus,
|
||||
args: [10],
|
||||
type2: support.EffectType.SpecialtyPriority,
|
||||
args2: [20],
|
||||
idle_mode_sub_rate: 0,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
})
|
||||
|
||||
describe('Bakushin SSR', () => {
|
||||
test('level 1', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 1);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 10 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 5 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 2', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 2);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 10 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 6 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 5', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 5);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 12 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 2 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 9 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 10', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 10);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 14 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 10 },
|
||||
{ type: support.EffectType.RaceBonus, value: 2 },
|
||||
{ type: support.EffectType.FanBonus, value: 5 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 15 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 11', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 11);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 10 },
|
||||
{ type: support.EffectType.RaceBonus, value: 2 },
|
||||
{ type: support.EffectType.FanBonus, value: 5 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 17 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 30', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 30);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 25 },
|
||||
{ type: support.EffectType.MoodEffect, value: 20 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 5 },
|
||||
{ type: support.EffectType.FanBonus, value: 15 },
|
||||
{ type: support.EffectType.HintLevels, value: 2 },
|
||||
{ type: support.EffectType.HintFrequency, value: 40 },
|
||||
],
|
||||
unique: {
|
||||
name: 'Super! Sonic! Flower Power!',
|
||||
description: 'Increases Training Effectiveness when not on preferred training. (Friendship 80+)',
|
||||
card_level: 30,
|
||||
type: support.EffectType.UniqueOffSpecialty,
|
||||
args: [80, 20],
|
||||
idle_mode_sub_rate: 30,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
test('level 49', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 49);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 34 },
|
||||
{ type: support.EffectType.MoodEffect, value: 30 },
|
||||
{ type: support.EffectType.GutsBonus, value: 1 },
|
||||
{ type: support.EffectType.InitialGuts, value: 27 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 25 },
|
||||
{ type: support.EffectType.RaceBonus, value: 9 },
|
||||
{ type: support.EffectType.FanBonus, value: 19 },
|
||||
{ type: support.EffectType.HintLevels, value: 2 },
|
||||
{ type: support.EffectType.HintFrequency, value: 49 },
|
||||
],
|
||||
unique: {
|
||||
name: 'Super! Sonic! Flower Power!',
|
||||
description: 'Increases Training Effectiveness when not on preferred training. (Friendship 80+)',
|
||||
card_level: 30,
|
||||
type: support.EffectType.UniqueOffSpecialty,
|
||||
args: [80, 20],
|
||||
idle_mode_sub_rate: 30,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
test('level 50', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 50);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 35 },
|
||||
{ type: support.EffectType.MoodEffect, value: 30 },
|
||||
{ type: support.EffectType.GutsBonus, value: 1 },
|
||||
{ type: support.EffectType.InitialGuts, value: 30 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 25 },
|
||||
{ type: support.EffectType.RaceBonus, value: 10 },
|
||||
{ type: support.EffectType.FanBonus, value: 20 },
|
||||
{ type: support.EffectType.HintLevels, value: 3 },
|
||||
{ type: support.EffectType.HintFrequency, value: 50 },
|
||||
],
|
||||
unique: {
|
||||
name: 'Super! Sonic! Flower Power!',
|
||||
description: 'Increases Training Effectiveness when not on preferred training. (Friendship 80+)',
|
||||
card_level: 30,
|
||||
type: support.EffectType.UniqueOffSpecialty,
|
||||
args: [80, 20],
|
||||
idle_mode_sub_rate: 30,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
describe('Bakushin SSR', () => {
|
||||
test('level 1', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 1);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 10 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 5 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 2', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 2);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 10 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 1 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 6 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 5', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 5);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 12 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 0 },
|
||||
{ type: support.EffectType.RaceBonus, value: 1 },
|
||||
{ type: support.EffectType.FanBonus, value: 2 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 9 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 10', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 10);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 14 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 10 },
|
||||
{ type: support.EffectType.RaceBonus, value: 2 },
|
||||
{ type: support.EffectType.FanBonus, value: 5 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 15 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 11', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 11);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 15 },
|
||||
{ type: support.EffectType.MoodEffect, value: 0 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 10 },
|
||||
{ type: support.EffectType.RaceBonus, value: 2 },
|
||||
{ type: support.EffectType.FanBonus, value: 5 },
|
||||
{ type: support.EffectType.HintLevels, value: 1 },
|
||||
{ type: support.EffectType.HintFrequency, value: 17 },
|
||||
],
|
||||
});
|
||||
});
|
||||
test('level 30', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 30);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 25 },
|
||||
{ type: support.EffectType.MoodEffect, value: 20 },
|
||||
{ type: support.EffectType.GutsBonus, value: 0 },
|
||||
{ type: support.EffectType.InitialGuts, value: 0 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 20 },
|
||||
{ type: support.EffectType.RaceBonus, value: 5 },
|
||||
{ type: support.EffectType.FanBonus, value: 15 },
|
||||
{ type: support.EffectType.HintLevels, value: 2 },
|
||||
{ type: support.EffectType.HintFrequency, value: 40 },
|
||||
],
|
||||
unique: {
|
||||
name: 'Super! Sonic! Flower Power!',
|
||||
description: 'Increases Training Effectiveness when not on preferred training. (Friendship 80+)',
|
||||
card_level: 30,
|
||||
type: support.EffectType.UniqueOffSpecialty,
|
||||
args: [80, 20],
|
||||
idle_mode_sub_rate: 30,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
test('level 49', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 49);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 34 },
|
||||
{ type: support.EffectType.MoodEffect, value: 30 },
|
||||
{ type: support.EffectType.GutsBonus, value: 1 },
|
||||
{ type: support.EffectType.InitialGuts, value: 27 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 25 },
|
||||
{ type: support.EffectType.RaceBonus, value: 9 },
|
||||
{ type: support.EffectType.FanBonus, value: 19 },
|
||||
{ type: support.EffectType.HintLevels, value: 2 },
|
||||
{ type: support.EffectType.HintFrequency, value: 49 },
|
||||
],
|
||||
unique: {
|
||||
name: 'Super! Sonic! Flower Power!',
|
||||
description: 'Increases Training Effectiveness when not on preferred training. (Friendship 80+)',
|
||||
card_level: 30,
|
||||
type: support.EffectType.UniqueOffSpecialty,
|
||||
args: [80, 20],
|
||||
idle_mode_sub_rate: 30,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
test('level 50', () => {
|
||||
const got = support.effects(bakushinSSR as support.SupportCard, 50);
|
||||
expect(got).toStrictEqual({
|
||||
effects: [
|
||||
{ type: support.EffectType.FriendshipBonus, value: 35 },
|
||||
{ type: support.EffectType.MoodEffect, value: 30 },
|
||||
{ type: support.EffectType.GutsBonus, value: 1 },
|
||||
{ type: support.EffectType.InitialGuts, value: 30 },
|
||||
{ type: support.EffectType.InitialFriendship, value: 25 },
|
||||
{ type: support.EffectType.RaceBonus, value: 10 },
|
||||
{ type: support.EffectType.FanBonus, value: 20 },
|
||||
{ type: support.EffectType.HintLevels, value: 3 },
|
||||
{ type: support.EffectType.HintFrequency, value: 50 },
|
||||
],
|
||||
unique: {
|
||||
name: 'Super! Sonic! Flower Power!',
|
||||
description: 'Increases Training Effectiveness when not on preferred training. (Friendship 80+)',
|
||||
card_level: 30,
|
||||
type: support.EffectType.UniqueOffSpecialty,
|
||||
args: [80, 20],
|
||||
idle_mode_sub_rate: 30,
|
||||
} satisfies support.UniqueEffect,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+284
-293
@@ -4,227 +4,215 @@ import * as support_card_level from './support_card_level.json';
|
||||
* Support card definitions.
|
||||
*/
|
||||
export interface SupportCard {
|
||||
/**
|
||||
* Support card ID.
|
||||
*/
|
||||
id: number;
|
||||
/**
|
||||
* Support card name including variant, e.g.
|
||||
* `[The Brightest Star in Japan!] Special Week`.
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* ID of the card's representative character.
|
||||
*/
|
||||
chara_id: number;
|
||||
/**
|
||||
* Name of the card's character.
|
||||
* May differ from the name of the `chara_id` character.
|
||||
*/
|
||||
chara_name: string;
|
||||
/**
|
||||
* Support card rarity.
|
||||
*/
|
||||
rarity: Rarity;
|
||||
/**
|
||||
* Support card specialty.
|
||||
*/
|
||||
specialty: Specialty;
|
||||
/**
|
||||
* Blanket support card type.
|
||||
*/
|
||||
type: Type;
|
||||
/**
|
||||
* Support card effects per five level increment.
|
||||
*/
|
||||
effects: [
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
Effect[],
|
||||
];
|
||||
/**
|
||||
* Unique effect, for cards that have them.
|
||||
*/
|
||||
unique_effect?: UniqueEffect;
|
||||
/**
|
||||
* Hints that the card can yield.
|
||||
*/
|
||||
hints: Hint[];
|
||||
/**
|
||||
* Number of recreation events available with the card,
|
||||
* not including recreation with the individual characters in a group.
|
||||
*/
|
||||
outings?: number;
|
||||
/**
|
||||
* Support card ID.
|
||||
*/
|
||||
id: number;
|
||||
/**
|
||||
* Support card name including variant, e.g.
|
||||
* `[The Brightest Star in Japan!] Special Week`.
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* ID of the card's representative character.
|
||||
*/
|
||||
chara_id: number;
|
||||
/**
|
||||
* Name of the card's character.
|
||||
* May differ from the name of the `chara_id` character.
|
||||
*/
|
||||
chara_name: string;
|
||||
/**
|
||||
* Support card rarity.
|
||||
*/
|
||||
rarity: Rarity;
|
||||
/**
|
||||
* Support card specialty.
|
||||
*/
|
||||
specialty: Specialty;
|
||||
/**
|
||||
* Blanket support card type.
|
||||
*/
|
||||
type: Type;
|
||||
/**
|
||||
* Support card effects per five level increment.
|
||||
*/
|
||||
effects: [Effect[], Effect[], Effect[], Effect[], Effect[], Effect[], Effect[], Effect[], Effect[], Effect[], Effect[]];
|
||||
/**
|
||||
* Unique effect, for cards that have them.
|
||||
*/
|
||||
unique_effect?: UniqueEffect;
|
||||
/**
|
||||
* Hints that the card can yield.
|
||||
*/
|
||||
hints: Hint[];
|
||||
/**
|
||||
* Number of recreation events available with the card,
|
||||
* not including recreation with the individual characters in a group.
|
||||
*/
|
||||
outings?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Support card rarity levels.
|
||||
*/
|
||||
export enum Rarity {
|
||||
R = 1,
|
||||
SR = 2,
|
||||
SSR = 3,
|
||||
R = 1,
|
||||
SR = 2,
|
||||
SSR = 3,
|
||||
}
|
||||
|
||||
/**
|
||||
* Support card specialty attribute.
|
||||
*/
|
||||
export enum Specialty {
|
||||
None = 0, // for pals and groups
|
||||
Speed = 101,
|
||||
Power = 102,
|
||||
Guts = 103,
|
||||
Stamina = 105,
|
||||
Wit = 106,
|
||||
None = 0, // for pals and groups
|
||||
Speed = 101,
|
||||
Power = 102,
|
||||
Guts = 103,
|
||||
Stamina = 105,
|
||||
Wit = 106,
|
||||
}
|
||||
|
||||
/**
|
||||
* Support card types.
|
||||
*/
|
||||
export enum Type {
|
||||
Normal = 1,
|
||||
Pal = 2,
|
||||
Group = 3,
|
||||
Normal = 1,
|
||||
Pal = 2,
|
||||
Group = 3,
|
||||
}
|
||||
|
||||
/**
|
||||
* Support card basic effects.
|
||||
*/
|
||||
export interface Effect {
|
||||
/**
|
||||
* Type of the effect.
|
||||
*/
|
||||
type: EffectType;
|
||||
/**
|
||||
* When positive, the amount of the effect.
|
||||
* When -1, interpolate between the previous and next nonnegative values.
|
||||
*/
|
||||
value: number;
|
||||
/**
|
||||
* Type of the effect.
|
||||
*/
|
||||
type: EffectType;
|
||||
/**
|
||||
* When positive, the amount of the effect.
|
||||
* When -1, interpolate between the previous and next nonnegative values.
|
||||
*/
|
||||
value: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Support card unique effects.
|
||||
*/
|
||||
export interface UniqueEffect {
|
||||
/**
|
||||
* Name of the unique effect.
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* In-game description of the effect.
|
||||
*/
|
||||
description: string;
|
||||
/**
|
||||
* Card level at which the unique effect unlocks.
|
||||
*/
|
||||
card_level: number;
|
||||
/**
|
||||
* First type of the effect.
|
||||
*/
|
||||
type: EffectType;
|
||||
/**
|
||||
* Values parameterizing the first type.
|
||||
*/
|
||||
args: number[];
|
||||
/**
|
||||
* Second type of the effect, if applicable.
|
||||
*/
|
||||
type2?: EffectType;
|
||||
/**
|
||||
* Values parameterizing the second type.
|
||||
*/
|
||||
args2?: number[];
|
||||
/**
|
||||
* Mystery parameter that one day we might figure out.
|
||||
*/
|
||||
idle_mode_sub_rate: number;
|
||||
/**
|
||||
* Name of the unique effect.
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* In-game description of the effect.
|
||||
*/
|
||||
description: string;
|
||||
/**
|
||||
* Card level at which the unique effect unlocks.
|
||||
*/
|
||||
card_level: number;
|
||||
/**
|
||||
* First type of the effect.
|
||||
*/
|
||||
type: EffectType;
|
||||
/**
|
||||
* Values parameterizing the first type.
|
||||
*/
|
||||
args: number[];
|
||||
/**
|
||||
* Second type of the effect, if applicable.
|
||||
*/
|
||||
type2?: EffectType;
|
||||
/**
|
||||
* Values parameterizing the second type.
|
||||
*/
|
||||
args2?: number[];
|
||||
/**
|
||||
* Mystery parameter that one day we might figure out.
|
||||
*/
|
||||
idle_mode_sub_rate: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Basic and unique effect types.
|
||||
*/
|
||||
export enum EffectType {
|
||||
FriendshipBonus = 1,
|
||||
MoodEffect = 2,
|
||||
SpeedBonus = 3,
|
||||
StaminaBonus = 4,
|
||||
PowerBonus = 5,
|
||||
GutsBonus = 6,
|
||||
WitBonus = 7,
|
||||
TrainingEffectiveness = 8,
|
||||
InitialSpeed = 9,
|
||||
InitialStamina = 10,
|
||||
InitialPower = 11,
|
||||
InitialGuts = 12,
|
||||
InitialWit = 13,
|
||||
InitialFriendship = 14,
|
||||
RaceBonus = 15,
|
||||
FanBonus = 16,
|
||||
HintLevels = 17,
|
||||
HintFrequency = 18,
|
||||
SpecialtyPriority = 19,
|
||||
MaxSpeed = 20,
|
||||
MaxStamina = 21,
|
||||
MaxPower = 22,
|
||||
MaxGuts = 23,
|
||||
MaxWit = 24,
|
||||
EventRecovery = 25,
|
||||
EventEffectiveness = 26,
|
||||
FailureProtection = 27,
|
||||
EnergyCostReduction = 28,
|
||||
MinigameEffectiveness = 29,
|
||||
SkillPointBonus = 30,
|
||||
WitFriendshipRecovery = 31,
|
||||
FriendshipBonus = 1,
|
||||
MoodEffect = 2,
|
||||
SpeedBonus = 3,
|
||||
StaminaBonus = 4,
|
||||
PowerBonus = 5,
|
||||
GutsBonus = 6,
|
||||
WitBonus = 7,
|
||||
TrainingEffectiveness = 8,
|
||||
InitialSpeed = 9,
|
||||
InitialStamina = 10,
|
||||
InitialPower = 11,
|
||||
InitialGuts = 12,
|
||||
InitialWit = 13,
|
||||
InitialFriendship = 14,
|
||||
RaceBonus = 15,
|
||||
FanBonus = 16,
|
||||
HintLevels = 17,
|
||||
HintFrequency = 18,
|
||||
SpecialtyPriority = 19,
|
||||
MaxSpeed = 20,
|
||||
MaxStamina = 21,
|
||||
MaxPower = 22,
|
||||
MaxGuts = 23,
|
||||
MaxWit = 24,
|
||||
EventRecovery = 25,
|
||||
EventEffectiveness = 26,
|
||||
FailureProtection = 27,
|
||||
EnergyCostReduction = 28,
|
||||
MinigameEffectiveness = 29,
|
||||
SkillPointBonus = 30,
|
||||
WitFriendshipRecovery = 31,
|
||||
|
||||
UniqueFriendshipThreshold = 101,
|
||||
UniqueOffSpecialty = 102,
|
||||
UniqueColorThresholdTrainingEffectiveness = 103,
|
||||
UniqueFanScalingTrainingEffectiveness = 104,
|
||||
UniqueColorInitialStats = 105,
|
||||
UniqueRainbowStack = 106,
|
||||
UniqueLowEnergyScaling = 107,
|
||||
UniqueMaxEnergyScaling = 108,
|
||||
UniqueTotalFriendship = 109,
|
||||
UniqueCardCount = 110,
|
||||
UniqueFacilityLevel = 111,
|
||||
UniqueDisableFailure = 112,
|
||||
UniqueFriendshipTrainingAdditionalEffect = 113,
|
||||
UniqueFriendshipThreshold = 101,
|
||||
UniqueOffSpecialty = 102,
|
||||
UniqueColorThresholdTrainingEffectiveness = 103,
|
||||
UniqueFanScalingTrainingEffectiveness = 104,
|
||||
UniqueColorInitialStats = 105,
|
||||
UniqueRainbowStack = 106,
|
||||
UniqueLowEnergyScaling = 107,
|
||||
UniqueMaxEnergyScaling = 108,
|
||||
UniqueTotalFriendship = 109,
|
||||
UniqueCardCount = 110,
|
||||
UniqueFacilityLevel = 111,
|
||||
UniqueDisableFailure = 112,
|
||||
UniqueFriendshipTrainingAdditionalEffect = 113,
|
||||
}
|
||||
|
||||
/**
|
||||
* Hint event bonuses.
|
||||
*/
|
||||
export interface Hint {
|
||||
skill_id?: number;
|
||||
speed?: number;
|
||||
stamina?: number;
|
||||
power?: number;
|
||||
guts?: number;
|
||||
wit?: number;
|
||||
sp?: number;
|
||||
skill_id?: number;
|
||||
speed?: number;
|
||||
stamina?: number;
|
||||
power?: number;
|
||||
guts?: number;
|
||||
wit?: number;
|
||||
sp?: number;
|
||||
}
|
||||
|
||||
export async function supports(): Promise<SupportCard[]> {
|
||||
const resp = await fetch('/api/global/support');
|
||||
return resp.json();
|
||||
const resp = await fetch('/api/global/support');
|
||||
return resp.json();
|
||||
}
|
||||
|
||||
export const SPECIALTY_ICON = {
|
||||
Speed: 0,
|
||||
Stamina: 1,
|
||||
Power: 2,
|
||||
Guts: 3,
|
||||
Wit: 4,
|
||||
Pal: 5,
|
||||
Group: 6,
|
||||
Speed: 0,
|
||||
Stamina: 1,
|
||||
Power: 2,
|
||||
Guts: 3,
|
||||
Wit: 4,
|
||||
Pal: 5,
|
||||
Group: 6,
|
||||
} as const;
|
||||
|
||||
/**
|
||||
@@ -234,135 +222,138 @@ export const SPECIALTY_ICON = {
|
||||
* @returns Current support card effects and its unique effect if active at the given level.
|
||||
*/
|
||||
export function effects(card: SupportCard, level: number) {
|
||||
const j = Math.floor(level / 5);
|
||||
const k = Math.ceil(level / 5);
|
||||
const effects = card.effects[0].map((e) => {
|
||||
const s = card.effects.map((l) => l.find((f) => f.type === e.type)!);
|
||||
const left = s.findLastIndex((f, i) => i <= j && f.value >= 0);
|
||||
const right = s.findIndex((f, i) => k <= i && f.value >= 0);
|
||||
if (left < 0) {
|
||||
// Effect isn't yet active.
|
||||
return { type: e.type, value: 0 };
|
||||
}
|
||||
if (right < 0) {
|
||||
// Effect is at its maximum value.
|
||||
return { type: e.type, value: s[left]!.value };
|
||||
}
|
||||
if (left === right) {
|
||||
// The current level is an interpolation boundary.
|
||||
// Don't try to interpolate.
|
||||
return { type: e.type, value: s[left]!.value };
|
||||
}
|
||||
const xl = Math.max(left * 5, 1);
|
||||
const xr = Math.max(right * 5, 1);
|
||||
const lo = s[left]!.value;
|
||||
const hi = s[right]!.value;
|
||||
const value = Math.floor((hi * (level - xl) + lo * (xr - level)) / (xr - xl));
|
||||
return { type: e.type, value };
|
||||
});
|
||||
if (card.unique_effect != null && level >= card.unique_effect.card_level) {
|
||||
return { effects, unique: card.unique_effect }
|
||||
}
|
||||
return { effects };
|
||||
const j = Math.floor(level / 5);
|
||||
const k = Math.ceil(level / 5);
|
||||
const effects = card.effects[0].map((e) => {
|
||||
const s = card.effects.map((l) => l.find((f) => f.type === e.type)!);
|
||||
const left = s.findLastIndex((f, i) => i <= j && f.value >= 0);
|
||||
const right = s.findIndex((f, i) => k <= i && f.value >= 0);
|
||||
if (left < 0) {
|
||||
// Effect isn't yet active.
|
||||
return { type: e.type, value: 0 };
|
||||
}
|
||||
if (right < 0) {
|
||||
// Effect is at its maximum value.
|
||||
return { type: e.type, value: s[left]!.value };
|
||||
}
|
||||
if (left === right) {
|
||||
// The current level is an interpolation boundary.
|
||||
// Don't try to interpolate.
|
||||
return { type: e.type, value: s[left]!.value };
|
||||
}
|
||||
const xl = Math.max(left * 5, 1);
|
||||
const xr = Math.max(right * 5, 1);
|
||||
const lo = s[left]!.value;
|
||||
const hi = s[right]!.value;
|
||||
const value = Math.floor((hi * (level - xl) + lo * (xr - level)) / (xr - xl));
|
||||
return { type: e.type, value };
|
||||
});
|
||||
if (card.unique_effect != null && level >= card.unique_effect.card_level) {
|
||||
return { effects, unique: card.unique_effect };
|
||||
}
|
||||
return { effects };
|
||||
}
|
||||
|
||||
export function level(rarity: Rarity, exp: number) {
|
||||
// We use the ! assertion because we want an error when exp is nonsense.
|
||||
return support_card_level.levels.findLast((l) => l.rarity === rarity && l.exp <= exp)!.level;
|
||||
// We use the ! assertion because we want an error when exp is nonsense.
|
||||
return support_card_level.levels.findLast((l) => l.rarity === rarity && l.exp <= exp)!.level;
|
||||
}
|
||||
|
||||
function singleUniqueEffects(type: EffectType, args: number[], deck: SupportCard[]): Effect[] {
|
||||
switch (type) {
|
||||
case EffectType.FriendshipBonus:
|
||||
case EffectType.MoodEffect:
|
||||
case EffectType.SpeedBonus:
|
||||
case EffectType.StaminaBonus:
|
||||
case EffectType.PowerBonus:
|
||||
case EffectType.GutsBonus:
|
||||
case EffectType.WitBonus:
|
||||
case EffectType.TrainingEffectiveness:
|
||||
case EffectType.InitialSpeed:
|
||||
case EffectType.InitialStamina:
|
||||
case EffectType.InitialPower:
|
||||
case EffectType.InitialGuts:
|
||||
case EffectType.InitialWit:
|
||||
case EffectType.InitialFriendship:
|
||||
case EffectType.RaceBonus:
|
||||
case EffectType.FanBonus:
|
||||
case EffectType.HintLevels:
|
||||
case EffectType.HintFrequency:
|
||||
case EffectType.SpecialtyPriority:
|
||||
case EffectType.MaxSpeed:
|
||||
case EffectType.MaxStamina:
|
||||
case EffectType.MaxPower:
|
||||
case EffectType.MaxGuts:
|
||||
case EffectType.MaxWit:
|
||||
case EffectType.EventRecovery:
|
||||
case EffectType.EventEffectiveness:
|
||||
case EffectType.FailureProtection:
|
||||
case EffectType.EnergyCostReduction:
|
||||
case EffectType.MinigameEffectiveness:
|
||||
case EffectType.SkillPointBonus:
|
||||
case EffectType.WitFriendshipRecovery:
|
||||
return [{ type, value: args[0] }];
|
||||
switch (type) {
|
||||
case EffectType.FriendshipBonus:
|
||||
case EffectType.MoodEffect:
|
||||
case EffectType.SpeedBonus:
|
||||
case EffectType.StaminaBonus:
|
||||
case EffectType.PowerBonus:
|
||||
case EffectType.GutsBonus:
|
||||
case EffectType.WitBonus:
|
||||
case EffectType.TrainingEffectiveness:
|
||||
case EffectType.InitialSpeed:
|
||||
case EffectType.InitialStamina:
|
||||
case EffectType.InitialPower:
|
||||
case EffectType.InitialGuts:
|
||||
case EffectType.InitialWit:
|
||||
case EffectType.InitialFriendship:
|
||||
case EffectType.RaceBonus:
|
||||
case EffectType.FanBonus:
|
||||
case EffectType.HintLevels:
|
||||
case EffectType.HintFrequency:
|
||||
case EffectType.SpecialtyPriority:
|
||||
case EffectType.MaxSpeed:
|
||||
case EffectType.MaxStamina:
|
||||
case EffectType.MaxPower:
|
||||
case EffectType.MaxGuts:
|
||||
case EffectType.MaxWit:
|
||||
case EffectType.EventRecovery:
|
||||
case EffectType.EventEffectiveness:
|
||||
case EffectType.FailureProtection:
|
||||
case EffectType.EnergyCostReduction:
|
||||
case EffectType.MinigameEffectiveness:
|
||||
case EffectType.SkillPointBonus:
|
||||
case EffectType.WitFriendshipRecovery:
|
||||
return [{ type, value: args[0] }];
|
||||
|
||||
case EffectType.UniqueFriendshipThreshold:
|
||||
return [{ type: args[1], value: args[2] }, { type: args[3], value: args[4] }];
|
||||
case EffectType.UniqueOffSpecialty:
|
||||
return [{ type: EffectType.TrainingEffectiveness, value: args[1] }];
|
||||
case EffectType.UniqueColorThresholdTrainingEffectiveness:
|
||||
if (new Set(deck.map((card) => card.specialty)).size < args[0]) {
|
||||
return [];
|
||||
}
|
||||
return [{ type: EffectType.TrainingEffectiveness, value: args[1] }];
|
||||
case EffectType.UniqueFanScalingTrainingEffectiveness:
|
||||
return [{ type: EffectType.TrainingEffectiveness, value: args[1] }]
|
||||
case EffectType.UniqueColorInitialStats:
|
||||
return deck.flatMap((card) => {
|
||||
switch (card.specialty) {
|
||||
case Specialty.Speed:
|
||||
return [{ type: EffectType.InitialSpeed, value: args[0] }];
|
||||
case Specialty.Power:
|
||||
return [{ type: EffectType.InitialPower, value: args[0] }];
|
||||
case Specialty.Guts:
|
||||
return [{ type: EffectType.InitialGuts, value: args[0] }];
|
||||
case Specialty.Stamina:
|
||||
return [{ type: EffectType.InitialStamina, value: args[0] }];
|
||||
case Specialty.Wit:
|
||||
return [{ type: EffectType.InitialWit, value: args[0] }];
|
||||
default:
|
||||
return [
|
||||
{ type: EffectType.InitialSpeed, value: args[1] },
|
||||
{ type: EffectType.InitialStamina, value: args[1] },
|
||||
{ type: EffectType.InitialPower, value: args[1] },
|
||||
{ type: EffectType.InitialGuts, value: args[1] },
|
||||
{ type: EffectType.InitialWit, value: args[1] },
|
||||
];
|
||||
}
|
||||
})
|
||||
case EffectType.UniqueRainbowStack:
|
||||
return [{ type: args[1], value: args[0] * args[2] }];
|
||||
case EffectType.UniqueLowEnergyScaling:
|
||||
return [{ type: args[0], value: args[3] }];
|
||||
case EffectType.UniqueMaxEnergyScaling:
|
||||
return [{ type: args[0], value: args[4] }];
|
||||
case EffectType.UniqueTotalFriendship:
|
||||
return [{ type: args[0], value: 600 / args[1] }];
|
||||
case EffectType.UniqueCardCount:
|
||||
return [{ type: args[0], value: 5 * args[1] }];
|
||||
case EffectType.UniqueFacilityLevel:
|
||||
return [{ type: args[0], value: 5 * args[1] }];
|
||||
case EffectType.UniqueDisableFailure:
|
||||
return [];
|
||||
case EffectType.UniqueFriendshipTrainingAdditionalEffect:
|
||||
return [{ type: args[0], value: args[1] }];
|
||||
}
|
||||
case EffectType.UniqueFriendshipThreshold:
|
||||
return [
|
||||
{ type: args[1], value: args[2] },
|
||||
{ type: args[3], value: args[4] },
|
||||
];
|
||||
case EffectType.UniqueOffSpecialty:
|
||||
return [{ type: EffectType.TrainingEffectiveness, value: args[1] }];
|
||||
case EffectType.UniqueColorThresholdTrainingEffectiveness:
|
||||
if (new Set(deck.map((card) => card.specialty)).size < args[0]) {
|
||||
return [];
|
||||
}
|
||||
return [{ type: EffectType.TrainingEffectiveness, value: args[1] }];
|
||||
case EffectType.UniqueFanScalingTrainingEffectiveness:
|
||||
return [{ type: EffectType.TrainingEffectiveness, value: args[1] }];
|
||||
case EffectType.UniqueColorInitialStats:
|
||||
return deck.flatMap((card) => {
|
||||
switch (card.specialty) {
|
||||
case Specialty.Speed:
|
||||
return [{ type: EffectType.InitialSpeed, value: args[0] }];
|
||||
case Specialty.Power:
|
||||
return [{ type: EffectType.InitialPower, value: args[0] }];
|
||||
case Specialty.Guts:
|
||||
return [{ type: EffectType.InitialGuts, value: args[0] }];
|
||||
case Specialty.Stamina:
|
||||
return [{ type: EffectType.InitialStamina, value: args[0] }];
|
||||
case Specialty.Wit:
|
||||
return [{ type: EffectType.InitialWit, value: args[0] }];
|
||||
default:
|
||||
return [
|
||||
{ type: EffectType.InitialSpeed, value: args[1] },
|
||||
{ type: EffectType.InitialStamina, value: args[1] },
|
||||
{ type: EffectType.InitialPower, value: args[1] },
|
||||
{ type: EffectType.InitialGuts, value: args[1] },
|
||||
{ type: EffectType.InitialWit, value: args[1] },
|
||||
];
|
||||
}
|
||||
});
|
||||
case EffectType.UniqueRainbowStack:
|
||||
return [{ type: args[1], value: args[0] * args[2] }];
|
||||
case EffectType.UniqueLowEnergyScaling:
|
||||
return [{ type: args[0], value: args[3] }];
|
||||
case EffectType.UniqueMaxEnergyScaling:
|
||||
return [{ type: args[0], value: args[4] }];
|
||||
case EffectType.UniqueTotalFriendship:
|
||||
return [{ type: args[0], value: 600 / args[1] }];
|
||||
case EffectType.UniqueCardCount:
|
||||
return [{ type: args[0], value: 5 * args[1] }];
|
||||
case EffectType.UniqueFacilityLevel:
|
||||
return [{ type: args[0], value: 5 * args[1] }];
|
||||
case EffectType.UniqueDisableFailure:
|
||||
return [];
|
||||
case EffectType.UniqueFriendshipTrainingAdditionalEffect:
|
||||
return [{ type: args[0], value: args[1] }];
|
||||
}
|
||||
}
|
||||
|
||||
export function flattenUnique(unique: UniqueEffect, deck: SupportCard[]): Effect[] {
|
||||
const r = [...singleUniqueEffects(unique.type, unique.args, deck)];
|
||||
if (unique.type2 != null) {
|
||||
r.push(...singleUniqueEffects(unique.type2, unique.args2!, deck));
|
||||
}
|
||||
return r;
|
||||
const r = [...singleUniqueEffects(unique.type, unique.args, deck)];
|
||||
if (unique.type2 != null) {
|
||||
r.push(...singleUniqueEffects(unique.type2, unique.args2!, deck));
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+413
-413
@@ -1,415 +1,415 @@
|
||||
{
|
||||
"id": 10018,
|
||||
"name": "[Tracen Academy] Sakura Bakushin O",
|
||||
"chara_id": 1041,
|
||||
"chara_name": "Sakura Bakushin O",
|
||||
"rarity": 1,
|
||||
"specialty": 101,
|
||||
"type": 1,
|
||||
"effects": [
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 5
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 20
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 20
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 25
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 35
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
]
|
||||
],
|
||||
"hints": [
|
||||
{
|
||||
"skill_id": 200652
|
||||
},
|
||||
{
|
||||
"skill_id": 200791
|
||||
},
|
||||
{
|
||||
"skill_id": 200841
|
||||
},
|
||||
{
|
||||
"skill_id": 200962
|
||||
},
|
||||
{
|
||||
"skill_id": 200972
|
||||
},
|
||||
{
|
||||
"skill_id": 200982
|
||||
},
|
||||
{
|
||||
"skill_id": 200992
|
||||
},
|
||||
{
|
||||
"skill_id": 201012
|
||||
},
|
||||
{
|
||||
"speed": 6,
|
||||
"power": 2
|
||||
}
|
||||
]
|
||||
"id": 10018,
|
||||
"name": "[Tracen Academy] Sakura Bakushin O",
|
||||
"chara_id": 1041,
|
||||
"chara_name": "Sakura Bakushin O",
|
||||
"rarity": 1,
|
||||
"specialty": 101,
|
||||
"type": 1,
|
||||
"effects": [
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 5
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 20
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 20
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 25
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 35
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 9,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
]
|
||||
],
|
||||
"hints": [
|
||||
{
|
||||
"skill_id": 200652
|
||||
},
|
||||
{
|
||||
"skill_id": 200791
|
||||
},
|
||||
{
|
||||
"skill_id": 200841
|
||||
},
|
||||
{
|
||||
"skill_id": 200962
|
||||
},
|
||||
{
|
||||
"skill_id": 200972
|
||||
},
|
||||
{
|
||||
"skill_id": 200982
|
||||
},
|
||||
{
|
||||
"skill_id": 200992
|
||||
},
|
||||
{
|
||||
"skill_id": 201012
|
||||
},
|
||||
{
|
||||
"speed": 6,
|
||||
"power": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+423
-427
@@ -1,429 +1,425 @@
|
||||
{
|
||||
"id": 20042,
|
||||
"name": "[The Perfect Morning Greeting!] Sakura Bakushin O",
|
||||
"chara_id": 1041,
|
||||
"chara_name": "Sakura Bakushin O",
|
||||
"rarity": 2,
|
||||
"specialty": 102,
|
||||
"type": 1,
|
||||
"effects": [
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 5
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 35
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 50
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
]
|
||||
],
|
||||
"unique_effect": {
|
||||
"name": "The Perfect Morning Greeting!",
|
||||
"description": "Friendship Bonus and Specialty Priority",
|
||||
"card_level": 25,
|
||||
"type": 1,
|
||||
"args": [
|
||||
10
|
||||
],
|
||||
"type2": 19,
|
||||
"args2": [
|
||||
20
|
||||
],
|
||||
"idle_mode_sub_rate": 0
|
||||
},
|
||||
"hints": [
|
||||
{
|
||||
"skill_id": 200652
|
||||
},
|
||||
{
|
||||
"skill_id": 200791
|
||||
},
|
||||
{
|
||||
"skill_id": 200841
|
||||
},
|
||||
{
|
||||
"skill_id": 200962
|
||||
},
|
||||
{
|
||||
"skill_id": 200972
|
||||
},
|
||||
{
|
||||
"skill_id": 200982
|
||||
},
|
||||
{
|
||||
"skill_id": 200992
|
||||
},
|
||||
{
|
||||
"skill_id": 201012
|
||||
},
|
||||
{
|
||||
"stamina": 2,
|
||||
"power": 6
|
||||
}
|
||||
]
|
||||
"id": 20042,
|
||||
"name": "[The Perfect Morning Greeting!] Sakura Bakushin O",
|
||||
"chara_id": 1041,
|
||||
"chara_name": "Sakura Bakushin O",
|
||||
"rarity": 2,
|
||||
"specialty": 102,
|
||||
"type": 1,
|
||||
"effects": [
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 5
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 35
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": 50
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 8,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 11,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 19,
|
||||
"value": -1
|
||||
}
|
||||
]
|
||||
],
|
||||
"unique_effect": {
|
||||
"name": "The Perfect Morning Greeting!",
|
||||
"description": "Friendship Bonus and Specialty Priority",
|
||||
"card_level": 25,
|
||||
"type": 1,
|
||||
"args": [10],
|
||||
"type2": 19,
|
||||
"args2": [20],
|
||||
"idle_mode_sub_rate": 0
|
||||
},
|
||||
"hints": [
|
||||
{
|
||||
"skill_id": 200652
|
||||
},
|
||||
{
|
||||
"skill_id": 200791
|
||||
},
|
||||
{
|
||||
"skill_id": 200841
|
||||
},
|
||||
{
|
||||
"skill_id": 200962
|
||||
},
|
||||
{
|
||||
"skill_id": 200972
|
||||
},
|
||||
{
|
||||
"skill_id": 200982
|
||||
},
|
||||
{
|
||||
"skill_id": 200992
|
||||
},
|
||||
{
|
||||
"skill_id": 201012
|
||||
},
|
||||
{
|
||||
"stamina": 2,
|
||||
"power": 6
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+466
-469
@@ -1,471 +1,468 @@
|
||||
{
|
||||
"id": 30083,
|
||||
"name": "[Super! Sonic! Flower Power!] Sakura Bakushin O",
|
||||
"chara_id": 1041,
|
||||
"chara_name": "Sakura Bakushin O",
|
||||
"rarity": 3,
|
||||
"specialty": 103,
|
||||
"type": 1,
|
||||
"effects": [
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": 5
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 25
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": 40
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 30
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 25
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 35
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": 30
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": 3
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
],
|
||||
"unique_effect": {
|
||||
"name": "Super! Sonic! Flower Power!",
|
||||
"description": "Increases Training Effectiveness when not on preferred training. (Friendship 80+)",
|
||||
"card_level": 30,
|
||||
"type": 102,
|
||||
"args": [
|
||||
80,
|
||||
20
|
||||
],
|
||||
"idle_mode_sub_rate": 30
|
||||
},
|
||||
"hints": [
|
||||
{
|
||||
"skill_id": 200652
|
||||
},
|
||||
{
|
||||
"skill_id": 200791
|
||||
},
|
||||
{
|
||||
"skill_id": 200841
|
||||
},
|
||||
{
|
||||
"skill_id": 200962
|
||||
},
|
||||
{
|
||||
"skill_id": 200972
|
||||
},
|
||||
{
|
||||
"skill_id": 200982
|
||||
},
|
||||
{
|
||||
"skill_id": 200992
|
||||
},
|
||||
{
|
||||
"skill_id": 201012
|
||||
},
|
||||
{
|
||||
"speed": 1,
|
||||
"power": 1,
|
||||
"guts": 6
|
||||
}
|
||||
]
|
||||
"id": 30083,
|
||||
"name": "[Super! Sonic! Flower Power!] Sakura Bakushin O",
|
||||
"chara_id": 1041,
|
||||
"chara_name": "Sakura Bakushin O",
|
||||
"rarity": 3,
|
||||
"specialty": 103,
|
||||
"type": 1,
|
||||
"effects": [
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": 5
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 25
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": 40
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": 30
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": 25
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"type": 1,
|
||||
"value": 35
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 6,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 12,
|
||||
"value": 30
|
||||
},
|
||||
{
|
||||
"type": 14,
|
||||
"value": -1
|
||||
},
|
||||
{
|
||||
"type": 15,
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"type": 16,
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"type": 17,
|
||||
"value": 3
|
||||
},
|
||||
{
|
||||
"type": 18,
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
],
|
||||
"unique_effect": {
|
||||
"name": "Super! Sonic! Flower Power!",
|
||||
"description": "Increases Training Effectiveness when not on preferred training. (Friendship 80+)",
|
||||
"card_level": 30,
|
||||
"type": 102,
|
||||
"args": [80, 20],
|
||||
"idle_mode_sub_rate": 30
|
||||
},
|
||||
"hints": [
|
||||
{
|
||||
"skill_id": 200652
|
||||
},
|
||||
{
|
||||
"skill_id": 200791
|
||||
},
|
||||
{
|
||||
"skill_id": 200841
|
||||
},
|
||||
{
|
||||
"skill_id": 200962
|
||||
},
|
||||
{
|
||||
"skill_id": 200972
|
||||
},
|
||||
{
|
||||
"skill_id": 200982
|
||||
},
|
||||
{
|
||||
"skill_id": 200992
|
||||
},
|
||||
{
|
||||
"skill_id": 201012
|
||||
},
|
||||
{
|
||||
"speed": 1,
|
||||
"power": 1,
|
||||
"guts": 6
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user