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.

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