diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index aa8556c8..1747a14d 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -421,34 +421,36 @@ void Buff::ProcSprint() [] (const a8::XParams& param) { Buff* buff = (Buff*)param.sender.GetUserData(); - a8::Vec2* pre_pos = (a8::Vec2*)param.param2.GetUserData(); - std::set* hited_objects = (std::set*)param.param1.GetUserData(); - std::set enemys; - a8::Vec2 old_pos = buff->owner->GetPos(); + if (!buff->meta->param3_int_list.empty()) { + a8::Vec2* pre_pos = (a8::Vec2*)param.param2.GetUserData(); + std::set* hited_objects = (std::set*)param.param1.GetUserData(); + std::set enemys; + a8::Vec2 old_pos = buff->owner->GetPos(); - if (pre_pos->ManhattanDistance(buff->owner->GetPos()) > 2) { - a8::Vec2 dir = buff->owner->GetPos() - (*pre_pos); - dir.Normalize(); - float distance = buff->owner->GetPos().Distance((*pre_pos)); - for (int i = 0; i < (distance + 6); i += 5) { - buff->owner->SetPos((*pre_pos) + (dir * i)); - buff->owner->GetHitEnemys(enemys, buff->meta->param4); - for (auto& enemy : enemys) { - if (enemy->IsEntityType(ET_Car)) { - continue; - } - if (hited_objects->find(enemy->GetUniId()) == hited_objects->end()) { - hited_objects->insert(enemy->GetUniId()); - for (int buff_id : buff->meta->param3_int_list) { - enemy->TryAddBuff(buff->owner, buff_id); + if (pre_pos->ManhattanDistance(buff->owner->GetPos()) > 2) { + a8::Vec2 dir = buff->owner->GetPos() - (*pre_pos); + dir.Normalize(); + float distance = buff->owner->GetPos().Distance((*pre_pos)); + for (int i = 0; i < (distance + 6); i += 5) { + buff->owner->SetPos((*pre_pos) + (dir * i)); + buff->owner->GetHitEnemys(enemys, buff->meta->param4); + for (auto& enemy : enemys) { + if (enemy->IsEntityType(ET_Car)) { + continue; + } + if (hited_objects->find(enemy->GetUniId()) == hited_objects->end()) { + hited_objects->insert(enemy->GetUniId()); + for (int buff_id : buff->meta->param3_int_list) { + enemy->TryAddBuff(buff->owner, buff_id); + } } } } } - } - buff->owner->SetPos(old_pos); - *pre_pos = buff->owner->GetPos(); + buff->owner->SetPos(old_pos); + *pre_pos = buff->owner->GetPos(); + } }, &xtimer_attacher.timer_list_, [] (const a8::XParams& param)