JaneDoe-ZS/nap_gameserver/src/handlers/item.rs
xeon 69634fda64 Implement weapons
Implement Weapon add, save, equip
Implement 'item add_weapon' command
2024-07-24 21:36:02 +03:00

62 lines
1.6 KiB
Rust

use super::*;
pub async fn on_get_item_data(
_session: &NetSession,
player: &mut Player,
_req: GetItemDataCsReq,
) -> NetResult<GetItemDataScRsp> {
let item_model = &player.item_model;
Ok(GetItemDataScRsp {
retcode: Retcode::RetSucc.into(),
resource_list: item_model.resources.iter().map(|i| i.to_client()).collect(),
weapon_list: item_model.weapons.iter().map(|w| w.to_client()).collect(),
..Default::default()
})
}
pub async fn on_weapon_dress(
session: &NetSession,
player: &mut Player,
req: WeaponDressCsReq,
) -> NetResult<WeaponDressScRsp> {
player.dress_weapon(req.avatar_id, req.weapon_uid.into())?;
session
.notify(PlayerSyncScNotify {
avatar: Some(player.role_model.avatar_sync()),
item_sync: Some(player.item_model.item_sync()),
..Default::default()
})
.await?;
Ok(WeaponDressScRsp {
retcode: Retcode::RetSucc.into(),
})
}
pub async fn on_weapon_un_dress(
session: &NetSession,
player: &mut Player,
req: WeaponUnDressCsReq,
) -> NetResult<WeaponUnDressScRsp> {
let avatar = player
.role_model
.avatar_list
.iter_mut()
.find(|a| a.template_id == req.avatar_id)
.ok_or(Retcode::RetFail)?;
avatar.weapon_uid = None;
session
.notify(PlayerSyncScNotify {
avatar: Some(player.role_model.avatar_sync()),
..Default::default()
})
.await?;
Ok(WeaponUnDressScRsp {
retcode: Retcode::RetSucc.into(),
})
}