From 3b965fc76c2d14eba7da19f7d4c01c5f59598e1e Mon Sep 17 00:00:00 2001 From: NovaRain Date: Wed, 13 Jan 2021 11:19:25 +0800 Subject: [PATCH] Fixed a crash bug in ScriptExtender.cpp from commit e075c05 Minor code/document edits. --- artifacts/scripting/headers/define_lite.h | 5 ++++- sfall/ScriptExtender.cpp | 8 ++++---- sfall/Skills.cpp | 6 +++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/artifacts/scripting/headers/define_lite.h b/artifacts/scripting/headers/define_lite.h index 304a71df..5b991a9e 100644 --- a/artifacts/scripting/headers/define_lite.h +++ b/artifacts/scripting/headers/define_lite.h @@ -806,7 +806,10 @@ #define bit_32 (0x80000000) #define bit_ALL (0xFFFFFFFF) - +#define ROLL_CRITICAL_FAILURE 0 +#define ROLL_FAILURE 1 +#define ROLL_SUCCESS 2 +#define ROLL_CRITICAL_SUCCESS 3 //Misc commands #define obj_get_rot(obj) (has_trait(TRAIT_OBJECT, obj, OBJECT_CUR_ROT)) diff --git a/sfall/ScriptExtender.cpp b/sfall/ScriptExtender.cpp index 9b533e8a..cc4aadae 100644 --- a/sfall/ScriptExtender.cpp +++ b/sfall/ScriptExtender.cpp @@ -911,7 +911,7 @@ long GetResetScriptReturnValue() { return val; } -static long __stdcall FindOverrideSub(TProgram* program) { +static __forceinline long __stdcall FindProgram(TProgram* program) { std::tr1::unordered_map::iterator overrideIt = selfOverrideMap.find(program); if (overrideIt != selfOverrideMap.end()) { DWORD scriptId = overrideIt->second.object->scriptId; // script @@ -940,11 +940,11 @@ static long __stdcall FindOverrideSub(TProgram* program) { return -1; // change nothing } -static long __fastcall FindOverride(TProgram* program, TScript* &script) { - long result = FindOverrideSub(program); +static long __fastcall FindOverride(TProgram* program, TScript** script) { + long result = FindProgram(program); if (result == -2) { if (script) { - script = &overrideScript; // unsafe method! script may contain an incorrect address value in some engine functions + *script = &overrideScript; // unsafe method! script may contain an incorrect address value in some engine functions } else { result--; // set -3 } diff --git a/sfall/Skills.cpp b/sfall/Skills.cpp index f8f14cb8..76859b84 100644 --- a/sfall/Skills.cpp +++ b/sfall/Skills.cpp @@ -410,11 +410,11 @@ void Skills_Init() { if (basedOnPoints) HookCall(0x4AA9EC, (void*)skill_points_); // skill_dec_point_ int tagBonus = iniGetInt("Skills", "TagSkillBonus", 20, file); - if (tagBonus != 20 && tagBonus >=0 && tagBonus <= 100) SafeWrite8(0x4AA61E, static_cast(tagBonus)); + if (tagBonus != 20 && tagBonus >=0 && tagBonus <= 100) SafeWrite8(0x4AA61E, static_cast(tagBonus)); // skill_level_ int tagMode = iniGetInt("Skills", "TagSkillMode", 0, file); - if (tagMode & 1) SafeWrite8(0x4AA612, 0xEB); // 4th tag skill can have initial skill bonus (jz > jmp) - if (tagMode & 2) SafeWrite16(0x4AA60E, 0x9090); // skill_level_ disables 2x skill points bonus for tag skills + if (tagMode & 1) SafeWrite8(0x4AA612, 0xEB); // 4th tag skill can have initial skill bonus. skill_level_ (jz > jmp) + if (tagMode & 2) SafeWrite16(0x4AA60E, 0x9090); // disables double skill points bonus for tag skills. skill_level_ } }