Trait Tsify

pub trait Tsify {
    type JsType: JsCast;

    const DECL: &'static str;
    const SERIALIZATION_CONFIG: SerializationConfig = _;

    // Provided methods
    fn into_js(&self) -> Result<Self::JsType, Error>
       where Self: Serialize { ... }
    fn from_js<T>(js: T) -> Result<Self, Error>
       where T: Into<JsValue>,
             Self: DeserializeOwned { ... }
}
Expand description

Tsify is a trait that allows you to convert a type to and from JavaScript. Can be implemented manually if you need to customize the serialization or deserialization.

Required Associated Constants§

const DECL: &'static str

Provided Associated Constants§

const SERIALIZATION_CONFIG: SerializationConfig = _

Required Associated Types§

Provided Methods§

fn into_js(&self) -> Result<Self::JsType, Error>
where Self: Serialize,

fn from_js<T>(js: T) -> Result<Self, Error>
where T: Into<JsValue>, Self: DeserializeOwned,

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

§

impl Tsify for I18nString

§

const DECL: &'static str = "export type I18nString = { Key: string } | { Translated: string };"

§

const SERIALIZATION_CONFIG: SerializationConfig

§

type JsType = JsType

Implementors§

Source§

impl Tsify for AbilityCaseRollType

Source§

const DECL: &'static str = "/**\n * \u{422}\u{438}\u{43f} \u{43a}\u{440}\u{443}\u{442}\u{43a}\u{438} \u{433}\u{430}\u{447}\u{438} \u{441}\u{43f}\u{43e}\u{441}\u{43e}\u{431}\u{43d}\u{43e}\u{441}\u{442}\u{435}\u{439}.\n */\ndeclare namespace AbilityCaseRollType {\n export type Small = \"Small\";\n export type Big = \"Big\";\n}\n\n/**\n * \u{422}\u{438}\u{43f} \u{43a}\u{440}\u{443}\u{442}\u{43a}\u{438} \u{433}\u{430}\u{447}\u{438} \u{441}\u{43f}\u{43e}\u{441}\u{43e}\u{431}\u{43d}\u{43e}\u{441}\u{442}\u{435}\u{439}.\n */\nexport type AbilityCaseRollType = \"Small\" | \"Big\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityCastType

Source§

const DECL: &'static str = "declare namespace AbilityCastType {\n export type NoAnimation = \"NoAnimation\";\n export type Basic = \"Basic\";\n export type Spell = \"Spell\";\n}\n\nexport type AbilityCastType = \"NoAnimation\" | \"Basic\" | \"Spell\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityFightUiVisibility

Source§

const DECL: &'static str = "declare namespace AbilityFightUiVisibility {\n export type Slotted = \"Slotted\";\n export type Class = \"Class\";\n export type Hidden = \"Hidden\";\n}\n\nexport type AbilityFightUiVisibility = \"Slotted\" | \"Class\" | \"Hidden\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityTag

Source§

const DECL: &'static str = "/**\n * A content-side label on an ability that other systems key off.\n *\n * Read by the law catalog (`RL-06` / `FL-06` fire on \\\"an original Skill with\n * the `Heal` tag resolved\\\") and by support stones (a support\\\'s\n * `Compatibility` is a predicate over these tags). Declared with room:\n * triggers and future systems are meant to read the SAME tag set rather than\n * each inventing its own predicate over ability ids. Adding a variant is a\n * config migration (every ability lists its tags explicitly \u{2014} there is no\n * default), not a code change at the reading sites.\n *\n * Tags describe what an ability DOES, not how it is cast: `AbilityCastType` is\n * presentation and `class.basic_abilities` is what decides Basic Attack vs\n * original Skill.\n */\ndeclare namespace AbilityTag {\n /**\n * Restores HP to the caster or an ally.\n */\n export type Heal = \"Heal\";\n /**\n * Deals direct damage.\n */\n export type Damage = \"Damage\";\n /**\n * Hits an AREA: one payload spread over whatever stands in it.\n */\n export type Aoe = \"Aoe\";\n /**\n * Delivers its payload as SEVERAL copies (a volley of projectiles, a\n * flurry of cuts) rather than as one hit \u{2014} `ability_info.projectiles > 1`.\n * Distinct from [`AbilityTag::Aoe`]: the copies are what Condense folds\n * into one, while `CoverageMult` (Widen) does not scale them.\n */\n export type MultiTarget = \"MultiTarget\";\n /**\n * Grants a positive timed state.\n */\n export type Buff = \"Buff\";\n /**\n * Applies a negative timed state.\n */\n export type Debuff = \"Debuff\";\n /**\n * Stuns, roots or otherwise denies actions.\n */\n export type Control = \"Control\";\n /**\n * Belongs to a pet rather than to the character.\n */\n export type Pet = \"Pet\";\n /**\n * Delivers its payload with a travelling projectile.\n */\n export type Projectile = \"Projectile\";\n /**\n * Resolves on one chosen target (as opposed to a shape or the caster).\n */\n export type Targeted = \"Targeted\";\n /**\n * Applies something that lasts (DoT / HoT / timed buff or debuff).\n */\n export type Duration = \"Duration\";\n /**\n * Puts an entity on the field that fights on its own.\n */\n export type Summon = \"Summon\";\n /**\n * Resolves on the caster. (`Self` is a reserved word in Rust; the tag is\n * spelled `SelfCast` everywhere \u{2014} code, config and schema.)\n */\n export type SelfCast = \"SelfCast\";\n /**\n * Reduces incoming damage or otherwise shields.\n */\n export type Protection = \"Protection\";\n /**\n * Occupies the caster for the whole cast (no channelled ability ships yet;\n * the tag exists so `Any except Channelled` supports stay honest when one\n * does).\n */\n export type Channelled = \"Channelled\";\n}\n\n/**\n * A content-side label on an ability that other systems key off.\n *\n * Read by the law catalog (`RL-06` / `FL-06` fire on \\\"an original Skill with\n * the `Heal` tag resolved\\\") and by support stones (a support\\\'s\n * `Compatibility` is a predicate over these tags). Declared with room:\n * triggers and future systems are meant to read the SAME tag set rather than\n * each inventing its own predicate over ability ids. Adding a variant is a\n * config migration (every ability lists its tags explicitly \u{2014} there is no\n * default), not a code change at the reading sites.\n *\n * Tags describe what an ability DOES, not how it is cast: `AbilityCastType` is\n * presentation and `class.basic_abilities` is what decides Basic Attack vs\n * original Skill.\n */\nexport type AbilityTag = \"Heal\" | \"Damage\" | \"Aoe\" | \"MultiTarget\" | \"Buff\" | \"Debuff\" | \"Control\" | \"Pet\" | \"Projectile\" | \"Targeted\" | \"Duration\" | \"Summon\" | \"SelfCast\" | \"Protection\" | \"Channelled\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityTargetType

Source§

const DECL: &'static str = "/**\n * Whom an ability can target. Sourced from the ability content `target_type`\n * and consumed by the fight target-selection (`is_valid_target` / `try_cast`).\n */\ndeclare namespace AbilityTargetType {\n export type Enemy = \"Enemy\";\n export type Ally = \"Ally\";\n export type Self = \"Self\";\n}\n\n/**\n * Whom an ability can target. Sourced from the ability content `target_type`\n * and consumed by the fight target-selection (`is_valid_target` / `try_cast`).\n */\nexport type AbilityTargetType = \"Enemy\" | \"Ally\" | \"Self\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityStoneFamily

Source§

const DECL: &'static str = "/**\n * Twelve exclusion families. Two supports of the SAME family may not sit in\n * one Imprint (the two sockets of one side of one ability).\n */\ndeclare namespace AbilityStoneFamily {\n export type Economy = \"Economy\";\n export type Cadence = \"Cadence\";\n export type Delivery = \"Delivery\";\n export type Magnitude = \"Magnitude\";\n export type Critical = \"Critical\";\n export type Shape = \"Shape\";\n export type Coverage = \"Coverage\";\n export type Targeting = \"Targeting\";\n export type Replay = \"Replay\";\n export type Duration = \"Duration\";\n export type Conversion = \"Conversion\";\n export type Defense = \"Defense\";\n}\n\n/**\n * Twelve exclusion families. Two supports of the SAME family may not sit in\n * one Imprint (the two sockets of one side of one ability).\n */\nexport type AbilityStoneFamily = \"Economy\" | \"Cadence\" | \"Delivery\" | \"Magnitude\" | \"Critical\" | \"Shape\" | \"Coverage\" | \"Targeting\" | \"Replay\" | \"Duration\" | \"Conversion\" | \"Defense\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityStoneOpKind

Source§

const DECL: &'static str = "/**\n * One operation a support stone performs on the ability it is socketed into.\n *\n * A support carries a SET of these (`Haste` = payload \u{d7}0.80 AND mana \u{d7}1.10 AND\n * cooldown \u{d7}0.75), so the operation kind is per-op, not per-stone. Rank scales\n * the magnitude of each op; it never changes the op set, the Compatibility or\n * the Exclusion Family.\n */\ndeclare namespace AbilityStoneOpKind {\n /**\n * Payload multiplier: every damage/DoT/heal component of the ability is\n * multiplied by `value` (1.50 = +50%). Also the \\\"magnitude per target /\n * per tick\\\" knob of Widen / Persist / Sustain.\n */\n export type PayloadMult = \"PayloadMult\";\n /**\n * Mana-cost multiplier (0.50 = half price).\n */\n export type ManaCostMult = \"ManaCostMult\";\n /**\n * Cooldown multiplier (0.75 = casts 33% more often).\n */\n export type CooldownMult = \"CooldownMult\";\n /**\n * Cast-time multiplier: scales the cast\\\'s delay + animation occupation\n * (0.50 = Quickcast).\n */\n export type CastTimeMult = \"CastTimeMult\";\n /**\n * Applied-effect duration multiplier (2.0 = Persist).\n */\n export type EffectDurationMult = \"EffectDurationMult\";\n /**\n * Flat added crit chance in PERCENT POINTS (25.0 = +25% crit chance).\n */\n export type CritChanceBonus = \"CritChanceBonus\";\n /**\n * Coverage multiplier: the ability\\\'s AoE target cap is multiplied by\n * `value` (1.60 = Widen). Inert on abilities with no cap (already\n * unlimited).\n */\n export type CoverageMult = \"CoverageMult\";\n /**\n * `+value` flat targets for AoE abilities. Legacy \\\"\u{41e}\u{445}\u{432}\u{430}\u{442}\\\" op, kept because\n * it is the only additive coverage form.\n */\n export type ExtraTargets = \"ExtraTargets\";\n /**\n * Collapse copies/area into one primary payload multiplied by `value`;\n * coverage becomes a single target (Condense).\n */\n export type Condense = \"Condense\";\n /**\n * `count` extra instant copies on the SAME target, each at `value`% of the\n * payload (Split).\n */\n export type SplitCopies = \"SplitCopies\";\n /**\n * The payload jumps to `count` further targets at `value`% each (Chain).\n */\n export type ChainTargets = \"ChainTargets\";\n /**\n * The payload passes through `count` further targets; each next hit is\n * `value`% of the previous one (Pierce).\n */\n export type PierceTargets = \"PierceTargets\";\n /**\n * `count` derived repeats of the cast `interval_ms` later, each at\n * `value`% payload (Repeat).\n */\n export type RepeatCast = \"RepeatCast\";\n /**\n * The single payload becomes `count` pulses at `value`% each, spaced\n * `interval_ms` apart (Pulse). The first pulse is the original cast.\n */\n export type PulseSplit = \"PulseSplit\";\n /**\n * `value`% of the final damage dealt heals the caster (Leech).\n */\n export type LeechPercent = \"LeechPercent\";\n /**\n * The next incoming hit after the cast deals `value`% less damage\n * (Fortify).\n */\n export type GuardNextHit = \"GuardNextHit\";\n /**\n * Incoming damage is reduced by `value`% for `interval_ms` after the cast\n * (Shelter).\n */\n export type IncomingDamageReduction = \"IncomingDamageReduction\";\n /**\n * `+value%` damage for every 10% of the caster\\\'s missing mana. Legacy\n * \\\"\u{41e}\u{442}\u{434}\u{430}\u{447}\u{430}\\\" op.\n */\n export type MissingManaDamagePercent = \"MissingManaDamagePercent\";\n}\n\n/**\n * One operation a support stone performs on the ability it is socketed into.\n *\n * A support carries a SET of these (`Haste` = payload \u{d7}0.80 AND mana \u{d7}1.10 AND\n * cooldown \u{d7}0.75), so the operation kind is per-op, not per-stone. Rank scales\n * the magnitude of each op; it never changes the op set, the Compatibility or\n * the Exclusion Family.\n */\nexport type AbilityStoneOpKind = \"PayloadMult\" | \"ManaCostMult\" | \"CooldownMult\" | \"CastTimeMult\" | \"EffectDurationMult\" | \"CritChanceBonus\" | \"CoverageMult\" | \"ExtraTargets\" | \"Condense\" | \"SplitCopies\" | \"ChainTargets\" | \"PierceTargets\" | \"RepeatCast\" | \"PulseSplit\" | \"LeechPercent\" | \"GuardNextHit\" | \"IncomingDamageReduction\" | \"MissingManaDamagePercent\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AdPlacement

Source§

const DECL: &'static str = "declare namespace AdPlacement {\n export type ChestUpgrade = \"ChestUpgrade\";\n export type TalentUpgrade = \"TalentUpgrade\";\n export type AfkInstant = \"AfkInstant\";\n export type SkillGacha = \"SkillGacha\";\n export type PetGacha = \"PetGacha\";\n export type AfkBoost = \"AfkBoost\";\n export type DungeonRaid = \"DungeonRaid\";\n export type ArenaRefresh = \"ArenaRefresh\";\n export type DailyBooster = \"DailyBooster\";\n export type Bird = \"Bird\";\n}\n\nexport type AdPlacement = \"ChestUpgrade\" | \"TalentUpgrade\" | \"AfkInstant\" | \"SkillGacha\" | \"PetGacha\" | \"AfkBoost\" | \"DungeonRaid\" | \"ArenaRefresh\" | \"DailyBooster\" | \"Bird\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaLeaderboardResponse

Source§

const DECL: &'static str = "export type ArenaLeaderboardResponse = { Ok: { league: League; leaderboard: RankingItem[]; character_ranking: RankingItem } } | { Error: { code: string; message: string } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaMatchesHistoryResponse

Source§

const DECL: &'static str = "export type ArenaMatchesHistoryResponse = { Ok: { matches: Match[] } } | { Error: { code: string; message: string } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaPvpPlayersResponse

Source§

const DECL: &'static str = "export type ArenaPvpPlayersResponse = { Ok: { opponents: MatchmakingOpponent[] } } | { Error: { code: string; message: string } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArtifactSocketColumn

Source§

const DECL: &'static str = "/**\n * Which half of the artifact a socket belongs to.\n *\n * The two columns never overlap: `Aspect` sockets retune the Trigger/Effect\n * stones worn in gear, `Law` sockets retune the laws and bridges worn in cores.\n * This is a rule, not a coincidence \u{2014} a stone declares one socket and fits\n * nothing else.\n */\nexport type ArtifactSocketColumn = \"Aspect\" | \"Law\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArtifactSocketSlot

Source§

const DECL: &'static str = "/**\n * One of the artifact\\\'s six sockets.\n *\n * Order is fixed and load-bearing: the whole left column opens before the right\n * one, because a Law stone has nothing to retune until the player owns cores.\n * [`ArtifactSocketSlot::unlock_order`] is that order, and\n * `GameConfig::validate_artifacts` holds the unlock schedule to it.\n *\n * Variant docs live here rather than on the variants themselves: a documented\n * variant makes the admin schema generate a `oneOf` of one-value enums instead\n * of a plain picker.\n *\n * * `VisibleAspect` \u{2014} how active gear effects behave.\n * * `HiddenAspect` \u{2014} what hidden gear effects do.\n * * `FlipAspect` \u{2014} what happens on the flip itself.\n * * `VisibleLaw` \u{2014} how active core laws behave.\n * * `HiddenLaw` \u{2014} what hidden core laws do.\n * * `BridgeLaw` \u{2014} how bridges work.\n */\nexport type ArtifactSocketSlot = \"VisibleAspect\" | \"HiddenAspect\" | \"FlipAspect\" | \"VisibleLaw\" | \"HiddenLaw\" | \"BridgeLaw\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleClaimMode

Source§

const DECL: &'static str = "declare namespace BundleClaimMode {\n export type Sequential = \"Sequential\";\n export type AllAtOnce = \"AllAtOnce\";\n}\n\nexport type BundleClaimMode = \"Sequential\" | \"AllAtOnce\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleElement

Source§

const DECL: &'static str = "export type BundleElement = { Currencies: CurrencyUnit[] } | { Abilities: BundleAbility[] } | { Items: Item[] } | { Artifacts: ArtifactTemplateId[] };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleStepGeneric

Source§

const DECL: &'static str = "export type BundleStepGeneric = { Sequential: BundleStep } | { AllAtOnce: { bundle_id: BundleId; elements: BundleElement[]; has_pop_up: boolean } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleStepType

Source§

const DECL: &'static str = "declare namespace BundleStepType {\n export type Currency = \"Currency\";\n export type Ability = \"Ability\";\n export type Item = \"Item\";\n /**\n * A whole artifact, granted outright. Since the acquisition pass this is\n * the ONLY faucet for a non-starter artifact: the two of them are top-1\n * weekly rating prizes and ride the existing rating reward bundles.\n */\n export type Artifact = \"Artifact\";\n}\n\nexport type BundleStepType = \"Currency\" | \"Ability\" | \"Item\" | \"Artifact\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CustomValueCondition

Source§

const DECL: &'static str = "/**\n * \u{423}\u{441}\u{43b}\u{43e}\u{432}\u{438}\u{435} \u{43d}\u{430}\u{434} `custom_values` \u{43f}\u{435}\u{440}\u{441}\u{43e}\u{43d}\u{430}\u{436}\u{430}. \u{41e}\u{442}\u{441}\u{443}\u{442}\u{441}\u{442}\u{432}\u{443}\u{44e}\u{449}\u{438}\u{439} \u{43a}\u{43b}\u{44e}\u{447} \u{432}\u{435}\u{434}\u{451}\u{442} \u{441}\u{435}\u{431}\u{44f} \u{43a}\u{430}\u{43a}\n * \u{ab}\u{43d}\u{435} \u{443}\u{441}\u{442}\u{430}\u{43d}\u{43e}\u{432}\u{43b}\u{435}\u{43d}\u{bb}: `KeyUnset` \u{441}\u{43e}\u{432}\u{43f}\u{430}\u{434}\u{430}\u{435}\u{442}, `KeyEquals` \u{2014} \u{43d}\u{435}\u{442}, \u{430} \u{432} `KeysEqual`\n * \u{434}\u{432}\u{430} \u{43e}\u{442}\u{441}\u{443}\u{442}\u{441}\u{442}\u{432}\u{443}\u{44e}\u{449}\u{438}\u{445} \u{43a}\u{43b}\u{44e}\u{447}\u{430} \u{440}\u{430}\u{432}\u{43d}\u{44b} (\u{43a}\u{430}\u{43a} `() == ()` \u{432} \u{441}\u{442}\u{430}\u{440}\u{44b}\u{445} \u{441}\u{43a}\u{440}\u{438}\u{43f}\u{442}\u{430}\u{445}).\n */\nexport type CustomValueCondition = { KeyUnset: { key: string } } | { KeyEquals: { key: string; value: number } } | { KeysEqual: { left: string; right: string } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for GetCharacterStateResponse

Source§

const DECL: &'static str = "export type GetCharacterStateResponse = { Ok: { character_state: CharacterState; flip_state: FlipState } } | { Error: { code: string; message: string } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for FightClass

Source§

const DECL: &'static str = "export type FightClass = \"Mage\" | \"Warrior\" | \"Archer\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ChatType

Source§

const DECL: &'static str = "export type ChatType = \"Global\" | \"Private\" | \"GlobalSystem\" | \"PersonalSystem\" | \"Unknown\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ClassPassive

Source§

const DECL: &'static str = "/**\n * The always-on rule a class plays with (BAL-033). One per class: it is the\n * half of class identity that is not a stat, so it must be readable from the\n * class alone rather than inferred from what the character happens to wear.\n *\n * The magnitude interpolates linearly between the two authored endpoints over\n * global Class Level 1..=20 \u{2014} a `%MaxHP` heal for `BlockHeal` and\n * `LowestAllyHeal`, a chance in whole percent for `DoubleStrike`.\n */\ndeclare namespace ClassPassive {\n /**\n * No passive \u{2014} the unselected sentinel class.\n */\n export type None = \"None\";\n /**\n * Every successful Block heals the blocker (Warrior).\n */\n export type BlockHeal = \"BlockHeal\";\n /**\n * Every original Basic Attack may repeat itself at full damage (Rogue).\n */\n export type DoubleStrike = \"DoubleStrike\";\n /**\n * The `multicast_chance` stat IS the passive (Mage): the runtime already\n * casts the second copy, and the class level authors the chance.\n */\n export type Multicast = \"Multicast\";\n /**\n * A periodic heal on the ally with the lowest HP share, self in solo\n * (Priest).\n */\n export type LowestAllyHeal = \"LowestAllyHeal\";\n}\n\n/**\n * The always-on rule a class plays with (BAL-033). One per class: it is the\n * half of class identity that is not a stat, so it must be readable from the\n * class alone rather than inferred from what the character happens to wear.\n *\n * The magnitude interpolates linearly between the two authored endpoints over\n * global Class Level 1..=20 \u{2014} a `%MaxHP` heal for `BlockHeal` and\n * `LowestAllyHeal`, a chance in whole percent for `DoubleStrike`.\n */\nexport type ClassPassive = \"None\" | \"BlockHeal\" | \"DoubleStrike\" | \"Multicast\" | \"LowestAllyHeal\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ClassTier

Source§

const DECL: &'static str = "declare namespace ClassTier {\n export type S = \"S\";\n export type A = \"A\";\n export type B = \"B\";\n export type C = \"C\";\n}\n\nexport type ClassTier = \"S\" | \"A\" | \"B\" | \"C\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CombatEventOrigin

Source§

const DECL: &'static str = "/**\n * Where one combat event came from.\n *\n * Triggers fire on [`CombatEventOrigin::Core`] only. Without that boundary a\n * modifier that grants a crit would re-enter the crit trigger that produced\n * it and loop forever.\n *\n * Events that are state transitions rather than combat actions (a global\n * flip) carry no origin and can never be Core.\n */\nexport type CombatEventOrigin = \"Core\" | \"Proc\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for LawCondition

Source§

const DECL: &'static str = "/**\n * What makes a law fire. Every variant is a Core occurrence or a property of\n * one \u{2014} nothing a law (or any other modifier) produced can satisfy any of\n * them, which is the anti-loop rule of the design (plan \u{a7}8).\n *\n * The numeric parameter of a condition lives in\n * [`LawTemplate::condition_value`] and its tag in\n * [`LawTemplate::condition_tag`], so retuning \\\"every 5th\\\" to \\\"every 4th\\\" is a\n * config edit.\n *\n * * `NthBasicAttack` \u{2014} every `condition_value`-th Core Basic Attack.\n * * `OriginalSkillCast` \u{2014} one Core cast of a non-basic ability.\n * * `CriticalHit` \u{2014} a Core critical hit landed by the owner.\n * * `Dodge` \u{2014} a Core evasion by the owner.\n * * `NthHitTaken` \u{2014} every `condition_value`-th Core hit landed on the owner.\n * * `SkillWithTag` \u{2014} a Core original Skill carrying `condition_tag` resolved.\n * * `SkillMinTargets` \u{2014} a Core original Skill that damaged at least\n * `condition_value` distinct targets.\n * * `SkillManaAtMost` / `SkillManaAtLeast` \u{2014} per-cast mana cost bounds. Mana\n * does not exist on this branch, so laws using these ship INACTIVE\n * ([`LawTemplate::is_active`]) and are never evaluated.\n * * `KilledEnemy` \u{2014} a Core action of the owner killed an enemy.\n * * `HpFellBelow` \u{2014} the owner\\\'s HP crossed `condition_value` permyriad of max\n * HP downwards.\n * * `PhaseStarted` \u{2014} the owner\\\'s own side just came up.\n * * `DistinctSkillsWithin` \u{2014} `condition_value` DIFFERENT original Skills\n * resolved inside [`LawTemplate::condition_window_ticks`].\n *\n * Variant docs live on the enum rather than on the variants so the admin\n * schema generates a plain picker instead of a `oneOf` of one-value enums.\n */\nexport type LawCondition = \"NthBasicAttack\" | \"OriginalSkillCast\" | \"CriticalHit\" | \"Dodge\" | \"NthHitTaken\" | \"SkillWithTag\" | \"SkillMinTargets\" | \"SkillManaAtMost\" | \"SkillManaAtLeast\" | \"KilledEnemy\" | \"HpFellBelow\" | \"PhaseStarted\" | \"DistinctSkillsWithin\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for LawEffect

Source§

const DECL: &'static str = "/**\n * What a law does when it fires. One action, one number\n * ([`LawTemplate::effect_value`]) plus an optional duration.\n *\n * * `ThisAttackDamageBonus` \u{2014} the strike that triggered the law deals\n * `+value%` damage.\n * * `NextAttackDamageBonus` \u{2014} the owner\\\'s next Basic Attack deals `+value%`.\n * * `NextAttackSplash` \u{2014} the owner\\\'s next Basic Attack additionally strikes\n * every OTHER living enemy for `value%` of Attack.\n * * `ReduceLongestCooldown` \u{2014} the largest remaining skill cooldown drops by\n * `value` ticks.\n * * `ReduceAllCooldowns` \u{2014} every remaining skill cooldown drops by `value`\n * ticks.\n * * `ReadyShortestCooldown` \u{2014} the skill with the smallest remaining cooldown\n * becomes ready now (`value` unused).\n * * `HealPercentMaxHp` \u{2014} restore `value%` of max HP.\n * * `DamageBuff` \u{2014} `+value%` damage for `effect_duration_ticks`.\n * * `AttackSpeedBuff` \u{2014} `+value%` Basic Attack speed for\n * `effect_duration_ticks`.\n * * `DamageReduction` \u{2014} `-value%` incoming damage for\n * `effect_duration_ticks`.\n * * `AoeDerivedDamage` \u{2014} derived damage worth `value%` of Attack to every\n * living enemy.\n * * `NextSkillPayloadBonus` \u{2014} the owner\\\'s next original Skill deals\n * `+value%`.\n * * `NextSkillEcho` \u{2014} the owner\\\'s next original Skill echoes: its target\n * additionally takes `value%` of Attack as derived damage.\n *\n * IMPLEMENTER\\\'S NOTE on `NextSkillEcho` (`FL-06`, `FL-12`). The catalog words\n * it \\\"the next original Skill gets a derived repeat at `value%`\\\". A fractional\n * re-cast is not expressible on this branch: ability scripts take a level, not\n * a power scalar, so a \\\"40% repeat\\\" would have to be either a full second cast\n * or nothing. The echo is the honest form of the same beat \u{2014} a derived,\n * non-Core strike worth `value%` of Attack landing with the skill \u{2014} and it\n * keeps the anti-loop trivial, because nothing re-enters the cast path. When\n * abilities grow a power scalar this becomes a real scaled repeat without a\n * content change.\n */\nexport type LawEffect = \"ThisAttackDamageBonus\" | \"NextAttackDamageBonus\" | \"NextAttackSplash\" | \"ReduceLongestCooldown\" | \"ReduceAllCooldowns\" | \"ReadyShortestCooldown\" | \"HealPercentMaxHp\" | \"DamageBuff\" | \"AttackSpeedBuff\" | \"DamageReduction\" | \"AoeDerivedDamage\" | \"NextSkillPayloadBonus\" | \"NextSkillEcho\" | \"ReduceShortestCooldown\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CurrencyConsumer

Source§

const DECL: &'static str = "export type CurrencyConsumer = \"AbilityCaseOpen\" | \"AbilityCaseSlotUpgrade\" | \"ItemCaseOpen\" | \"GiftSend\" | \"DungeonRaid\" | \"DungeonFightEnd\" | \"ClassLevelUp\" | \"OfferBuy\" | \"ItemCaseUpgrade\" | \"CaseUpgradeSpeedUp\" | \"CaseUpgradeSkip\" | \"ArenaFight\" | \"ArenaMatchmakingRefresh\" | \"ArenaTicketBuy\" | \"SkinBuy\" | \"AfkInstantReward\" | \"StatueRoll\" | \"TalentUpgrade\" | \"TalentUpgradeSkip\" | \"PetCaseOpen\" | \"CoreUpgrade\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CurrencySource

Source§

const DECL: &'static str = "export type CurrencySource = \"EntityDeath\" | \"ItemSell\" | \"AutoItemSell\" | \"QuestClaim\" | \"QuestsTrackReward\" | \"VassalTaskCompletion\" | \"ReferralLvlUp\" | \"ReferralDailyReward\" | \"GiftClaim\" | \"ArenaTicketBuy\" | \"ClaimVassalReward\" | \"ClaimSuzerainReward\" | \"ArenaMatchmakingRefresh\" | \"GachaLevelUp\" | \"PetCaseLevelUp\" | \"BundleClaim\" | \"AdReward\" | \"ProgressPassClaim\" | \"Cheat\" | \"MailReward\" | \"DungeonReward\" | \"OfferBuy\" | \"ChapterReward\" | \"NewUserGrant\" | \"PvpArenaReward\" | \"PvpVassalReward\" | \"AfkReward\" | \"DailyReset\" | \"RatingReward\" | \"CoreReset\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RewardType

Source§

const DECL: &'static str = "export type RewardType = { Currency: CurrencyId } | { Ability: AbilityId } | { Item: ItemTemplateId };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CombatSource

Source§

const DECL: &'static str = "/**\n * What produced one damage or heal instance. Stamped at the emit site, where\n * the producing id is always in scope.\n *\n * Variant names carry a `Cast`/`Hit`/`Proc` suffix deliberately: an externally\n * tagged enum turns each variant into a generated C#/TypeScript type of the\n * same name, and bare `Ability` / `Stone` / `ArtifactStone` would collide with\n * the client types already generated for those catalog entities \u{2014} quicktype\n * resolves such a clash by RENAMING the existing type, which silently breaks\n * every hand-written reference to it.\n */\nexport type CombatSource = { AbilityCast: { ability_id: AbilityId } } | { AbilityDerived: { ability_id: AbilityId } } | { ProjectileHit: { projectile_id: Uuid } } | { StoneProc: { stone_template_id: StoneTemplateId } } | \"ArmedBonus\" | { ArtifactStoneProc: { artifact_stone_template_id: ArtifactStoneTemplateId } } | { LawProc: { law_template_id: LawTemplateId } } | { PetUlt: { ability_id: AbilityId } } | { PetFacetProc: { facet: PetFacet } } | \"Dot\" | \"Hot\" | \"Regeneration\" | \"Counterattack\" | \"Retaliation\" | \"Other\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for EntityTeam

Source§

const DECL: &'static str = "export type EntityTeam = \"Ally\" | \"Enemy\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for EntityType

Source§

const DECL: &'static str = "export type EntityType = { PVEEntity: { entity_template_id: EntityTemplateId } } | \"PVPEntity\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for FightType

Source§

const DECL: &'static str = "export type FightType = \"CampaignFight\" | \"CampaignBossFight\" | \"ArenaPVP\" | \"VassalPVP\" | \"SingleFight\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for FlipProgressSource

Source§

const DECL: &'static str = "/**\n * Server-owned producer category for normalized global-flip progress.\n *\n * Future artifact or quest integrations add variants here and feed the same\n * accumulator instead of reimplementing threshold behavior.\n *\n * Trigger Stones are the only shipped producer: the gauge fills from stone\n * fires (weighted per trigger tier via `StonesSettings.gauge_weights`), so a\n * player with no sockets open does not flip.\n */\nexport type FlipProgressSource = \"TriggerFired\" | \"DamageDealt\" | \"DamageReceived\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for WorldSide

Source§

const DECL: &'static str = "/**\n * The currently presented half of every two-sided equipment slot.\n */\nexport type WorldSide = \"Real\" | \"Fantasy\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for GiftType

Source§

const DECL: &'static str = "declare namespace GiftType {\n export type VassalGift = \"VassalGift\";\n export type FollowerGift = \"FollowerGift\";\n export type GenericGift = \"GenericGift\";\n}\n\nexport type GiftType = \"VassalGift\" | \"FollowerGift\" | \"GenericGift\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ItemType

Source§

const DECL: &'static str = "declare namespace ItemType {\n export type Weapon = \"Weapon\";\n export type Torso = \"Torso\";\n export type Head = \"Head\";\n export type Gloves = \"Gloves\";\n export type Shoulders = \"Shoulders\";\n export type Boots = \"Boots\";\n export type Legs = \"Legs\";\n export type Waist = \"Waist\";\n export type Neck = \"Neck\";\n export type Ring = \"Ring\";\n}\n\nexport type ItemType = \"Weapon\" | \"Torso\" | \"Head\" | \"Gloves\" | \"Shoulders\" | \"Boots\" | \"Legs\" | \"Waist\" | \"Neck\" | \"Ring\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for KillFaucetFamily

Source§

const DECL: &'static str = "/**\n * A reward family with its own counter, band snapshot and cap.\n *\n * Equipment Trigger and Effect stones deliberately share ONE counter: the kind\n * is decided by an internal 50/50 roll after the drop is granted, so counting\n * them apart would let a build farm twice the authored budget.\n */\nexport type KillFaucetFamily = \"DirectCookies\" | \"CoreEssence\" | \"LawCopies\" | \"EquipmentStones\" | \"ArtifactStones\" | \"SkillChapters\" | \"BossGems\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for MailRepeatType

Source§

const DECL: &'static str = "declare namespace MailRepeatType {\n export type Daily = \"Daily\";\n export type Weekly = \"Weekly\";\n export type Monthly = \"Monthly\";\n export type Yearly = \"Yearly\";\n}\n\nexport type MailRepeatType = \"Daily\" | \"Weekly\" | \"Monthly\" | \"Yearly\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PaymentType

Source§

const DECL: &'static str = "export type PaymentType = \"RealMoney\" | { InGameCurrency: CurrencyUnit[] } | \"Ad\" | \"Free\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ShopTab

Source§

const DECL: &'static str = "export type ShopTab = \"DailyDeals\" | \"Diamonds\" | \"Resources\" | \"ProgressPass\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for OpponentState

Source§

const DECL: &'static str = "export type OpponentState = { Human: OpponentStateHuman } | { Bot: OpponentStateBot };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetFacet

Source§

const DECL: &'static str = "/**\n * One facet rule. Twenty of them: ten Real, ten Fantasy, in the pairs the\n * design doc authors them in.\n *\n * `PET-07 Bridge Fox` and `PET-12 Encore Wisp` of the doc are deliberately\n * absent: they are written against \\\"Surplus\\\" and \\\"Flip Echo\\\", neither of which\n * exists in this codebase, and stubbing them would mean inventing two systems.\n */\nexport type PetFacet = \"HeadStart\" | \"SecondSpark\" | \"BudgetPlan\" | \"OpenTab\" | \"Overtime\" | \"MagicVolley\" | \"SafetyNet\" | \"Retaliation\" | \"Calibration\" | \"LuckyStar\" | \"LeadReading\" | \"WildReading\" | \"AdvanceNotice\" | \"RisingGate\" | \"PreparedSlots\" | \"FirstSpell\" | \"Souvenir\" | \"DreamReader\" | \"PackedLunch\" | \"LifeBloom\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetFacetLawRole

Source§

const DECL: &'static str = "/**\n * Which of the three \\\"one chosen Law\\\" slots a selection fills.\n *\n * The three are separate because they draw from three different populations: a\n * source Law of either side (`LeadReading`), a law of the side that is UP\n * (`WildReading`), and a law of the side that is DOWN (`DreamReader`).\n */\nexport type PetFacetLawRole = \"LeadReading\" | \"WildReading\" | \"DreamReader\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetCaseRollType

Source§

const DECL: &'static str = "/**\n * \u{422}\u{438}\u{43f} \u{43a}\u{440}\u{443}\u{442}\u{43a}\u{438} \u{433}\u{430}\u{447}\u{438} \u{43f}\u{435}\u{442}\u{43e}\u{432}.\n */\ndeclare namespace PetCaseRollType {\n export type Small = \"Small\";\n export type Big = \"Big\";\n}\n\n/**\n * \u{422}\u{438}\u{43f} \u{43a}\u{440}\u{443}\u{442}\u{43a}\u{438} \u{433}\u{430}\u{447}\u{438} \u{43f}\u{435}\u{442}\u{43e}\u{432}.\n */\nexport type PetCaseRollType = \"Small\" | \"Big\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PlinkoDirection

Source§

const DECL: &'static str = "/**\n * \u{428}\u{430}\u{433} \u{448}\u{430}\u{440}\u{438}\u{43a}\u{430} \u{432} \u{43c}\u{438}\u{43d}\u{438}-\u{438}\u{433}\u{440}\u{435} Plinko: \u{43d}\u{430} \u{43a}\u{430}\u{436}\u{434}\u{43e}\u{43c} \u{440}\u{44f}\u{434}\u{443} \u{43a}\u{43e}\u{43b}\u{44b}\u{448}\u{43a}\u{43e}\u{432} \u{448}\u{430}\u{440}\u{438}\u{43a} \u{443}\u{445}\u{43e}\u{434}\u{438}\u{442} \u{432}\u{43b}\u{435}\u{432}\u{43e}\n * \u{438}\u{43b}\u{438} \u{432}\u{43f}\u{440}\u{430}\u{432}\u{43e}. \u{41f}\u{443}\u{442}\u{44c} \u{446}\u{435}\u{43b}\u{438}\u{43a}\u{43e}\u{43c} \u{440}\u{435}\u{448}\u{430}\u{435}\u{442} \u{441}\u{435}\u{440}\u{432}\u{435}\u{440}, \u{43a}\u{43b}\u{438}\u{435}\u{43d}\u{442} \u{442}\u{43e}\u{43b}\u{44c}\u{43a}\u{43e} \u{43f}\u{440}\u{43e}\u{438}\u{433}\u{440}\u{44b}\u{432}\u{430}\u{435}\u{442} \u{430}\u{43d}\u{438}\u{43c}\u{430}\u{446}\u{438}\u{44e}.\n */\nexport type PlinkoDirection = \"Left\" | \"Right\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ProgressPassTrack

Source§

const DECL: &'static str = "export type ProgressPassTrack = \"Free\" | \"Paid\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for VassalPvpPlayersFindResponse

Source§

const DECL: &'static str = "export type VassalPvpPlayersFindResponse = { Ok: { opponents: VassalPvpOpponent[] } } | { Error: { code: string; message: string } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestGroupType

Source§

const DECL: &'static str = "export type QuestGroupType = \"Daily\" | \"Weekly\" | \"Lifetime\" | \"LoopTask\" | \"PatronDaily\" | \"PatronLifetime\" | \"Hidden\" | \"Achievement\" | \"ProgressPass\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingLeaderboardResponse

Source§

const DECL: &'static str = "export type RatingLeaderboardResponse = { Ok: { leaderboard: RatingRankingItem[]; character_ranking: RatingRankingItem; season_end: DateTime<Utc> } } | { Error: { code: string; message: string; season_end: DateTime<Utc> } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingRewardPeriod

Source§

const DECL: &'static str = "export type RatingRewardPeriod = \"Daily\" | \"Weekly\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingType

Source§

const DECL: &'static str = "export type RatingType = \"Arena\" | \"Power\" | \"PvE\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for GetReferralsResponse

Source§

const DECL: &'static str = "export type GetReferralsResponse = { Ok: { patron_level: number; patron_experience: number; referrals_with_exp: ReferralWithExp[] } } | { Error: { code: string; message: string } };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ScreenType

Source§

const DECL: &'static str = "export type ScreenType = \"Main\" | \"AbilityGacha\" | \"ArenaRating\" | \"ArenaChooseOpponent\" | \"Ratings\" | \"Mail\" | \"Skills\" | \"Dungeon\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for SkinType

Source§

const DECL: &'static str = "declare namespace SkinType {\n export type Face = \"Face\";\n export type Armor = \"Armor\";\n export type Glove = \"Glove\";\n export type Hairstyle = \"Hairstyle\";\n export type Shoulder = \"Shoulder\";\n export type Weapon = \"Weapon\";\n export type HairColor = \"HairColor\";\n export type SkinColor = \"SkinColor\";\n export type Helmet = \"Helmet\";\n}\n\nexport type SkinType = \"Face\" | \"Armor\" | \"Glove\" | \"Hairstyle\" | \"Shoulder\" | \"Weapon\" | \"HairColor\" | \"SkinColor\" | \"Helmet\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StoneKind

Source§

const DECL: &'static str = "/**\n * Which of the two collections a stone belongs to.\n */\nexport type StoneKind = \"Trigger\" | \"Effect\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StoneSocketSlot

Source§

const DECL: &'static str = "/**\n * One of the three sockets a two-sided equipment slot carries.\n *\n * The trigger is shared: a slot has exactly one trigger driving both sides,\n * and only the effect it fires changes when the world flips.\n *\n * * `Trigger` \u{2014} the slot\\\'s single shared trigger.\n * * `RealEffect` \u{2014} the effect fired while the Real side is active.\n * * `FantasyEffect` \u{2014} the effect fired while the Fantasy side is active.\n *\n * Variant docs live here rather than on the variants themselves: a documented\n * variant makes the admin schema generate a `oneOf` of one-value enums instead\n * of a plain picker.\n */\nexport type StoneSocketSlot = \"Trigger\" | \"RealEffect\" | \"FantasyEffect\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StoneTier

Source§

const DECL: &'static str = "/**\n * Rarity tier of a stone.\n *\n * For a Trigger Stone the tier is the *shape of the condition* and its weight\n * in the flip gauge, not how hard it is to farm; for an Effect Stone it is the\n * shape of the action (instant / short state / schedule change).\n *\n * The declaration order is the strength order and `Ord` is derived from it:\n * `Common < Rare < Epic < Legendary`. `QuickEquipStones` ranks candidates by\n * `(tier, level)` \u{2014} tier first, because it drives both the gauge contribution\n * and the grammar of the effect, while level only scales a number.\n */\nexport type StoneTier = \"Common\" | \"Rare\" | \"Epic\" | \"Legendary\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for TalentBackendModifier

Source§

const DECL: &'static str = "/**\n * \u{41c}\u{43e}\u{434}\u{438}\u{444}\u{438}\u{43a}\u{430}\u{442}\u{43e}\u{440}\u{44b}, \u{43a}\u{43e}\u{442}\u{43e}\u{440}\u{44b}\u{435} \u{431}\u{44d}\u{43a}\u{435}\u{43d}\u{434} \u{43f}\u{440}\u{438}\u{43c}\u{435}\u{43d}\u{44f}\u{435}\u{442} \u{44f}\u{432}\u{43d}\u{43e} \u{432} \u{441}\u{432}\u{43e}\u{435}\u{439} \u{43b}\u{43e}\u{433}\u{438}\u{43a}\u{435}.\n * \u{41a}\u{430}\u{436}\u{434}\u{44b}\u{439} \u{432}\u{430}\u{440}\u{438}\u{430}\u{43d}\u{442} \u{441}\u{43e}\u{43e}\u{442}\u{432}\u{435}\u{442}\u{441}\u{442}\u{432}\u{443}\u{435}\u{442} \u{43a}\u{43e}\u{43d}\u{43a}\u{440}\u{435}\u{442}\u{43d}\u{43e}\u{43c}\u{443} \u{43c}\u{435}\u{441}\u{442}\u{443} \u{432} \u{431}\u{44d}\u{43a}\u{435}\u{43d}\u{434}-\u{43a}\u{43e}\u{434}\u{435}.\n */\nexport type TalentBackendModifier = { TalentResearchSpeedPercent: number };"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CharacterResetType

Source§

const DECL: &'static str = "declare namespace CharacterResetType {\n export type DailyQuests = \"DailyQuests\";\n export type WeeklyQuests = \"WeeklyQuests\";\n export type DungeonKeys = \"DungeonKeys\";\n export type DailyCurrencyReset = \"DailyCurrencyReset\";\n export type DailyOffers = \"DailyOffers\";\n export type InstantRewardGems = \"InstantRewardGems\";\n}\n\nexport type CharacterResetType = \"DailyQuests\" | \"WeeklyQuests\" | \"DungeonKeys\" | \"DailyCurrencyReset\" | \"DailyOffers\" | \"InstantRewardGems\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for VassalTaskStatus

Source§

const DECL: &'static str = "export type VassalTaskStatus = \"NotStarted\" | \"StartedGood\" | \"StartedBad\" | \"ChangedBadToGood\" | \"FinishedGood\" | \"FinishedBad\";"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Ability

Source§

const DECL: &'static str = "export interface Ability {\n template_id: AbilityId;\n level: number;\n shards_amount: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityDrop

Source§

const DECL: &'static str = "export interface AbilityDrop {\n template: AbilityTemplate;\n is_new: boolean;\n evolved_from: AbilityTemplate | null;\n is_checkpoint: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityRarity

Source§

const DECL: &'static str = "export interface AbilityRarity {\n id: AbilityRarityId;\n name: I18nString;\n order: number;\n color: string;\n bg_color: string;\n icon_url: string;\n icon_path: string;\n square_icon_path: string;\n eff?: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityTemplate

Source§

const DECL: &'static str = "export interface AbilityTemplate {\n id: AbilityId;\n is_fight_ui_visible: boolean;\n fight_ui_visibility: AbilityFightUiVisibility;\n name: I18nString;\n start_behavior?: string | null;\n behavior?: string | null;\n icon_url: string;\n icon_path: string;\n cooldown: number;\n /**\n * Mana spent by one cast. The cast does not happen while the caster\\\'s pool\n * is short: the ability waits for regen, its cooldown keeps running.\n * Mob and pet-ult casts ignore this (they carry no mana pool).\n */\n mana_cost: number;\n is_gacha_ability: boolean;\n available_to_bots?: boolean;\n rarity_id: AbilityRarityId;\n description: I18nString;\n description_values_script: string | null;\n vfx_object_path: string;\n cast_type: AbilityCastType;\n target_type?: AbilityTargetType;\n range?: number;\n /**\n * AoE cap: max enemies a band/cone AoE ability hits per cast, taking the\n * first N band-eligible targets in deterministic `fight.entities` order.\n * `None` = unlimited (legacy behaviour, back-compat). Consumed by the AoE\n * cast behaviors (`cone_strike`, Rewind, War Cry, Holy Nova).\n */\n max_targets: number | null;\n /**\n * What this ability does, for systems that react to a KIND of ability\n * rather than to a specific one. Required and explicit \u{2014} an untagged\n * ability is written `tags: []`, never omitted.\n */\n tags: AbilityTag[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ActiveAbility

Source§

const DECL: &'static str = "export interface ActiveAbility {\n ability: Ability;\n deadline: DateTime<Utc> | null;\n slot_id: AbilitySlotId | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for EquippedAbilities

Source§

const DECL: &'static str = "export interface EquippedAbilities {\n slotted: Record<AbilitySlotId, Ability>;\n unslotted: Ability[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for UpgradedAbilitiesMap

Source§

const DECL: &'static str = "export type UpgradedAbilitiesMap = Record<AbilityId, [number, number]>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityPresetsSettings

Source§

const DECL: &'static str = "export interface AbilityPresetsSettings {\n max_presets_count: number;\n default_preset_name: I18nString;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityStoneCompatibility

Source§

const DECL: &'static str = "/**\n * Which abilities a support accepts, as a predicate over [`AbilityTag`]s.\n *\n * `required_any_of` empty = `Any`. `forbidden` expresses the doc\\\'s\n * \\\"Any except Channelled\\\" form and composes with the required set.\n */\nexport interface AbilityStoneCompatibility {\n required_any_of: AbilityTag[];\n forbidden: AbilityTag[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityStoneDrop

Source§

const DECL: &'static str = "/**\n * One granted stone copy, for the client drop popup and quest progression.\n */\nexport interface AbilityStoneDrop {\n stone_id: AbilityStoneId;\n /**\n * Copies granted by this drop.\n */\n copies: number;\n /**\n * The player owned no copy of this stone before the drop.\n */\n is_new: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityStoneOp

Source§

const DECL: &'static str = "/**\n * One operation of a support stone, with its rank scaling.\n */\nexport interface AbilityStoneOp {\n kind: AbilityStoneOpKind;\n base_value: number;\n value_per_level: number;\n count: number;\n interval_ms: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityStoneSockets

Source§

const DECL: &'static str = "/**\n * Socketed ability stones: ability -> socket index -> stone template.\n */\nexport type AbilityStoneSockets = Record<AbilityId, Record<AbilityStoneSocketIndex, AbilityStoneId>>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilityStoneTemplate

Source§

const DECL: &'static str = "/**\n * One ability stone in the catalog. Ability stones are their OWN collection \u{2014}\n * they never mix with item stones or artifact stones and cannot be socketed\n * into their sockets.\n */\nexport interface AbilityStoneTemplate {\n id: AbilityStoneId;\n name: I18nString;\n description: I18nString;\n family: AbilityStoneFamily;\n compatibility: AbilityStoneCompatibility;\n ops: AbilityStoneOp[];\n power_q_first_rank: number;\n power_q_max_rank: number;\n icon_path: string;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for OwnedAbilityStone

Source§

const DECL: &'static str = "/**\n * One owned ability-stone stack. Upgrades are paid in RAW COPIES of the same\n * stone (the copies\\\' own level is irrelevant), so ownership is a per-template\n * stack, not a bag of instances.\n */\nexport interface OwnedAbilityStone {\n template_id: AbilityStoneId;\n level: number;\n /**\n * Raw copies held toward the next level.\n */\n copies: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for UpgradedAbilityStonesMap

Source§

const DECL: &'static str = "/**\n * What one `UpgradeAllAbilityStones` call actually changed: template id ->\n * (from, to) level. Modelled on `UpgradedStonesMap` and used the same way \u{2014}\n * the client shows its result window from this.\n *\n * Only stones that actually gained a level appear; one whose bank was too\n * short is simply absent rather than present with an unchanged pair.\n */\nexport type UpgradedAbilityStonesMap = Record<AbilityStoneId, [number, number]>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AdUsageData

Source§

const DECL: &'static str = "export interface AdUsageData {\n daily_count: number;\n last_reset_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Arena

Source§

const DECL: &'static str = "export interface Arena {\n matchmaking_opponents: MatchmakingOpponent[];\n is_free_refresh_available: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaLeaderboardRequest

Source§

const DECL: &'static str = "export interface ArenaLeaderboardRequest {\n character_id: Uuid;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaMatchesHistoryRequest

Source§

const DECL: &'static str = "export interface ArenaMatchesHistoryRequest {\n character_id: Uuid;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaPvpPlayersRequest

Source§

const DECL: &'static str = "export interface ArenaPvpPlayersRequest {\n character_id: Uuid;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaTickets

Source§

const DECL: &'static str = "export interface ArenaTickets {\n current_count: number;\n max_count: number;\n last_restore_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for League

Source§

const DECL: &'static str = "export interface League {\n id: Uuid;\n name: I18nString;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Match

Source§

const DECL: &'static str = "export interface Match {\n id: ArenaMatchId;\n opponent: OpponentPreview;\n is_win: boolean;\n rating_change: number;\n duration_secs: number;\n is_rematch_available: boolean;\n created_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RankingItem

Source§

const DECL: &'static str = "export interface RankingItem {\n user: User;\n character: Character;\n place: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Artifact

Source§

const DECL: &'static str = "/**\n * The player\\\'s one instance of an artifact template, plus the copies banked\n * against it.\n *\n * `level` is 1..=`max_artifact_level`. Copies are banked by\n * [`ArtifactCollection::grant_artifact`] and spent only by an explicit\n * [`ArtifactCollection::upgrade_artifact`] call.\n */\nexport interface Artifact {\n template_id: ArtifactTemplateId;\n level: number;\n /**\n * Raw copies banked for explicit upgrades. Copies continue accumulating at\n * the cap so duplicate grants are never silently discarded.\n */\n copies: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArtifactCollection

Source§

const DECL: &'static str = "/**\n * Everything a character owns in the artifact system.\n */\nexport interface ArtifactCollection {\n artifacts: Artifact[];\n /**\n * The single worn artifact. `None` before the vertical opens \u{2014} that player\n * plays exactly as before, because every artifact read starts here or at an\n * empty `artifacts`.\n */\n equipped: ArtifactTemplateId | null;\n /**\n * Owned artifact stones, each carrying its own socket assignment. Not owned\n * by any artifact: this is what makes the stones survive a swap.\n */\n stones: ArtifactStone[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArtifactStone

Source§

const DECL: &'static str = "/**\n * One artifact stone the player owns, and the socket it currently sits in.\n *\n * The socket lives on the stone, exactly like [`crate::stones::Stone`], so a\n * socketed stone never leaves the collection and cannot be lost by any\n * operation \u{2014} including swapping the worn artifact, which does not read this\n * list at all.\n */\nexport interface ArtifactStone {\n template_id: ArtifactStoneTemplateId;\n level: number;\n /**\n * Raw copies banked against this stone, spendable on the next level.\n */\n copies: number;\n /**\n * `Some` while socketed. One instance means one socket.\n */\n socket: ArtifactSocketSlot | null;\n /**\n * The law a right-column (Law) stone acts on. `None` for every Aspect\n * stone, and for a Law stone the player has not pointed anywhere yet \u{2014} such\n * a stone is inert, exactly like an empty socket.\n *\n * **The reference is to the LAW, never to a bridge or a link.** A bridge\n * has no id of its own (`character_law_bridges` is keyed by the law pair)\n * and v0.2 gives a law exactly one partner\n * (`mechanics::cores::MAX_BRIDGES_PER_LAW`, `validate_new_bridge`), so \\\"the\n * bridge that law X is in\\\" is an unambiguous address built out of one law\n * id. The consequence is deliberate and load-bearing rather than an\n * accident of the encoding: **if the player tears down the chosen law\\\'s\n * bridge and builds it a new one, the stone follows onto the new bridge by\n * itself.** Nothing points at the old link, so nothing has to be re-pointed.\n *\n * Cleared when the chosen law leaves its slot (the monolith\\\'s `unslot`),\n * so a stone can never hold a reference to a law that is not on a core.\n */\n law_target: LawTemplateId | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AutoChest

Source§

const DECL: &'static str = "export interface AutoChest {\n active_filter: AutoChestFilter | null;\n filters: AutoChestFilter[];\n power_compare_enabled: boolean;\n batch_size: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AutoChestFilter

Source§

const DECL: &'static str = "export interface AutoChestFilter {\n id: AutoChestFilterId;\n name: string;\n rarity_id: ItemRarityId | null;\n guaranteed_attribute_enabled: boolean;\n guaranteed_attribute_id: AttributeId | null;\n additional_attribute_enabled: boolean;\n additional_attribute_ids: AttributeId[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Bot

Source§

const DECL: &'static str = "export interface Bot {\n id: BotId;\n character_id: CharacterId;\n username: string;\n photo_url: string;\n arena_rating: number;\n power: number;\n class_id: ClassId;\n level: number;\n equipped_abilities: EquippedAbilities;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ActiveBuff

Source§

const DECL: &'static str = "export interface ActiveBuff {\n template_id: BuffTemplateId;\n expires_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleAbility

Source§

const DECL: &'static str = "export interface BundleAbility {\n template: AbilityTemplate;\n shards_amount: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleRaw

Source§

const DECL: &'static str = "export interface BundleRaw {\n id: BundleId;\n steps: BundleRawStep[];\n claim_mode?: BundleClaimMode;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleRawStep

Source§

const DECL: &'static str = "export interface BundleRawStep {\n item_type: BundleStepType;\n currencies?: CurrencyUnit[];\n currency_branch?: CurrencyBranchStep | null;\n behavior?: string | null;\n shards?: BundleShardAmount[];\n item_template_ids?: ItemTemplateId[];\n artifact_template_ids?: ArtifactTemplateId[];\n item_ttl_seconds?: number | null;\n has_pop_up: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleShardAmount

Source§

const DECL: &'static str = "/**\n * \u{424}\u{438}\u{43a}\u{441}\u{438}\u{440}\u{43e}\u{432}\u{430}\u{43d}\u{43d}\u{430}\u{44f} \u{432}\u{44b}\u{434}\u{430}\u{447}\u{430} \u{43e}\u{441}\u{43a}\u{43e}\u{43b}\u{43a}\u{43e}\u{432} \u{43e}\u{434}\u{43d}\u{43e}\u{439} \u{441}\u{43f}\u{43e}\u{441}\u{43e}\u{431}\u{43d}\u{43e}\u{441}\u{442}\u{438} \u{432} \u{448}\u{430}\u{433}\u{435} \u{431}\u{430}\u{43d}\u{434}\u{43b}\u{430}.\n */\nexport interface BundleShardAmount {\n ability_id: AbilityId;\n amount: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BundleStep

Source§

const DECL: &'static str = "export interface BundleStep {\n bundle_id: BundleId;\n element: BundleElement;\n has_pop_up: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CurrencyBranch

Source§

const DECL: &'static str = "/**\n * \u{41e}\u{434}\u{43d}\u{430} \u{432}\u{435}\u{442}\u{43a}\u{430} [`CurrencyBranchStep`]: \u{443}\u{441}\u{43b}\u{43e}\u{432}\u{438}\u{435} + \u{432}\u{430}\u{43b}\u{44e}\u{442}\u{44b} \u{43f}\u{440}\u{438} \u{441}\u{43e}\u{432}\u{43f}\u{430}\u{434}\u{435}\u{43d}\u{438}\u{438}.\n */\nexport interface CurrencyBranch {\n condition: CustomValueCondition;\n currencies: CurrencyUnit[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CurrencyBranchStep

Source§

const DECL: &'static str = "/**\n * \u{412}\u{430}\u{43b}\u{44e}\u{442}\u{43d}\u{430}\u{44f} \u{43d}\u{430}\u{433}\u{440}\u{430}\u{434}\u{430} \u{448}\u{430}\u{433}\u{430}, \u{432}\u{44b}\u{431}\u{438}\u{440}\u{430}\u{435}\u{43c}\u{430}\u{44f} \u{43f}\u{43e} `custom_values` \u{43f}\u{435}\u{440}\u{441}\u{43e}\u{43d}\u{430}\u{436}\u{430}: \u{432}\u{435}\u{442}\u{43a}\u{438}\n * \u{43f}\u{440}\u{43e}\u{432}\u{435}\u{440}\u{44f}\u{44e}\u{442}\u{441}\u{44f} \u{43f}\u{43e} \u{43f}\u{43e}\u{440}\u{44f}\u{434}\u{43a}\u{443}, \u{43f}\u{435}\u{440}\u{432}\u{430}\u{44f} \u{441}\u{43e}\u{432}\u{43f}\u{430}\u{432}\u{448}\u{430}\u{44f} \u{432}\u{44b}\u{434}\u{430}\u{451}\u{442} \u{441}\u{432}\u{43e}\u{438} \u{432}\u{430}\u{43b}\u{44e}\u{442}\u{44b}, \u{438}\u{43d}\u{430}\u{447}\u{435} `default`.\n */\nexport interface CurrencyBranchStep {\n branches: CurrencyBranch[];\n default: CurrencyUnit[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CharacterSettings

Source§

const DECL: &'static str = "export interface CharacterSettings {\n auto_sell_enabled: boolean;\n dont_show_case_upgrade_popup_today: boolean;\n gear_override_enabled_item_types: ItemType[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CharacterState

Source§

const DECL: &'static str = "export interface CharacterState {\n user: User;\n character: Character;\n currencies: CurrencyUnit[];\n inventory: Item[];\n all_abilities: Ability[];\n equipped_abilities: EquippedAbilities;\n /**\n * Owned ability stones (their own collection \u{2014} never item or artifact stones).\n */\n ability_stones: OwnedAbilityStone[];\n /**\n * Which stone sits in which ability socket.\n */\n ability_stone_sockets: AbilityStoneSockets;\n all_pets: Pet[];\n equipped_pets: EquippedPets;\n suzerain: Suzerain | null;\n vassals: Vassal[];\n vassal_tasks: VassalTask[];\n player_attributes: EntityAttributes;\n bundle_step_generic: BundleStepGeneric[];\n character_settings: CharacterSettings;\n character_skins: CharacterSkins;\n talent_levels: TalentLevelsMap;\n statue_state: StatueState;\n /**\n * \u{41f}\u{43e}\u{441}\u{442}\u{43e}\u{44f}\u{43d}\u{43d}\u{44b}\u{435} \u{43f}\u{440}\u{438}\u{431}\u{430}\u{432}\u{43a}\u{438} \u{43a} \u{441}\u{442}\u{430}\u{442}\u{430}\u{43c}, \u{43d}\u{430}\u{43a}\u{43e}\u{43f}\u{43b}\u{435}\u{43d}\u{43d}\u{44b}\u{435} \u{437}\u{430} \u{43a}\u{43e}\u{43b}\u{44b}\u{448}\u{43a}\u{438} Plinko.\n * \u{41d}\u{430}\u{447}\u{438}\u{441}\u{43b}\u{44f}\u{44e}\u{442}\u{441}\u{44f} \u{442}\u{43e}\u{43b}\u{44c}\u{43a}\u{43e} \u{441}\u{435}\u{440}\u{432}\u{435}\u{440}\u{43e}\u{43c} \u{432} \u{43e}\u{431}\u{440}\u{430}\u{431}\u{43e}\u{442}\u{447}\u{438}\u{43a}\u{435} `PlinkoBallDropped`.\n */\n plinko_pin_bonuses: PlinkoPinBonusesMap;\n ad_usage: AdUsageMap;\n /**\n * BAL-038: hidden per-family daily kill-faucet counters. Never shown to\n * the player; kept for telemetry, admin and debug.\n */\n kill_faucet_daily: KillFaucetDailyMap;\n active_buffs: ActiveBuff[];\n character_classes: CharacterClass[];\n /**\n * Twin cores, the laws slotted into them and the bridges between them.\n */\n cores: CoresState;\n /**\n * Owned Trigger/Effect Stones. Two collections that never mix, each stone\n * carrying its own socket assignment \u{2014} see [`crate::stones`].\n */\n stones: StoneInventory;\n /**\n * Owned artifacts, the worn one, and the stones in the artifact\\\'s six\n * sockets \u{2014} see [`crate::artifacts`].\n */\n artifacts: ArtifactCollection;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for FullClearCharacterRequest

Source§

const DECL: &'static str = "export interface FullClearCharacterRequest {\n username: string;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for GetCharacterStateRequest

Source§

const DECL: &'static str = "export interface GetCharacterStateRequest {\n character_id: Uuid;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Character

Source§

const DECL: &'static str = "export interface Character {\n id: CharacterId;\n user_id: Uuid;\n created_at: DateTime<Utc>;\n class: ClassId;\n /**\n * The class this character has ASKED to switch to, applied at the start of\n * their next fight (BAL-035). `None` while nothing is pending.\n *\n * The switch is free and has no cooldown, but it may not land mid-fight:\n * specialization, passive and legal loadout all change together, and a\n * fight that began under one class must finish under it. Until it lands,\n * `class` is still the applied one \u{2014} which is what keeps displayed and\n * matchmaking Power honest about the build the player is actually\n * fielding.\n */\n pending_class_id: ClassId | null;\n character_level: number;\n character_experience: number;\n patron_level: number;\n patron_experience: number;\n cases: number;\n current_chapter_level: number;\n current_fight_number: number;\n max_vassal_slots_count: number;\n custom_values: CustomValuesMap;\n item_case_level: number;\n /**\n * \u{422}\u{435}\u{43a}\u{443}\u{449}\u{438}\u{439} \u{443}\u{440}\u{43e}\u{432}\u{435}\u{43d}\u{44c} \u{433}\u{430}\u{447}\u{438} \u{441}\u{43f}\u{43e}\u{441}\u{43e}\u{431}\u{43d}\u{43e}\u{441}\u{442}\u{435}\u{439}.\n */\n ability_case_level: number;\n /**\n * \u{41d}\u{430}\u{43a}\u{43e}\u{43f}\u{43b}\u{435}\u{43d}\u{43d}\u{44b}\u{435} \u{43e}\u{447}\u{43a}\u{438} \u{43f}\u{440}\u{43e}\u{433}\u{440}\u{435}\u{441}\u{441}\u{430} \u{433}\u{430}\u{447}\u{438} \u{441}\u{43f}\u{43e}\u{441}\u{43e}\u{431}\u{43d}\u{43e}\u{441}\u{442}\u{435}\u{439}.\n * \u{418}\u{441}\u{442}\u{43e}\u{440}\u{438}\u{447}\u{435}\u{441}\u{43a}\u{43e}\u{435} \u{438}\u{43c}\u{44f} \u{43f}\u{43e}\u{43b}\u{44f} \u{441}\u{43e}\u{445}\u{440}\u{430}\u{43d}\u{435}\u{43d}\u{43e} \u{434}\u{43b}\u{44f} \u{43e}\u{431}\u{440}\u{430}\u{442}\u{43d}\u{43e}\u{439} \u{441}\u{43e}\u{432}\u{43c}\u{435}\u{441}\u{442}\u{438}\u{43c}\u{43e}\u{441}\u{442}\u{438}.\n */\n opened_ability_cases: number;\n /**\n * \u{412}\u{44b}\u{431}\u{440}\u{430}\u{43d}\u{43d}\u{44b}\u{435} \u{448}\u{430}\u{431}\u{43b}\u{43e}\u{43d}\u{44b} \u{441}\u{43f}\u{43e}\u{441}\u{43e}\u{431}\u{43d}\u{43e}\u{441}\u{442}\u{435}\u{439} \u{434}\u{43b}\u{44f} \u{432}\u{438}\u{448}\u{43b}\u{438}\u{441}\u{442}\u{430} \u{433}\u{430}\u{447}\u{438}.\n */\n ability_gacha_wishlist: AbilityId[];\n /**\n * \u{423}\u{440}\u{43e}\u{432}\u{43d}\u{438} \u{441}\u{43b}\u{43e}\u{442}\u{43e}\u{432} \u{441}\u{43f}\u{43e}\u{441}\u{43e}\u{431}\u{43d}\u{43e}\u{441}\u{442}\u{435}\u{439} \u{43f}\u{43e} \u{438}\u{43d}\u{434}\u{435}\u{43a}\u{441}\u{430}\u{43c} `slot_id`.\n */\n ability_slot_levels: number[];\n item_case_upgrade_finish_at: DateTime<Utc> | null;\n power: number;\n fight_class: FightClass | null;\n arena_rating: number;\n /**\n * \u{41f}\u{43e}\u{431}\u{435}\u{434}\u{43d}\u{430}\u{44f} \u{441}\u{435}\u{440}\u{438}\u{44f} \u{430}\u{440}\u{435}\u{43d}\u{44b} (\u{430}\u{442}\u{430}\u{43a}\u{438} \u{43f}\u{43e}\u{434}\u{440}\u{44f}\u{434} \u{431}\u{435}\u{437} \u{43f}\u{43e}\u{440}\u{430}\u{436}\u{435}\u{43d}\u{438}\u{44f}) \u{2014} \u{43f}\u{438}\u{442}\u{430}\u{435}\u{442}\n * \u{441}\u{442}\u{440}\u{438}\u{43a}-\u{431}\u{43e}\u{43d}\u{443}\u{441} \u{43e}\u{447}\u{43a}\u{43e}\u{432} \u{430}\u{441}\u{438}\u{43c}\u{43c}\u{435}\u{442}\u{440}\u{438}\u{447}\u{43d}\u{43e}\u{433}\u{43e} \u{43e}\u{431}\u{43c}\u{435}\u{43d}\u{430}.\n */\n arena_win_streak?: number;\n /**\n * \u{421}\u{435}\u{440}\u{438}\u{44f} \u{43f}\u{43e}\u{440}\u{430}\u{436}\u{435}\u{43d}\u{438}\u{439} \u{430}\u{440}\u{435}\u{43d}\u{44b} \u{2014} \u{432}\u{43a}\u{43b}\u{44e}\u{447}\u{430}\u{435}\u{442} \u{43c}\u{430}\u{442}\u{447}\u{43c}\u{435}\u{439}\u{43a}\u{438}\u{43d}\u{433}-\u{437}\u{430}\u{449}\u{438}\u{442}\u{443} (\u{433}\u{430}\u{440}\u{430}\u{43d}\u{442}\u{438}\u{440}\u{43e}\u{432}\u{430}\u{43d}\u{43d}\u{430}\u{44f}\n * \u{ab}\u{434}\u{43e}\u{431}\u{44b}\u{447}\u{430}\u{bb} \u{432} \u{441}\u{43f}\u{438}\u{441}\u{43a}\u{435} \u{43f}\u{43e}\u{441}\u{43b}\u{435} N \u{43f}\u{43e}\u{440}\u{430}\u{436}\u{435}\u{43d}\u{438}\u{439} \u{43f}\u{43e}\u{434}\u{440}\u{44f}\u{434}).\n */\n arena_loss_streak?: number;\n arena_last_pvp_at: DateTime<Utc> | null;\n last_boss_fight_won: boolean;\n auto_chest_enabled: boolean;\n last_filter_used_id: AutoChestFilterId | null;\n last_item_case_speedup_at: DateTime<Utc> | null;\n last_afk_reward_claimed_at: DateTime<Utc>;\n afk_reward_seed: number;\n last_gacha_ad_roll_at: DateTime<Utc> | null;\n /**\n * Number of chest upgrade speedups used today via watching an ad.\n */\n speedup_ad_daily_count: number;\n active_loop_task_id: Uuid | null;\n purchases_banned: boolean;\n completed_tutorials: number[];\n /**\n * \u{423}\u{440}\u{43e}\u{432}\u{43d}\u{438} \u{441}\u{43b}\u{43e}\u{442}\u{43e}\u{432} \u{43f}\u{435}\u{442}\u{43e}\u{432} \u{43f}\u{43e} \u{438}\u{43d}\u{434}\u{435}\u{43a}\u{441}\u{430}\u{43c} `slot_id`.\n */\n pet_slot_levels: number[];\n /**\n * \u{422}\u{435}\u{43a}\u{443}\u{449}\u{438}\u{439} \u{443}\u{440}\u{43e}\u{432}\u{435}\u{43d}\u{44c} \u{433}\u{430}\u{447}\u{438} \u{43f}\u{435}\u{442}\u{43e}\u{432}.\n */\n pet_case_level: number;\n /**\n * \u{41d}\u{430}\u{43a}\u{43e}\u{43f}\u{43b}\u{435}\u{43d}\u{43d}\u{44b}\u{435} \u{43e}\u{447}\u{43a}\u{438} \u{43f}\u{440}\u{43e}\u{433}\u{440}\u{435}\u{441}\u{441}\u{430} \u{433}\u{430}\u{447}\u{438} \u{43f}\u{435}\u{442}\u{43e}\u{432}.\n */\n opened_pet_cases: number;\n /**\n * \u{412}\u{44b}\u{431}\u{440}\u{430}\u{43d}\u{43d}\u{44b}\u{435} \u{448}\u{430}\u{431}\u{43b}\u{43e}\u{43d}\u{44b} \u{43f}\u{435}\u{442}\u{43e}\u{432} \u{434}\u{43b}\u{44f} \u{432}\u{438}\u{448}\u{43b}\u{438}\u{441}\u{442}\u{430} \u{433}\u{430}\u{447}\u{438}.\n */\n pet_gacha_wishlist: PetId[];\n /**\n * BAL-032: \u{441}\u{43a}\u{43e}\u{43b}\u{44c}\u{43a}\u{43e} \u{440}\u{43e}\u{43b}\u{43b}\u{43e}\u{432} \u{43f}\u{43e}\u{434}\u{440}\u{44f}\u{434} \u{43d}\u{435} \u{432}\u{44b}\u{434}\u{430}\u{43b}\u{438} \u{43f}\u{435}\u{440}\u{432}\u{443}\u{44e} \u{43a}\u{43e}\u{43f}\u{438}\u{44e} \u{43d}\u{43e}\u{432}\u{43e}\u{433}\u{43e} \u{43f}\u{435}\u{442}\u{430}.\n * \u{414}\u{43e}\u{441}\u{442}\u{438}\u{433}\u{43d}\u{443}\u{432} \u{43f}\u{43e}\u{440}\u{43e}\u{433}\u{430}, \u{441}\u{43b}\u{435}\u{434}\u{443}\u{44e}\u{449}\u{438}\u{439} \u{440}\u{43e}\u{43b}\u{43b} \u{433}\u{430}\u{440}\u{430}\u{43d}\u{442}\u{438}\u{440}\u{443}\u{435}\u{442} \u{435}\u{449}\u{451} \u{43d}\u{435} \u{43f}\u{43e}\u{43b}\u{443}\u{447}\u{435}\u{43d}\u{43d}\u{43e}\u{433}\u{43e} \u{43f}\u{435}\u{442}\u{430}.\n */\n pet_gacha_pity_pulls: number;\n /**\n * ID \u{43f}\u{435}\u{440}\u{441}\u{43e}\u{43d}\u{430}\u{436}\u{430}, \u{434}\u{43e}\u{431}\u{430}\u{432}\u{43b}\u{435}\u{43d}\u{43d}\u{43e}\u{433}\u{43e} \u{432} \u{43f}\u{430}\u{442}\u{438}.\n */\n party_character_id: Uuid | null;\n /**\n * ID \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{430}, \u{43a}\u{43e}\u{442}\u{43e}\u{440}\u{44b}\u{439} \u{441}\u{435}\u{439}\u{447}\u{430}\u{441} \u{438}\u{437}\u{443}\u{447}\u{430}\u{435}\u{442}\u{441}\u{44f} (\u{435}\u{441}\u{43b}\u{438} \u{435}\u{441}\u{442}\u{44c}).\n */\n talent_upgrading_id: TalentId | null;\n /**\n * \u{412}\u{440}\u{435}\u{43c}\u{44f} \u{437}\u{430}\u{432}\u{435}\u{440}\u{448}\u{435}\u{43d}\u{438}\u{44f} \u{438}\u{437}\u{443}\u{447}\u{435}\u{43d}\u{438}\u{44f} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{430}.\n */\n talent_upgrade_finish_at: DateTime<Utc> | null;\n /**\n * \u{412}\u{440}\u{435}\u{43c}\u{44f} \u{43f}\u{43e}\u{441}\u{43b}\u{435}\u{434}\u{43d}\u{435}\u{433}\u{43e} \u{430}\u{43a}\u{442}\u{438}\u{432}\u{43d}\u{43e}\u{433}\u{43e} \u{441}\u{43e}\u{435}\u{434}\u{438}\u{43d}\u{435}\u{43d}\u{438}\u{44f} \u{438}\u{433}\u{440}\u{43e}\u{43a}\u{430} (\u{43e}\u{431}\u{43d}\u{43e}\u{432}\u{43b}\u{44f}\u{435}\u{442}\u{441}\u{44f} \u{43a}\u{430}\u{436}\u{434}\u{44b}\u{439} \u{442}\u{438}\u{43a}).\n */\n last_online_at: DateTime<Utc>;\n /**\n * \u{41a}\u{43e}\u{43b}\u{438}\u{447}\u{435}\u{441}\u{442}\u{432}\u{43e} \u{43d}\u{430}\u{436}\u{430}\u{442}\u{438}\u{439} \u{43d}\u{430} \u{43c}\u{433}\u{43d}\u{43e}\u{432}\u{435}\u{43d}\u{43d}\u{443}\u{44e} \u{43d}\u{430}\u{433}\u{440}\u{430}\u{434}\u{443} AFK \u{437}\u{430} \u{433}\u{435}\u{43c}\u{44b} \u{437}\u{430} \u{441}\u{435}\u{433}\u{43e}\u{434}\u{43d}\u{44f}.\n */\n instant_reward_gems_press_count: number;\n /**\n * \u{41d}\u{430}\u{43a}\u{43e}\u{43f}\u{43b}\u{435}\u{43d}\u{43d}\u{44b}\u{435} \u{441}\u{442}\u{430}\u{43a}\u{438} \u{431}\u{443}\u{441}\u{442}\u{430} AFK-\u{43d}\u{430}\u{433}\u{440}\u{430}\u{434}\u{44b} \u{43e}\u{442} \u{43f}\u{440}\u{43e}\u{441}\u{43c}\u{43e}\u{442}\u{440}\u{430} \u{440}\u{435}\u{43a}\u{43b}\u{430}\u{43c}\u{44b}.\n * \u{41f}\u{440}\u{438}\u{43c}\u{435}\u{43d}\u{44f}\u{44e}\u{442}\u{441}\u{44f} \u{43a} \u{441}\u{43b}\u{435}\u{434}\u{443}\u{44e}\u{449}\u{435}\u{43c}\u{443} \u{43a}\u{43b}\u{435}\u{439}\u{43c}\u{443} AFK-\u{43d}\u{430}\u{433}\u{440}\u{430}\u{434}\u{44b} \u{438} \u{441}\u{431}\u{440}\u{430}\u{441}\u{44b}\u{432}\u{430}\u{44e}\u{442}\u{441}\u{44f}.\n */\n afk_boost_pending_stacks: number;\n /**\n * \u{412}\u{440}\u{435}\u{43c}\u{44f}, \u{434}\u{43e} \u{43a}\u{43e}\u{442}\u{43e}\u{440}\u{43e}\u{433}\u{43e} \u{43d}\u{435}\u{43b}\u{44c}\u{437}\u{44f} \u{43f}\u{43e}\u{43a}\u{430}\u{437}\u{44b}\u{432}\u{430}\u{442}\u{44c} \u{441}\u{43b}\u{435}\u{434}\u{443}\u{44e}\u{449}\u{443}\u{44e} \u{43f}\u{442}\u{438}\u{446}\u{443}.\n * \u{41a}\u{43e}\u{440}\u{43e}\u{442}\u{43a}\u{438}\u{439} \u{43a}\u{443}\u{43b}\u{434}\u{430}\u{443}\u{43d} \u{443}\u{441}\u{442}\u{430}\u{43d}\u{430}\u{432}\u{43b}\u{438}\u{432}\u{430}\u{435}\u{442}\u{441}\u{44f} \u{43f}\u{440}\u{438} \u{44d}\u{43c}\u{438}\u{442}\u{435} `ShowBird` \u{441}\u{435}\u{440}\u{432}\u{435}\u{440}\u{43e}\u{43c},\n * \u{43f}\u{43e}\u{43b}\u{43d}\u{44b}\u{439} \u{2014} \u{43f}\u{440}\u{438} \u{43f}\u{43e}\u{434}\u{442}\u{432}\u{435}\u{440}\u{436}\u{434}\u{435}\u{43d}\u{438}\u{438} \u{43f}\u{43e}\u{43a}\u{430}\u{437}\u{430} \u{43a}\u{43b}\u{438}\u{435}\u{43d}\u{442}\u{43e}\u{43c} (`BirdShown`).\n */\n bird_cooldown_until: DateTime<Utc> | null;\n /**\n * \u{411}\u{44b}\u{43b} \u{43b}\u{438} \u{443}\u{436}\u{435} \u{43f}\u{43e}\u{43a}\u{430}\u{437}\u{430}\u{43d} \u{438}\u{433}\u{440}\u{43e}\u{43a}\u{443} \u{43f}\u{440}\u{43e}\u{43c}\u{43f}\u{442} rate-us. \u{421}\u{435}\u{440}\u{432}\u{435}\u{440} \u{441}\u{442}\u{430}\u{432}\u{438}\u{442} true\n * \u{43f}\u{440}\u{438} \u{43f}\u{43e}\u{43b}\u{443}\u{447}\u{435}\u{43d}\u{438}\u{438} `RateUsShown` \u{43e}\u{442} \u{43a}\u{43b}\u{438}\u{435}\u{43d}\u{442}\u{430}; \u{43f}\u{43e}\u{43a}\u{430} false, \u{441}\u{435}\u{440}\u{432}\u{435}\u{440}\n * \u{43f}\u{440}\u{43e}\u{434}\u{43e}\u{43b}\u{436}\u{438}\u{442} \u{44d}\u{43c}\u{438}\u{442}\u{438}\u{442}\u{44c} `ShowRateUs` \u{43d}\u{430} \u{43a}\u{430}\u{436}\u{434}\u{43e}\u{439} \u{43d}\u{43e}\u{432}\u{43e}\u{439} \u{441}\u{435}\u{441}\u{441}\u{438}\u{438}, \u{43a}\u{430}\u{43a} \u{442}\u{43e}\u{43b}\u{44c}\u{43a}\u{43e}\n * `current_chapter_level >= game_settings.rate_us_chapter`.\n */\n rate_us_shown: boolean;\n /**\n * \u{41c}\u{438}\u{440} (Real/Fantasy), \u{441} \u{43a}\u{43e}\u{442}\u{43e}\u{440}\u{43e}\u{433}\u{43e} \u{44d}\u{442}\u{43e}\u{442} \u{43f}\u{435}\u{440}\u{441}\u{43e}\u{43d}\u{430}\u{436} \u{43d}\u{430}\u{447}\u{438}\u{43d}\u{430}\u{435}\u{442} \u{430}\u{440}\u{435}\u{43d}\u{430}-\u{431}\u{43e}\u{438} \u{2014}\n * \u{438} \u{43a}\u{430}\u{43a} \u{430}\u{442}\u{430}\u{43a}\u{443}\u{44e}\u{449}\u{438}\u{439}, \u{438} \u{43a}\u{430}\u{43a} \u{441}\u{43d}\u{430}\u{43f}\u{448}\u{43e}\u{442}-\u{43e}\u{43f}\u{43f}\u{43e}\u{43d}\u{435}\u{43d}\u{442} \u{432} \u{447}\u{443}\u{436}\u{438}\u{445} \u{431}\u{43e}\u{44f}\u{445}. `None` = \u{441}\u{432}\u{438}\u{442}\u{447}\n * \u{43d}\u{435} \u{442}\u{440}\u{43e}\u{433}\u{430}\u{43b}\u{438}, \u{441}\u{442}\u{430}\u{440}\u{442} \u{441}\u{43e} \u{441}\u{442}\u{43e}\u{440}\u{43e}\u{43d}\u{44b} durable flip_state \u{43a}\u{430}\u{43a} \u{440}\u{430}\u{43d}\u{44c}\u{448}\u{435}.\n */\n arena_world_side?: WorldSide | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Chat

Source§

const DECL: &'static str = "export interface Chat {\n id: ChatId;\n chat_type: ChatType;\n messages: ChatMessage[];\n last_read_message_id: ChatMessageId | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ChatMessage

Source§

const DECL: &'static str = "export interface ChatMessage {\n id: ChatMessageId | null;\n sender_character_id: Uuid;\n recipient_character_id: Uuid | null;\n chat_id: ChatId | null;\n chat_type: ChatType;\n text: string;\n created_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ChatSettings

Source§

const DECL: &'static str = "export interface ChatSettings {\n chat_type: ChatType;\n user_allowed_to_write: boolean;\n get_notification_on_messages: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ReadMessage

Source§

const DECL: &'static str = "export interface ReadMessage {\n chat_id: ChatId;\n message_id: ChatMessageId;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ReportChatMessage

Source§

const DECL: &'static str = "export interface ReportChatMessage {\n message_id: ChatMessageId;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CharacterClass

Source§

const DECL: &'static str = "export interface CharacterClass {\n character_id: CharacterId;\n class_id: ClassId;\n level: number;\n xp: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Class

Source§

const DECL: &'static str = "/**\n * Not `Eq`: the passive magnitudes are floats (BAL-033).\n */\nexport interface Class {\n id: ClassId;\n name: I18nString;\n description: I18nString;\n icon_path: string;\n background_image_path: string;\n character_asset: string;\n cast_time: number;\n spine: string;\n basic_abilities: AbilityId[];\n class_abilities: AbilityId[];\n starter_bundle_id: BundleId | null;\n attributes: ClassAttribute[];\n ability_rarity_id: AbilityRarityId;\n tier: ClassTier;\n demo_skins: SkinId[];\n weapon_type: I18nString;\n passive: ClassPassive;\n passive_power_q_l1: number;\n passive_power_q_l20: number;\n ability_power_q: ClassAbilityPowerQ[];\n passive_percent_l1: number;\n passive_percent_l20: number;\n passive_period_ticks: number;\n main_attribute: AttributeId;\n main_attribute_optimal_value: number;\n default_weapon_skin_id: SkinId;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ClassAbilityLevel

Source§

const DECL: &'static str = "export interface ClassAbilityLevel {\n ability_id: AbilityId;\n level: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ClassAbilityPowerQ

Source§

const DECL: &'static str = "/**\n * Approximate Power contribution of one class ability while it is EQUIPPED\n * (BAL-030\\\'s `q`). The ability\\\'s damage or heal payload is already priced\n * inside `P_static`; this is the utility half \u{2014} a damage window, a cooldown\n * cut, a team buff \u{2014} that no closed-form stat can express.\n */\nexport interface ClassAbilityPowerQ {\n ability_id: AbilityId;\n q: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ClassLevels

Source§

const DECL: &'static str = "export interface ClassLevels {\n class_id: ClassId;\n level: number;\n attrs: EntityAttribute[];\n price: CurrencyUnit;\n ability_levels: ClassAbilityLevel[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CoresState

Source§

const DECL: &'static str = "/**\n * Durable cores/laws/bridges state of one character. The all-zero default is\n * the pre-feature character: no cores, no laws, no bridges, multiplier \u{d7}1.0.\n */\nexport interface CoresState {\n real_level: number;\n fantasy_level: number;\n laws: OwnedLaw[];\n bridges: LawBridge[];\n /**\n * Out-of-combat Law pre-selections for the three Pet Facets that act on\n * \\\"one chosen Law\\\" (`LeadReading`, `WildReading`, `DreamReader`). Kept with\n * the laws because that is what they select; the all-`None` default is a\n * character who has never opened the picker.\n */\n pet_facet_law_choices: PetFacetLawChoices;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for LawAttributeModifier

Source§

const DECL: &'static str = "/**\n * One attribute the law moves while its side is up. This is the law\\\'s PASSIVE\n * half; the active half is [`LawTemplate::effect`].\n *\n * One number per modifier: the v0.1 `enhanced_value` twin is gone. Bridge\n * amplification is a percentage multiplier applied on top of this value, so a\n * law level and a bridge can never drift apart the way two authored numbers\n * could.\n *\n * Values are in the attribute\\\'s own native units \u{2014} the same units\n * `class_levels`, talents and statue grades use (`crit_chance` and every\n * `*.mod` are permyriad: `1500` = +15%, `10000` = \u{d7}1.0).\n */\nexport interface LawAttributeModifier {\n attribute_id: AttributeId;\n base_value: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for LawBridge

Source§

const DECL: &'static str = "/**\n * One bridge. Always stored side-normalized, so \\\"exactly two laws from\n * different cores\\\" is structural rather than a runtime check that could rot.\n */\nexport interface LawBridge {\n real_law_id: LawTemplateId;\n fantasy_law_id: LawTemplateId;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for LawTemplate

Source§

const DECL: &'static str = "/**\n * A law as authored in config.\n *\n * Not `Eq`: the Power coefficients are floats (BAL-030).\n */\nexport interface LawTemplate {\n id: LawTemplateId;\n name: I18nString;\n description: I18nString;\n side: WorldSide;\n /**\n * Deterministic unlock: raising the core of [`Self::side`] to this level\n * grants the law outright, at level 1 with no copies. Random law-copy\n * drops stay what they always were \u{2014} copy income for LEVELLING an owned\n * law, never the unlock path.\n *\n * `GameConfig::validate_cores_settings` requires every law to be reachable\n * by `CoresSettings::max_slot_level()`, so \\\"both cores at the last\n * slot-opening level\\\" always means \\\"every law owned\\\".\n */\n unlock_core_level: number;\n condition: LawCondition;\n condition_value: number;\n condition_tag: AbilityTag | null;\n condition_window_ticks: number;\n once_per_phase: boolean;\n effect: LawEffect;\n effect_value: number;\n effect_duration_ticks: number;\n resonance: number;\n is_active: boolean;\n modifiers: LawAttributeModifier[];\n power_q_first_rank: number;\n power_q_max_rank: number;\n icon_path: string;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for OwnedLaw

Source§

const DECL: &'static str = "/**\n * One law the character owns. There is at most one row per law template: the\n * first copy becomes the working instance, every further copy is stock for the\n * upgrade ladder (raw copies, their own level irrelevant).\n */\nexport interface OwnedLaw {\n template_id: LawTemplateId;\n /**\n * 1-based; raised by spending `copies` against the upgrade ladder.\n */\n level: number;\n /**\n * Raw copies in stock, not yet spent on the ladder.\n */\n copies: number;\n /**\n * Slot on the core of this law\\\'s own side, `None` when unslotted.\n */\n slot_index: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Currency

Source§

const DECL: &'static str = "export interface Currency {\n id: CurrencyId;\n name: I18nString;\n description: I18nString;\n icon_url: string;\n icon_path: string;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CurrencyUnit

Source§

const DECL: &'static str = "export interface CurrencyUnit {\n currency_id: CurrencyId;\n amount: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for DungeonRewards

Source§

const DECL: &'static str = "export interface DungeonRewards {\n difficulty_level: number;\n guaranteed_rewards: GuaranteedReward[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for DungeonTemplate

Source§

const DECL: &'static str = "export interface DungeonTemplate {\n id: DungeonTemplateId;\n title: I18nString;\n description: I18nString;\n key_currency_id: CurrencyId;\n max_difficulty_level: number;\n ui_banner_path: string;\n ui_background_path: string;\n tips: DungeonTip[];\n fight_template_ids: FightTemplateId[];\n rewards_by_difficulty: DungeonRewards[];\n main_reward: RewardType;\n chapter_level_unlock: number;\n /**\n * Optional delay, in milliseconds, before the next wave\\\'s spawn batch and\n * allied formation movement are scheduled. When absent, the server keeps\n * the standard 500 ms between-wave pause.\n */\n between_wave_spawn_delay_ticks: number | null;\n /**\n * Whether the allied formation advances between normal waves. When absent,\n * advancing remains enabled so existing dungeons and campaign fights keep\n * their current server-authoritative movement.\n */\n advance_formation_between_waves: boolean | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for DungeonTip

Source§

const DECL: &'static str = "export interface DungeonTip {\n difficulty_level: number;\n tip: I18nString;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Dungeons

Source§

const DECL: &'static str = "export interface Dungeons {\n completed_difficulties: Record<DungeonTemplateId, number>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for GuaranteedReward

Source§

const DECL: &'static str = "export interface GuaranteedReward {\n reward_type: RewardType;\n count: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Effect

Source§

const DECL: &'static str = "export interface Effect {\n id: EffectId;\n name: I18nString;\n behavior?: string | null;\n icon_url: string;\n icon_path: string;\n code: string;\n interval_ticks: number | null;\n required_attributes: string[] | null;\n events_subscribe: string[] | null;\n positive: boolean;\n vfx_path: string;\n duration?: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Coordinates

Source§

const DECL: &'static str = "export interface Coordinates {\n x: number;\n y: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Entity

Source§

const DECL: &'static str = "export interface Entity {\n id: EntityId;\n max_hp: number;\n hp: number;\n abilities: ActiveAbility[];\n actions_queue: EntityActionsQueue;\n attributes: EntityAttributes;\n effect_ids: EffectId[];\n coordinates: Coordinates;\n /**\n * Destination of the in-flight run, `None` when not moving. Also reserves\n * the cell so a concurrently-planning opponent will not run onto it.\n */\n move_target: Coordinates | null;\n width: number;\n rewards: EnemyReward[] | null;\n class_id: ClassId | null;\n team: EntityTeam;\n has_big_hp_bar: boolean;\n entity_template_id: EntityTemplateId | null;\n /**\n * Fight-local copy of this hero\\\'s global equipment-side state. Character\n * combatants carry `Some`; non-player entities carry `None`.\n */\n flip_state?: FlipState | null;\n /**\n * Fight-local mana. Character combatants carry `Some` (full at fight\n * start, never carried between fights); mobs carry `None` and are never\n * mana-gated.\n */\n mana: ManaPool | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for EntityAttributes

Source§

const DECL: &'static str = "export type EntityAttributes = Record<string, number>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ActorBreakdown

Source§

const DECL: &'static str = "/**\n * Everything one combatant produced during the fight.\n */\nexport interface ActorBreakdown {\n /**\n * Fight-local entity that dealt the damage / did the healing. `None` for\n * ownerless effects (DoT ticks, environment) \u{2014} they are collected into one\n * unowned actor rather than dropped.\n */\n entity_id: EntityId | null;\n entity_template_id: EntityTemplateId | null;\n team: EntityTeam;\n /**\n * One row per distinct source, in first-contribution order.\n */\n entries: BreakdownEntry[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BreakdownEntry

Source§

const DECL: &'static str = "/**\n * Aggregated totals for one (actor, source) pair.\n */\nexport interface BreakdownEntry {\n source: CombatSource;\n /**\n * Applied damage: post-mitigation, post-shield.\n */\n damage: number;\n /**\n * Applied heal: overheal above `max_hp` is not counted.\n */\n heal: number;\n /**\n * Damage or heal instances that landed a non-zero amount.\n */\n hits: number;\n /**\n * Of those, how many carried the `crit` marker.\n */\n crits: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for FightBreakdown

Source§

const DECL: &'static str = "/**\n * The retrievable per-fight summary. Written once, at `EndFight`.\n */\nexport interface FightBreakdown {\n /**\n * Instance id of the fight this summarizes (`ActiveFight::id`), not the\n * template \u{2014} a retry of the same stage is a different fight.\n */\n fight_instance_id: Uuid;\n fight_id: FightTemplateId;\n is_win: boolean;\n /**\n * Fight-clock ticks between fight start and `EndFight`.\n */\n duration_ticks: number;\n /**\n * Keyed by acting entity, so a party fight reports hero and ally\n * separately and the enemy side\\\'s rows are available for a\n * \\\"damage taken\\\" view.\n */\n actors: ActorBreakdown[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ActiveDungeon

Source§

const DECL: &'static str = "export interface ActiveDungeon {\n id: DungeonTemplateId;\n difficulty: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ActiveFight

Source§

const DECL: &'static str = "export interface ActiveFight {\n id: Uuid;\n fight_id: FightTemplateId;\n current_wave: number;\n player_id: EntityId;\n party_player_id: EntityId | null;\n entities: Entity[];\n fight_stopped: boolean;\n fight_ended: boolean;\n max_duration_ticks: number;\n dungeon: ActiveDungeon | null;\n paused: boolean;\n /**\n * Streaming wave pool: mobs of the current wave not yet released to the field (released\n * one per enemy death while non-empty). The wave/fight is complete only when this is empty\n * AND no enemy is alive. `#[serde(default)]` keeps pre-existing saves loading (empty pool).\n */\n pending_wave_spawns?: PendingWaveSpawn[];\n /**\n * Boss-summon: ids of mobs spawned by a boss summon wave (marked `summoned`).\n * Recorded on spawn so kill quests can skip their deaths at quest-tick time\n * (the dead entity is already removed from `entities` by then, mirroring the\n * `party_player_id` pattern). Keeps a boss fight\\\'s kill-quest ticks flat.\n * `#[serde(default)]` keeps pre-existing saves loading (empty list).\n */\n summoned_entity_ids?: EntityId[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for FightEntity

Source§

const DECL: &'static str = "export interface FightEntity {\n entity_type: EntityType;\n position: Coordinates;\n has_big_hp_bar: boolean;\n team: EntityTeam;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for FightTemplate

Source§

const DECL: &'static str = "export interface FightTemplate {\n id: FightTemplateId;\n title: I18nString;\n power: number | null;\n fight_entities: FightEntity[];\n max_duration_ticks: number;\n target_width_cells: number;\n starting_fx: string;\n fight_type: FightType;\n waves_amount: number;\n prepare_fight_waves?: PrepareFightWaves | null;\n start_behavior?: string | null;\n background: string;\n start_fight_delay_ticks: number | null;\n prepare_fight_win_duration_ticks: number | null;\n prepare_fight_lose_duration_ticks: number | null;\n end_fight_delay_ticks: number | null;\n bundle_reward_id: BundleId | null;\n stop_on_win: boolean;\n stop_on_lose: boolean;\n show_vs_screen: boolean;\n show_stages: boolean | null;\n is_dungeon?: boolean;\n is_bossfight?: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PendingWaveSpawn

Source§

const DECL: &'static str = "/**\n * One not-yet-released mob of a Streaming wave (docs/combat-feel-porting-plan.md, phase 3).\n * Fully precomputed at wave start by `spawn_wave` \u{2014} power-normalized attrs, position and the\n * spawn id (drawn from the wave\\\'s RNG stream in config order, so seed determinism holds no\n * matter when the release happens) \u{2014} and converted to a `SpawnEntity` event on release.\n * Deliberately a plain essences struct (not the event): the event type lives in\n * `overlord_event_system`, which depends on this crate.\n */\nexport interface PendingWaveSpawn {\n id: Uuid;\n entity_template_id: EntityTemplateId;\n position: Coordinates;\n attributes: EntityAttributes;\n has_big_hp_bar: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PrepareFightEntityPower

Source§

const DECL: &'static str = "export interface PrepareFightEntityPower {\n entity_id?: string | null;\n power?: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PrepareFightSpawn

Source§

const DECL: &'static str = "export interface PrepareFightSpawn {\n entity_id: string;\n delay?: number | null;\n position?: Coordinates | null;\n /**\n * Slot model (docs/combat-grid-migration-plan.md \u{a7}3): exit cooldown from wave\n * start, in SECONDS (same unit as `delay`, unlike ms-based clock ticks).\n * Filled by the template migrator as `delay + (x \u{2212} min_x \u{432}\u{43e}\u{43b}\u{43d}\u{44b}) \u{d7} 0.5`; inert\n * until the \u{444}\u{430}\u{437}\u{430}-2 spawn director reads it \u{2014} `delay`/`position` stay\n * authoritative for the old model meanwhile. `None` \u{21d2} 0.0 (exits immediately):\n * the admin build drops zero-valued optionals from game_config.json, so a\n * migrated `cooldown_seconds: 0` arrives here as absent \u{2014} read via\n * `unwrap_or(0.0)`.\n */\n cooldown_seconds?: number | null;\n row?: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PrepareFightWaves

Source§

const DECL: &'static str = "/**\n * Typed, config-level mirror of `overlord_event_system`\\\'s `WaveFightData` (the\n * shape `prepare_fight_script` builds inline and passes to `ctx.spawn_wave`).\n * Holds the wave data as typed config \u{2014} pure data, no combat and no RNG. Field\n * optionality mirrors `WaveFightData` exactly.\n */\nexport interface PrepareFightWaves {\n entities: PrepareFightEntityPower[];\n waves: PrepareFightSpawn[][];\n time: number;\n power?: number;\n /**\n * Streaming wave entry (docs/combat-feel-porting-plan.md, phase 3): when set, only this many\n * mobs of a wave are on the field at once \u{2014} the rest wait in a pool and run in one-per-death.\n * `None` (`null` in config) = the previous behaviour bit-for-bit (the whole wave spawns at\n * once).\n */\n stream_active_count: number | null;\n /**\n * Boss summon (owner 2026-07-10): when set, the LAST wave of the template\n * is a summon wave \u{2014} it never spawns on wave clear; it spawns the moment a\n * boss drops below this fraction of max HP (anchored at the player, normal\n * entrance runs). Boss killed before the trigger \u{21d2} the wave is skipped and\n * the fight ends. `None` = no summon wave, all waves behave as before.\n */\n summon_wave_at_hp_fraction: number | null;\n /**\n * Reward/weight budget for the fight (growing-enemy-waves plan \u{a7}2): \\\"this\n * fight pays out / weighs as if it had N mobs\\\". The content migrator writes\n * each fight\\\'s ORIGINAL total mob count here when it inflates concurrency.\n * `spawn_wave` stamps each mob with `wave_share = reward_mob_budget /\n * actual_total_mob_count` (per-10000 i64) so per-kill drop chance, pet-ult\n * charge fill and counterattack procs stay count-invariant. `None` (`null`)\n * \u{21d2} share 1.0 (all existing content bit-identical). Does NOT touch mob\n * HP/attack \u{2014} the wave normalization already handles stats.\n */\n reward_mob_budget: number | null;\n /**\n * Per-fight enemy damage multiplier: scales this fight\\\'s DAMAGE budget\n * (`eff_hp` in `spawn_wave`) only \u{2014} mob HP, fight length and loot pacing\n * stay unchanged. Compensates fight shapes whose sustained concurrency\n * (many mobs on field at once) delivers the same total damage in a less\n * survivable profile. `None` (`null`) \u{21d2} 1.0 (no change).\n */\n enemy_damage_mult: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for FlipState

Source§

const DECL: &'static str = "/**\n * Persistent, server-authoritative state shared by every flip equipment slot.\n */\nexport interface FlipState {\n /**\n * Side currently presented by all flip slots.\n */\n active_side: WorldSide;\n /**\n * Normalized accumulated progress in the range `[0, progress_threshold)`.\n */\n progress: number;\n /**\n * Monotonic animation key incremented once for every completed flip.\n */\n revision: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AbilitySlotsLevel

Source§

const DECL: &'static str = "export interface AbilitySlotsLevel {\n from_chapter_level: number;\n ability_slots: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Chapter

Source§

const DECL: &'static str = "export interface Chapter {\n id: Uuid;\n level: number;\n fight_ids: FightTemplateId[];\n title: I18nString;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CharacterLevel

Source§

const DECL: &'static str = "export interface CharacterLevel {\n level: number;\n ability_slots: number;\n required_experience: number;\n attributes: EntityAttribute[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CharacterLevelAttributeFormula

Source§

const DECL: &'static str = "/**\n * Per-attribute extrapolation for character levels beyond the authored table.\n *\n * `value(level) = round(anchor_value + coefficient * (level^exponent -\n * anchor_level^exponent))`. A flat attribute uses `coefficient = 0`. The\n * `coefficient`/`exponent` pair is chosen so the value AND its per-level slope\n * stay continuous with the last authored level (see `CharacterLevelFormula`).\n */\nexport interface CharacterLevelAttributeFormula {\n attribute_id: AttributeId;\n anchor_value: number;\n coefficient: number;\n exponent: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CharacterLevelFormula

Source§

const DECL: &'static str = "/**\n * Formula-driven, unbounded extrapolation of character levels ABOVE the\n * authored `character_levels` table. For `level <= anchor_level` the authored\n * table is used verbatim; for `level > anchor_level` stats and experience are\n * computed from these parameters, so levels are uncapped.\n *\n * Experience is cumulative and grows in TWO bands (BAL-009): up to\n * `experience_late_band_level` each level costs\n * `experience_marginal_growth` times the previous one, starting from\n * `experience_marginal_base` at `anchor_level + 1`; above it the ratio drops to\n * `experience_marginal_growth_late`. The seam is continuous \u{2014} the late band\\\'s\n * first marginal cost is the first band\\\'s last one times the late growth \u{2014} so\n * no second base is authored and the two can never drift apart.\n * `ability_slots` is constant (kept at the authored cap) so slots never grow\n * with infinite levels.\n */\nexport interface CharacterLevelFormula {\n anchor_level: number;\n anchor_experience: number;\n experience_marginal_base: number;\n experience_marginal_growth: number;\n experience_late_band_level: number;\n experience_marginal_growth_late: number;\n ability_slots: number;\n attributes: CharacterLevelAttributeFormula[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for EnemyReward

Source§

const DECL: &'static str = "export interface EnemyReward {\n currency_id: CurrencyId;\n from: number;\n to: number;\n drop_chance: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for EntityAttribute

Source§

const DECL: &'static str = "export interface EntityAttribute {\n attribute_id: AttributeId;\n value: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for EntityTemplate

Source§

const DECL: &'static str = "export interface EntityTemplate {\n id: EntityTemplateId;\n name: string;\n spine: string;\n spine_skin_path: string;\n spine_scale: number;\n cast_time: number;\n attributes: EntityAttribute[];\n ability_ids: AbilityId[];\n width: number;\n rewards: EnemyReward[];\n is_boss?: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetSlotsLevel

Source§

const DECL: &'static str = "export interface PetSlotsLevel {\n from_chapter_level: number;\n pet_slots: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AutoChestGatings

Source§

const DECL: &'static str = "export interface AutoChestGatings {\n autochest_button_unlock_character_level: number;\n chest_upgrade_button_unlock_chapter: number;\n show_chest_click_tip_until_stage: number;\n rarity_filter_unlock: number;\n guaranteed_stat_unlock: number;\n first_additional_stat_unlock: number;\n second_additional_stat_unlock: number;\n third_additional_stat_unlock: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CastleGating

Source§

const DECL: &'static str = "export interface CastleGating {\n castle_button_unlock_chapter: number;\n talent_tree_unlock_chapter: number;\n statue_unlock_chapter: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Gatings

Source§

const DECL: &'static str = "export interface Gatings {\n navbar_navigation: NavBarNavigation;\n sidebar_navigation: SideBarNavigation;\n autochest: AutoChestGatings;\n afk_rewards_button_unlock_chapter: number;\n party_unlock_chapter: number;\n shop_button_unlock_chapter: number;\n daily_boost_button_unlock_chapter: number;\n customization_screen_unlock_chapter: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for NavBarNavigation

Source§

const DECL: &'static str = "export interface NavBarNavigation {\n hero_button_unlock_chapter: number;\n skills_button_unlock_chapter: number;\n dungeon_button_unlock_chapter: number;\n summon_button_unlock_chapter: number;\n pets_button_unlock_chapter: number;\n runes_button_unlock_chapter: number;\n castle: CastleGating;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for SideBarNavigation

Source§

const DECL: &'static str = "export interface SideBarNavigation {\n quests_button_unlock_chapter: number;\n progress_pass_button_unlock_chapter: number;\n arena_button_unlock_chapter: number;\n ratings_button_unlock_chapter: number;\n mail_button_unlock_chapter: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for BotsSettings

Source§

const DECL: &'static str = "export interface BotsSettings {\n username_generation_settings: UsernameGenerationSettings;\n photo_generation_settings: PhotoGenerationSettings;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PhotoGenerationSettings

Source§

const DECL: &'static str = "export interface PhotoGenerationSettings {\n templates: string[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for UsernameGenerationSettings

Source§

const DECL: &'static str = "export interface UsernameGenerationSettings {\n prefixes: string[];\n suffixes: string[];\n template: string;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for UsersGeneratingSettings

Source§

const DECL: &'static str = "export interface UsersGeneratingSettings {\n username_generation_settings: UsernameGenerationSettings;\n photo_generation_settings: PhotoGenerationSettings;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Gift

Source§

const DECL: &'static str = "export interface Gift {\n id: GiftId;\n config_id: Uuid;\n sender_id: Uuid;\n receiver_id: Uuid;\n claimed: boolean;\n reward: CurrencyUnit[];\n loyalty: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for GiftTemplate

Source§

const DECL: &'static str = "export interface GiftTemplate {\n id: Uuid;\n gift_type: GiftType;\n price: CurrencyUnit[];\n reward: CurrencyUnit[];\n loyalty: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for InitParams

Source§

const DECL: &'static str = "export interface InitParams {\n user: User;\n character: Character;\n arena_tickets_unit: CurrencyUnit;\n locale: string;\n timezone: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for AutoChestSettings

Source§

const DECL: &'static str = "export interface AutoChestSettings {\n max_batch_size: number;\n auto_only_max_batch_size: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for InventoryLevel

Source§

const DECL: &'static str = "export interface InventoryLevel {\n from_chapter_level: number;\n slots: InventorySlotConfig[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for InventorySlotConfig

Source§

const DECL: &'static str = "export interface InventorySlotConfig {\n item_type: ItemType;\n world_side: WorldSide | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ItemCaseRarityWeight

Source§

const DECL: &'static str = "export interface ItemCaseRarityWeight {\n rarity_id: ItemRarityId;\n weight: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ItemCasesSettingsByLevel

Source§

const DECL: &'static str = "export interface ItemCasesSettingsByLevel {\n level: number;\n required_chapter_level: number;\n upgrade_cost: CurrencyUnit[];\n upgrade_time_secs: number;\n rarity_weights: ItemCaseRarityWeight[];\n auto_chest_settings: AutoChestSettings;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Attribute

Source§

const DECL: &'static str = "export interface Attribute {\n id: AttributeId;\n name: I18nString;\n prefix: I18nString | null;\n suffix: I18nString | null;\n code: string;\n icon: string;\n icon_path: string;\n db_code: number;\n denominator: number | null;\n is_percent: boolean;\n calculation_behavior?: string | null;\n order: number;\n is_ui_visible: boolean;\n description: I18nString;\n base_value?: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Item

Source§

const DECL: &'static str = "export interface Item {\n id: Uuid;\n item_template_id: ItemTemplateId;\n item_type: ItemType;\n /**\n * \u{421}\u{442}\u{43e}\u{440}\u{43e}\u{43d}\u{430} flip-\u{43f}\u{440}\u{435}\u{434}\u{43c}\u{435}\u{442}\u{430}; `None` \u{434}\u{43b}\u{44f} \u{43f}\u{43e}\u{441}\u{442}\u{43e}\u{44f}\u{43d}\u{43d}\u{44b}\u{445} \u{442}\u{438}\u{43f}\u{43e}\u{432} \u{44d}\u{43a}\u{438}\u{43f}\u{438}\u{440}\u{43e}\u{432}\u{43a}\u{438}.\n */\n world_side: WorldSide | null;\n rarity: ItemRarity;\n level: number;\n name: I18nString;\n icon_url: string;\n icon_path: string;\n is_equipped: boolean;\n price: CurrencyUnit[];\n experience: number;\n attributes: ItemAttribute[];\n /**\n * Small symmetric power variance applied at roll time (seeded RNG, symmetric\n * around 0). Stored and loaded from the `inventories.power_bonus` column.\n * Existing items loaded without the column default to 0 (no jitter) via the\n * `DEFAULT 0` migration. The jitter is added as a direct additive to the\n * computed `character_power` / `item_power` so it affects both the displayed\n * Combat-Power and the auto-equip comparison \u{2014} two items from the same\n * template at the same level will show different power if their jitter differs.\n */\n power_bonus: number;\n /**\n * \u{421}\u{440}\u{43e}\u{43a} \u{438}\u{441}\u{442}\u{435}\u{447}\u{435}\u{43d}\u{438}\u{44f} \u{432}\u{440}\u{435}\u{43c}\u{435}\u{43d}\u{43d}\u{43e}\u{433}\u{43e} \u{43f}\u{440}\u{435}\u{434}\u{43c}\u{435}\u{442}\u{430}; `None` \u{2014} \u{43f}\u{43e}\u{441}\u{442}\u{43e}\u{44f}\u{43d}\u{43d}\u{44b}\u{439}. \u{418}\u{441}\u{442}\u{451}\u{43a}\u{448}\u{438}\u{439}\n * \u{443}\u{434}\u{430}\u{43b}\u{44f}\u{435}\u{442}\u{441}\u{44f} \u{444}\u{443}\u{43d}\u{43a}\u{446}\u{438}\u{435}\u{439} `sweep_expired_items`.\n */\n expires_at: DateTime<Utc> | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ItemAttribute

Source§

const DECL: &'static str = "export interface ItemAttribute {\n attr_id: AttributeId;\n value: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ItemAttributeSettings

Source§

const DECL: &'static str = "export interface ItemAttributeSettings {\n optional_attributes_count: number;\n optional_attributes_ids: AttributeId[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ItemRarity

Source§

const DECL: &'static str = "export interface ItemRarity {\n id: ItemRarityId;\n code?: number;\n name: I18nString;\n text_color: string;\n rarity_icon: string;\n rarity_icon_path: string;\n ribbon_icon: string;\n ribbon_icon_path: string;\n order: number;\n q?: number;\n sell_q: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ItemTemplate

Source§

const DECL: &'static str = "export interface ItemTemplate {\n id: ItemTemplateId;\n name: I18nString;\n icon_url: string;\n icon_path: string;\n item_type: ItemType;\n /**\n * \u{421}\u{442}\u{43e}\u{440}\u{43e}\u{43d}\u{430} flip-\u{43f}\u{440}\u{435}\u{434}\u{43c}\u{435}\u{442}\u{430}; `None` \u{434}\u{43b}\u{44f} \u{43f}\u{43e}\u{441}\u{442}\u{43e}\u{44f}\u{43d}\u{43d}\u{44b}\u{445} \u{442}\u{438}\u{43f}\u{43e}\u{432} \u{44d}\u{43a}\u{438}\u{43f}\u{438}\u{440}\u{43e}\u{432}\u{43a}\u{438}.\n */\n world_side: WorldSide | null;\n rarity_id: ItemRarityId;\n attributes_settings: ItemAttributeSettings;\n skin_id: SkinId | null;\n exclude_from_mimic: boolean;\n required_class: ClassId | null;\n fixed_power?: number | null;\n next_mimic_item_code?: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for KillFaucetDailyState

Source§

const DECL: &'static str = "/**\n * One family\\\'s day.\n *\n * The band (`d`, cap) is SNAPSHOTTED on the first eligible roll after the daily\n * reset and then frozen until the next one. Chapter, mode, build or power\n * progress during the day never reprices it and never restores a chance that\n * has already decayed \u{2014} otherwise pushing a few chapters mid-session would\n * refresh a spent faucet, which is exactly the unattended-farm loop the cap\n * exists to bound.\n *\n * Stored in integers so `CharacterState` keeps its `Eq`: granted units are\n * whole by construction (one Cookie, one stone, `packet` Essence), and `D` is\n * held in micro-units the way BAL-021 holds Plinko tranches.\n */\nexport interface KillFaucetDailyState {\n /**\n * Units actually GRANTED today, not roll attempts. A proc clipped to the\n * remaining budget counts only what it paid out.\n */\n granted: number;\n /**\n * Snapshotted `D` in micro-units (`D \u{d7} 1_000_000`).\n */\n d_micro: number;\n /**\n * Snapshotted `ceil(2 \u{d7} D)`.\n */\n cap: number;\n last_reset_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaPlaceRestriction

Source§

const DECL: &'static str = "export interface ArenaPlaceRestriction {\n min_place: number | null;\n max_place: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ArenaRatingRestriction

Source§

const DECL: &'static str = "export interface ArenaRatingRestriction {\n min_rating: number | null;\n max_rating: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Mail

Source§

const DECL: &'static str = "export interface Mail {\n id: MailId;\n template_id: MailTemplateId;\n bundle: BundleStepGeneric | null;\n title: I18nString;\n message: I18nString;\n created_at: DateTime<Utc>;\n expires_at: DateTime<Utc>;\n is_read: boolean;\n is_claimed: boolean | null;\n is_deleted: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for MailRestrictions

Source§

const DECL: &'static str = "export interface MailRestrictions {\n arena_rating: ArenaRatingRestriction | null;\n power: PowerRestriction | null;\n arena_place: ArenaPlaceRestriction | null;\n pve_progress: PVEProgressRestriction | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for MailSendType

Source§

const DECL: &'static str = "export interface MailSendType {\n scheduled_at: string | null;\n repeat: MailRepeatType | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for MailTemplate

Source§

const DECL: &'static str = "export interface MailTemplate {\n id: MailTemplateId;\n title: I18nString;\n message: I18nString;\n bundle_id: BundleId | null;\n lifetime_secs: number;\n send_type: MailSendType;\n is_auto_send: boolean;\n restrictions: MailRestrictions | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PVEProgressRestriction

Source§

const DECL: &'static str = "export interface PVEProgressRestriction {\n min_progress: number | null;\n max_progress: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PowerRestriction

Source§

const DECL: &'static str = "export interface PowerRestriction {\n min_power: number | null;\n max_power: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ManaPool

Source§

const DECL: &'static str = "/**\n * Fight-local mana of one combatant.\n *\n * Character combatants (hero, party ally, human PvP opponent) carry `Some`;\n * mobs carry `None` and are never mana-gated. The pool is refilled to `max` at\n * every fight start and is not carried between fights \u{2014} outside a fight there\n * is no mana at all, so nothing can spend it.\n *\n * `current` is a float because regen is a per-second rate applied on the\n * millisecond fight clock; `updated_tick` makes the accrual drift-free and\n * independent of the heartbeat cadence (see [`ManaPool::regen_to`]).\n */\nexport interface ManaPool {\n /**\n * Full pool size, from `mana_settings.pool`.\n */\n max: number;\n /**\n * Points available right now.\n */\n current: number;\n /**\n * Points restored per second of fight time, from `mana_settings.regen_per_second`.\n */\n regen_per_second: number;\n /**\n * Ticker unit the pool was last accrued at (1 unit = 1 ms).\n */\n updated_tick: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for MatchmakingCache

Source§

const DECL: &'static str = "export interface MatchmakingCache {\n character_id: Uuid;\n opponent_ids: Uuid[];\n need_refresh: boolean;\n is_free_refresh_available: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Offer

Source§

const DECL: &'static str = "export interface Offer {\n id: OfferId;\n template_id: OfferTemplateId;\n created_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for OfferTemplate

Source§

const DECL: &'static str = "export interface OfferTemplate {\n id: OfferTemplateId;\n alias: string;\n title: I18nString;\n icon_path: string;\n reward_bundle_id: BundleId | null;\n payment_type: PaymentType;\n limit_of_buys: number | null;\n buys_reset_seconds: number | null;\n limit_buy_text: I18nString | null;\n events_subscribe: string[];\n shop_tab: ShopTab;\n enabled: boolean;\n flag_new: boolean;\n flag_sale: number | null;\n value: number | null;\n priority: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for OffersInfo

Source§

const DECL: &'static str = "export interface OffersInfo {\n active_offers: Offer[];\n offer_buy_counts: Record<OfferTemplateId, number>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ShopTabConfig

Source§

const DECL: &'static str = "export interface ShopTabConfig {\n tab: ShopTab;\n name: I18nString;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for OpponentPreview

Source§

const DECL: &'static str = "export interface OpponentPreview {\n id: Uuid;\n username: string;\n photo_url: string;\n arena_rating: number;\n power: number;\n level: number;\n class_id: ClassId;\n is_bot: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for OpponentStateBot

Source§

const DECL: &'static str = "export interface OpponentStateBot {\n bot: Bot;\n inventory: Item[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for OpponentStateHuman

Source§

const DECL: &'static str = "export interface OpponentStateHuman {\n character_state: CharacterState;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingCalculationData

Source§

const DECL: &'static str = "export interface RatingCalculationData {\n arena_rating: number;\n power: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PartyMemberPreview

Source§

const DECL: &'static str = "export interface PartyMemberPreview {\n id: Uuid;\n username: string;\n photo_url: string;\n power: number;\n adjusted_power: number | null;\n class_id: ClassId;\n active_abilities: EquippedAbilities;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetFacetLawChoices

Source§

const DECL: &'static str = "/**\n * The player\\\'s out-of-combat Law pre-selections for the three facets that need\n * one. `None` means \\\"not chosen yet\\\"; the runtime then falls back to the\n * lowest-slot eligible Law rather than picking at random or doing nothing.\n */\nexport interface PetFacetLawChoices {\n lead_reading: LawTemplateId | null;\n wild_reading: LawTemplateId | null;\n dream_reader: LawTemplateId | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for EquippedPets

Source§

const DECL: &'static str = "export interface EquippedPets {\n slotted: Record<PetSlotId, Pet>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Pet

Source§

const DECL: &'static str = "export interface Pet {\n template_id: PetId;\n name: I18nString;\n icon_path: string;\n rarity: PetRarity;\n level: number;\n shards_amount: number;\n stats: PetComputedSecondaryStat[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetComputedSecondaryStat

Source§

const DECL: &'static str = "export interface PetComputedSecondaryStat {\n attribute_id: AttributeId;\n value: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetDrop

Source§

const DECL: &'static str = "export interface PetDrop {\n template: PetTemplate;\n is_new: boolean;\n is_checkpoint: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetRarity

Source§

const DECL: &'static str = "export interface PetRarity {\n id: PetRarityId;\n name: I18nString;\n order: number;\n color: string;\n bg_color: string;\n icon_path: string;\n square_icon_path: string;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetSecondaryStat

Source§

const DECL: &'static str = "export interface PetSecondaryStat {\n attribute_id: AttributeId;\n base_value: number;\n per_level_value: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PetTemplate

Source§

const DECL: &'static str = "export interface PetTemplate {\n id: PetId;\n name: I18nString;\n icon_path: string;\n spine_path: string;\n rarity_id: PetRarityId;\n stats: PetSecondaryStat[];\n is_gacha_pet: boolean;\n /**\n * Real half of the pet\\\'s fixed facet pair. Part of the pet\\\'s identity: it\n * is not rolled on drop and cannot be re-socketed.\n */\n real_facet: PetFacet;\n /**\n * Fantasy half of the same pair.\n */\n fantasy_facet: PetFacet;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for UpgradedPetsMap

Source§

const DECL: &'static str = "export type UpgradedPetsMap = Record<PetId, [number, number]>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PlinkoPin

Source§

const DECL: &'static str = "/**\n * \u{41a}\u{43e}\u{43b}\u{44b}\u{448}\u{435}\u{43a}, \u{43a}\u{43e}\u{442}\u{43e}\u{440}\u{43e}\u{433}\u{43e} \u{43a}\u{43e}\u{441}\u{43d}\u{443}\u{43b}\u{441}\u{44f} \u{448}\u{430}\u{440}\u{438}\u{43a}: \u{440}\u{44f}\u{434} \u{438} \u{43a}\u{43e}\u{43b}\u{43e}\u{43d}\u{43a}\u{430} \u{432}\u{43d}\u{443}\u{442}\u{440}\u{438} \u{440}\u{44f}\u{434}\u{430}.\n * \u{412} \u{440}\u{44f}\u{434}\u{443} `row` \u{43a}\u{43e}\u{43b}\u{43e}\u{43d}\u{43a}\u{438} \u{43d}\u{443}\u{43c}\u{435}\u{440}\u{443}\u{44e}\u{442}\u{441}\u{44f} `0..=row`.\n */\nexport interface PlinkoPin {\n row: number;\n column: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PlinkoPinBonusesMap

Source§

const DECL: &'static str = "/**\n * \u{41d}\u{430}\u{43a}\u{43e}\u{43f}\u{43b}\u{435}\u{43d}\u{43d}\u{44b}\u{435} \u{437}\u{430} \u{432}\u{441}\u{451} \u{432}\u{440}\u{435}\u{43c}\u{44f} \u{431}\u{43e}\u{43d}\u{443}\u{441}\u{44b} \u{43e}\u{442} \u{43a}\u{43e}\u{43b}\u{44b}\u{448}\u{43a}\u{43e}\u{432} Plinko: \u{430}\u{442}\u{440}\u{438}\u{431}\u{443}\u{442} \u{2192} \u{441}\u{443}\u{43c}\u{43c}\u{430}\u{440}\u{43d}\u{430}\u{44f}\n * \u{43f}\u{440}\u{438}\u{431}\u{430}\u{432}\u{43a}\u{430}. \u{41f}\u{43e}\u{441}\u{442}\u{43e}\u{44f}\u{43d}\u{43d}\u{44b}\u{439} \u{43f}\u{440}\u{43e}\u{433}\u{440}\u{435}\u{441}\u{441}, \u{43a}\u{430}\u{43a} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{44b} \u{438} \u{441}\u{442}\u{430}\u{442}\u{443}\u{44f}; \u{43e}\u{433}\u{440}\u{430}\u{43d}\u{438}\u{447}\u{435}\u{43d} \u{43f}\u{43e}\u{442}\u{43e}\u{43b}\u{43a}\u{43e}\u{43c}\n * \u{430}\u{43a}\u{442}\u{438}\u{432}\u{43d}\u{43e}\u{433}\u{43e} \u{442}\u{440}\u{430}\u{43d}\u{448}\u{430} (`plinko_settings.tranches`, BAL-021).\n */\nexport type PlinkoPinBonusesMap = Record<AttributeId, number>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ProgressPassConfig

Source§

const DECL: &'static str = "export interface ProgressPassConfig {\n tiers: ProgressPassTierTemplate[];\n premium_offer_template_id: OfferTemplateId;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ProgressPassState

Source§

const DECL: &'static str = "export interface ProgressPassState {\n has_premium: boolean;\n tiers: ProgressPassTierState[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ProgressPassTierState

Source§

const DECL: &'static str = "export interface ProgressPassTierState {\n tier: number;\n is_unlocked: boolean;\n free_claimed: boolean;\n paid_claimed: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ProgressPassTierTemplate

Source§

const DECL: &'static str = "export interface ProgressPassTierTemplate {\n tier: number;\n quest_template_ids: QuestId[];\n free_reward_bundle_id: BundleId;\n paid_reward_bundle_id: BundleId;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for MatchmakingData

Source§

const DECL: &'static str = "export interface MatchmakingData {\n opponents: MatchmakingOpponent[];\n is_free_refresh_available: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for MatchmakingOpponent

Source§

const DECL: &'static str = "export interface MatchmakingOpponent {\n opponent: OpponentPreview;\n win_rating_increase: number;\n lose_rating_decrease: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Opponent

Source§

const DECL: &'static str = "export interface Opponent {\n user: User;\n character: Character;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for PVPState

Source§

const DECL: &'static str = "export interface PVPState {\n opponent_state: OpponentState;\n /**\n * Durable side snapshot used to initialize the opponent\\\'s fight-local\n * flip gauge. The viewer\\\'s simulation never persists changes to it.\n */\n opponent_flip_state?: FlipState;\n vassal: Vassal | null;\n rating_change: RatingChange | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingChange

Source§

const DECL: &'static str = "export interface RatingChange {\n winner_rating_increase: number;\n loser_rating_decrease: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for VassalPvpOpponent

Source§

const DECL: &'static str = "export interface VassalPvpOpponent {\n opponent: Opponent;\n suzerain: Opponent | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for VassalPvpPlayersFindRequest

Source§

const DECL: &'static str = "export interface VassalPvpPlayersFindRequest {\n character_id: Uuid;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestInstance

Source§

const DECL: &'static str = "export interface QuestInstance {\n id: QuestId;\n current: number;\n reward: BundleElement[];\n is_claimed: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestTemplate

Source§

const DECL: &'static str = "export interface QuestTemplate {\n id: QuestId;\n title: I18nString;\n description: I18nString;\n progress_behavior?: string | null;\n progress_target: number;\n quest_group_type: QuestGroupType;\n bundle_id: BundleId | null;\n progression_points: number;\n starting: boolean;\n next_quest_ids: QuestId[];\n events_subscribe: string[];\n additional_quests_behavior?: string | null;\n progress_if_inactive: boolean;\n screen_reference: ScreenType | null;\n code: string | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestsGroups

Source§

const DECL: &'static str = "export interface QuestsGroups {\n daily: QuestsProgressionGroup;\n weekly: QuestsProgressionGroup;\n lifetime: QuestInstance[];\n loop_tasks: QuestInstance[];\n patron_daily: QuestInstance[];\n patron_lifetime: QuestInstance[];\n hidden: QuestInstance[];\n achievements: QuestsProgressionGroup;\n progress_pass: QuestInstance[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestsProgressTrack

Source§

const DECL: &'static str = "export interface QuestsProgressTrack {\n current_points: number;\n period_end_date: DateTime<Utc>;\n rewards: QuestsTrackReward[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestsProgressionGroup

Source§

const DECL: &'static str = "export interface QuestsProgressionGroup {\n progress_track: QuestsProgressTrack;\n quests: QuestInstance[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestsProgressionPointSettings

Source§

const DECL: &'static str = "export interface QuestsProgressionPointSettings {\n points: number;\n reward?: CurrencyUnit[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestsProgressionSettings

Source§

const DECL: &'static str = "export interface QuestsProgressionSettings {\n daily: QuestsProgressionPointSettings[];\n weekly: QuestsProgressionPointSettings[];\n achievement: QuestsProgressionPointSettings[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for QuestsTrackReward

Source§

const DECL: &'static str = "export interface QuestsTrackReward {\n points_required: number;\n reward: CurrencyUnit[];\n is_claimed: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingLeaderboardRequest

Source§

const DECL: &'static str = "export interface RatingLeaderboardRequest {\n character_id: Uuid;\n rating_type: RatingType;\n limit: number;\n offset: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingRangeReward

Source§

const DECL: &'static str = "export interface RatingRangeReward {\n bundle_id: BundleId;\n legacy_mail_template_id: MailTemplateId | null;\n diapason_start: number;\n diapason_end: number | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingRankingItem

Source§

const DECL: &'static str = "export interface RatingRankingItem {\n user: User;\n character: Character;\n place: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingRewardAvailability

Source§

const DECL: &'static str = "export interface RatingRewardAvailability {\n /**\n * Rating whose reward indicators this row controls.\n */\n rating_type: RatingType;\n /**\n * Whether an unclaimed reward from the latest completed UTC day exists.\n */\n daily_available: boolean;\n /**\n * Whether an unclaimed reward from the latest completed UTC week exists.\n */\n weekly_available: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for RatingSettings

Source§

const DECL: &'static str = "export interface RatingSettings {\n id: RatingId;\n rating_type: RatingType;\n weekly_rating_range_rewards: RatingRangeReward[];\n daily_rating_range_rewards: RatingRangeReward[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for GetReferralsRequest

Source§

const DECL: &'static str = "export interface GetReferralsRequest {\n character_id: Uuid;\n offset: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Patron

Source§

const DECL: &'static str = "export interface Patron {\n character_id: Uuid;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ReferralLevelInfo

Source§

const DECL: &'static str = "export interface ReferralLevelInfo {\n level: number;\n required_experience: number;\n lvlup_reward: CurrencyUnit[];\n daily_reward: CurrencyUnit[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ReferralWithExp

Source§

const DECL: &'static str = "export interface ReferralWithExp {\n user: User;\n character: Character;\n experience: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ShareLinkParam

Source§

const DECL: &'static str = "export interface ShareLinkParam {\n character_id: Uuid;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CharacterSkins

Source§

const DECL: &'static str = "export interface CharacterSkins {\n equipped: SkinId[];\n available: SkinId[];\n blocked: SkinId[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for ConfigSkin

Source§

const DECL: &'static str = "export interface ConfigSkin {\n id: SkinId;\n name: I18nString;\n unlock_description: I18nString | null;\n code: string;\n skin_type: SkinType;\n icon_url: string;\n icon_path: string;\n spine_path: string;\n rarity_id: ItemRarityId;\n price: CurrencyUnit[] | null;\n color: string | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for SkinsSettings

Source§

const DECL: &'static str = "export interface SkinsSettings {\n default_unlocked_skins: SkinId[];\n default_equipped_skins: SkinId[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StatueBonusGrade

Source§

const DECL: &'static str = "/**\n * \u{413}\u{440}\u{435}\u{439}\u{434} \u{431}\u{43e}\u{43d}\u{443}\u{441}\u{430} \u{441}\u{442}\u{430}\u{442}\u{443}\u{438} (F, D, C, B, A, S, SS, SSS, SSS+)\n */\nexport interface StatueBonusGrade {\n id: StatueBonusGradeId;\n name: I18nString;\n color: string;\n order: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StatueBonusSlot

Source§

const DECL: &'static str = "/**\n * \u{41e}\u{434}\u{438}\u{43d} \u{437}\u{430}\u{43f}\u{43e}\u{43b}\u{43d}\u{435}\u{43d}\u{43d}\u{44b}\u{439} \u{441}\u{43b}\u{43e}\u{442} \u{43d}\u{430} \u{432}\u{43a}\u{43b}\u{430}\u{434}\u{43a}\u{435} \u{441}\u{442}\u{430}\u{442}\u{443}\u{438}\n */\nexport interface StatueBonusSlot {\n attribute_id: AttributeId;\n grade_id: StatueBonusGradeId;\n is_locked: boolean;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StatueSet

Source§

const DECL: &'static str = "/**\n * \u{41e}\u{434}\u{438}\u{43d} \u{441}\u{435}\u{442} (\u{432}\u{43a}\u{43b}\u{430}\u{434}\u{43a}\u{430}) \u{441}\u{442}\u{430}\u{442}\u{443}\u{438} \u{2014} Set 1 / Set 2 / Set 3\n */\nexport interface StatueSet {\n name: string;\n slots: StatueSlotsMap;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StatueSlotsMap

Source§

const DECL: &'static str = "/**\n * \u{41a}\u{430}\u{440}\u{442}\u{430} \u{441}\u{43b}\u{43e}\u{442}\u{43e}\u{432} \u{441}\u{442}\u{430}\u{442}\u{443}\u{438}: \u{43a}\u{43b}\u{44e}\u{447} \u{2014} \u{438}\u{43d}\u{434}\u{435}\u{43a}\u{441} \u{441}\u{43b}\u{43e}\u{442}\u{430}, \u{437}\u{43d}\u{430}\u{447}\u{435}\u{43d}\u{438}\u{435} \u{2014} \u{437}\u{430}\u{43f}\u{43e}\u{43b}\u{43d}\u{435}\u{43d}\u{43d}\u{44b}\u{439} \u{441}\u{43b}\u{43e}\u{442}.\n * \u{41e}\u{442}\u{441}\u{443}\u{442}\u{441}\u{442}\u{432}\u{443}\u{44e}\u{449}\u{438}\u{439} \u{43a}\u{43b}\u{44e}\u{447} \u{43e}\u{437}\u{43d}\u{430}\u{447}\u{430}\u{435}\u{442}, \u{447}\u{442}\u{43e} \u{441}\u{43b}\u{43e}\u{442} \u{435}\u{449}\u{451} \u{43d}\u{435} \u{431}\u{44b}\u{43b} \u{43f}\u{440}\u{43e}\u{43a}\u{430}\u{442}\u{430}\u{43d} (pending).\n */\nexport type StatueSlotsMap = Record<number, StatueBonusSlot>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StatueState

Source§

const DECL: &'static str = "/**\n * \u{41f}\u{43e}\u{43b}\u{43d}\u{43e}\u{435} \u{441}\u{43e}\u{441}\u{442}\u{43e}\u{44f}\u{43d}\u{438}\u{435} \u{441}\u{442}\u{430}\u{442}\u{443}\u{438} \u{438}\u{433}\u{440}\u{43e}\u{43a}\u{430}\n */\nexport interface StatueState {\n level: number;\n experience: number;\n /**\n * \u{418}\u{43d}\u{434}\u{435}\u{43a}\u{441} \u{430}\u{43a}\u{442}\u{438}\u{432}\u{43d}\u{43e}\u{433}\u{43e} \u{441}\u{435}\u{442}\u{430} (0\u{2013}2)\n */\n active_set_index: number;\n /**\n * \u{421}\u{435}\u{442}\u{44b} \u{441}\u{442}\u{430}\u{442}\u{443}\u{438} (1\u{2013}3 \u{432} \u{437}\u{430}\u{432}\u{438}\u{441}\u{438}\u{43c}\u{43e}\u{441}\u{442}\u{438} \u{43e}\u{442} \u{443}\u{440}\u{43e}\u{432}\u{43d}\u{44f})\n */\n sets: StatueSet[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Stone

Source§

const DECL: &'static str = "/**\n * The one instance a player owns of a catalog entry, plus its stock of raw\n * copies.\n *\n * `template_id` is the identity: at most one `Stone` per template per\n * collection, so there is no separate instance id. The database key is\n * `(character_id, template_id)` for the same reason.\n *\n * `level` is the upgrade level and `copies` is the currency that buys it. The\n * first copy becomes the instance at level 1 with zero copies banked; every\n * later copy increments `copies`. The ladder in\n * `configs::stones::StonesSettings::upgrade_ladder` says what each level costs.\n * The first copy already carries the full mechanic \u{2014} an upgrade only scales the\n * number it applies.\n */\nexport interface Stone {\n /**\n * The catalog entry this is the player\\\'s instance of, and its identity.\n */\n template_id: StoneTemplateId;\n tier: StoneTier;\n level: number;\n /**\n * Raw copies banked against this stone, spendable on the next level. Never\n * negative: a refused upgrade spends nothing.\n */\n copies: number;\n /**\n * `Some` while socketed. The stone stays in its collection either way \u{2014}\n * this is the whole of \\\"inserted\\\" and \\\"removed\\\". One instance means one\n * socket: the same template cannot sit in two slots.\n */\n socket: StoneSocketKey | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StoneInventory

Source§

const DECL: &'static str = "/**\n * Everything a character owns in the stone system: the two collections, kept\n * apart, plus the socket assignments carried by the stones themselves.\n */\nexport interface StoneInventory {\n trigger_stones: Stone[];\n effect_stones: Stone[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for StoneSocketKey

Source§

const DECL: &'static str = "/**\n * Where one socketed stone sits: which equipment slot, which of its three\n * sockets.\n *\n * Only the five two-sided equipment types have sockets \u{2014} the same five that\n * answer [`ItemType::supports_world_side`]. Keying off that predicate instead\n * of a second hand-written list is deliberate: the two lists cannot drift.\n */\nexport interface StoneSocketKey {\n item_type: ItemType;\n socket: StoneSocketSlot;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for UpgradedStonesMap

Source§

const DECL: &'static str = "/**\n * What one `UpgradeAllStones` call actually changed: template id -> (from, to)\n * level. Modelled on `UpgradedAbilitiesMap` and used the same way \u{2014} the client\n * shows the result window from this, and quests read it for progress.\n *\n * Only stones that actually gained a level appear; a stone whose bank was too\n * short is simply absent rather than present with an unchanged pair.\n */\nexport type UpgradedStonesMap = Record<StoneTemplateId, [number, number]>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for TalentAttributeBonus

Source§

const DECL: &'static str = "/**\n * \u{411}\u{43e}\u{43d}\u{443}\u{441} \u{430}\u{442}\u{440}\u{438}\u{431}\u{443}\u{442}\u{430} \u{441}\u{443}\u{449}\u{43d}\u{43e}\u{441}\u{442}\u{438} \u{43e}\u{442} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{430} (\u{43f}\u{43b}\u{43e}\u{441}\u{43a}\u{43e}\u{435} \u{437}\u{43d}\u{430}\u{447}\u{435}\u{43d}\u{438}\u{435})\n */\nexport interface TalentAttributeBonus {\n attribute_id: AttributeId;\n value: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for TalentLevel

Source§

const DECL: &'static str = "/**\n * \u{423}\u{440}\u{43e}\u{432}\u{435}\u{43d}\u{44c} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{430} (\u{443} \u{43a}\u{430}\u{436}\u{434}\u{43e}\u{433}\u{43e} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{430} 1-5 \u{443}\u{440}\u{43e}\u{432}\u{43d}\u{435}\u{439})\n */\nexport interface TalentLevel {\n level: number;\n cost: CurrencyUnit;\n duration_sec: number;\n /**\n * \u{411}\u{43e}\u{43d}\u{443}\u{441}\u{44b}, \u{43f}\u{440}\u{438}\u{43c}\u{435}\u{43d}\u{44f}\u{435}\u{43c}\u{44b}\u{435} \u{43a} \u{430}\u{442}\u{440}\u{438}\u{431}\u{443}\u{442}\u{430}\u{43c} \u{441}\u{443}\u{449}\u{43d}\u{43e}\u{441}\u{442}\u{438} (HP, \u{443}\u{440}\u{43e}\u{43d}, \u{437}\u{430}\u{449}\u{438}\u{442}\u{430} \u{438} \u{442}.\u{434}.)\n */\n attribute_bonuses: TalentAttributeBonus[];\n /**\n * \u{41c}\u{43e}\u{434}\u{438}\u{444}\u{438}\u{43a}\u{430}\u{442}\u{43e}\u{440}\u{44b}, \u{43e}\u{431}\u{440}\u{430}\u{431}\u{430}\u{442}\u{44b}\u{432}\u{430}\u{435}\u{43c}\u{44b}\u{435} \u{431}\u{44d}\u{43a}\u{435}\u{43d}\u{434}\u{43e}\u{43c} \u{43d}\u{430}\u{43f}\u{440}\u{44f}\u{43c}\u{443}\u{44e} (\u{43d}\u{435} \u{447}\u{435}\u{440}\u{435}\u{437} \u{430}\u{442}\u{440}\u{438}\u{431}\u{443}\u{442}\u{44b} \u{438} \u{43d}\u{435} \u{447}\u{435}\u{440}\u{435}\u{437} \u{441}\u{43a}\u{440}\u{438}\u{43f}\u{442}\u{44b})\n */\n backend_modifiers: TalentBackendModifier[];\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for TalentLevelsMap

Source§

const DECL: &'static str = "export type TalentLevelsMap = Record<TalentId, number>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for TalentPosition

Source§

const DECL: &'static str = "/**\n * \u{41f}\u{43e}\u{437}\u{438}\u{446}\u{438}\u{44f} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{430} \u{432} \u{434}\u{435}\u{440}\u{435}\u{432}\u{435} (\u{434}\u{43b}\u{44f} \u{43e}\u{442}\u{440}\u{438}\u{441}\u{43e}\u{432}\u{43a}\u{438} \u{43d}\u{430} \u{43a}\u{43b}\u{438}\u{435}\u{43d}\u{442}\u{435})\n */\nexport interface TalentPosition {\n col: number;\n row: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for TalentTemplate

Source§

const DECL: &'static str = "/**\n * \u{428}\u{430}\u{431}\u{43b}\u{43e}\u{43d} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{430}\n */\nexport interface TalentTemplate {\n id: TalentId;\n name: I18nString;\n description: I18nString;\n description_values_script: string | null;\n icon_url: string;\n icon_path: string;\n levels: TalentLevel[];\n unlock_condition: TalentUnlockCondition;\n position: TalentPosition;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for TalentTreeSettings

Source§

const DECL: &'static str = "/**\n * \u{41d}\u{430}\u{441}\u{442}\u{440}\u{43e}\u{439}\u{43a}\u{438} \u{434}\u{435}\u{440}\u{435}\u{432}\u{430} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{43e}\u{432}\n */\nexport interface TalentTreeSettings {\n time_skip_ticket_skips_sec: number;\n skip_currency_id: CurrencyId;\n skip_currency_skips_sec: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for TalentUnlockCondition

Source§

const DECL: &'static str = "/**\n * \u{423}\u{441}\u{43b}\u{43e}\u{432}\u{438}\u{435} \u{440}\u{430}\u{437}\u{431}\u{43b}\u{43e}\u{43a}\u{438}\u{440}\u{43e}\u{432}\u{43a}\u{438} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{430}\n */\nexport interface TalentUnlockCondition {\n /**\n * \u{421}\u{43f}\u{438}\u{441}\u{43e}\u{43a} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{43e}\u{432}, \u{43a}\u{43e}\u{442}\u{43e}\u{440}\u{44b}\u{435} \u{434}\u{43e}\u{43b}\u{436}\u{43d}\u{44b} \u{431}\u{44b}\u{442}\u{44c} \u{43f}\u{43e}\u{43b}\u{43d}\u{43e}\u{441}\u{442}\u{44c}\u{44e} \u{438}\u{437}\u{443}\u{447}\u{435}\u{43d}\u{44b} (\u{43f}\u{443}\u{441}\u{442}\u{43e}\u{439} = \u{43d}\u{435}\u{442} \u{442}\u{440}\u{435}\u{431}\u{43e}\u{432}\u{430}\u{43d}\u{438}\u{439})\n */\n required_talents: TalentId[];\n /**\n * \u{41c}\u{438}\u{43d}\u{438}\u{43c}\u{430}\u{43b}\u{44c}\u{43d}\u{43e}\u{435} \u{441}\u{443}\u{43c}\u{43c}\u{430}\u{440}\u{43d}\u{43e}\u{435} \u{43a}\u{43e}\u{43b}\u{438}\u{447}\u{435}\u{441}\u{442}\u{432}\u{43e} \u{432}\u{43b}\u{43e}\u{436}\u{435}\u{43d}\u{43d}\u{44b}\u{445} \u{43e}\u{447}\u{43a}\u{43e}\u{432} \u{442}\u{430}\u{43b}\u{430}\u{43d}\u{442}\u{43e}\u{432} (0 = \u{43d}\u{435}\u{442} \u{442}\u{440}\u{435}\u{431}\u{43e}\u{432}\u{430}\u{43d}\u{438}\u{439})\n */\n required_points: number;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for CustomValuesMap

Source§

const DECL: &'static str = "export type CustomValuesMap = Record<string, number>;"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for User

Source§

const DECL: &'static str = "export interface User {\n id: Uuid;\n active_character_id: Uuid;\n tg_id: number | null;\n firebase_id: string | null;\n photo_url: string | null;\n is_premium: boolean | null;\n is_deleted: boolean;\n first_name: string | null;\n last_name: string | null;\n username: string;\n username_discriminator: number | null;\n last_username_change_at: DateTime<Utc> | null;\n language_code: string;\n allows_write_to_pm: boolean | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Suzerain

Source§

const DECL: &'static str = "export interface Suzerain {\n character_id: Uuid;\n username: string;\n photo_url: string | null;\n loyalty: number;\n last_claimed_reward_at: DateTime<Utc>;\n last_claimed_power: number;\n current_power: number;\n current_reward: CurrencyUnit[];\n created_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for Vassal

Source§

const DECL: &'static str = "export interface Vassal {\n character_id: Uuid;\n username: string;\n photo_url: string | null;\n loyalty: number;\n last_claimed_reward_at: DateTime<Utc>;\n last_claimed_power: number;\n current_power: number;\n current_reward: CurrencyUnit[];\n created_at: DateTime<Utc>;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for VassalTask

Source§

const DECL: &'static str = "/**\n * Task in state\n */\nexport interface VassalTask {\n id: Uuid;\n template_task_id: Uuid;\n suzerain_id: Uuid;\n suzerain_power: number;\n vassal_id: Uuid;\n vassal_power: number;\n good_reward: CurrencyUnit[];\n bad_reward: CurrencyUnit[];\n good_loyalty: number;\n bad_loyalty: number;\n task_status: VassalTaskStatus;\n claimed_by_suzerain: boolean;\n claimed_by_vassal: boolean;\n started_at: DateTime<Utc> | null;\n finish_at: DateTime<Utc> | null;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType

Source§

impl Tsify for VassalTaskTemplate

Source§

const DECL: &'static str = "/**\n * Task in config\n */\nexport interface VassalTaskTemplate {\n id: Uuid;\n title: I18nString;\n duration_sec: number;\n /**\n * Name of the registered `currencies` native fn computing this task\\\'s\n * reward (good/bad chosen via the pushed `GoodTask`). Defaults to the\n * shipped constant-stub port; config that omits it keeps prod behavior.\n */\n reward_fn?: string;\n /**\n * Name of the registered `expression` native fn computing this task\\\'s\n * loyalty. Defaults to the shipped constant-stub port.\n */\n loyalty_fn?: string;\n}"

Source§

const SERIALIZATION_CONFIG: SerializationConfig

Source§

type JsType = JsType