Added signature weapon switch (EAvatarShowWeaponType) support
This commit is contained in:
parent
b70c047585
commit
2b275d8034
4 changed files with 62 additions and 14 deletions
|
@ -13,6 +13,7 @@ pub struct AvatarItem {
|
|||
pub passive_skill_level: u32,
|
||||
pub skill_level_map: HashMap<EAvatarSkillType, u32>,
|
||||
pub weapon_uid: u32,
|
||||
pub show_weapon_type: i32,
|
||||
pub dressed_equip_map: HashMap<u32, u32>,
|
||||
pub first_get_time: i64,
|
||||
pub taken_rank_up_reward_list: Vec<u32>,
|
||||
|
@ -48,7 +49,7 @@ impl AvatarItem {
|
|||
rank: self.rank,
|
||||
unlocked_talent_num: self.unlocked_talent_num,
|
||||
cur_weapon_uid: self.weapon_uid,
|
||||
show_weapon_type: vivian_proto::AvatarShowWeaponType::ShowWeaponLock.into(),
|
||||
show_weapon_type: self.show_weapon_type,
|
||||
passive_skill_level: self.passive_skill_level,
|
||||
skill_type_level: self
|
||||
.skill_level_map
|
||||
|
|
|
@ -1461,6 +1461,19 @@ pub struct WeaponUnDressScRsp {
|
|||
pub retcode: i32,
|
||||
}
|
||||
#[derive(Clone, PartialEq, ::proto_derive::Message, ::proto_derive::NetCmd)]
|
||||
#[cmd_id(9975)]
|
||||
pub struct AvatarShowWeaponCsReq {
|
||||
#[prost(uint32, tag = "14", xor = "6358")]
|
||||
pub avatar_id: u32,
|
||||
#[prost(enumeration = "AvatarShowWeaponType", tag = "13")]
|
||||
pub show_weapon_type: i32,
|
||||
}
|
||||
#[derive(Clone, PartialEq, ::proto_derive::Message, ::proto_derive::NetCmd)]
|
||||
#[derive(::proto_derive::NetResponse)]
|
||||
pub struct AvatarShowWeaponScRsp {
|
||||
pub retcode: i32,
|
||||
}
|
||||
#[derive(Clone, PartialEq, ::proto_derive::Message, ::proto_derive::NetCmd)]
|
||||
#[cmd_id(9646)]
|
||||
pub struct AvatarFavoriteCsReq {
|
||||
#[prost(uint32, tag = "7", xor = "14323")]
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
use vivian_codegen::{handlers, required_state};
|
||||
use vivian_logic::item::EItemType;
|
||||
use vivian_proto::{
|
||||
AvatarFavoriteCsReq, AvatarFavoriteScRsp, AvatarLevelUpCsReq, AvatarLevelUpScRsp,
|
||||
AvatarSkinDressCsReq, AvatarSkinDressScRsp, AvatarSkinUnDressCsReq, AvatarSkinUnDressScRsp,
|
||||
GetAvatarDataCsReq, GetAvatarDataScRsp, GetAvatarRecommendEquipCsReq,
|
||||
GetAvatarRecommendEquipScRsp, ItemRewardInfo, WeaponDressCsReq, WeaponDressScRsp,
|
||||
WeaponUnDressCsReq, WeaponUnDressScRsp,
|
||||
AvatarFavoriteCsReq, AvatarFavoriteScRsp, AvatarLevelUpCsReq, AvatarLevelUpScRsp, AvatarShowWeaponCsReq, AvatarShowWeaponScRsp, AvatarSkinDressCsReq, AvatarSkinDressScRsp, AvatarSkinUnDressCsReq, AvatarSkinUnDressScRsp, GetAvatarDataCsReq, GetAvatarDataScRsp, GetAvatarRecommendEquipCsReq, GetAvatarRecommendEquipScRsp, ItemRewardInfo, WeaponDressCsReq, WeaponDressScRsp, WeaponUnDressCsReq, WeaponUnDressScRsp
|
||||
};
|
||||
|
||||
use crate::logic::sync::SyncType;
|
||||
|
@ -153,14 +149,14 @@ impl AvatarHandler {
|
|||
return WeaponDressScRsp { retcode: 1 };
|
||||
}
|
||||
|
||||
if !context
|
||||
let Some(weapon) = context
|
||||
.player
|
||||
.item_model
|
||||
.weapon_map
|
||||
.contains_key(&request.weapon_uid)
|
||||
{
|
||||
.get(&request.weapon_uid)
|
||||
else {
|
||||
return WeaponDressScRsp { retcode: 1 };
|
||||
}
|
||||
};
|
||||
|
||||
context
|
||||
.player
|
||||
|
@ -180,13 +176,27 @@ impl AvatarHandler {
|
|||
.weapon_uid = 0
|
||||
});
|
||||
|
||||
context
|
||||
let avatar = context
|
||||
.player
|
||||
.avatar_model
|
||||
.avatar_map
|
||||
.get_mut(&request.avatar_id)
|
||||
.unwrap()
|
||||
.weapon_uid = request.weapon_uid;
|
||||
.unwrap();
|
||||
|
||||
avatar.weapon_uid = request.weapon_uid;
|
||||
|
||||
if avatar.show_weapon_type == vivian_proto::AvatarShowWeaponType::ShowWeaponLock.into()
|
||||
&& context
|
||||
.resources
|
||||
.templates
|
||||
.weapon_template_tb()
|
||||
.find(|tmpl|
|
||||
tmpl.item_id() == weapon.id
|
||||
&& tmpl.avatar_id() == request.avatar_id
|
||||
).is_some()
|
||||
{
|
||||
avatar.show_weapon_type = vivian_proto::AvatarShowWeaponType::ShowWeaponActive.into();
|
||||
}
|
||||
|
||||
WeaponDressScRsp { retcode: 0 }
|
||||
}
|
||||
|
@ -208,6 +218,28 @@ impl AvatarHandler {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn on_avatar_show_weapon_cs_req(
|
||||
context: &mut NetContext<'_>,
|
||||
request: AvatarShowWeaponCsReq,
|
||||
) -> AvatarShowWeaponScRsp {
|
||||
let Some(avatar) = context
|
||||
.player
|
||||
.avatar_model
|
||||
.avatar_map
|
||||
.get_mut(&request.avatar_id)
|
||||
else {
|
||||
return AvatarShowWeaponScRsp { retcode: 1 };
|
||||
};
|
||||
|
||||
if avatar.show_weapon_type == vivian_proto::AvatarShowWeaponType::ShowWeaponLock.into() {
|
||||
return AvatarShowWeaponScRsp { retcode: 1 };
|
||||
}
|
||||
|
||||
avatar.show_weapon_type = request.show_weapon_type;
|
||||
|
||||
AvatarShowWeaponScRsp { retcode: 0 }
|
||||
}
|
||||
|
||||
pub fn on_avatar_favorite_cs_req(
|
||||
context: &mut NetContext<'_>,
|
||||
request: AvatarFavoriteCsReq,
|
||||
|
|
|
@ -79,6 +79,7 @@ impl AvatarModel {
|
|||
.map(|(ty, level)| (EAvatarSkillType::try_from(ty).unwrap(), level))
|
||||
.collect(),
|
||||
weapon_uid: avatar.cur_weapon_uid,
|
||||
show_weapon_type: avatar.show_weapon_type,
|
||||
dressed_equip_map: avatar.dressed_equip_map,
|
||||
first_get_time: avatar.first_get_time,
|
||||
taken_rank_up_reward_list: avatar.taken_rank_up_reward_list,
|
||||
|
@ -120,6 +121,7 @@ impl AvatarModel {
|
|||
.zip([0].into_iter().cycle())
|
||||
.collect(),
|
||||
weapon_uid: 0,
|
||||
show_weapon_type: vivian_proto::AvatarShowWeaponType::ShowWeaponLock.into(),
|
||||
dressed_equip_map: HashMap::new(),
|
||||
first_get_time: time_util::unix_timestamp_seconds(),
|
||||
taken_rank_up_reward_list: Vec::new(),
|
||||
|
@ -155,12 +157,12 @@ impl Saveable for AvatarModel {
|
|||
.map(|(&ty, &level)| (ty.into(), level))
|
||||
.collect(),
|
||||
cur_weapon_uid: avatar.weapon_uid,
|
||||
show_weapon_type: avatar.show_weapon_type,
|
||||
dressed_equip_map: avatar.dressed_equip_map.clone(),
|
||||
first_get_time: avatar.first_get_time,
|
||||
taken_rank_up_reward_list: avatar.taken_rank_up_reward_list.clone(),
|
||||
avatar_skin_id: avatar.avatar_skin_id,
|
||||
is_favorite: avatar.is_favorite,
|
||||
show_weapon_type: 0,
|
||||
})
|
||||
.collect(),
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue