diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 11746f33..598c6897 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1337,7 +1337,7 @@ void Human::DoJump() } } -void Human::DoSkill(int target_id, const a8::Vec2& target_pos) +void Human::DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos) { skill_target_id_ = target_id; skill_target_pos_ = target_pos; @@ -1381,6 +1381,11 @@ void Human::DoSkill(int target_id, const a8::Vec2& target_pos) use_skill = false; } +int Human::SelectSkillId() +{ + return 0; +} + void Human::DoGetOn(int obj_uniid) { if (room->GetGasData().gas_mode == GasInactive) { diff --git a/server/gameserver/human.h b/server/gameserver/human.h index c8fc1678..0663af2c 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -195,7 +195,8 @@ class Human : public Creature bool HasNoDownedTeammate(); bool CanUseSkill(); void DoJump(); - void DoSkill(int target_id, const a8::Vec2& target_pos); + void DoSkill(int skill_id, int target_id, const a8::Vec2& target_pos); + virtual int SelectSkillId(); void DoGetOn(int obj_uniid); void DoGetDown(); void FindLocation(); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 7759e837..8af3911a 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -393,7 +393,7 @@ void Player::UpdateUseSkill() if (HasBuffEffect(kBET_Vertigo)) { return; } - DoSkill(skill_target_id, a8::Vec2()); + DoSkill(use_skill_id, skill_target_id, a8::Vec2()); } void Player::Shot() @@ -1111,7 +1111,8 @@ void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg) } if (msg.has_use_skill()) { use_skill = msg.use_skill(); - skill_target_id = msg.skill_target_id_(); + use_skill_id = msg.skill_id(); + skill_target_id = msg.skill_target_id(); } else { use_skill = false; } diff --git a/server/gameserver/player.h b/server/gameserver/player.h index fe1cc895..f4667fae 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -58,6 +58,7 @@ class Player : public Human bool jump = false; bool use_skill = false; + int use_skill_id = 0; int skill_target_id = 0; bool get_down = false; diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index 6e5b6e26..de51e3d1 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -477,7 +477,7 @@ void ZombieModeAI::DoShot() void ZombieModeAI::DoSkill() { Human* myself = (Human*)owner; - myself->DoSkill(node_->target->GetEntityUniId(), node_->target->GetPos()); + myself->DoSkill(myself->SelectSkillId(), node_->target->GetEntityUniId(), node_->target->GetPos()); } int ZombieModeAI::GetAttackTimes()