1
This commit is contained in:
parent
ef830ecbab
commit
e6c32f28bc
@ -333,81 +333,85 @@ void CallFuncBuff::ProcLightCircle()
|
|||||||
int keep_buff_uniid = 0;
|
int keep_buff_uniid = 0;
|
||||||
);
|
);
|
||||||
|
|
||||||
{
|
|
||||||
auto on_enter =
|
|
||||||
[this, context] (Human* hum)
|
|
||||||
{
|
|
||||||
if (context->in_human_infos.find(hum->GetUniId()) != context->in_human_infos.end()) {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
const mt::Skill* curr_skill_meta = context->active_skill_meta ?
|
|
||||||
context->active_skill_meta : skill_meta;
|
|
||||||
|
|
||||||
InnerObject o;
|
auto on_enter =
|
||||||
o.c = hum->GetWeakPtrRef();
|
[this, context] (Human* hum)
|
||||||
|
{
|
||||||
|
if (context->in_human_infos.find(hum->GetUniId()) != context->in_human_infos.end()) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
const mt::Skill* curr_skill_meta = context->active_skill_meta ?
|
||||||
|
context->active_skill_meta : skill_meta;
|
||||||
|
|
||||||
const mt::Skill* old_skill_meta = skill_meta;
|
InnerObject o;
|
||||||
skill_meta = curr_skill_meta;
|
o.c = hum->GetWeakPtrRef();
|
||||||
if (context->active_skill_meta) {
|
|
||||||
for (int buff_id : meta->_buff_param3_int_list) {
|
|
||||||
o.buff_uniids.insert(hum->TryAddBuff(GetCaster().Get(), buff_id, skill_meta));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int buff_id : meta->_buff_param2_int_list) {
|
|
||||||
o.buff_uniids.insert(hum->TryAddBuff(GetCaster().Get(), buff_id, skill_meta));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
skill_meta = old_skill_meta;
|
|
||||||
|
|
||||||
context->in_human_infos[hum->GetUniId()] = o;
|
const mt::Skill* old_skill_meta = skill_meta;
|
||||||
context->in_human_infos[hum->GetUniId()].OnEnter();
|
skill_meta = curr_skill_meta;
|
||||||
};
|
if (context->active_skill_meta) {
|
||||||
auto on_stay =
|
for (int buff_id : meta->_buff_param3_int_list) {
|
||||||
[this, context] (Human* hum)
|
o.buff_uniids.insert(hum->TryAddBuff(GetCaster().Get(), buff_id, skill_meta));
|
||||||
{
|
|
||||||
};
|
|
||||||
auto on_leave =
|
|
||||||
[this, context] (Human* hum)
|
|
||||||
{
|
|
||||||
auto itr = context->in_human_infos.find(hum->GetUniId());
|
|
||||||
if (itr == context->in_human_infos.end()) {
|
|
||||||
abort();
|
|
||||||
}
|
}
|
||||||
for (int buff_uniid : itr->second.buff_uniids) {
|
} else {
|
||||||
hum->RemoveBuffByUniId(buff_uniid);
|
for (int buff_id : meta->_buff_param2_int_list) {
|
||||||
|
o.buff_uniids.insert(hum->TryAddBuff(GetCaster().Get(), buff_id, skill_meta));
|
||||||
}
|
}
|
||||||
itr->second.OnLeave();
|
}
|
||||||
};
|
skill_meta = old_skill_meta;
|
||||||
auto check_cb =
|
|
||||||
[this, context, on_enter, on_stay, on_leave]
|
context->in_human_infos[hum->GetUniId()] = o;
|
||||||
()
|
context->in_human_infos[hum->GetUniId()].OnEnter();
|
||||||
{
|
};
|
||||||
const mt::Skill* curr_skill_meta = context->active_skill_meta ?
|
auto on_stay =
|
||||||
context->active_skill_meta : skill_meta;
|
[this, context] (Human* hum)
|
||||||
if (!owner->dead) {
|
{
|
||||||
float range = curr_skill_meta->_number_meta->_float_range2;
|
};
|
||||||
int size = 0;
|
auto on_leave =
|
||||||
std::array<Human*, MAX_TEAM_NUM> hit_humans;
|
[this, context] (Human* hum)
|
||||||
owner->GetTeam()->TraverseMembers
|
{
|
||||||
(
|
auto itr = context->in_human_infos.find(hum->GetUniId());
|
||||||
[this, range, &hit_humans, &size] (Human* hum) mutable
|
if (itr == context->in_human_infos.end()) {
|
||||||
{
|
abort();
|
||||||
if (!hum->dead &&
|
}
|
||||||
Collision::CheckCC(owner, owner->GetRadius(),
|
for (int buff_uniid : itr->second.buff_uniids) {
|
||||||
hum, range)) {
|
hum->RemoveBuffByUniId(buff_uniid);
|
||||||
if (size < MAX_TEAM_NUM) {
|
}
|
||||||
hit_humans[size++] = hum;
|
itr->second.OnLeave();
|
||||||
}
|
};
|
||||||
|
auto check_cb =
|
||||||
|
[this, context, on_enter, on_stay, on_leave]
|
||||||
|
()
|
||||||
|
{
|
||||||
|
if (owner->HasBuffEffect(kBET_Fly) ||
|
||||||
|
owner->HasBuffEffect(kBET_Jump)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const mt::Skill* curr_skill_meta = context->active_skill_meta ?
|
||||||
|
context->active_skill_meta : skill_meta;
|
||||||
|
if (!owner->dead) {
|
||||||
|
float range = curr_skill_meta->_number_meta->_float_range2;
|
||||||
|
int size = 0;
|
||||||
|
std::array<Human*, MAX_TEAM_NUM> hit_humans;
|
||||||
|
owner->GetTeam()->TraverseMembers
|
||||||
|
(
|
||||||
|
[this, range, &hit_humans, &size] (Human* hum) mutable
|
||||||
|
{
|
||||||
|
if (!hum->dead &&
|
||||||
|
Collision::CheckCC(owner, owner->GetRadius(),
|
||||||
|
hum, range)) {
|
||||||
|
if (size < MAX_TEAM_NUM) {
|
||||||
|
hit_humans[size++] = hum;
|
||||||
}
|
}
|
||||||
return true;
|
}
|
||||||
});
|
return true;
|
||||||
std::vector<Human*> leave_humans;
|
});
|
||||||
for (auto& pair : context->in_human_infos) {
|
std::vector<Human*> leave_humans;
|
||||||
bool found = false;
|
for (auto& pair : context->in_human_infos) {
|
||||||
for (int i = 0; i < size; ++i){
|
bool found = false;
|
||||||
if (hit_humans[i] == pair.second.c.Get()) {
|
for (int i = 0; i < size; ++i){
|
||||||
found = true;
|
if (hit_humans[i] == pair.second.c.Get()) {
|
||||||
break;
|
found = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
@ -473,7 +477,6 @@ void CallFuncBuff::ProcLightCircle()
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
&xtimer_attacher);
|
&xtimer_attacher);
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
owner->GetTrigger()->AddListener
|
owner->GetTrigger()->AddListener
|
||||||
@ -525,9 +528,13 @@ void CallFuncBuff::ProcLightCircle()
|
|||||||
owner->GetTrigger()->AddListener
|
owner->GetTrigger()->AddListener
|
||||||
(
|
(
|
||||||
kStartJump,
|
kStartJump,
|
||||||
[this, context] (const a8::Args& args) mutable
|
[this, context, on_leave] (const a8::Args& args) mutable
|
||||||
{
|
{
|
||||||
if (context->keep_buff_uniid) {
|
if (context->keep_buff_uniid) {
|
||||||
|
for (auto& pair : context->in_human_infos) {
|
||||||
|
on_leave(pair.second.c.Get()->AsHuman());
|
||||||
|
}
|
||||||
|
context->in_human_infos.clear();
|
||||||
owner->RemoveBuffByUniId(context->keep_buff_uniid);
|
owner->RemoveBuffByUniId(context->keep_buff_uniid);
|
||||||
context->keep_buff_uniid = 0;
|
context->keep_buff_uniid = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user