diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index 94bad45..a54c5eb 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -162,15 +162,28 @@ void AndroidAI::Shot(Human* enemy) void AndroidAI::UseSkill(Human* enemy) { Human* sender = (Human*)owner; - a8::Vec2 shot_dir = enemy->pos - sender->pos; - if (std::abs(shot_dir.x) > FLT_EPSILON || - std::abs(shot_dir.y) > FLT_EPSILON) { + if (!sender->CurrentSkillMeta()) { + return; + } + if (sender->CurrentSkillMeta()->i->skill_target() == kST_Self) { sender->curr_skill_phase = 0; - sender->skill_target_id = enemy->entity_uniid; - sender->skill_dir = shot_dir; - sender->skill_target_pos = enemy->pos; + sender->skill_target_id = sender->entity_uniid; + sender->skill_dir = a8::Vec2(); + sender->skill_target_pos = sender->pos; sender->skill_param1 = 0; sender->playing_skill = false; sender->DoSkill(); + } else { + a8::Vec2 shot_dir = enemy->pos - sender->pos; + if (std::abs(shot_dir.x) > FLT_EPSILON || + std::abs(shot_dir.y) > FLT_EPSILON) { + sender->curr_skill_phase = 0; + sender->skill_target_id = enemy->entity_uniid; + sender->skill_dir = shot_dir; + sender->skill_target_pos = enemy->pos; + sender->skill_param1 = 0; + sender->playing_skill = false; + sender->DoSkill(); + } } } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 12ccb88..0ca1011 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1065,6 +1065,11 @@ int Human::TankLv() return tank_.tank_lv; } +MetaData::Skill* Human::CurrentSkillMeta() +{ + return skill_meta_; +} + int Human::GetSkillLeftTime() { if (skill_meta_) { diff --git a/server/gameserver/human.h b/server/gameserver/human.h index d0e5f24..56bab8b 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -177,6 +177,7 @@ class Human : public Entity const Tank& GetTank(); int TankId(); int TankLv(); + MetaData::Skill* CurrentSkillMeta(); int GetSkillLeftTime(); int GetSkillCd(); void TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type);