From 85024f9892447de8b2421c907069f055bc664a17 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 19 Mar 2021 16:40:57 +0800 Subject: [PATCH] select_target.* --- server/gameserver/creature.cc | 120 --------------------------- server/gameserver/select_target.cc | 127 +++++++++++++++++++++++++++++ server/gameserver/select_target.h | 1 + 3 files changed, 128 insertions(+), 120 deletions(-) create mode 100644 server/gameserver/select_target.cc create mode 100644 server/gameserver/select_target.h diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 89294e0..9a5854b 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -284,126 +284,6 @@ Skill* Creature::GetPassiveSkill(int skill_id) return itr != passive_skill_hash_.end() ? itr->second : nullptr; } -void Creature::SelectSkillTargets(Skill* skill, const a8::Vec2& target_pos, std::set& target_list) -{ - switch (skill->meta->i->skill_target()) { - case kST_All: - { - TouchAllLayerHumanList - ( - [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) - { - if (hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { - target_list.insert(hum); - } - }); - } - break; - case kST_Self: - { - target_list.insert(this); - } - break; - case kST_FriendlyIncludeSelf: - { - target_list.insert(this); - TouchAllLayerHumanList - ( - [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) - { - if ((hum == this || hum->team_id == team_id) && - hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { - target_list.insert(hum); - } - }); - } - break; - case kST_FriendlyExcludeSelf: - { - TouchAllLayerHumanList - ( - [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) - { - if ((hum != this && hum->team_id == team_id) && - hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { - target_list.insert(hum); - } - }); - } - break; - case kST_EnemySingle: - { - #if 0 - Entity* entity = room->GetEntityByUniId(skill_target_id_); - if (entity && entity->IsEntityType(ET_Player)) { - Human* hum = (Human*)entity; - if (IsEnemy(hum)) { - target_list.insert(hum); - } - } - #endif - } - break; - case kST_EnemyGroup: - { - TouchAllLayerHumanList - ( - [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) - { - if ((hum->team_id != team_id) && - hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { - target_list.insert(hum); - } - }); - } - break; - case kST_EnemyAndObject: - { - TouchAllLayerHumanList - ( - [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) - { - if ((hum->team_id != team_id) && - hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { - target_list.insert(hum); - } - }); - } - break; - case kST_EnemyAndSelf: - { - #if 0 - TouchAllLayerHumanList - ( - [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) - { - if ((hum == this || this->IsEnemy(hum)) && - hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { - target_list.insert(hum); - } - }); - #endif - } - break; - case kST_SingleEnemyAndSelf: - { - Entity* entity = room->GetEntityByUniId(skill_target_id_); - if (entity && entity->IsEntityType(ET_Player)) { - Human* hum = (Human*)entity; - #if 0 - if (IsEnemy(hum)) { - target_list.insert(hum); - } - #endif - } - target_list.insert(this); - } - break; - default: - break; - } -} - void Creature::TriggerBuff(Skill* skill, std::set& target_list, BuffTriggerType_e trigger_type) { for (Entity* entity : target_list) { diff --git a/server/gameserver/select_target.cc b/server/gameserver/select_target.cc new file mode 100644 index 0000000..edd2582 --- /dev/null +++ b/server/gameserver/select_target.cc @@ -0,0 +1,127 @@ +#include "precompile.h" + +#include "creature.h" +#include "metamgr.h" +#include "room.h" +#include "skill.h" +#include "human.h" + +void Creature::SelectSkillTargets(Skill* skill, const a8::Vec2& target_pos, std::set& target_list) +{ + switch (skill->meta->i->skill_target()) { + case kST_All: + { + TouchAllLayerHumanList + ( + [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) + { + if (hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { + target_list.insert(hum); + } + }); + } + break; + case kST_Self: + { + target_list.insert(this); + } + break; + case kST_FriendlyIncludeSelf: + { + target_list.insert(this); + TouchAllLayerHumanList + ( + [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) + { + if ((hum == this || hum->team_id == team_id) && + hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { + target_list.insert(hum); + } + }); + } + break; + case kST_FriendlyExcludeSelf: + { + TouchAllLayerHumanList + ( + [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) + { + if ((hum != this && hum->team_id == team_id) && + hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { + target_list.insert(hum); + } + }); + } + break; + case kST_EnemySingle: + { + #if 0 + Entity* entity = room->GetEntityByUniId(skill_target_id_); + if (entity && entity->IsEntityType(ET_Player)) { + Human* hum = (Human*)entity; + if (IsEnemy(hum)) { + target_list.insert(hum); + } + } + #endif + } + break; + case kST_EnemyGroup: + { + TouchAllLayerHumanList + ( + [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) + { + if ((hum->team_id != team_id) && + hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { + target_list.insert(hum); + } + }); + } + break; + case kST_EnemyAndObject: + { + TouchAllLayerHumanList + ( + [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) + { + if ((hum->team_id != team_id) && + hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { + target_list.insert(hum); + } + }); + } + break; + case kST_EnemyAndSelf: + { + #if 0 + TouchAllLayerHumanList + ( + [this, skill, &target_pos, &target_list] (Human* hum, bool& stop) + { + if ((hum == this || this->IsEnemy(hum)) && + hum->GetPos().Distance(target_pos) < skill->meta->i->skill_distance()) { + target_list.insert(hum); + } + }); + #endif + } + break; + case kST_SingleEnemyAndSelf: + { + Entity* entity = room->GetEntityByUniId(skill_target_id_); + if (entity && entity->IsEntityType(ET_Player)) { + Human* hum = (Human*)entity; + #if 0 + if (IsEnemy(hum)) { + target_list.insert(hum); + } + #endif + } + target_list.insert(this); + } + break; + default: + break; + } +} diff --git a/server/gameserver/select_target.h b/server/gameserver/select_target.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/server/gameserver/select_target.h @@ -0,0 +1 @@ +#pragma once