2024-07-20 12:13:04 +00:00
|
|
|
// This file is @generated by prost-build.
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct BasicDataModelBin {
|
|
|
|
#[prost(string, tag = "1")]
|
|
|
|
pub nick_name: ::prost::alloc::string::String,
|
|
|
|
#[prost(uint32, tag = "2")]
|
|
|
|
pub level: u32,
|
|
|
|
#[prost(uint32, tag = "3")]
|
|
|
|
pub exp: u32,
|
|
|
|
#[prost(uint32, tag = "4")]
|
|
|
|
pub profile_icon: u32,
|
|
|
|
#[prost(int32, tag = "5")]
|
|
|
|
pub frontend_avatar_id: i32,
|
|
|
|
#[prost(int32, tag = "6")]
|
|
|
|
pub beginner_procedure_id: i32,
|
Teleport Map & Switching Dynamic Wallpaper Support, Gacha optimization (#2)
## Abstract
This PR implements
- Showing Teleports on map
- Quick Menu usage
- Dynamic Wallpaper switching
- Settings UP for Bangboo pool (via CLI)
## Support list
- The support of Teleport with map.
- Unlocking the 3 buttons (Interknow, DMs, Map) as a prerequisite of the previous feature. By pressing 'F' you can also modify the buttons in Quick Menu.
- Changing Dynamic Wallpaper to a specific one instead of being randomly chosen. **Notice that you can't use one's Dynamic Wallpaper if you don't own this agent.**
- Fixed some Gacha bugs, including:
- Obtained items won't be sent to your bag unless you're pulling the standard banner;
- Obtained items won't show in bag until relogin;
- Alternative command `gacha up` to choose the UP Bangboo. Start with `gacha up [player_uid]` and follow the guide to fill params.
## Principle
- Player's `UnlockModelBin` stores Quick Menu data, with the player's chosen buttons and their positions.
- Separate Gacha's DTO & Saving model to make it more standardized, and ensure ID validation is always performed.
- Player's bag information is now sync to client appropriately after finishing any gacha operations.
- `gacha up` search for pools with a `chooseable` Category Guarantee Policy, then list included items if user has provided the target pool's `gacha_schedule_id`.
## Known issues
- **Specifically for 1.1 Beta**, teleport may meet these issues leading to a 'black screen', forcing you to restart the client (or use `player kick` command as an alternative).
- Don't try to teleport to `治安局光映分署`, it won't succeed. This is the 32nd teleport out of the 31 ones defined visible in assets.
- Don't close the page after opening map. Teleport to somewhere.
- `gacha up` command is an alternative to in-game operation. You still can not see any bangboos in the collection when choosing Bangboo.
Co-authored-by: YYHEggEgg <53960525+YYHEggEgg@users.noreply.github.com>
Reviewed-on: https://git.xeondev.com/NewEriduPubSec/JaneDoe-ZS/pulls/2
Co-authored-by: YYHEggEgg <yyheggegg@xeondev.com>
Co-committed-by: YYHEggEgg <yyheggegg@xeondev.com>
2024-08-06 17:15:04 +00:00
|
|
|
#[prost(uint32, tag = "7")]
|
|
|
|
pub selected_post_girl_id: u32,
|
2024-07-20 12:13:04 +00:00
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct LockModelBin {
|
|
|
|
#[prost(int32, repeated, tag = "1")]
|
|
|
|
pub unlock_list: ::prost::alloc::vec::Vec<i32>,
|
Teleport Map & Switching Dynamic Wallpaper Support, Gacha optimization (#2)
## Abstract
This PR implements
- Showing Teleports on map
- Quick Menu usage
- Dynamic Wallpaper switching
- Settings UP for Bangboo pool (via CLI)
## Support list
- The support of Teleport with map.
- Unlocking the 3 buttons (Interknow, DMs, Map) as a prerequisite of the previous feature. By pressing 'F' you can also modify the buttons in Quick Menu.
- Changing Dynamic Wallpaper to a specific one instead of being randomly chosen. **Notice that you can't use one's Dynamic Wallpaper if you don't own this agent.**
- Fixed some Gacha bugs, including:
- Obtained items won't be sent to your bag unless you're pulling the standard banner;
- Obtained items won't show in bag until relogin;
- Alternative command `gacha up` to choose the UP Bangboo. Start with `gacha up [player_uid]` and follow the guide to fill params.
## Principle
- Player's `UnlockModelBin` stores Quick Menu data, with the player's chosen buttons and their positions.
- Separate Gacha's DTO & Saving model to make it more standardized, and ensure ID validation is always performed.
- Player's bag information is now sync to client appropriately after finishing any gacha operations.
- `gacha up` search for pools with a `chooseable` Category Guarantee Policy, then list included items if user has provided the target pool's `gacha_schedule_id`.
## Known issues
- **Specifically for 1.1 Beta**, teleport may meet these issues leading to a 'black screen', forcing you to restart the client (or use `player kick` command as an alternative).
- Don't try to teleport to `治安局光映分署`, it won't succeed. This is the 32nd teleport out of the 31 ones defined visible in assets.
- Don't close the page after opening map. Teleport to somewhere.
- `gacha up` command is an alternative to in-game operation. You still can not see any bangboos in the collection when choosing Bangboo.
Co-authored-by: YYHEggEgg <53960525+YYHEggEgg@users.noreply.github.com>
Reviewed-on: https://git.xeondev.com/NewEriduPubSec/JaneDoe-ZS/pulls/2
Co-authored-by: YYHEggEgg <yyheggegg@xeondev.com>
Co-committed-by: YYHEggEgg <yyheggegg@xeondev.com>
2024-08-06 17:15:04 +00:00
|
|
|
#[prost(map = "uint32, uint32", tag = "2")]
|
|
|
|
pub quick_access_list: ::std::collections::HashMap<u32, u32>,
|
2024-07-20 12:13:04 +00:00
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct AvatarSkillBin {
|
|
|
|
#[prost(uint32, tag = "1")]
|
|
|
|
pub skill_type: u32,
|
|
|
|
#[prost(uint32, tag = "2")]
|
|
|
|
pub level: u32,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct AvatarBin {
|
|
|
|
#[prost(uint32, tag = "1")]
|
|
|
|
pub template_id: u32,
|
|
|
|
#[prost(uint32, tag = "2")]
|
|
|
|
pub level: u32,
|
|
|
|
#[prost(uint32, tag = "3")]
|
|
|
|
pub exp: u32,
|
|
|
|
#[prost(uint32, tag = "4")]
|
|
|
|
pub star: u32,
|
|
|
|
#[prost(uint32, tag = "5")]
|
|
|
|
pub rank: u32,
|
|
|
|
#[prost(uint32, tag = "6")]
|
|
|
|
pub unlocked_talent_num: u32,
|
2024-07-24 18:36:02 +00:00
|
|
|
#[prost(uint32, tag = "9")]
|
|
|
|
pub weapon_uid: u32,
|
2024-07-20 12:13:04 +00:00
|
|
|
#[prost(message, repeated, tag = "7")]
|
|
|
|
pub avatar_skill_list: ::prost::alloc::vec::Vec<AvatarSkillBin>,
|
|
|
|
#[prost(bool, repeated, tag = "8")]
|
|
|
|
pub talent_switch_list: ::prost::alloc::vec::Vec<bool>,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct RoleModelBin {
|
|
|
|
#[prost(message, repeated, tag = "1")]
|
|
|
|
pub avatar_list: ::prost::alloc::vec::Vec<AvatarBin>,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct ResourceItemBin {
|
|
|
|
#[prost(uint32, tag = "1")]
|
|
|
|
pub template_id: u32,
|
|
|
|
#[prost(int32, tag = "2")]
|
|
|
|
pub num: i32,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
2024-07-24 18:36:02 +00:00
|
|
|
pub struct WeaponBin {
|
|
|
|
#[prost(uint32, tag = "1")]
|
|
|
|
pub template_id: u32,
|
|
|
|
#[prost(uint32, tag = "2")]
|
|
|
|
pub uid: u32,
|
|
|
|
#[prost(uint32, tag = "3")]
|
|
|
|
pub level: u32,
|
|
|
|
#[prost(uint32, tag = "4")]
|
|
|
|
pub exp: u32,
|
|
|
|
#[prost(uint32, tag = "5")]
|
|
|
|
pub star: u32,
|
|
|
|
#[prost(uint32, tag = "6")]
|
|
|
|
pub refine_level: u32,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
2024-07-20 12:13:04 +00:00
|
|
|
pub struct ItemModelBin {
|
|
|
|
#[prost(message, repeated, tag = "1")]
|
|
|
|
pub resource_list: ::prost::alloc::vec::Vec<ResourceItemBin>,
|
2024-07-24 18:36:02 +00:00
|
|
|
#[prost(message, repeated, tag = "2")]
|
|
|
|
pub weapon_list: ::prost::alloc::vec::Vec<WeaponBin>,
|
|
|
|
#[prost(uint32, tag = "10")]
|
|
|
|
pub item_uid_counter: u32,
|
2024-07-20 12:13:04 +00:00
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct TransformBin {
|
|
|
|
#[prost(double, repeated, tag = "1")]
|
|
|
|
pub position: ::prost::alloc::vec::Vec<f64>,
|
|
|
|
#[prost(double, repeated, tag = "2")]
|
|
|
|
pub rotation: ::prost::alloc::vec::Vec<f64>,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct MainCityTimeBin {
|
|
|
|
#[prost(uint32, tag = "1")]
|
|
|
|
pub minutes: u32,
|
|
|
|
#[prost(uint32, tag = "2")]
|
|
|
|
pub day: u32,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct MainCityModelBin {
|
|
|
|
#[prost(message, optional, tag = "1")]
|
|
|
|
pub transform: ::core::option::Option<TransformBin>,
|
|
|
|
#[prost(message, optional, tag = "2")]
|
|
|
|
pub time: ::core::option::Option<MainCityTimeBin>,
|
|
|
|
#[prost(uint32, tag = "3")]
|
|
|
|
pub section_id: u32,
|
|
|
|
}
|
2024-08-04 11:41:23 +00:00
|
|
|
/// The progress record of a specified rarity. All maps' keys are category_guarantee_policy_tag.
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct GachaProgressBin {
|
|
|
|
/// The pity (counting how many pulls) of this pull (in previous record) or the next pull (in status).
|
|
|
|
#[prost(uint32, tag = "1")]
|
|
|
|
pub pity: u32,
|
|
|
|
/// The failure times of this category.
|
|
|
|
#[prost(map = "string, uint32", tag = "2")]
|
|
|
|
pub categories_progress_map: ::std::collections::HashMap<
|
|
|
|
::prost::alloc::string::String,
|
|
|
|
u32,
|
|
|
|
>,
|
|
|
|
/// The selected priority (category) for a Chooseable category.
|
|
|
|
#[prost(map = "string, string", tag = "3")]
|
|
|
|
pub categories_chosen_guarantee_category_map: ::std::collections::HashMap<
|
|
|
|
::prost::alloc::string::String,
|
|
|
|
::prost::alloc::string::String,
|
|
|
|
>,
|
|
|
|
/// The selectedpriority (a specified item) for a Chooseable category.
|
|
|
|
#[prost(map = "string, uint32", tag = "4")]
|
|
|
|
pub categories_chosen_guarantee_item_map: ::std::collections::HashMap<
|
|
|
|
::prost::alloc::string::String,
|
|
|
|
u32,
|
|
|
|
>,
|
|
|
|
/// The failure times for selected priority (a specified item).
|
|
|
|
#[prost(map = "string, uint32", tag = "5")]
|
|
|
|
pub categories_chosen_guarantee_progress_map: ::std::collections::HashMap<
|
|
|
|
::prost::alloc::string::String,
|
|
|
|
u32,
|
|
|
|
>,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct GachaExtraItemBin {
|
|
|
|
#[prost(uint32, tag = "1")]
|
|
|
|
pub extra_item_id: u32,
|
|
|
|
#[prost(uint32, tag = "2")]
|
|
|
|
pub extra_item_count: u32,
|
|
|
|
/// How many objects of the main item obtained in gacha is present in the player's bag (before gacha).
|
|
|
|
/// This is used for something like converting when there're extra characters.
|
|
|
|
#[prost(uint32, tag = "3")]
|
|
|
|
pub currently_gained: u32,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct GachaRecordBin {
|
|
|
|
#[prost(int64, tag = "1")]
|
|
|
|
pub pull_timestamp: i64,
|
|
|
|
#[prost(uint32, tag = "2")]
|
|
|
|
pub obtained_item_id: u32,
|
|
|
|
#[prost(uint32, tag = "3")]
|
|
|
|
pub gacha_id: u32,
|
|
|
|
/// The progress BEFORE this gacha is performed. uint32 is rarity.
|
|
|
|
#[prost(map = "uint32, message", tag = "4")]
|
|
|
|
pub progress_map: ::std::collections::HashMap<u32, GachaProgressBin>,
|
|
|
|
#[prost(message, optional, tag = "5")]
|
|
|
|
pub extra_item_bin: ::core::option::Option<GachaExtraItemBin>,
|
|
|
|
#[prost(enumeration = "GachaAddedItemType", tag = "6")]
|
|
|
|
pub item_type: i32,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct GachaStatusBin {
|
|
|
|
#[prost(map = "uint32, message", tag = "1")]
|
|
|
|
pub rarity_status_map: ::std::collections::HashMap<u32, GachaProgressBin>,
|
|
|
|
#[prost(map = "string, uint32", tag = "2")]
|
|
|
|
pub discount_usage_map: ::std::collections::HashMap<
|
|
|
|
::prost::alloc::string::String,
|
|
|
|
u32,
|
|
|
|
>,
|
|
|
|
}
|
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct GachaModelBin {
|
|
|
|
/// Gacha Status query. string is sharing_guarantee_info_category.
|
|
|
|
#[prost(map = "string, message", tag = "1")]
|
|
|
|
pub gacha_status_map: ::std::collections::HashMap<
|
|
|
|
::prost::alloc::string::String,
|
|
|
|
GachaStatusBin,
|
|
|
|
>,
|
|
|
|
#[prost(message, repeated, tag = "2")]
|
|
|
|
pub gacha_records: ::prost::alloc::vec::Vec<GachaRecordBin>,
|
|
|
|
#[prost(uint32, tag = "3")]
|
|
|
|
pub random_number: u32,
|
|
|
|
}
|
2024-07-20 12:13:04 +00:00
|
|
|
#[allow(clippy::derive_partial_eq_without_eq)]
|
|
|
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
|
|
|
pub struct PlayerDataBin {
|
|
|
|
#[prost(message, optional, tag = "1")]
|
|
|
|
pub basic_data_model: ::core::option::Option<BasicDataModelBin>,
|
|
|
|
#[prost(message, optional, tag = "2")]
|
|
|
|
pub lock_model: ::core::option::Option<LockModelBin>,
|
|
|
|
#[prost(message, optional, tag = "3")]
|
|
|
|
pub role_model: ::core::option::Option<RoleModelBin>,
|
|
|
|
#[prost(message, optional, tag = "4")]
|
|
|
|
pub item_model: ::core::option::Option<ItemModelBin>,
|
|
|
|
#[prost(message, optional, tag = "5")]
|
|
|
|
pub main_city_model: ::core::option::Option<MainCityModelBin>,
|
2024-08-04 11:41:23 +00:00
|
|
|
#[prost(message, optional, tag = "6")]
|
|
|
|
pub gacha_model: ::core::option::Option<GachaModelBin>,
|
|
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
|
|
|
|
#[repr(i32)]
|
|
|
|
pub enum GachaAddedItemType {
|
|
|
|
None = 0,
|
|
|
|
Weapon = 1,
|
|
|
|
Character = 2,
|
|
|
|
Bangboo = 3,
|
|
|
|
}
|
|
|
|
impl GachaAddedItemType {
|
|
|
|
/// String value of the enum field names used in the ProtoBuf definition.
|
|
|
|
///
|
|
|
|
/// The values are not transformed in any way and thus are considered stable
|
|
|
|
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
|
|
|
|
pub fn as_str_name(&self) -> &'static str {
|
|
|
|
match self {
|
|
|
|
GachaAddedItemType::None => "GACHA_ADDED_ITEM_TYPE_NONE",
|
|
|
|
GachaAddedItemType::Weapon => "GACHA_ADDED_ITEM_TYPE_WEAPON",
|
|
|
|
GachaAddedItemType::Character => "GACHA_ADDED_ITEM_TYPE_CHARACTER",
|
|
|
|
GachaAddedItemType::Bangboo => "GACHA_ADDED_ITEM_TYPE_BANGBOO",
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/// Creates an enum from field names used in the ProtoBuf definition.
|
|
|
|
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
|
|
|
|
match value {
|
|
|
|
"GACHA_ADDED_ITEM_TYPE_NONE" => Some(Self::None),
|
|
|
|
"GACHA_ADDED_ITEM_TYPE_WEAPON" => Some(Self::Weapon),
|
|
|
|
"GACHA_ADDED_ITEM_TYPE_CHARACTER" => Some(Self::Character),
|
|
|
|
"GACHA_ADDED_ITEM_TYPE_BANGBOO" => Some(Self::Bangboo),
|
|
|
|
_ => None,
|
|
|
|
}
|
|
|
|
}
|
2024-07-20 12:13:04 +00:00
|
|
|
}
|