enderalse/source/fs.dll/skse64/skse64/Hooks_ObScript.cpp

55 lines
1.6 KiB
C++

#include "Hooks_ObScript.h"
#include "ObScript.h"
#include "GameAPI.h"
//#include "GameReferences.h"
#include "skse64_common/SafeWrite.h"
#include "skse64_common/skse_version.h"
#include "GameData.h"
#include "GameObjects.h"
#include "GameReferences.h"
#include "Hooks_Gameplay.h"
#include "GameInput.h"
// currently ForceRSXCrash, could also use ToggleESRAM and several others
static ObScriptCommand * s_hijackedCommand = nullptr;
void Hooks_ObScript_Init()
{
// instead of hooking the entire classic scripting system, we're just hijacking some unused commands
for(ObScriptCommand * iter = g_firstConsoleCommand; iter->opcode < kObScript_NumConsoleCommands + kObScript_ConsoleOpBase; ++iter)
{
if(!strcmp(iter->longName, "ForceRSXCrash"))
{
s_hijackedCommand = iter;
break;
}
}
}
bool GetSKSEVersion_Execute(const ObScriptParam * paramInfo, ScriptData * scriptData, TESObjectREFR * thisObj, TESObjectREFR* containingObj, Script* scriptObj, ScriptLocals* locals, double& result, UInt32& opcodeOffsetPtr)
{
_MESSAGE("GetSKSEVersion_Execute");
Console_Print("SKSE64 version: %d.%d.%d, release idx %d, runtime %08X",
SKSE_VERSION_INTEGER, SKSE_VERSION_INTEGER_MINOR, SKSE_VERSION_INTEGER_BETA,
SKSE_VERSION_RELEASEIDX, RUNTIME_VERSION);
return true;
}
void Hooks_ObScript_Commit()
{
ObScriptCommand cmd = *s_hijackedCommand;
cmd.longName = "GetSKSEVersion";
cmd.shortName = "skse";
cmd.helpText = "";
cmd.needsParent = 0;
cmd.numParams = 0;
cmd.execute = GetSKSEVersion_Execute;
cmd.flags = 0;
SafeWriteBuf((uintptr_t)s_hijackedCommand, &cmd, sizeof(cmd));
}