1
This commit is contained in:
parent
754925b80a
commit
052ba3bd57
@ -23,8 +23,45 @@ void HoldShieldBuff::Activate()
|
||||
kPropShieldHp,
|
||||
owner->shield_max_hp_,
|
||||
owner->shield_hp_);
|
||||
hold_param2_ = meta->GetBuffParam2(this);
|
||||
check_interval_time_ = meta->GetBuffParam3(this);
|
||||
if (meta->_int_buff_param1) {
|
||||
std::map<int, long long> hited_objects = std::map<int, long long>();
|
||||
owner->room->xtimer.SetIntervalEx
|
||||
(
|
||||
SERVER_FRAME_RATE,
|
||||
[this, hited_objects] (int event, const a8::Args* args) mutable
|
||||
{
|
||||
if (a8::TIMER_EXEC_EVENT == event) {
|
||||
std::set<Creature*> enemys;
|
||||
owner->GetHitEnemys(enemys, owner->GetPos().ToGlmVec3(), hold_param2_);
|
||||
for (auto& enemy : enemys) {
|
||||
auto itr = hited_objects.find(enemy->GetUniId());
|
||||
if (itr != hited_objects.end()) {
|
||||
if (owner->room->GetFrameNo() - itr->second <
|
||||
check_interval_time_ * SERVER_FRAME_RATE) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (enemy->IsEntityType(ET_Car)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
hited_objects[enemy->GetUniId()] = owner->room->GetFrameNo();
|
||||
OnEnemyHit(enemy);
|
||||
}
|
||||
}
|
||||
},
|
||||
&xtimer_attacher);
|
||||
}
|
||||
}
|
||||
|
||||
void HoldShieldBuff::Deactivate()
|
||||
{
|
||||
}
|
||||
|
||||
void HoldShieldBuff::OnEnemyHit(Creature* enemy)
|
||||
{
|
||||
enemy->TryAddBuff(GetCaster().Get(), meta->_int_buff_param1, skill_meta);
|
||||
}
|
||||
|
@ -9,4 +9,10 @@ class HoldShieldBuff : public Buff
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
private:
|
||||
void OnEnemyHit(Creature* enemy);
|
||||
|
||||
private:
|
||||
float hold_param2_ = 0.0f;
|
||||
float check_interval_time_ = 0.0f;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user