enderalse/source/fs.dll/fs/CreatePotion.cpp

46 lines
1.7 KiB
C++

#include "CreatePotion.h"
#include "skse64\GameObjects.h"
#include "skse64\GameData.h"
#include <string>
namespace CreatePotion {
AlchemyItem * createPotion(StaticFunctionTag * tag, VMArray<EffectSetting*> effects, VMArray<float> magnitudes, VMArray<UInt32> areas, VMArray<UInt32> durations, UInt32 arraySize)
{
AlchemyItem * result = NULL;
if (effects.Length() >= arraySize && magnitudes.Length() >= arraySize && areas.Length() >= arraySize && durations.Length() >= arraySize) {
tArray<MagicItem::EffectItem> effectItems;
effectItems.Allocate(arraySize);
UInt32 count = 0;
for (UInt32 i = 0; i < arraySize; ++i) {
EffectSetting * magicEffect = NULL;
effects.Get(&magicEffect, i);
if (magicEffect) { // Only add effects that actually exist
magnitudes.Get(&effectItems[count].magnitude, i);
areas.Get(&effectItems[count].area, i);
durations.Get(&effectItems[count].duration, i);
effectItems[count].mgef = magicEffect;
++count;
}
}
effectItems.count = count; // Set count to existing count
CALL_MEMBER_FN(PersistentFormManager::GetSingleton(), CreatePotion)(&result, &effectItems);
Heap_Free(effectItems.entries);
}
else {
_MESSAGE("Illegal arrays for creating a potion");
}
return result;
}
typedef AlchemyItem*(*CreatePotionType)(StaticFunctionTag * tag, VMArray<EffectSetting*> effects, VMArray<float> magnitudes, VMArray<UInt32> areas, VMArray<UInt32> durations);
bool RegisterFuncs(VMClassRegistry* registry) {
registry->RegisterFunction(
new NativeFunction5<StaticFunctionTag, AlchemyItem *, VMArray<EffectSetting*>, VMArray<float>, VMArray<UInt32>, VMArray<UInt32>, UInt32>("CreatePotion", "EnderalLib", CreatePotion::createPotion, registry));
return true;
}
}