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 passive_skill_level: u32,
|
||||||
pub skill_level_map: HashMap<EAvatarSkillType, u32>,
|
pub skill_level_map: HashMap<EAvatarSkillType, u32>,
|
||||||
pub weapon_uid: u32,
|
pub weapon_uid: u32,
|
||||||
|
pub show_weapon_type: i32,
|
||||||
pub dressed_equip_map: HashMap<u32, u32>,
|
pub dressed_equip_map: HashMap<u32, u32>,
|
||||||
pub first_get_time: i64,
|
pub first_get_time: i64,
|
||||||
pub taken_rank_up_reward_list: Vec<u32>,
|
pub taken_rank_up_reward_list: Vec<u32>,
|
||||||
|
@ -48,7 +49,7 @@ impl AvatarItem {
|
||||||
rank: self.rank,
|
rank: self.rank,
|
||||||
unlocked_talent_num: self.unlocked_talent_num,
|
unlocked_talent_num: self.unlocked_talent_num,
|
||||||
cur_weapon_uid: self.weapon_uid,
|
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,
|
passive_skill_level: self.passive_skill_level,
|
||||||
skill_type_level: self
|
skill_type_level: self
|
||||||
.skill_level_map
|
.skill_level_map
|
||||||
|
|
|
@ -1461,6 +1461,19 @@ pub struct WeaponUnDressScRsp {
|
||||||
pub retcode: i32,
|
pub retcode: i32,
|
||||||
}
|
}
|
||||||
#[derive(Clone, PartialEq, ::proto_derive::Message, ::proto_derive::NetCmd)]
|
#[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)]
|
#[cmd_id(9646)]
|
||||||
pub struct AvatarFavoriteCsReq {
|
pub struct AvatarFavoriteCsReq {
|
||||||
#[prost(uint32, tag = "7", xor = "14323")]
|
#[prost(uint32, tag = "7", xor = "14323")]
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
use vivian_codegen::{handlers, required_state};
|
use vivian_codegen::{handlers, required_state};
|
||||||
use vivian_logic::item::EItemType;
|
use vivian_logic::item::EItemType;
|
||||||
use vivian_proto::{
|
use vivian_proto::{
|
||||||
AvatarFavoriteCsReq, AvatarFavoriteScRsp, AvatarLevelUpCsReq, AvatarLevelUpScRsp,
|
AvatarFavoriteCsReq, AvatarFavoriteScRsp, AvatarLevelUpCsReq, AvatarLevelUpScRsp, AvatarShowWeaponCsReq, AvatarShowWeaponScRsp, AvatarSkinDressCsReq, AvatarSkinDressScRsp, AvatarSkinUnDressCsReq, AvatarSkinUnDressScRsp, GetAvatarDataCsReq, GetAvatarDataScRsp, GetAvatarRecommendEquipCsReq, GetAvatarRecommendEquipScRsp, ItemRewardInfo, WeaponDressCsReq, WeaponDressScRsp, WeaponUnDressCsReq, WeaponUnDressScRsp
|
||||||
AvatarSkinDressCsReq, AvatarSkinDressScRsp, AvatarSkinUnDressCsReq, AvatarSkinUnDressScRsp,
|
|
||||||
GetAvatarDataCsReq, GetAvatarDataScRsp, GetAvatarRecommendEquipCsReq,
|
|
||||||
GetAvatarRecommendEquipScRsp, ItemRewardInfo, WeaponDressCsReq, WeaponDressScRsp,
|
|
||||||
WeaponUnDressCsReq, WeaponUnDressScRsp,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::logic::sync::SyncType;
|
use crate::logic::sync::SyncType;
|
||||||
|
@ -153,14 +149,14 @@ impl AvatarHandler {
|
||||||
return WeaponDressScRsp { retcode: 1 };
|
return WeaponDressScRsp { retcode: 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
if !context
|
let Some(weapon) = context
|
||||||
.player
|
.player
|
||||||
.item_model
|
.item_model
|
||||||
.weapon_map
|
.weapon_map
|
||||||
.contains_key(&request.weapon_uid)
|
.get(&request.weapon_uid)
|
||||||
{
|
else {
|
||||||
return WeaponDressScRsp { retcode: 1 };
|
return WeaponDressScRsp { retcode: 1 };
|
||||||
}
|
};
|
||||||
|
|
||||||
context
|
context
|
||||||
.player
|
.player
|
||||||
|
@ -180,13 +176,27 @@ impl AvatarHandler {
|
||||||
.weapon_uid = 0
|
.weapon_uid = 0
|
||||||
});
|
});
|
||||||
|
|
||||||
context
|
let avatar = context
|
||||||
.player
|
.player
|
||||||
.avatar_model
|
.avatar_model
|
||||||
.avatar_map
|
.avatar_map
|
||||||
.get_mut(&request.avatar_id)
|
.get_mut(&request.avatar_id)
|
||||||
.unwrap()
|
.unwrap();
|
||||||
.weapon_uid = request.weapon_uid;
|
|
||||||
|
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 }
|
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(
|
pub fn on_avatar_favorite_cs_req(
|
||||||
context: &mut NetContext<'_>,
|
context: &mut NetContext<'_>,
|
||||||
request: AvatarFavoriteCsReq,
|
request: AvatarFavoriteCsReq,
|
||||||
|
|
|
@ -79,6 +79,7 @@ impl AvatarModel {
|
||||||
.map(|(ty, level)| (EAvatarSkillType::try_from(ty).unwrap(), level))
|
.map(|(ty, level)| (EAvatarSkillType::try_from(ty).unwrap(), level))
|
||||||
.collect(),
|
.collect(),
|
||||||
weapon_uid: avatar.cur_weapon_uid,
|
weapon_uid: avatar.cur_weapon_uid,
|
||||||
|
show_weapon_type: avatar.show_weapon_type,
|
||||||
dressed_equip_map: avatar.dressed_equip_map,
|
dressed_equip_map: avatar.dressed_equip_map,
|
||||||
first_get_time: avatar.first_get_time,
|
first_get_time: avatar.first_get_time,
|
||||||
taken_rank_up_reward_list: avatar.taken_rank_up_reward_list,
|
taken_rank_up_reward_list: avatar.taken_rank_up_reward_list,
|
||||||
|
@ -120,6 +121,7 @@ impl AvatarModel {
|
||||||
.zip([0].into_iter().cycle())
|
.zip([0].into_iter().cycle())
|
||||||
.collect(),
|
.collect(),
|
||||||
weapon_uid: 0,
|
weapon_uid: 0,
|
||||||
|
show_weapon_type: vivian_proto::AvatarShowWeaponType::ShowWeaponLock.into(),
|
||||||
dressed_equip_map: HashMap::new(),
|
dressed_equip_map: HashMap::new(),
|
||||||
first_get_time: time_util::unix_timestamp_seconds(),
|
first_get_time: time_util::unix_timestamp_seconds(),
|
||||||
taken_rank_up_reward_list: Vec::new(),
|
taken_rank_up_reward_list: Vec::new(),
|
||||||
|
@ -155,12 +157,12 @@ impl Saveable for AvatarModel {
|
||||||
.map(|(&ty, &level)| (ty.into(), level))
|
.map(|(&ty, &level)| (ty.into(), level))
|
||||||
.collect(),
|
.collect(),
|
||||||
cur_weapon_uid: avatar.weapon_uid,
|
cur_weapon_uid: avatar.weapon_uid,
|
||||||
|
show_weapon_type: avatar.show_weapon_type,
|
||||||
dressed_equip_map: avatar.dressed_equip_map.clone(),
|
dressed_equip_map: avatar.dressed_equip_map.clone(),
|
||||||
first_get_time: avatar.first_get_time,
|
first_get_time: avatar.first_get_time,
|
||||||
taken_rank_up_reward_list: avatar.taken_rank_up_reward_list.clone(),
|
taken_rank_up_reward_list: avatar.taken_rank_up_reward_list.clone(),
|
||||||
avatar_skin_id: avatar.avatar_skin_id,
|
avatar_skin_id: avatar.avatar_skin_id,
|
||||||
is_favorite: avatar.is_favorite,
|
is_favorite: avatar.is_favorite,
|
||||||
show_weapon_type: 0,
|
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue