diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 8a21f11..5e260d6 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1313,9 +1313,9 @@ void Human::DoJump() } } -int Human::SelectSkillId() +Skill* Human::SelectSkill() { - return 0; + return nullptr; } void Human::DoGetOn(int obj_uniid) diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 7deeff8..6979f32 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -190,7 +190,7 @@ class Human : public Creature bool HasNoDownedTeammate(); void DoJump(); virtual bool CanUseSkill(int skill_id) override; - virtual int SelectSkillId(); + virtual Skill* SelectSkill(); void DoGetOn(int obj_uniid); void DoGetDown(); void FindLocation(); diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index 22f78f4..fc61fb0 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -191,10 +191,11 @@ void ZombieModeAI::UpdateAttack() } float distance = myself->GetPos().Distance(node_->target->GetPos()); if (distance > GetAttackRange()) { - if (myself->CanUseSkill(myself->SelectSkillId()) && - myself->CurrentSkill()->meta->i->skill_id() != TURN_OVER_SKILL_ID && - distance < myself->CurrentSkill()->meta->i->skill_distance()) { - DoSkill(); + Skill* skill = myself->SelectSkill(); + if (myself->CanUseSkill(skill->meta->i->skill_id()) && + skill->meta->i->skill_id() != TURN_OVER_SKILL_ID && + distance < skill->meta->i->skill_distance()) { + DoSkill(skill->meta->i->skill_id()); } else if (node_->ai_meta->i->pursuit_radius() <= 0) { //站桩 ChangeToState(ZSE_Thinking); @@ -475,10 +476,10 @@ void ZombieModeAI::DoShot() } } -void ZombieModeAI::DoSkill() +void ZombieModeAI::DoSkill(int skill_id) { Human* myself = (Human*)owner; - myself->DoSkill(myself->SelectSkillId(), node_->target->GetEntityUniId(), node_->target->GetPos()); + myself->DoSkill(skill_id, node_->target->GetEntityUniId(), node_->target->GetPos()); } int ZombieModeAI::GetAttackTimes() diff --git a/server/gameserver/zombiemode.ai.h b/server/gameserver/zombiemode.ai.h index c05e2eb..677cc91 100644 --- a/server/gameserver/zombiemode.ai.h +++ b/server/gameserver/zombiemode.ai.h @@ -33,7 +33,7 @@ private: void DoMove(); void ChangeToState(ZombieState_e to_state); void DoShot(); - void DoSkill(); + void DoSkill(int skill_id); Human* GetTarget(); float GetAttackRange();