use serde::Deserialize; use serde_repr::Deserialize_repr; use crate::pb_components::action::Action; use crate::pb_components::condition::Condition; #[derive(Deserialize)] #[serde(rename_all = "PascalCase")] pub struct PropValueData { pub id: i32, pub value: f32, pub is_ratio: bool, } #[derive(Deserialize)] #[serde(rename_all = "PascalCase")] pub struct VectorData([f32; 3]); impl VectorData { pub fn get_x(&self) -> f32 { self.0[0] } pub fn get_y(&self) -> f32 { self.0[1] } pub fn get_z(&self) -> f32 { self.0[2] } } #[derive(Deserialize, Clone, Debug)] #[serde(rename_all = "PascalCase")] pub struct RawVectorData { pub x: f32, pub y: f32, pub z: f32, } impl RawVectorData { pub fn get_x(&self) -> f32 { self.x } pub fn get_y(&self) -> f32 { self.y } pub fn get_z(&self) -> f32 { self.z } } #[derive(Deserialize)] #[serde(rename_all = "PascalCase")] pub struct EntranceEntityData { pub dungeon_id: i32, pub entrance_entity_id: i64, } #[derive(Deserialize_repr, PartialEq, Debug, Copy, Clone)] #[repr(i32)] pub enum GachaViewTypeInfoId { NoviceConvene = 1, FeaturedResonatorConvene = 2, FeaturedWeaponConvene = 3, StandardResonatorConvene = 4, StandardWeaponConvene = 5, BeginnersChoiceConvene = 6, MultipleChoiceResonatorConvene = 7, MultipleChoiceWeaponConvene = 8, } #[derive(Debug, Deserialize, Clone)] #[serde(rename_all = "PascalCase")] pub struct ConsumeItem { pub item_id: i32, pub count: i32, } #[derive(Deserialize, PartialEq, Debug, Copy, Clone)] pub enum EntityType { AdsorptionFoundation, AdviseItem, AiAlertNotifier, AiGearController, AiMovementGear, AirPassage, AiSceneItem, Animal, Animal2, AnnunciatorCenter, AnnunciatorWire, AreaOccupation, Audio, AudioBox, BatchBulletCaster, BeamCastBullet, BeamCaster, BeamCrystal, BeamDeliver, BeamReceiver, BondageTrap, BuffConsumer, BuffProducer, BurstCrystalFoundation, Chair, Chair2, ChallengeInteract, Chessboard, Chessman, ClientTrigger, Collect, Collect2, Collect3, CollectAnimal, CollectAnimalPart, CombatAnimal, CombatAnimal2, CombinedVisibleGroup, ControlConnector, ConveyorBelt, CookTool, CurveControlDestructible, CustomAoiEditor, Destructible, DestructibleControl, DestructibleExploreInteractor, DestructibleSceneBullet, DestructibleTrigger, Disc, Drop, DungeonEntry, DynamicPortalCreater, EffectArea, EnrichmentArea, EntityBatchRefresh, EntityBundle, EntityList, EntityPackage, ExploreSkillInteractor, FishingBoat, FollowShooter, FollowShooter2, FollowTrack, FollowTrackFoundation, Gramophone, GravityFlip, GroupAi, HackingTypeFollowShooter, HookLockPoint, HookSoundBox, HookWithRange, HorseBettingTuanzi, InhaledItem, InteractFoundation, InteractFoundationWithSceneItemAttribute, InteractGear, InteractGearGroup, InteractiveConditionListener, Item, ItemFoundation, JigsawFoundation, JigsawItem, KiteHook, LevelPlay, LevelPlayReward, LevelQteTrigger, LevelSeqTrigger, LevitateMagnet, LifePointCenter, Lift, LightDeliver, LocationSafety, Monitor, Monster, MonsterGachaBase, MonsterGachaItem, MoveableTrigger, NoRenderPortal, Npc, Npc2, PasserbyNpc, PhotoTarget, PhysicsSwing, Portal, Position, ProgressBarController, ProgressBarControllerWithAttribute, PullingObject, Range, RangeTriggerTargetGear, ReboundPlateGear, RefreshGroup, RenderSpecifiedRange, RenderSpecifiedRange2, Resurrection, RewardNpc, RollingFireball, Rotator, SceneAura, SceneBullet, SceneBulletCanHit, SceneBulletWithMovement, SceneItemStateHint, SimpleInteract, SimpleNPc, SkyboxTrigger, SlideRail, SoundBox, SpawnMonster, SpawnPasserbyNpc, Spline, SplineRange, SummonGongduolaPoint, StateSceneItem, StateTrigger, StatueFoundation, SuiGuangHook, TargetGear, TargetGear2, TargetGearGroup, TargetGearGroup2, TargetGearPro, TargetGearWithLevelPrefabPerform, TeleControl, TeleControl3, TeleControlGroup, Teleporter, TemplateEntitySpawner, TemporaryTeleporter, TimedStrikeDevice, TimelineTrackController, TimeStop, Trample, Trample2, Trample3, TreasureBox, Trigger, TriggerConditionListener, TuanziNpc, TurntableController, VacuumCleaner, VarManager, Vehicle, Vehicle2, VehicleNpc, VehicleSceneItem, VisibleTrigger, Vision, VisionItem, VisionTreasureBox, WalkingPatternController, WaterCollection, WaterSpout, Weapon, WindSource, } #[derive(Deserialize, PartialEq, Debug, Copy, Clone)] pub enum EntityLogic { Item, Animal, Monster, Vehicle, Npc, Vision, ClientOnly, ServerOnly, Custom, } #[derive(Debug, Deserialize)] pub enum LevelPlayType { Challenge, SilentArea, Dungeon, MonsterTreasure, Quest, Riddle, } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayOpenCondition { pub conditions: Option>, } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayActive { pub active_type: i32, } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayRewardConfigResetTypeMidNight { pub count: i32, } #[derive(Debug, Deserialize)] #[serde(tag = "Type")] pub enum LevelPlayRewardConfigResetType { MidNight(LevelPlayRewardConfigResetTypeMidNight), } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayRewardConfigInteract { pub reward_id: i32, pub reward_entity_id: i64, pub reward_complete_actions: Vec, pub first_complete_actions: Option>, pub reset: Option, } #[derive(Debug, Deserialize)] #[serde(tag = "Type")] pub enum LevelPlayRewardConfig { None, Interact(LevelPlayRewardConfigInteract), } #[derive(Debug, Deserialize)] pub enum FixedDateTime { Daily, Weekly } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayRefreshConfigFixedDateTime { pub update_type: FixedDateTime, } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayRefreshConfigCompleted { pub min_refresh_cd: i32, pub max_refresh_cd: i32, } #[derive(Debug, Deserialize)] #[serde(tag = "Type")] pub enum LevelPlayRefreshConfig { None, FixedDateTime(LevelPlayRefreshConfigFixedDateTime), Completed(LevelPlayRefreshConfigCompleted), } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayTrack { pub track_radius: i32, pub track_priority: i32, } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayMark { pub mark_id: i32, pub map_bg_path: String, } #[derive(Debug, Deserialize)] pub enum OnlineType { Multiplayer, Local, Hang, } #[derive(Debug, Deserialize)] pub enum ObjType { LevelPlay, } #[derive(Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase", deny_unknown_fields)] pub struct LevelPlayDataDetail { // Json file contains Data in name, so it has to be DataData pub id: i32, pub key: String, #[cfg(feature = "strict_json_fields")] pub internal_dest: String, pub level_id: i32, #[cfg(feature = "strict_json_fields")] pub tid_name: String, pub r#type: LevelPlayType, pub instance_id: i32, pub level_play_entity_id: i64, pub level_additive_id: i32, pub enter_radius: i32, pub leave_radius: i32, pub delay_refresh: bool, pub delay_destroy: bool, pub level_play_open_condition: LevelPlayOpenCondition, pub level_play_active: LevelPlayActive, pub level_play_reward_config: LevelPlayRewardConfig, pub level_play_refresh_config: LevelPlayRefreshConfig, pub level_play_track: LevelPlayTrack, pub level_play_mark: Option, pub enter_in_range_actions: Option>, pub pack_id: i32, pub online_type: OnlineType, pub obj_type: ObjType, #[cfg(feature = "strict_json_fields")] pub children: Option>, #[cfg(feature = "strict_json_fields")] pub reference: Vec, #[cfg(feature = "strict_json_fields")] pub weak_reference: Option>, pub exploratory_degree: Option, } #[derive(Clone, Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase")] pub struct StateMachineTransition { pub from: i32, pub to: i32, pub transition_prediction_type: i32, pub weight: i32, #[cfg(feature = "strict_json_fields")] pub conditions: Vec, // TODO: Implement conditions } #[derive(Clone, Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase")] pub struct StateMachineNodeCommon { pub uuid: i32, #[cfg(feature = "strict_json_fields")] pub is_anim_state_machine: Option, #[cfg(feature = "strict_json_fields")] pub is_conduit_node: Option, #[cfg(feature = "strict_json_fields")] pub is_any_state: Option, #[cfg(feature = "strict_json_fields")] pub name: String, #[cfg(feature = "strict_json_fields")] pub take_control_type: i32, #[cfg(feature = "strict_json_fields")] pub transition_rule: i32, pub children: Option>, pub transitions: Option>, #[cfg(feature = "strict_json_fields")] pub on_enter_actions: Option>, // TODO: Implement actions #[cfg(feature = "strict_json_fields")] pub on_exit_actions: Option>, // TODO: Implement actions #[cfg(feature = "strict_json_fields")] pub bind_states: Option>, // TODO: Implement bindStates #[cfg(feature = "strict_json_fields")] pub task: Option, // TODO: Implement bindStates } #[derive(Clone, Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase")] pub struct StateMachineNodeReferenced { pub reference_uuid: i32, #[serde(flatten)] pub common: StateMachineNodeCommon, } #[derive(Clone, Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase")] pub struct StateMachineNodeOverrideCommon { pub override_common_uuid: i32, #[serde(flatten)] pub common: StateMachineNodeCommon, } #[derive(Clone, Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase")] pub struct StateMachineNodeCustom { #[serde(flatten)] pub common: StateMachineNodeCommon, } #[derive(Clone, Debug, Deserialize)] #[serde(untagged)] pub enum StateMachineNode { Reference(StateMachineNodeReferenced), Override(StateMachineNodeOverrideCommon), Custom(StateMachineNodeCustom), } #[derive(Clone, Debug, Deserialize)] #[cfg_attr(feature = "strict_json_fields", serde(deny_unknown_fields))] #[serde(rename_all = "PascalCase")] pub struct StateMachineJson { pub version: u32, pub state_machines: Vec, pub nodes: Vec, }