1
This commit is contained in:
parent
959471461c
commit
659a301965
@ -14,20 +14,20 @@
|
|||||||
|
|
||||||
void HideBuff::Activate()
|
void HideBuff::Activate()
|
||||||
{
|
{
|
||||||
float alert_range = meta->GetBuffParam2(this);
|
alert_range = meta->GetBuffParam2(this);
|
||||||
float alert_time = meta->GetBuffParam3(this);
|
alert_time = meta->GetBuffParam3(this);
|
||||||
if (alert_range > 1.0f) {
|
if (alert_range > 1.0f) {
|
||||||
owner->room->xtimer.SetIntervalWpEx
|
owner->room->xtimer.SetIntervalWpEx
|
||||||
(
|
(
|
||||||
SERVER_FRAME_RATE,
|
SERVER_FRAME_RATE,
|
||||||
[this, alert_range, alert_time]
|
[this]
|
||||||
(int event, const a8::Args* args) mutable
|
(int event, const a8::Args* args) mutable
|
||||||
{
|
{
|
||||||
if (a8::TIMER_EXEC_EVENT == event) {
|
if (a8::TIMER_EXEC_EVENT == event) {
|
||||||
++step_;
|
++step_;
|
||||||
owner->TraverseCreatures
|
owner->TraverseCreatures
|
||||||
(
|
(
|
||||||
[this, alert_range] (Creature* target, bool& stop)
|
[this] (Creature* target, bool& stop)
|
||||||
{
|
{
|
||||||
if (!target->dead && target->team_id != owner->team_id &&
|
if (!target->dead && target->team_id != owner->team_id &&
|
||||||
Collision::CheckCC(owner, owner->GetRadius(),
|
Collision::CheckCC(owner, owner->GetRadius(),
|
||||||
@ -50,10 +50,39 @@ void HideBuff::Deactivate()
|
|||||||
|
|
||||||
void HideBuff::AddInRangeObject(Creature* target)
|
void HideBuff::AddInRangeObject(Creature* target)
|
||||||
{
|
{
|
||||||
|
auto itr = alert_buff_hash_.find(target->GetUniId());
|
||||||
|
if (itr != alert_buff_hash_.end()) {
|
||||||
|
std::get<2>(itr->second) = step_;
|
||||||
|
} else {
|
||||||
|
int buff_uniid = target->TryAddBuff(GetCaster().Get(), meta->_int_buff_param4, skill_meta);
|
||||||
|
alert_buff_hash_[target->GetUniId()] = std::make_tuple(target->GetWeakPtrRef(),
|
||||||
|
owner->room->GetFrameNo(),
|
||||||
|
step_,
|
||||||
|
buff_uniid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HideBuff::Check()
|
void HideBuff::Check()
|
||||||
{
|
{
|
||||||
|
bool timeout = false;
|
||||||
|
|
||||||
|
std::vector<int> leave_targets;
|
||||||
|
for (auto& pair : alert_buff_hash_) {
|
||||||
|
auto& tuple = pair.second;
|
||||||
|
if (std::get<2>(tuple) < step_) {
|
||||||
|
if (Collision::CheckCC(owner,
|
||||||
|
owner->GetRadius(),
|
||||||
|
std::get<0>(tuple).Get(),
|
||||||
|
alert_range)) {
|
||||||
|
} else {
|
||||||
|
leave_targets.push_back(pair.first);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (std::get<0>(tuple).Get()) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,4 +17,7 @@ class HideBuff : public Buff
|
|||||||
int step_ = 1;
|
int step_ = 1;
|
||||||
std::map<int, std::tuple<CreatureWeakPtr, long long, int, int>> alert_buff_hash_;
|
std::map<int, std::tuple<CreatureWeakPtr, long long, int, int>> alert_buff_hash_;
|
||||||
|
|
||||||
|
float alert_range = 0.0f;
|
||||||
|
float alert_time = 0.0f;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user