Merge pull request #985 from nullworks/crash_fix

Fix potential crashes and confusing naming Scheme
This commit is contained in:
LightCat 2020-05-04 16:03:31 +02:00 committed by GitHub
commit 2c14b5b487
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 32 additions and 32 deletions

View File

@ -80,9 +80,9 @@ struct offsets
{
return PlatformOffset(7, undefined, undefined);
}
static constexpr uint32_t CreateMoveLate()
static constexpr uint32_t CreateMoveEarly()
{
return PlatformOffset(21, undefined, undefined);
return PlatformOffset(3, undefined, undefined);
}
static constexpr uint32_t CreateMove()
{

View File

@ -12,7 +12,7 @@ enum ec_types
/* Note: engine prediction is run on this kind of CreateMove */
CreateMove = 0,
/* Note: this is the CreatMove one layer higher, and should only be used for things that mess with command number*/
CreateMoveLate,
CreateMoveEarly,
/* This kind of CreateMove will run earlier than all CreateMove events
* and guranteed to run before EnginePrediction
*/

View File

@ -41,11 +41,11 @@ DECLARE_HOOKED_METHOD(LevelShutdown, void, void *);
// ClientMode + 4
DECLARE_HOOKED_METHOD(FireGameEvent, void, void *, IGameEvent *);
// IBaseClient
DECLARE_HOOKED_METHOD(CreateMoveLate, void, void *this_, int sequence_nr, float input_sample_time, bool arg3)
DECLARE_HOOKED_METHOD(DispatchUserMessage, bool, void *, int, bf_read &);
DECLARE_HOOKED_METHOD(IN_KeyEvent, int, void *, int, ButtonCode_t, const char *);
DECLARE_HOOKED_METHOD(FrameStageNotify, void, void *, ClientFrameStage_t);
// IInput
DECLARE_HOOKED_METHOD(CreateMoveEarly, void, IInput *, int, float, bool)
DECLARE_HOOKED_METHOD(GetUserCmd, CUserCmd *, IInput *, int);
// INetChannel
DECLARE_HOOKED_METHOD(SendNetMsg, bool, INetChannel *, INetMessage &, bool, bool);

View File

@ -1013,7 +1013,7 @@ static CatCommand debug_print_crit_info("debug_print_crit_info", "Print a bunch
});
static InitRoutine init([]() {
EC::Register(EC::CreateMoveLate, CreateMove, "crit_cm");
EC::Register(EC::CreateMoveEarly, CreateMove, "crit_cm");
#if ENABLE_VISUALS
EC::Register(EC::Draw, Draw, "crit_draw");
#endif

View File

@ -185,7 +185,6 @@ void hack::Hook()
hooks::client.Set(g_IBaseClient);
hooks::client.HookMethod(HOOK_ARGS(DispatchUserMessage));
hooks::client.HookMethod(HOOK_ARGS(CreateMoveLate));
#if ENABLE_VISUALS
hooks::client.HookMethod(HOOK_ARGS(FrameStageNotify));
hooks::client.HookMethod(HOOK_ARGS(IN_KeyEvent));
@ -215,6 +214,7 @@ void hack::Hook()
hooks::input.Set(g_IInput);
hooks::input.HookMethod(HOOK_ARGS(GetUserCmd));
hooks::input.HookMethod(HOOK_ARGS(CreateMoveEarly));
hooks::input.Apply();
#if ENABLE_VISUALS || ENABLE_TEXTMODE

View File

@ -189,7 +189,7 @@ struct bonelist_s
return;
// ent->m_bBonesSetup = false;
const auto &bones = ent->hitboxes.GetBones();
const auto &bones = ent->hitboxes.GetBones();
DrawBoneList(bones, leg_r, 3, color);
DrawBoneList(bones, leg_l, 3, color);
DrawBoneList(bones, bottom, 3, color);
@ -295,8 +295,7 @@ static void cm()
static draw::Texture atlas{ paths::getDataPath("/textures/atlas.png") };
static draw::Texture idspec{ paths::getDataPath("/textures/idspec.png") };
Timer retry{};
void Init()
{
@ -625,23 +624,23 @@ void _FASTCALL ProcessEntityPT(CachedEntity *ent)
}
}
if (draw_bones)
{
if (draw_bones)
{
if (vischeck && !ent->IsVisible())
transparent = true;
rgba_t bone_color = colors::EntityF(ent);
rgba_t bone_color = colors::EntityF(ent);
if (transparent)
bone_color = colors::Transparent(bone_color);
bonelist_s bl;
if (!CE_INVALID(ent) && ent->m_bAlivePlayer() && !RAW_ENT(ent)->IsDormant() && LOCAL_E->m_bAlivePlayer())
{
if (bones_color)
bl.Draw(ent, bone_color);
else
bl.Draw(ent, colors::white);
}
}
bonelist_s bl;
if (!CE_INVALID(ent) && ent->m_bAlivePlayer() && !RAW_ENT(ent)->IsDormant() && LOCAL_E->m_bAlivePlayer())
{
if (bones_color)
bl.Draw(ent, bone_color);
else
bl.Draw(ent, colors::white);
}
}
// Top horizontal health bar
if (*healthbar == 1)
@ -1372,7 +1371,7 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
if (IDX_GOOD(widx))
{
CachedEntity *weapon = ENTITY(widx);
if (CE_VALID(weapon))
if (CE_VALID(weapon) && re::C_BaseCombatWeapon::IsBaseCombatWeapon(RAW_ENT(weapon)))
{
if (show_weapon)
{

View File

@ -420,14 +420,15 @@ void WriteCmd(IInput *input, CUserCmd *cmd, int sequence_nr)
GetCmds(input)[sequence_nr % VERIFIED_CMD_SIZE] = *cmd;
}
DEFINE_HOOKED_METHOD(CreateMoveLate, void, void *this_, int sequence_nr, float input_sample_time, bool arg3)
// This gets called before the other CreateMove, but since we run original first in here all the stuff gets called after normal CreateMove is done
DEFINE_HOOKED_METHOD(CreateMoveEarly, void, IInput *this_, int sequence_nr, float input_sample_time, bool arg3)
{
// Call original function, includes Early CreateMove
original::CreateMoveLate(this_, sequence_nr, input_sample_time, arg3);
// Call original function, includes Normal CreateMove
original::CreateMoveEarly(this_, sequence_nr, input_sample_time, arg3);
CUserCmd *cmd = nullptr;
if (g_IInput && GetCmds(g_IInput) && sequence_nr > 0)
cmd = g_IInput->GetUserCmd(sequence_nr);
if (this_ && GetCmds(this_) && sequence_nr > 0)
cmd = this_->GetUserCmd(sequence_nr);
if (!cmd)
return;
@ -436,22 +437,22 @@ DEFINE_HOOKED_METHOD(CreateMoveLate, void, void *this_, int sequence_nr, float i
if (!isHackActive())
{
WriteCmd(g_IInput, current_late_user_cmd, sequence_nr);
WriteCmd(this_, current_late_user_cmd, sequence_nr);
return;
}
if (!g_IEngine->IsInGame())
{
WriteCmd(g_IInput, current_late_user_cmd, sequence_nr);
WriteCmd(this_, current_late_user_cmd, sequence_nr);
return;
}
PROF_SECTION(CreateMoveLate);
PROF_SECTION(CreateMoveEarly);
// Run EC
EC::run(EC::CreateMoveLate);
EC::run(EC::CreateMoveEarly);
// Write the usercmd
WriteCmd(g_IInput, current_late_user_cmd, sequence_nr);
WriteCmd(this_, current_late_user_cmd, sequence_nr);
}
} // namespace hooked_methods