Eddoursul
f2150e94ef
- Cross-runtime build, tested on SE and AE - Intergrated Flat Map Markers and Stay At The System Page - Added tons of sanity checks - Automatically overrides bFreebiesSeen, bInvalidateOlderFiles, and bModManagerMenuEnabled INI values
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "Util.h"
|
|
#include "PersistentFormManager.h"
|
|
|
|
namespace Papyrus::PapyrusFunctions
|
|
{
|
|
inline RE::AlchemyItem* CreatePotion(RE::StaticFunctionTag*, std::vector<RE::EffectSetting*> effects, std::vector<float> magnitudes, std::vector<uint32_t> areas, std::vector<uint32_t> durations, uint32_t arraySize)
|
|
{
|
|
RE::AlchemyItem* result = NULL;
|
|
|
|
if (effects.size() >= arraySize && magnitudes.size() >= arraySize && areas.size() >= arraySize && durations.size() >= arraySize) {
|
|
RE::tArray<RE::Effect> effectItems;
|
|
effectItems.Allocate(effects.size());
|
|
|
|
uint16_t count = 0;
|
|
for (uint16_t i = 0; i < effects.size(); ++i) {
|
|
if (effects[i]) {
|
|
effectItems[i].baseEffect = effects[i];
|
|
effectItems[i].effectItem.duration = durations[i];
|
|
effectItems[i].effectItem.magnitude = magnitudes[i];
|
|
effectItems[i].effectItem.area = areas[i];
|
|
count++;
|
|
}
|
|
}
|
|
effectItems.count = count;
|
|
|
|
RE::PersistentFormManager::GetSingleton()->CreatePotion(&result, &effectItems);
|
|
|
|
effectItems.Clear();
|
|
} else {
|
|
logger::warn("Illegal arrays for creating a potion");
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
inline uint8_t GetNewGameCount(RE::StaticFunctionTag*)
|
|
{
|
|
return NewGameCount();
|
|
}
|
|
|
|
inline RE::TESObjectREFR* GetCurrentContainer(RE::StaticFunctionTag*)
|
|
{
|
|
const auto handle = RE::ContainerMenu::GetTargetRefHandle();
|
|
const auto refr = RE::TESObjectREFR::LookupByHandle(handle);
|
|
return refr ? refr.get() : nullptr;
|
|
}
|
|
|
|
inline void Bind(VM& a_vm)
|
|
{
|
|
BIND(CreatePotion);
|
|
logger::info("Registered CreatePotion"sv);
|
|
BIND(GetNewGameCount);
|
|
logger::info("Registered GetNewGameCount"sv);
|
|
BIND(GetCurrentContainer);
|
|
logger::info("Registered GetCurrentContainer"sv);
|
|
}
|
|
}
|