Working OpenUI interacts and Archive battles

Implement OpenUI interacts (currently configs only for Yorozuya and Archive)
Fully working Archive (battles and cutscenes)
This commit is contained in:
xeon 2024-07-30 03:04:55 +03:00
parent 2ccdf84dd0
commit 970dde020a
20 changed files with 2050 additions and 107 deletions

View file

@ -178,5 +178,27 @@
"transform": "Subway_PlayerPos_FromFortuneSquare02"
}
]
},
{
"event_id": 10000009,
"actions": [
{
"$type": "OpenUi",
"ui": "UIYorozuyaPage",
"args": 0,
"store_template_id": 1161
}
]
},
{
"event_id": 10000010,
"actions": [
{
"$type": "OpenUi",
"ui": "UIMainStoryPage",
"args": 0,
"store_template_id": 1191
}
]
}
]

View file

@ -0,0 +1,342 @@
[
{
"ID": 107010011,
"QuestName": "QuestName_107010011",
"QuestDesc": "QuestDesc_107010011",
"Target": "QuestTarget_107010011",
"QuestType": 1,
"Chapter": 1,
"Difficulty": 1,
"MonsterLevel": 1,
"RecommendedLevel": 1,
"EBCDABBGHMF": 3,
"MLLPFMLKIKF": 0,
"HollowID": 19900014,
"FirstBattleEventID": 19900014,
"BattleEventID": 19900019,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 101000101,
"Slot2Avatar": -1,
"Slot3Avatar": -1,
"Buddy": 0,
"HGJGIMKPHLH": false,
"LHNGFLLKHED": 0,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107010021,
"QuestName": "QuestName_107010021",
"QuestDesc": "QuestDesc_107010021",
"Target": "QuestTarget_107010021",
"QuestType": 1,
"Chapter": 1,
"Difficulty": 1,
"MonsterLevel": 1,
"RecommendedLevel": 1,
"EBCDABBGHMF": 3,
"MLLPFMLKIKF": 0,
"HollowID": 19900015,
"FirstBattleEventID": 19900015,
"BattleEventID": 19900015,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 101000201,
"Slot2Avatar": 101000202,
"Slot3Avatar": -1,
"Buddy": 0,
"HGJGIMKPHLH": false,
"LHNGFLLKHED": 0,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107010031,
"QuestName": "QuestName_107010031",
"QuestDesc": "QuestDesc_107010031",
"Target": "QuestTarget_107010031",
"QuestType": 1,
"Chapter": 1,
"Difficulty": 1,
"MonsterLevel": 1,
"RecommendedLevel": 1,
"EBCDABBGHMF": 3,
"MLLPFMLKIKF": 0,
"HollowID": 19900016,
"FirstBattleEventID": 19900016,
"BattleEventID": 19900016,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 101000302,
"Slot2Avatar": 101000301,
"Slot3Avatar": -1,
"Buddy": 0,
"HGJGIMKPHLH": false,
"LHNGFLLKHED": 0,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107010051,
"QuestName": "QuestName_107010051",
"QuestDesc": "QuestDesc_107010051",
"Target": "QuestTarget_107010051",
"QuestType": 1,
"Chapter": 1,
"Difficulty": 1,
"MonsterLevel": 6,
"RecommendedLevel": 6,
"EBCDABBGHMF": 3,
"MLLPFMLKIKF": 0,
"HollowID": 19900017,
"FirstBattleEventID": 19900017,
"BattleEventID": 19900017,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 101000501,
"Slot2Avatar": 101000502,
"Slot3Avatar": 101000503,
"Buddy": 101000504,
"HGJGIMKPHLH": true,
"LHNGFLLKHED": 2,
"JGKFLKJNNHI": true,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107020021,
"QuestName": "QuestName_107020021",
"QuestDesc": "QuestDesc_107020021",
"Target": "QuestTarget_107020021",
"QuestType": 1,
"Chapter": 2,
"Difficulty": 1,
"MonsterLevel": 9,
"RecommendedLevel": 9,
"EBCDABBGHMF": 3,
"MLLPFMLKIKF": 0,
"HollowID": 10202101,
"FirstBattleEventID": 10202101,
"BattleEventID": 10202101,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 1000010101,
"Slot2Avatar": 1000010102,
"Slot3Avatar": 1000010103,
"Buddy": 1000010104,
"HGJGIMKPHLH": true,
"LHNGFLLKHED": 2,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107020031,
"QuestName": "QuestName_107020031",
"QuestDesc": "QuestDesc_107020031",
"Target": "QuestTarget_107020031",
"QuestType": 1,
"Chapter": 2,
"Difficulty": 1,
"MonsterLevel": 9,
"RecommendedLevel": 9,
"EBCDABBGHMF": 3,
"MLLPFMLKIKF": 0,
"HollowID": 10202102,
"FirstBattleEventID": 10202102,
"BattleEventID": 10202102,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 1000010201,
"Slot2Avatar": 1000010202,
"Slot3Avatar": 1000010203,
"Buddy": 1000010204,
"HGJGIMKPHLH": true,
"LHNGFLLKHED": 2,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107020041,
"QuestName": "QuestName_107020041",
"QuestDesc": "QuestDesc_107020041",
"Target": "QuestTarget_107020041",
"QuestType": 1,
"Chapter": 2,
"Difficulty": 1,
"MonsterLevel": 9,
"RecommendedLevel": 9,
"EBCDABBGHMF": 3,
"MLLPFMLKIKF": 0,
"HollowID": 10202103,
"FirstBattleEventID": 10202103,
"BattleEventID": 10202103,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 1000010301,
"Slot2Avatar": 1000010302,
"Slot3Avatar": 1000010303,
"Buddy": 1000010304,
"HGJGIMKPHLH": true,
"LHNGFLLKHED": 2,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107030021,
"QuestName": "QuestName_107030021",
"QuestDesc": "QuestDesc_107030021",
"Target": "QuestTarget_107030021",
"QuestType": 1,
"Chapter": 3,
"Difficulty": 1,
"MonsterLevel": 11,
"RecommendedLevel": 11,
"EBCDABBGHMF": 4,
"MLLPFMLKIKF": 0,
"HollowID": 10202104,
"FirstBattleEventID": 10202104,
"BattleEventID": 10202104,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 1000010601,
"Slot2Avatar": 1000010602,
"Slot3Avatar": 1000010603,
"Buddy": 1000010604,
"HGJGIMKPHLH": true,
"LHNGFLLKHED": 2,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107030031,
"QuestName": "QuestName_107030031",
"QuestDesc": "QuestDesc_107030031",
"Target": "QuestTarget_107030031",
"QuestType": 1,
"Chapter": 3,
"Difficulty": 1,
"MonsterLevel": 12,
"RecommendedLevel": 12,
"EBCDABBGHMF": 4,
"MLLPFMLKIKF": 0,
"HollowID": 10202106,
"FirstBattleEventID": 10202106,
"BattleEventID": 10202106,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 1000010701,
"Slot2Avatar": 1000010702,
"Slot3Avatar": 1000010703,
"Buddy": 1000010704,
"HGJGIMKPHLH": true,
"LHNGFLLKHED": 2,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
},
{
"ID": 107030041,
"QuestName": "QuestName_107030041",
"QuestDesc": "QuestDesc_107030041",
"Target": "QuestTarget_107030041",
"QuestType": 1,
"Chapter": 3,
"Difficulty": 1,
"MonsterLevel": 13,
"RecommendedLevel": 13,
"EBCDABBGHMF": 4,
"MLLPFMLKIKF": 0,
"HollowID": 10202108,
"FirstBattleEventID": 10202108,
"BattleEventID": 10202108,
"GGAEGKMMGLN": 999,
"BattleRank": "1|101|208",
"Slot1Avatar": 1000010801,
"Slot2Avatar": 1000010802,
"Slot3Avatar": 1000010803,
"Buddy": 1000010804,
"HGJGIMKPHLH": true,
"LHNGFLLKHED": 2,
"JGKFLKJNNHI": false,
"KIFDIIKMIBJ": "Chapter0",
"EDECGDLJIEB": "UI/Sprite/A1DynamicLoad/Hollow/ImgMission/UnPacker/ImgMission01.png",
"JGBDOPDIDHA": "",
"DGLENAGIGBO": false,
"NPEBHOLENNI": 205,
"NEIIOOLBAPD": false,
"NABBCKLEDME": 0,
"FBDEJOEECMJ": "",
"CPJIMNGMCDO": 0
}
]

File diff suppressed because it is too large Load diff

View file

@ -38,4 +38,5 @@ macro_rules! actions {
actions! {
SwitchSection;
OpenUi;
}

View file

@ -0,0 +1,19 @@
use serde::Deserialize;
#[derive(Deserialize, Debug)]
pub struct ConfigOpenUi {
pub ui: String,
pub args: i32,
pub store_template_id: i32,
}
impl ConfigOpenUi {
pub fn to_protocol(&self) -> ::proto::ActionOpenUi {
::proto::ActionOpenUi {
ui: self.ui.clone(),
args: self.args,
store_template_id: self.store_template_id,
..Default::default()
}
}
}

View file

@ -0,0 +1,28 @@
use serde::Deserialize;
template_id!(ArchiveBattleQuest u32 id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct ArchiveBattleQuestTemplate {
#[serde(rename = "ID")]
pub id: ArchiveBattleQuestID,
pub quest_name: String,
pub quest_desc: String,
pub target: String,
pub quest_type: u32,
pub chapter: u32,
pub difficulty: u32,
pub monster_level: u32,
#[serde(rename = "HollowID")]
pub hollow_id: u32,
#[serde(rename = "FirstBattleEventID")]
pub first_battle_event_id: u32,
#[serde(rename = "BattleEventID")]
pub battle_event_id: u32,
pub battle_rank: String,
pub slot1_avatar: i32,
pub slot2_avatar: i32,
pub slot3_avatar: i32,
pub buddy: i32,
}

View file

@ -0,0 +1,20 @@
use serde::Deserialize;
template_id!(ArchiveFileQuest u32 id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct ArchiveFileQuestTemplate {
#[serde(rename = "ID")]
pub id: ArchiveFileQuestID,
#[serde(rename = "ArchiveID")]
pub archive_id: u32,
pub difficulty_lv: u32,
pub show_type: u32,
pub recommended_hit_types: Vec<u32>,
pub video: String,
pub archive_file_name: String,
pub archive_file_num: String,
pub archive_file_ni_ds: Vec<u32>,
pub auto_distribution: bool,
}

View file

@ -84,4 +84,6 @@ template_tables! {
WeaponTemplate;
MainCityObjectTemplate;
MainCityDefaultObjectTemplate;
ArchiveFileQuestTemplate;
ArchiveBattleQuestTemplate;
}

View file

@ -124,6 +124,22 @@ pub async fn on_player_operation(
})
}
pub async fn on_player_system_parameter_change(
_session: &NetSession,
_player: &mut Player,
req: PlayerSystemParameterChangeCsReq,
) -> NetResult<PlayerSystemParameterChangeScRsp> {
tracing::info!(
"PlayerSystemParameterChange(type={}, param={})",
req.r#type,
req.params,
);
Ok(PlayerSystemParameterChangeScRsp {
retcode: Retcode::RetSucc.into(),
})
}
pub async fn on_pop_up_window_seen(
_session: &NetSession,
_player: &mut Player,

View file

@ -98,6 +98,7 @@ req_handlers! {
world::LeaveCurDungeon;
world::InteractWithUnit;
world::EnterSection;
world::ArchiveQuestsSeen;
client_systems::ReportUiLayoutPlatform;
client_systems::PlayerOperation;
client_systems::UnlockNewbieGroup;
@ -105,6 +106,7 @@ req_handlers! {
client_systems::PopUpWindowSeen;
client_systems::ReportSystemSettingsChange;
client_systems::InteractWithSceneObject;
client_systems::PlayerSystemParameterChange;
perform::PerformTrigger;
perform::PerformEnd;
perform::PerformJump;
@ -115,6 +117,8 @@ req_handlers! {
item::WeaponDress;
item::WeaponUnDress;
event_graph::RunEventGraph;
quest::BeginArchiveBattleQuest;
quest::FinishArchiveQuest;
}
notify_handlers! {

View file

@ -1,5 +1,3 @@
use super::core::NetError;
use crate::logic::{
game::{GameInstance, LogicError},
procedure::ProcedureAction,
@ -12,14 +10,12 @@ pub async fn on_perform_trigger(
player: &mut Player,
req: PerformTriggerCsReq,
) -> NetResult<PerformTriggerScRsp> {
let GameInstance::Fresh(fresh_game) = &mut player.game_instance else {
return Err(NetError::from(Retcode::RetFail));
};
fresh_game
.procedure_mgr
.on_action(ProcedureAction::PerformTrigger)
.map_err(LogicError::from)?;
if let GameInstance::Fresh(fresh_game) = &mut player.game_instance {
fresh_game
.procedure_mgr
.on_action(ProcedureAction::PerformTrigger)
.map_err(LogicError::from)?;
}
Ok(PerformTriggerScRsp {
retcode: Retcode::RetSucc.into(),
@ -32,14 +28,12 @@ pub async fn on_perform_end(
player: &mut Player,
_req: PerformEndCsReq,
) -> NetResult<PerformEndScRsp> {
let GameInstance::Fresh(fresh_game) = &mut player.game_instance else {
return Err(NetError::from(Retcode::RetFail));
};
fresh_game
.procedure_mgr
.on_action(ProcedureAction::PerformEnd)
.map_err(LogicError::from)?;
if let GameInstance::Fresh(fresh_game) = &mut player.game_instance {
fresh_game
.procedure_mgr
.on_action(ProcedureAction::PerformEnd)
.map_err(LogicError::from)?;
}
Ok(PerformEndScRsp {
retcode: Retcode::RetSucc.into(),

View file

@ -1,3 +1,10 @@
use data::tables::{self, ArchiveBattleQuestID};
use crate::logic::{
game::{GameInstance, HollowGame, LogicError},
ELocalPlayType, EQuestType,
};
use super::*;
pub async fn on_get_quest_data(
@ -8,7 +15,15 @@ pub async fn on_get_quest_data(
Ok(GetQuestDataScRsp {
retcode: Retcode::RetSucc.into(),
quest_type: req.quest_type,
quest_data: Some(QuestData::default()),
quest_data: Some(QuestData {
quest_collection_list: vec![QuestCollection {
quest_type: EQuestType::ArchiveFile as u32,
quest_id_list: tables::archive_file_quest_template_tb::iter()
.map(|tmpl| tmpl.id.value())
.collect(),
..Default::default()
}],
}),
})
}
@ -19,7 +34,25 @@ pub async fn on_get_yorozuya_info(
) -> NetResult<GetYorozuyaInfoScRsp> {
Ok(GetYorozuyaInfoScRsp {
retcode: Retcode::RetSucc.into(),
yorozuya_info: Some(YorozuyaInfo::default()),
yorozuya_info: Some(YorozuyaInfo {
odohdljfdlf: vec![1001],
apmojjlcooa: vec![1001],
npgjhahijkb: vec![100001, 100101, 100401, 109901],
eoljpdnjgeg: vec![
Ofhlkjeakif {
nnkcanmllod: 199030,
kkjlnkehddj: Some(Cgpajijemlj::default()),
..Default::default()
},
Ofhlkjeakif {
nnkcanmllod: 199035,
ggnbpiofdpp: 110103,
kkjlnkehddj: Some(Cgpajijemlj::default()),
..Default::default()
},
],
..Default::default()
}),
})
}
@ -30,6 +63,49 @@ pub async fn on_get_archive_info(
) -> NetResult<GetArchiveInfoScRsp> {
Ok(GetArchiveInfoScRsp {
retcode: Retcode::RetSucc.into(),
archive_info: Some(ArchiveInfo::default()),
archive_info: Some(ArchiveInfo {
hollow_archive_id_list: (1..99999).collect(),
videotaps_info: tables::archive_file_quest_template_tb::iter()
.map(|tmpl| VideotapeInfo {
archive_file_id: tmpl.id.value(),
finished: true,
..Default::default()
})
.collect(),
..Default::default()
}),
})
}
pub async fn on_begin_archive_battle_quest(
session: &NetSession,
player: &mut Player,
req: BeginArchiveBattleQuestCsReq,
) -> NetResult<BeginArchiveBattleQuestScRsp> {
let quest_id = ArchiveBattleQuestID::new(req.quest_id).ok_or(Retcode::RetFail)?;
player.game_instance = GameInstance::Hollow(
HollowGame::create_archive_battle(quest_id, ELocalPlayType::ArchiveBattle, &req.avatars)
.map_err(LogicError::from)?,
);
let world_init_notify = player.game_instance.create_world_init_notify()?;
session.notify(world_init_notify).await?;
Ok(BeginArchiveBattleQuestScRsp {
retcode: Retcode::RetSucc.into(),
quest_id: req.quest_id,
})
}
pub async fn on_finish_archive_quest(
_session: &NetSession,
_player: &mut Player,
req: FinishArchiveQuestCsReq,
) -> NetResult<FinishArchiveQuestScRsp> {
Ok(FinishArchiveQuestScRsp {
retcode: Retcode::RetSucc.into(),
quest_id: req.quest_id,
..Default::default()
})
}

View file

@ -169,7 +169,7 @@ pub async fn on_start_trial_fighting_mission(
let quest_id = TrainingQuestID::new(req.quest_id).ok_or(Retcode::RetFail)?;
player.game_instance = GameInstance::Hollow(
HollowGame::create_training_game(quest_id, ELocalPlayType::TrainingRoomFight)
HollowGame::create_training_game(quest_id, ELocalPlayType::TrainingRoomFight, &req.avatars)
.map_err(LogicError::from)?,
);
@ -258,3 +258,14 @@ pub async fn on_enter_section(
retcode: Retcode::RetSucc.into(),
})
}
pub async fn on_archive_quests_seen(
_session: &NetSession,
_player: &mut Player,
_req: ArchiveQuestsSeenCsReq,
) -> NetResult<ArchiveQuestsSeenScRsp> {
Ok(ArchiveQuestsSeenScRsp {
retcode: Retcode::RetSucc.into(),
..Default::default()
})
}

View file

@ -0,0 +1,23 @@
use std::collections::HashMap;
use crate::logic::BaseProperty;
use proto::InLevelAvatarData;
pub struct InLevelAvatarDataItem {
pub avatar_id: u32,
pub mp_property_override: HashMap<BaseProperty, i32>,
}
impl InLevelAvatarDataItem {
pub fn to_client(&self) -> InLevelAvatarData {
InLevelAvatarData {
avatar_id: self.avatar_id,
mp_property_override_map: self
.mp_property_override
.iter()
.map(|(prop, value)| (*prop as u32, *value))
.collect(),
..Default::default()
}
}
}

View file

@ -0,0 +1,4 @@
mod avatar;
pub use avatar::InLevelAvatarDataItem;
mod team;
pub use team::TeamDataItem;

View file

@ -0,0 +1,21 @@
use std::collections::HashMap;
use super::InLevelAvatarDataItem;
pub struct TeamDataItem {
pub avatar_member_list: Vec<InLevelAvatarDataItem>,
}
impl TeamDataItem {
pub fn new(avatars: &[u32]) -> Self {
Self {
avatar_member_list: avatars
.iter()
.map(|id| InLevelAvatarDataItem {
avatar_id: *id,
mp_property_override: HashMap::new(),
})
.collect(),
}
}
}

View file

@ -14,6 +14,20 @@ pub enum ESceneType {
MultiFight = 5,
}
#[allow(dead_code)]
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[repr(u32)]
pub enum EQuestType {
ArchiveFile = 1,
DungeonInner = 2,
Hollow = 3,
Manual = 4,
MainCity = 5,
HollowChallenge = 6,
ArchiveBattle = 7,
Knowledge = 8,
}
#[derive(Debug, Default, PartialEq, Eq, Clone, Copy, FromPrimitive)]
#[repr(u32)]
pub enum ESystem {
@ -159,3 +173,89 @@ pub enum ELocalPlayType {
#[default]
Unknown = 0,
}
#[allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u32)]
pub enum BaseProperty {
CurHP = 0,
MaxHpFinal = 36,
AddedDamageRatioFire = 52,
AddedDamageRatioElecBattle = 583,
FeverGetRatio = 45,
AtkBattle = 560,
MaxArmor = 18,
ElementMysteryBattle = 577,
DamageTakeRatio = 42,
Defence = 3,
CritRes = 23,
MaxShield = 20,
CritDmgBattle = 565,
DamageTakeRatioBattle = 573,
BreakStunBattle = 561,
AddedElementAccumulationRatio = 48,
CurSP = 7,
DefBattle = 562,
CritResBattle = 564,
CritDmg = 6,
ElementMystery = 46,
AddedDamageRatioEtherBattle = 584,
EnduranceBattle = 569,
CritBattle = 563,
CurBuddyBattery = 56,
MaxHP = 1,
CurBreakPoint = 27,
Unknown = 4294967295,
SPRecover = 31,
PenRatio = 21,
ResistBreakLevel = 35,
CritDmgRes = 24,
AddedDamageRatioPhysics = 51,
AddedDamageRatioFireBattle = 581,
AddedDamageRatioBattle = 572,
PenDelta = 22,
AutoRecoverStunRate = 37,
AddedDamageRatioIce = 53,
SpGetRatio = 44,
MaxBuddyBattery = 57,
AddedDamageRatioEther = 55,
HpHealRatioBattle = 571,
AddedDamageRatioIceBattle = 582,
Level = 49,
ElementAbnormalPower = 50,
StunMaxBase = 551,
Attack = 2,
MaxSP = 8,
CurMaxHpHealPercent = 32,
MaxStunRuntime = 33,
AllDamageResistBattle = 574,
AddedDamageRatio = 41,
AddedElementAccumulationRatioBattle = 578,
Custom = 10,
Crit = 4,
SpGetRatioBattle = 575,
ResistBreakPoint = 28,
AddedDamageRatioElec = 54,
MaxStun = 12,
HpMaxBase = 550,
CurStun = 11,
CurrentArmor = 17,
HpRecoverRate = 47,
ElementAbnormalPowerBattle = 579,
FeverGetRatioBattle = 576,
CritDmgResBattle = 566,
SpRecoverBattle = 570,
CurEndurance = 25,
PenDeltaBattle = 568,
AccumulationValue = 58,
MaxEndurance = 26,
DestroyRecoverStunRate = 38,
HpHealRatio = 40,
SpMaxBase = 552,
PenRatioBattle = 567,
AddedDamageRatioPhysicsBattle = 580,
BreakStun = 13,
CurrentShield = 19,
Luck = 5,
AllDamageResist = 43,
}

View file

@ -1,9 +1,12 @@
use common::util;
use data::tables::TrainingQuestID;
use data::tables::{ArchiveBattleQuestID, TrainingQuestID};
use proto::{DungeonInfo, DungeonItemData, FightSceneInfo, SceneInfo, WeatherPoolInfo};
use thiserror::Error;
use crate::logic::{ELocalPlayType, ESceneType, TimePeriodType, WeatherType};
use crate::logic::{
battle::{InLevelAvatarDataItem, TeamDataItem},
ELocalPlayType, ESceneType, TimePeriodType, WeatherType,
};
use super::NapGameMode;
@ -17,12 +20,14 @@ pub struct HollowGame {
pub weather: WeatherType,
pub play_type: ELocalPlayType,
pub start_timestamp: i64,
pub team_data: TeamDataItem,
}
impl HollowGame {
pub fn create_training_game(
training_quest_id: TrainingQuestID,
play_type: ELocalPlayType,
avatars: &[u32],
) -> Result<Self, HollowGameError> {
let template = training_quest_id.template();
@ -33,6 +38,25 @@ impl HollowGame {
weather: WeatherType::SunShine,
start_timestamp: util::cur_timestamp() as i64,
play_type,
team_data: TeamDataItem::new(avatars),
})
}
pub fn create_archive_battle(
archive_battle_quest_id: ArchiveBattleQuestID,
play_type: ELocalPlayType,
avatars: &[u32],
) -> Result<Self, HollowGameError> {
let template = archive_battle_quest_id.template();
Ok(Self {
quest_id: template.id.value(),
battle_event_id: template.battle_event_id,
time_period: TimePeriodType::Morning,
weather: WeatherType::SunShine,
start_timestamp: util::cur_timestamp() as i64,
play_type,
team_data: TeamDataItem::new(avatars),
})
}
}
@ -64,6 +88,12 @@ impl NapGameMode for HollowGame {
quest_id: self.quest_id,
start_timestamp: self.start_timestamp,
dungeon_item_data: Some(DungeonItemData::default()),
avatar_list: self
.team_data
.avatar_member_list
.iter()
.map(InLevelAvatarDataItem::to_client)
.collect(),
..Default::default()
})
}

View file

@ -1,3 +1,4 @@
pub mod battle;
mod enums;
pub mod game;
pub mod item;

View file

@ -2406,7 +2406,7 @@ pub struct Khhjipglbll {
pub bcbcjioepod: u32,
#[xor(2704)]
#[prost(uint32, tag = "1")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[prost(uint32, repeated, tag = "11")]
pub avatars: ::prost::alloc::vec::Vec<u32>,
#[xor(9370)]
@ -2760,7 +2760,7 @@ pub struct Iedkhplmbab {
pub struct StartTrialFightingMissionCsReq {
#[xor(15246)]
#[prost(uint32, tag = "1")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(3842)]
#[prost(uint32, tag = "11")]
pub quest_id: u32,
@ -2797,14 +2797,14 @@ pub struct Eoaebmjlfjc {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Kkhghlppoig {
pub struct EquippedBuddyData {
#[xor(8856)]
#[prost(uint32, tag = "9")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[prost(enumeration = "Hneekphmejf", tag = "6")]
pub r#type: i32,
#[prost(map = "uint32, int32", tag = "10")]
pub alekplcmphb: ::std::collections::HashMap<u32, i32>,
pub mp_property_override_map: ::std::collections::HashMap<u32, i32>,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -3406,7 +3406,7 @@ pub struct Neokggopbin {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Mgbedipfojl {
pub struct FinishArchiveQuestCsReq {
#[xor(3231)]
#[prost(uint32, tag = "9")]
pub jgeikifpcgd: u32,
@ -4014,7 +4014,7 @@ pub struct Kggckaadkjm {
#[prost(uint32, tag = "1")]
pub mdnhahnfmfl: u32,
#[prost(bool, tag = "3")]
pub nkjbgnkkpng: bool,
pub finished: bool,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -5741,7 +5741,7 @@ pub struct Bkdlnnmapab {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Enmeegdlemb {
#[prost(string, tag = "1")]
pub ihbneikffdi: ::prost::alloc::string::String,
pub ui: ::prost::alloc::string::String,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -5916,7 +5916,7 @@ pub struct Lpjpfoaehlg {
pub lbmgeignmef: u32,
#[xor(2510)]
#[prost(uint32, tag = "8")]
pub fgfnllpgggj: u32,
pub buddy: u32,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -6541,7 +6541,7 @@ pub struct FightSceneInfo {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Mbanldjmddn {
#[prost(bool, tag = "15")]
pub nkjbgnkkpng: bool,
pub finished: bool,
}
#[derive(proto_gen::CmdID)]
#[cmdid(361)]
@ -7338,7 +7338,7 @@ pub struct Afocbghbdof {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Cohnoafnclg {
pub struct BeginArchiveBattleQuestScRsp {
#[xor(4259)]
#[prost(uint32, tag = "15")]
pub quest_id: u32,
@ -8687,7 +8687,7 @@ pub struct Hffgnonoabe {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Mcmgogphgkg {
pub struct BeginArchiveBattleQuestCsReq {
#[prost(uint32, repeated, tag = "4")]
pub avatars: ::prost::alloc::vec::Vec<u32>,
#[xor(12182)]
@ -8695,9 +8695,9 @@ pub struct Mcmgogphgkg {
pub quest_id: u32,
#[xor(1830)]
#[prost(uint32, tag = "11")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[prost(bool, tag = "1")]
pub aepdmkdbagc: bool,
pub is_story: bool,
#[prost(uint32, repeated, tag = "2")]
pub olcifcglpdd: ::prost::alloc::vec::Vec<u32>,
#[xor(421)]
@ -9176,7 +9176,7 @@ pub struct Bijjamapnjm {
pub struct Bffgkjikbhp {
#[xor(3555)]
#[prost(uint32, tag = "14")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(10954)]
#[prost(uint32, tag = "1")]
pub lbmgeignmef: u32,
@ -9395,7 +9395,7 @@ pub struct Kmkbpddeaoe {
pub struct Bhmhgadoncc {
#[xor(5509)]
#[prost(uint32, tag = "14")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(10314)]
#[prost(int32, tag = "12")]
pub nledmfjbmmo: i32,
@ -9614,7 +9614,7 @@ pub struct Gfpehbhpgfb {
#[prost(uint32, repeated, tag = "1")]
pub hfjhobiicil: ::prost::alloc::vec::Vec<u32>,
#[prost(bool, tag = "13")]
pub aepdmkdbagc: bool,
pub is_story: bool,
#[prost(message, optional, tag = "5")]
pub bojcpfdbolc: ::core::option::Option<Hpalfgllgje>,
#[xor(11432)]
@ -10824,7 +10824,7 @@ pub struct Gccdaofpapp {
pub struct Ihilkekkdmh {
#[xor(10553)]
#[prost(uint32, tag = "13")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(13840)]
#[prost(int32, tag = "1")]
pub retcode: i32,
@ -12181,15 +12181,15 @@ pub struct Dpnalcomaii {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Boempcpfihm {
pub struct ActionOpenUi {
#[prost(string, tag = "1")]
pub ihbneikffdi: ::prost::alloc::string::String,
pub ui: ::prost::alloc::string::String,
#[prost(int32, tag = "2")]
pub dhglgonmiao: i32,
pub args: i32,
#[prost(string, tag = "3")]
pub hacnhcflago: ::prost::alloc::string::String,
#[prost(int32, tag = "4")]
pub boanjgbnpff: i32,
pub store_template_id: i32,
#[prost(int32, tag = "5")]
pub npc_id: i32,
}
@ -12833,7 +12833,7 @@ pub struct Okkjjhonnik {
pub ajichmhgblg: u32,
#[xor(1870)]
#[prost(uint32, tag = "7")]
pub fgfnllpgggj: u32,
pub buddy: u32,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -14101,9 +14101,9 @@ pub struct Ignclnpdace {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Mopakjdnaeh {
#[prost(string, tag = "1")]
pub ihbneikffdi: ::prost::alloc::string::String,
pub ui: ::prost::alloc::string::String,
#[prost(int32, tag = "2")]
pub dhglgonmiao: i32,
pub args: i32,
#[prost(bool, tag = "3")]
pub epaolkkakhi: bool,
}
@ -16216,7 +16216,7 @@ pub struct Feanepokfam {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Onlmpmgcdle {
#[prost(message, repeated, tag = "13")]
pub lmailahlomk: ::prost::alloc::vec::Vec<Kkhghlppoig>,
pub lmailahlomk: ::prost::alloc::vec::Vec<EquippedBuddyData>,
}
#[derive(proto_gen::CmdID)]
#[cmdid(5211)]
@ -16365,7 +16365,7 @@ pub struct QuestCollection {
#[prost(message, optional, tag = "7")]
pub dlenflnoonh: ::core::option::Option<Chhceajhkbd>,
#[prost(uint32, repeated, tag = "4")]
pub gcofmlljpja: ::prost::alloc::vec::Vec<u32>,
pub quest_id_list: ::prost::alloc::vec::Vec<u32>,
#[prost(message, optional, tag = "1")]
pub kolondhkmjk: ::core::option::Option<Eonjiadomgn>,
}
@ -17122,7 +17122,7 @@ pub struct Jkmjmnfkelj {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Jjclogiljmd {
#[prost(string, tag = "1")]
pub ihbneikffdi: ::prost::alloc::string::String,
pub ui: ::prost::alloc::string::String,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -17266,7 +17266,7 @@ pub struct Ilehibpgief {
pub struct Fjppbkgebcl {
#[xor(7354)]
#[prost(uint32, tag = "8")]
pub fgfnllpgggj: u32,
pub buddy: u32,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -17776,7 +17776,7 @@ pub struct Ccmffanlhla {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Dffaeiahhog {
pub struct PlayerSystemParameterChangeScRsp {
#[xor(14083)]
#[prost(int32, tag = "8")]
pub retcode: i32,
@ -19751,13 +19751,13 @@ pub struct Bobbdnnaego {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Ndljgkedcnp {
#[prost(string, tag = "1")]
pub ihbneikffdi: ::prost::alloc::string::String,
pub ui: ::prost::alloc::string::String,
#[prost(int32, tag = "2")]
pub dhglgonmiao: i32,
pub args: i32,
#[prost(string, tag = "3")]
pub hacnhcflago: ::prost::alloc::string::String,
#[prost(int32, tag = "4")]
pub boanjgbnpff: i32,
pub store_template_id: i32,
#[prost(int32, tag = "5")]
pub npc_id: i32,
}
@ -20383,7 +20383,7 @@ pub struct Knfggjeaoce {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Ncognndobmn {
pub struct PlayerSystemParameterChangeCsReq {
#[prost(message, optional, tag = "15")]
pub jplnecfjldo: ::core::option::Option<Hhepgliohcg>,
#[prost(message, optional, tag = "9")]
@ -20840,7 +20840,7 @@ pub struct Ghgbhljlmde {
pub bikhplpcalp: ::std::collections::HashMap<u32, u32>,
#[xor(4986)]
#[prost(uint32, tag = "6")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(1495)]
#[prost(uint32, tag = "5")]
pub ihgcjhffkdf: u32,
@ -20969,7 +20969,7 @@ pub struct Acobofkfjgj {
pub struct Oidkngmaipi {
#[xor(8441)]
#[prost(uint32, tag = "14")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[prost(enumeration = "Hneekphmejf", tag = "7")]
pub ddogpdoomde: i32,
}
@ -21192,7 +21192,7 @@ pub struct Labghjgfhhh {
pub lbmgeignmef: u32,
#[xor(13505)]
#[prost(uint32, tag = "4")]
pub fgfnllpgggj: u32,
pub buddy: u32,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -21227,7 +21227,7 @@ pub struct Gmgoddaldob {
#[prost(uint32, tag = "1")]
pub pmnjlmekmbc: u32,
#[prost(uint32, tag = "2")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[prost(bool, tag = "3")]
pub majldghlkab: bool,
#[prost(bytes = "vec", tag = "4")]
@ -21511,9 +21511,9 @@ pub struct Mbhjjoafcmc {
#[prost(uint32, repeated, tag = "6")]
pub hlkfieldkif: ::prost::alloc::vec::Vec<u32>,
#[prost(message, repeated, tag = "1")]
pub phdpcbhbkcp: ::prost::alloc::vec::Vec<Pbpbmholoae>,
pub phdpcbhbkcp: ::prost::alloc::vec::Vec<VideotapeInfo>,
#[prost(uint32, repeated, tag = "10")]
pub onfjkhpdlfh: ::prost::alloc::vec::Vec<u32>,
pub hollow_archive_id_list: ::prost::alloc::vec::Vec<u32>,
#[prost(uint32, repeated, tag = "13")]
pub nmnbkjicjlb: ::prost::alloc::vec::Vec<u32>,
#[xor(7038)]
@ -21885,7 +21885,7 @@ pub struct Hfmncckhjlb {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Eaccimcclnk {
pub struct ArchiveQuestsSeenCsReq {
#[prost(bool, tag = "8")]
pub ehmopjccohg: bool,
#[prost(bool, tag = "7")]
@ -22137,7 +22137,7 @@ pub struct Kakpeoaekgb {
pub struct Mbchikbhcmp {
#[xor(8473)]
#[prost(uint32, tag = "10")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[prost(bool, tag = "6")]
pub aobemkmdkgo: bool,
#[prost(message, repeated, tag = "14")]
@ -22404,7 +22404,7 @@ pub struct Aecgodfnpao {
pub lbmgeignmef: u32,
#[xor(7503)]
#[prost(uint32, tag = "12")]
pub fgfnllpgggj: u32,
pub buddy: u32,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -22612,7 +22612,7 @@ pub struct Ghojoimpnad {
pub ndcnfidonje: u32,
#[xor(8060)]
#[prost(uint32, tag = "2")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(15324)]
#[prost(uint32, tag = "1")]
pub lbmgeignmef: u32,
@ -23095,7 +23095,7 @@ pub struct Jjmnjckodgk {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Fopnijbcimm {
#[prost(map = "uint32, message", tag = "1")]
pub foicfpfnlcf: ::std::collections::HashMap<u32, Nkceooipggh>,
pub foicfpfnlcf: ::std::collections::HashMap<u32, InLevelAvatarData>,
#[prost(uint32, repeated, tag = "6")]
pub ajnocghpbmj: ::prost::alloc::vec::Vec<u32>,
#[prost(bool, tag = "12")]
@ -23364,7 +23364,7 @@ pub struct Nnibknhmkde {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Chkdmaeaocp {
pub struct ArchiveBattleRecord {
#[xor(7803)]
#[prost(uint32, tag = "4")]
pub star: u32,
@ -23372,9 +23372,9 @@ pub struct Chkdmaeaocp {
pub mmphbfghfgm: bool,
#[xor(4540)]
#[prost(uint32, tag = "14")]
pub dgekhcijgbg: u32,
pub archive_battle_id: u32,
#[prost(bool, tag = "7")]
pub nkjbgnkkpng: bool,
pub finished: bool,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -23680,9 +23680,9 @@ pub struct ArchiveInfo {
#[prost(uint32, repeated, tag = "11")]
pub hlkfieldkif: ::prost::alloc::vec::Vec<u32>,
#[prost(message, repeated, tag = "6")]
pub feogoaegcbi: ::prost::alloc::vec::Vec<Pbpbmholoae>,
pub videotaps_info: ::prost::alloc::vec::Vec<VideotapeInfo>,
#[prost(uint32, repeated, tag = "13")]
pub onfjkhpdlfh: ::prost::alloc::vec::Vec<u32>,
pub hollow_archive_id_list: ::prost::alloc::vec::Vec<u32>,
}
#[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)]
@ -24257,7 +24257,7 @@ pub struct Enaagloodio {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Ecjcmfjjgdp {
#[prost(int32, tag = "1")]
pub fgfnllpgggj: i32,
pub buddy: i32,
#[prost(int32, repeated, tag = "2")]
pub jpncidefiba: ::prost::alloc::vec::Vec<i32>,
#[prost(message, optional, tag = "3")]
@ -25751,13 +25751,13 @@ pub struct DungeonInfo {
#[prost(message, optional, tag = "3")]
pub ncfafdpojjh: ::core::option::Option<Kalfjemiaaa>,
#[prost(message, optional, tag = "8")]
pub kplhefeipee: ::core::option::Option<Kkhghlppoig>,
pub kplhefeipee: ::core::option::Option<EquippedBuddyData>,
#[prost(bool, tag = "1724")]
pub gjhgpapkmod: bool,
#[prost(bool, tag = "1109")]
pub jgkfjmdinmo: bool,
#[prost(message, repeated, tag = "13")]
pub avatar_list: ::prost::alloc::vec::Vec<Nkceooipggh>,
pub avatar_list: ::prost::alloc::vec::Vec<InLevelAvatarData>,
#[prost(message, optional, tag = "522")]
pub chnhoilfkhf: ::core::option::Option<Afhnppffhoh>,
#[prost(message, optional, tag = "1725")]
@ -25769,7 +25769,7 @@ pub struct DungeonInfo {
#[prost(map = "uint32, int32", tag = "7")]
pub njfikojmpcm: ::std::collections::HashMap<u32, i32>,
#[prost(message, repeated, tag = "1395")]
pub lmailahlomk: ::prost::alloc::vec::Vec<Kkhghlppoig>,
pub lmailahlomk: ::prost::alloc::vec::Vec<EquippedBuddyData>,
#[prost(message, optional, tag = "2")]
pub dungeon_item_data: ::core::option::Option<DungeonItemData>,
#[prost(message, optional, tag = "5")]
@ -26194,7 +26194,7 @@ pub struct Aliigncbcfb {}
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Dbnojaajdon {
pub struct ArchiveQuestsSeenScRsp {
#[xor(11593)]
#[prost(int32, tag = "9")]
pub retcode: i32,
@ -26340,7 +26340,7 @@ pub struct Occfagjmjhn {
#[prost(int32, tag = "4")]
pub retcode: i32,
#[prost(bool, tag = "10")]
pub nkjbgnkkpng: bool,
pub finished: bool,
}
#[derive(proto_gen::CmdID)]
#[cmdid(5102)]
@ -27252,7 +27252,7 @@ pub struct Aicalelcmii {
pub kplhkiofbah: bool,
#[xor(3343)]
#[prost(uint32, tag = "7")]
pub fgfnllpgggj: u32,
pub buddy: u32,
}
#[derive(proto_gen::CmdID)]
#[cmdid(4100)]
@ -27673,11 +27673,11 @@ pub struct Dehlcmioiab {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Nkceooipggh {
pub struct InLevelAvatarData {
#[prost(uint32, repeated, tag = "8")]
pub fnaikfegocl: ::prost::alloc::vec::Vec<u32>,
#[prost(map = "uint32, int32", tag = "14")]
pub alekplcmphb: ::std::collections::HashMap<u32, i32>,
pub mp_property_override_map: ::std::collections::HashMap<u32, i32>,
#[prost(bool, tag = "1")]
pub mbpdoanjkll: bool,
#[xor(643)]
@ -28507,9 +28507,9 @@ pub struct Fboeclefepn {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Chjlipfffoi {
#[prost(string, tag = "1")]
pub ihbneikffdi: ::prost::alloc::string::String,
pub ui: ::prost::alloc::string::String,
#[prost(int32, tag = "2")]
pub dhglgonmiao: i32,
pub args: i32,
#[prost(bool, tag = "3")]
pub epaolkkakhi: bool,
}
@ -28678,7 +28678,7 @@ pub struct Bkkmkacnhne {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Dpijpabbknc {
#[prost(message, optional, tag = "1")]
pub fgfnllpgggj: ::core::option::Option<StringEntry>,
pub buddy: ::core::option::Option<StringEntry>,
#[prost(enumeration = "Afnpekehlge", tag = "2")]
pub ddogpdoomde: i32,
}
@ -29127,16 +29127,16 @@ pub struct Jpmennlmodg {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Pbpbmholoae {
pub struct VideotapeInfo {
#[prost(uint32, repeated, tag = "15")]
pub ekodopfdjlg: ::prost::alloc::vec::Vec<u32>,
#[prost(bool, tag = "10")]
pub nkjbgnkkpng: bool,
pub finished: bool,
#[prost(message, repeated, tag = "9")]
pub innfphigkka: ::prost::alloc::vec::Vec<Chkdmaeaocp>,
pub archive_battle_record_list: ::prost::alloc::vec::Vec<ArchiveBattleRecord>,
#[xor(16282)]
#[prost(uint32, tag = "6")]
pub gafdanggnna: u32,
pub archive_file_id: u32,
#[prost(bool, tag = "2")]
pub npnlfgmlmin: bool,
}
@ -29634,7 +29634,7 @@ pub struct Jlgmobeofhe {
pub jipabmjagbi: u32,
#[xor(12923)]
#[prost(uint32, tag = "4")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(11558)]
#[prost(uint32, tag = "14")]
pub pmnjlmekmbc: u32,
@ -30566,7 +30566,7 @@ pub struct Jcfdccfejcg {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Jaokcopjeip {
#[prost(int32, tag = "1")]
pub fgfnllpgggj: i32,
pub buddy: i32,
#[prost(int64, tag = "2")]
pub cjehpadgajn: i64,
#[prost(int32, tag = "3")]
@ -32098,7 +32098,7 @@ pub struct Ecpbnceekbi {
#[prost(message, optional, tag = "11")]
pub ahbfgomcdjm: ::core::option::Option<Ileigaeakjo>,
#[prost(uint32, repeated, tag = "12")]
pub gcofmlljpja: ::prost::alloc::vec::Vec<u32>,
pub quest_id_list: ::prost::alloc::vec::Vec<u32>,
#[prost(uint32, repeated, tag = "13")]
pub ficgeelfmck: ::prost::alloc::vec::Vec<u32>,
#[prost(message, optional, tag = "14")]
@ -32158,7 +32158,7 @@ pub struct Hphfnebchnb {
pub struct Hoeafbihgpd {
#[xor(1739)]
#[prost(uint32, tag = "3")]
pub fgfnllpgggj: u32,
pub buddy: u32,
}
#[derive(proto_gen::CmdID)]
#[cmdid(3238)]
@ -33219,13 +33219,13 @@ pub struct Hhgehefgpcj {
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Gkegfnbpiok {
#[prost(map = "uint32, int32", tag = "6")]
pub alekplcmphb: ::std::collections::HashMap<u32, i32>,
pub mp_property_override_map: ::std::collections::HashMap<u32, i32>,
#[xor(4076)]
#[prost(uint32, tag = "2")]
pub star: u32,
#[xor(15011)]
#[prost(uint32, tag = "3")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(810)]
#[prost(uint32, tag = "5")]
pub exp: u32,
@ -33399,7 +33399,7 @@ pub struct Jcincgmdflc {
pub olcifcglpdd: ::prost::alloc::vec::Vec<u32>,
#[xor(3275)]
#[prost(uint32, tag = "11")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[xor(10845)]
#[prost(uint32, tag = "13")]
pub quest_id: u32,
@ -33523,7 +33523,7 @@ pub struct Lolghlmjgko {
#[prost(message, repeated, tag = "1")]
pub pjbbjhfmmih: ::prost::alloc::vec::Vec<Ocbjgagjdac>,
#[prost(map = "uint32, int32", tag = "9")]
pub alekplcmphb: ::std::collections::HashMap<u32, i32>,
pub mp_property_override_map: ::std::collections::HashMap<u32, i32>,
#[xor(4487)]
#[prost(uint32, tag = "2")]
pub template_id: u32,
@ -33683,7 +33683,7 @@ pub struct Kjknmlmfnka {
#[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Pcopkafjdjh {
pub struct FinishArchiveQuestScRsp {
#[xor(408)]
#[prost(int32, tag = "3")]
pub retcode: i32,
@ -33777,14 +33777,14 @@ pub struct Jhinopamaoa {
pub avatars: ::prost::alloc::vec::Vec<u32>,
#[xor(6842)]
#[prost(uint32, tag = "14")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[prost(uint32, repeated, tag = "3")]
pub obpdhglkbgk: ::prost::alloc::vec::Vec<u32>,
#[xor(8158)]
#[prost(uint32, tag = "12")]
pub fafoahnaohk: u32,
#[prost(bool, tag = "9")]
pub aepdmkdbagc: bool,
pub is_story: bool,
#[prost(string, tag = "15")]
pub aljacgiaang: ::prost::alloc::string::String,
#[xor(15965)]
@ -34487,10 +34487,10 @@ pub struct Jiflifhgkhk {
#[prost(uint32, tag = "7")]
pub quest_id: u32,
#[prost(bool, tag = "13")]
pub aepdmkdbagc: bool,
pub is_story: bool,
#[xor(7590)]
#[prost(uint32, tag = "5")]
pub fgfnllpgggj: u32,
pub buddy: u32,
#[prost(bool, tag = "14")]
pub jcflmpbcojd: bool,
}
@ -34811,7 +34811,7 @@ pub struct Odpikgleomb {
#[prost(enumeration = "HollowEntityType", tag = "2")]
pub llafhjgdfjn: i32,
#[prost(bool, tag = "3")]
pub nkjbgnkkpng: bool,
pub finished: bool,
#[prost(bool, tag = "4")]
pub ajlemkdmjaj: bool,
}
@ -41921,7 +41921,7 @@ pub enum ActionType {
ModifyAimRectComponent = 2199,
RemoveFromPool = 2200,
ActivateSegmentInteract = 2201,
RecordUseInitiativeItem = 2202,
RecordUseBuddy = 2202,
ModifyMultiHollowOutFloor = 2203,
SetMultiHollowOutView = 2204,
NextDropClueEvent = 2207,
@ -42322,7 +42322,7 @@ impl ActionType {
ActionType::ModifyAimRectComponent => "MODIFY_AIM_RECT_COMPONENT",
ActionType::RemoveFromPool => "REMOVE_FROM_POOL",
ActionType::ActivateSegmentInteract => "ACTIVATE_SEGMENT_INTERACT",
ActionType::RecordUseInitiativeItem => "RECORD_USE_INITIATIVE_ITEM",
ActionType::RecordUseBuddy => "RECORD_USE_buddy",
ActionType::ModifyMultiHollowOutFloor => "MODIFY_MULTI_HOLLOW_OUT_FLOOR",
ActionType::SetMultiHollowOutView => "SET_MULTI_HOLLOW_OUT_VIEW",
ActionType::NextDropClueEvent => "NEXT_DROP_CLUE_EVENT",
@ -42720,7 +42720,7 @@ impl ActionType {
"MODIFY_AIM_RECT_COMPONENT" => Some(Self::ModifyAimRectComponent),
"REMOVE_FROM_POOL" => Some(Self::RemoveFromPool),
"ACTIVATE_SEGMENT_INTERACT" => Some(Self::ActivateSegmentInteract),
"RECORD_USE_INITIATIVE_ITEM" => Some(Self::RecordUseInitiativeItem),
"RECORD_USE_buddy" => Some(Self::RecordUseBuddy),
"MODIFY_MULTI_HOLLOW_OUT_FLOOR" => Some(Self::ModifyMultiHollowOutFloor),
"SET_MULTI_HOLLOW_OUT_VIEW" => Some(Self::SetMultiHollowOutView),
"NEXT_DROP_CLUE_EVENT" => Some(Self::NextDropClueEvent),