wicked-waifus-rs/wicked-waifus-game-server/src/logic/handler/skill.rs
2025-06-26 06:28:24 +00:00

73 lines
2.3 KiB
Rust

use crate::logic::ecs::component::ComponentContainer;
use wicked_waifus_protocol::{
ErrorCode, ExploreSkillRouletteSetRequest, ExploreSkillRouletteSetResponse,
VisionExploreSkillSetRequest, VisionExploreSkillSetResponse, VisionSkillChangeNotify,
VisionSkillInformation,
};
use crate::logic::thread_mgr::NetContext;
use crate::query_with;
pub fn on_vision_explore_skill_set_request(
ctx: &mut NetContext,
request: VisionExploreSkillSetRequest,
response: &mut VisionExploreSkillSetResponse,
) {
ctx.player.explore_tools.active_explore_skill = request.skill_id;
for (entity, owner, mut vision_skill) in
query_with!(ctx.world.get_world_entity(), OwnerPlayer, VisionSkill)
{
if owner.0 == ctx.player.basic_info.id {
vision_skill.skill_id = request.skill_id;
ctx.player.notify(VisionSkillChangeNotify {
entity_id: entity.into(),
vision_skill_infos: vec![VisionSkillInformation {
skill_id: request.skill_id,
..Default::default()
}],
..Default::default()
})
}
}
response.skill_id = request.skill_id;
}
pub fn on_explore_skill_roulette_set_request(
ctx: &mut NetContext,
request: ExploreSkillRouletteSetRequest,
response: &mut ExploreSkillRouletteSetResponse,
) {
let mut illegal_skill = false;
for skill_roulette in &request.skill_roulettes {
for skill_id in &skill_roulette.skill_ids {
if *skill_id != 0
&& !ctx
.player
.explore_tools
.unlocked_explore_skills
.contains(skill_id)
{
illegal_skill = true;
break;
}
}
}
match illegal_skill {
true => response.error_code = ErrorCode::ErrRouletteFuncIdInvaild.into(),
false => {
ctx.player.explore_tools.roulette = request
.skill_roulettes
.first()
.unwrap()
.skill_ids
.to_vec()
.as_slice()
.try_into()
.unwrap();
response.error_code = ErrorCode::Success.into();
response.skill_roulettes = request.skill_roulettes;
}
}
}