From bbec265d2d5e65553a2794278dd01a9808024b1f Mon Sep 17 00:00:00 2001 From: ermaccer <40604575+ermaccer@users.noreply.github.com> Date: Thu, 14 Apr 2022 10:55:58 +0200 Subject: [PATCH] character modifier crash fix --- I2Hook/I2Hook.rc | Bin 4528 -> 4528 bytes I2Hook/I2Hook.vcxproj.user | 16 +++++++++++++++- I2Hook/code/GameInfo.cpp | 5 +++++ I2Hook/code/GameInfo.h | 3 +++ I2Hook/code/MKCharacter.cpp | 7 +++++++ I2Hook/code/MKCharacter.h | 3 +++ I2Hook/code/dcf2.cpp | 2 +- I2Hook/code/dcf2.h | 2 +- I2Hook/code/dcf2menu.cpp | 9 +++++++++ 9 files changed, 44 insertions(+), 3 deletions(-) diff --git a/I2Hook/I2Hook.rc b/I2Hook/I2Hook.rc index a517278dd72305baab32de4b348e42bb9c2f7141..d263155a538fbd9d06d7aa18339627697ff5ed5b 100644 GIT binary patch delta 50 zcmdm>yg_+G6$hjFM)S>UIleNnnltDz7)yg_+G6$hi)MzhUpIleNnnlb1x7) - + + + + WindowsLocalDebugger + + + + + WindowsLocalDebugger + + + + + WindowsLocalDebugger + \ No newline at end of file diff --git a/I2Hook/code/GameInfo.cpp b/I2Hook/code/GameInfo.cpp index 7f546be..d1d9b8e 100644 --- a/I2Hook/code/GameInfo.cpp +++ b/I2Hook/code/GameInfo.cpp @@ -14,6 +14,11 @@ MKScript* GetScript(const char* name) return nullptr; } +int64 GetScriptVar(MKScript* script, const char* name) +{ + return ((int64(__fastcall*)(MKScript*, const char*, int))_addr(0x141721BB0))(script, name, 1); +} + FGGameInfo* GetGameInfo() { return *(FGGameInfo**)_addr(GFG_GAME_INFO); diff --git a/I2Hook/code/GameInfo.h b/I2Hook/code/GameInfo.h index 2dc0222..7d8bd0b 100644 --- a/I2Hook/code/GameInfo.h +++ b/I2Hook/code/GameInfo.h @@ -1,5 +1,6 @@ #pragma once #include "PlayerInfo.h" +#include "mk10utils.h" enum PLAYER_NUM { @@ -28,4 +29,6 @@ class FGGameInfo { MKScript* GetScript(const char* name); +int64 GetScriptVar(MKScript* script, const char* name); + FGGameInfo* GetGameInfo(); \ No newline at end of file diff --git a/I2Hook/code/MKCharacter.cpp b/I2Hook/code/MKCharacter.cpp index 6c667e0..a228948 100644 --- a/I2Hook/code/MKCharacter.cpp +++ b/I2Hook/code/MKCharacter.cpp @@ -68,3 +68,10 @@ void MKCharacter::BloodEffect(int type, FName name, float x, float y, float z, f { ((void(__thiscall*)(MKCharacter*, int, FName, float, float, float, float, float, float, int))_addr(0x1409BDEA0))(this, type, name, x, y, z, unk, size, speed, attach); } + +void MKCharacter::ExplodeHead() +{ + SetBoneSize("Head", 0.0); + FName head("Head", FNAME_Add, -1); + BloodEffect(4, head, 0, 0, 0, 40, 2.0, 0.7, false); +} diff --git a/I2Hook/code/MKCharacter.h b/I2Hook/code/MKCharacter.h index 3d605fc..76ba7ab 100644 --- a/I2Hook/code/MKCharacter.h +++ b/I2Hook/code/MKCharacter.h @@ -28,5 +28,8 @@ class MKCharacter { void ExecuteScript(MKScript* script, int function); void BloodEffect(int type, FName name, float x, float y, float z, float unk, float size, float speed, bool attach); + + // custom + void ExplodeHead(); }; diff --git a/I2Hook/code/dcf2.cpp b/I2Hook/code/dcf2.cpp index ec7a67f..38e7a38 100644 --- a/I2Hook/code/dcf2.cpp +++ b/I2Hook/code/dcf2.cpp @@ -259,7 +259,7 @@ PlayerInfo* GetInfo(PLAYER_NUM plr) void SetCharacterMKX(PLAYER_NUM plr, char * name) { int64 ptr = (int64)GetInfo(plr); - CharacterDefinition* chr = (CharacterDefinition*)(ptr + 216); + CharacterDefinition* chr = (CharacterDefinition*)(ptr + 192); chr->Set(name, 0, 0); } diff --git a/I2Hook/code/dcf2.h b/I2Hook/code/dcf2.h index f3069e5..d3f8f12 100644 --- a/I2Hook/code/dcf2.h +++ b/I2Hook/code/dcf2.h @@ -10,7 +10,7 @@ #define GFG_GAME_INFO 0x14417DF30 -#define I2HOOK_VERSION "0.4.6" +#define I2HOOK_VERSION "0.4.7" MKCharacter* GetObj(PLAYER_NUM plr); diff --git a/I2Hook/code/dcf2menu.cpp b/I2Hook/code/dcf2menu.cpp index b6f3a7b..e40a99c 100644 --- a/I2Hook/code/dcf2menu.cpp +++ b/I2Hook/code/dcf2menu.cpp @@ -973,6 +973,15 @@ void DCF2Menu::DrawScriptTab() RunLastScript(); } + /*static char szScriptVariable[256] = {}; + static int64 test; + ImGui::InputText("Script Variable", szScriptVariable, sizeof(szScriptVariable)); + if (ImGui::Button("Get Var Ptr")) + { + test = GetScriptVar(m_pScript, szScriptVariable); + std::cout << std::hex << test << std::endl; + } + */ } else {