1

Configurable pickup delay

This commit is contained in:
Eddoursul 2024-07-04 17:57:59 +02:00
parent bb459ce135
commit c53f9ba39b

View File

@ -7,7 +7,8 @@ RE::BGSKeyword* EventListener::keywordHide;
RE::BGSKeyword* EventListener::keywordIngot; RE::BGSKeyword* EventListener::keywordIngot;
inline std::map<std::string, std::any> g_settings{ inline std::map<std::string, std::any> g_settings{
{ "fRadius", 350.0f }, { "iRadius", 350 },
{ "iPickupDelay", 100 },
{ "bPickupGold", true }, { "bPickupGold", true },
{ "bPickupLockpicks", true }, { "bPickupLockpicks", true },
{ "bPickupMaterials", true }, { "bPickupMaterials", true },
@ -84,7 +85,7 @@ auto EventListener::ProcessEvent(
std::unordered_set<RE::TESObjectREFR*> refQueue; std::unordered_set<RE::TESObjectREFR*> refQueue;
TES->ForEachReferenceInRange(baseRef, std::any_cast<float>(g_settings["fRadius"]), [&](RE::TESObjectREFR* a_ref) { TES->ForEachReferenceInRange(baseRef, static_cast<float>(std::any_cast<int>(g_settings["iRadius"])), [&](RE::TESObjectREFR* a_ref) {
if (!a_ref) { if (!a_ref) {
return RE::BSContainer::ForEachResult::kContinue; return RE::BSContainer::ForEachResult::kContinue;
} }
@ -157,9 +158,10 @@ auto EventListener::ProcessEvent(
std::thread([refQueue]() { std::thread([refQueue]() {
RE::ScriptEventSourceHolder::GetSingleton()->GetEventSource<RE::TESActivateEvent>()->RemoveEventSink(EventListener::GetSingleton()); RE::ScriptEventSourceHolder::GetSingleton()->GetEventSource<RE::TESActivateEvent>()->RemoveEventSink(EventListener::GetSingleton());
int iPickupDelay = std::any_cast<int>(g_settings["iPickupDelay"]);
for (const auto& item : refQueue) { for (const auto& item : refQueue) {
std::this_thread::sleep_for(std::chrono::milliseconds(100)); std::this_thread::sleep_for(std::chrono::milliseconds(iPickupDelay));
SKSE::GetTaskInterface()->AddTask([&item]() { SKSE::GetTaskInterface()->AddTask([&item]() {
if (item && item->formID) { if (item && item->formID) {
item->ActivateRef(RE::PlayerCharacter::GetSingleton(), 0, nullptr, item->extraList.GetCount(), false); item->ActivateRef(RE::PlayerCharacter::GetSingleton(), 0, nullptr, item->extraList.GetCount(), false);