select_target.*
This commit is contained in:
parent
c5161158d7
commit
85024f9892
@ -284,126 +284,6 @@ Skill* Creature::GetPassiveSkill(int skill_id)
|
|||||||
return itr != passive_skill_hash_.end() ? itr->second : nullptr;
|
return itr != passive_skill_hash_.end() ? itr->second : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::SelectSkillTargets(Skill* skill, const a8::Vec2& target_pos, std::set<Entity*>& 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<Entity*>& target_list, BuffTriggerType_e trigger_type)
|
void Creature::TriggerBuff(Skill* skill, std::set<Entity*>& target_list, BuffTriggerType_e trigger_type)
|
||||||
{
|
{
|
||||||
for (Entity* entity : target_list) {
|
for (Entity* entity : target_list) {
|
||||||
|
127
server/gameserver/select_target.cc
Normal file
127
server/gameserver/select_target.cc
Normal file
@ -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<Entity*>& 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;
|
||||||
|
}
|
||||||
|
}
|
1
server/gameserver/select_target.h
Normal file
1
server/gameserver/select_target.h
Normal file
@ -0,0 +1 @@
|
|||||||
|
#pragma once
|
Loading…
x
Reference in New Issue
Block a user