diff --git a/cleo4opcodes.cpp b/cleo4opcodes.cpp index 5f5c7bc..e008f69 100644 --- a/cleo4opcodes.cpp +++ b/cleo4opcodes.cpp @@ -140,6 +140,11 @@ CLEO_Fn(INT_DIV) cleo->GetPointerToScriptVar(handle)->i = a / b; } +CLEO_Fn(SAVE_THIS_CUSTOM_SCRIPT) +{ + GetAddonInfo(handle).enableThreadSaving = true; +} + CLEO_Fn(GET_PED_POINTER) { int ref = cleo->ReadParam(handle)->i; @@ -1547,7 +1552,7 @@ void Init4Opcodes() //CLEO_RegisterOpcode(0x0A92, STREAM_CUSTOM_SCRIPT); // //CLEO_RegisterOpcode(0x0A93, TERMINATE_THIS_CUSTOM_SCRIPT); // //CLEO_RegisterOpcode(0x0A94, LOAD_AND_LAUNCH_CUSTOM_MISSION); // - //CLEO_RegisterOpcode(0x0A95, SAVE_THIS_CUSTOM_SCRIPT); // + CLEO_RegisterOpcode(0x0A95, SAVE_THIS_CUSTOM_SCRIPT); // 0A95=0,enable_thread_saving CLEO_RegisterOpcode(0x0A96, GET_PED_POINTER); // 0A96=2,%2d% = actor %1d% struct CLEO_RegisterOpcode(0x0A97, GET_VEHICLE_POINTER); // 0A97=2,%2d% = car %1d% struct CLEO_RegisterOpcode(0x0A98, GET_OBJECT_POINTER); // 0A98=2,%2d% = object %1d% struct diff --git a/cleo5opcodes.cpp b/cleo5opcodes.cpp index c9c5f65..ce9de4f 100644 --- a/cleo5opcodes.cpp +++ b/cleo5opcodes.cpp @@ -74,6 +74,20 @@ CLEO_Fn(TRACE) } CLEO_Fn(LOG_TO_FILE) { + char to[MAX_STR_LEN]; + CLEO_ReadStringEx(handle, to, sizeof(to)); + std::string tostr = ResolvePath(handle, to); + + bool bTimestamp = cleo->ReadParam(handle)->i; + if(bTimestamp) + { + + } + + char fmt[MAX_STR_LEN], buf[MAX_STR_LEN]; + CLEO_ReadStringEx(handle, fmt, sizeof(fmt)); + CLEO_FormatString(handle, buf, sizeof(buf), fmt); + // Need additional work } diff --git a/cleoaddon.h b/cleoaddon.h index bd69e5f..d093ecf 100644 --- a/cleoaddon.h +++ b/cleoaddon.h @@ -3,6 +3,7 @@ #include #include +#include #define CLEO_RegisterOpcode(x, h) cleo->RegisterOpcode(x, h); cleo->RegisterOpcodeFunction(#h, h) #define CLEO_Fn(h) void h (void *handle, uint32_t *ip, uint16_t opcode, const char *name) @@ -12,13 +13,19 @@ struct ScriptAddonInfo ScriptAddonInfo() { workDir.clear(); + childThreads.clear(); + parentThread = NULL; scmFuncId = 0; isCustom = false; debugMode = false; enableThreadSaving = false; } + // GetInterfaceVersion() == 1 std::string workDir; + std::list childThreads; + void* parentThread; + uint16_t scmFuncId : 10; // [0-1024] - 2^10 uint16_t isCustom : 1; // [0-1] uint16_t debugMode : 1; // [0-1]