Added ore and some other items to Attack Modifiers.

This commit is contained in:
Jerome Montino 2022-06-02 19:53:33 +08:00
parent e8f97ef3a5
commit 9b80c035e0
2 changed files with 21 additions and 4 deletions

@ -1 +1 @@
Subproject commit 47fb633e73f69e1ba57cef16cd077ddc4d97f0ee Subproject commit af916cdf1aa41243b493c217c8d4256c04aa8921

View File

@ -183,6 +183,17 @@ namespace cheat::feature
return attackerID == avatarID || IsAvatarOwner(attacker); return attackerID == avatarID || IsAvatarOwner(attacker);
} }
bool IsValidByFilter(game::Entity* entity)
{
if (game::filters::combined::OrganicTargets.IsValid(entity) ||
game::filters::combined::Ores.IsValid(entity) ||
game::filters::puzzle::Geogranum.IsValid(entity) ||
game::filters::puzzle::LargeRockPile.IsValid(entity) ||
game::filters::puzzle::SmallRockPile.IsValid(entity))
return true;
return false;
}
// Raises when any entity do hit event. // Raises when any entity do hit event.
// Just recall attack few times (regulating by combatProp) // Just recall attack few times (regulating by combatProp)
// It's not tested well, so, I think, anticheat can detect it. // It's not tested well, so, I think, anticheat can detect it.
@ -196,24 +207,30 @@ namespace cheat::feature
auto& manager = game::EntityManager::instance(); auto& manager = game::EntityManager::instance();
auto originalTarget = manager.entity(targetID); auto originalTarget = manager.entity(targetID);
if (!game::filters::combined::OrganicTargets.IsValid(originalTarget)) if (!IsValidByFilter(originalTarget))
return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method); return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
std::vector<cheat::game::Entity*> validEntities; std::vector<cheat::game::Entity*> validEntities;
validEntities.push_back(originalTarget); validEntities.push_back(originalTarget);
if (rapidFire.f_MultiTarget) if (rapidFire.f_MultiTarget)
{ {
auto filteredEntities = manager.entities(game::filters::combined::Monsters); auto filteredEntities = manager.entities();
for (const auto& entity : filteredEntities) { for (const auto& entity : filteredEntities) {
auto distance = originalTarget->distance(entity); auto distance = originalTarget->distance(entity);
if (entity->runtimeID() == manager.avatar()->runtimeID())
continue;
if (entity->runtimeID() == targetID) if (entity->runtimeID() == targetID)
continue; continue;
if (distance > rapidFire.f_MultiTargetRadius) if (distance > rapidFire.f_MultiTargetRadius)
continue; continue;
if (!IsValidByFilter(entity))
continue;
validEntities.push_back(entity); validEntities.push_back(entity);
} }
} }