Made VacuumLoot more user configurable

This commit is contained in:
Andrei Abrudan 2022-07-04 21:42:50 +01:00
parent 728eb813c4
commit 77f654b15d
2 changed files with 58 additions and 33 deletions

View File

@ -11,8 +11,10 @@ namespace cheat::feature
VacuumLoot::VacuumLoot() : Feature(), VacuumLoot::VacuumLoot() : Feature(),
NF(f_Enabled, "Vacuum Loot", "VacuumLoot", false) NF(f_Enabled, "Vacuum Loot", "VacuumLoot", false)
{ {
InstallFilters();
events::GameUpdateEvent += MY_METHOD_HANDLER(VacuumLoot::OnGameUpdate); events::GameUpdateEvent += MY_METHOD_HANDLER(VacuumLoot::OnGameUpdate);
} }
const FeatureGUIInfo& VacuumLoot::GetGUIInfo() const const FeatureGUIInfo& VacuumLoot::GetGUIInfo() const
{ {
static const FeatureGUIInfo info{ "", "World", true }; static const FeatureGUIInfo info{ "", "World", true };
@ -21,7 +23,19 @@ namespace cheat::feature
void VacuumLoot::DrawMain() void VacuumLoot::DrawMain()
{ {
ConfigWidget("Vacuum Loot", f_Enabled, "Vacuum Loot drops"); if (ImGui::BeginGroupPanel("Vacuum Loot", false))
{
ConfigWidget("Enabled", f_Enabled, "Vacuum Loot drops");
ImGui::TreeNode(this, "Loot Types");
for (auto& [field, name] : m_Filters)
{
ImGui::PushID(name.c_str());
ConfigWidget(field);
ImGui::PopID();
}
ImGui::TreePop();
}
ImGui::EndGroupPanel();
} }
bool VacuumLoot::NeedStatusDraw() const bool VacuumLoot::NeedStatusDraw() const
@ -46,35 +60,10 @@ namespace cheat::feature
auto distance = manager.avatar()->distance(entity); auto distance = manager.avatar()->distance(entity);
float radius = 100.0f; float radius = 100.0f;
// TODO: Add more on the filter list in the future for (const auto& lootItem : m_Filters)
static std::vector<std::string> dropList if (lootItem.first.value())
{ if (entity->name().find(lootItem.second) != std::string::npos)
"SceneObj_DropItem", return distance <= radius;
"SceneObj_Ore_Drop",
"_DropMagicCrystal",
"_Thundercrystaldrop",
"_Ore_ElectricRock",
"_DropMoonMeteor_",
"_DropMagicCrystal",
"_Potato",
"_Radish02_Clear",
"_Cabbage",
"_Carrot02_Clear",
"_Wheat",
"Wisp",
"Meat",
"Fishmeat",
"Equip_Sword",
"Equip_Pole",
"Equip_Bow",
"Equip_Catalyst",
"Equip_Claymore",
"Eff_Animal"
};
for (auto& dropListNames : dropList)
if (entity->name().find(dropListNames) != std::string::npos)
return distance <= radius;
return false; return false;
} }
@ -100,4 +89,37 @@ namespace cheat::feature
nextTime = currentTime + 1000; nextTime = currentTime + 1000;
} }
void VacuumLoot::AddFilter(const std::string& friendName, const std::string& name)
{
m_Filters.push_back({
config::CreateField<bool>(friendName, name,
fmt::format("VacuumLoot::Filters::{}", name),
false, true),
name
});
}
void VacuumLoot::InstallFilters()
{
AddFilter("General loot", "SceneObj_DropItem" );
AddFilter("Ore Drops", "SceneObj_Ore_Drop" );
AddFilter("Magic Crystal", "_DropMagicCrystal" );
AddFilter("???", "_Thundercrystaldrop" );
AddFilter("Electro Crystal", "_Ore_ElectricRock" );
AddFilter("Starsilver Ore", "_DropMoonMeteor_" );
AddFilter("Potatoes", "_Potato" );
AddFilter("Radish", "_Radish02_Clear" );
AddFilter("Cabbage", "_Cabbage" );
AddFilter("Carrot", "_Carrot02_Clear" );
AddFilter("Wheat", "_Wheat" );
AddFilter("Butterflies & Crystalflies", "Wisp" );
AddFilter("Meat", "Meat" );
AddFilter("Fishmeat", "Fishmeat" );
AddFilter("Swords", "Equip_Sword" );
AddFilter("Poles", "Equip_Pole" );
AddFilter("Bows", "Equip_Bow" );
AddFilter("Catalysts", "Equip_Catalyst" );
AddFilter("Claymores", "Equip_Claymore" );
AddFilter("???", "Eff_Animal" );
}
} }

View File

@ -23,11 +23,14 @@ namespace cheat::feature
void DrawStatus() override; void DrawStatus() override;
void OnGameUpdate(); void OnGameUpdate();
private:
std::vector<game::IEntityFilter*> m_Filters; private:
std::vector<std::pair<config::Field<bool>, std::string>> m_Filters;
int nextTime = 0;
VacuumLoot(); VacuumLoot();
int nextTime{}; void InstallFilters();
void AddFilter(const std::string& friendName, const std::string& name);
bool IsEntityForVac(cheat::game::Entity* entity); bool IsEntityForVac(cheat::game::Entity* entity);
}; };
} }