From 319fed21a4f3205fd8dc7331f80b4528a9c4ea0d Mon Sep 17 00:00:00 2001 From: explorer Date: Sun, 13 Oct 2024 05:42:41 +0300 Subject: [PATCH] autoshove logic (on reload) --- Copy_Command.hpp | 20 +++-- Entry_Point.cpp | 8 -- Extended_Interface.hpp | 8 +- Perform_Shove_Trace.hpp | 2 - Perform_Trace.hpp | 185 +++++++++++++++++++--------------------- 5 files changed, 101 insertions(+), 122 deletions(-) diff --git a/Copy_Command.hpp b/Copy_Command.hpp index ce07ce0..182ddee 100644 --- a/Copy_Command.hpp +++ b/Copy_Command.hpp @@ -294,7 +294,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu { if (Identifier == 277) { - //if (*(float*)((unsigned __int32)Entity + 4844) == 1) + if (*(float*)((unsigned __int32)Entity + 4844) == 1) { Sorted_Target_List.push_back(Target); } @@ -346,6 +346,8 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu __int8 Healing = *(void**)((unsigned __int32)Local_Player + 8076) != INVALID_HANDLE_VALUE; + __int8 Reloading = *(__int8*)((unsigned __int32)Weapon + 2493); + __int32 Weapon_Identifier = Get_Identifier(Weapon, 1, 0); __int8 Is_Cold_Melee = Weapon_Identifier == 231; @@ -368,7 +370,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu __int8 Forced = 0; - if (Is_Melee + Healing != 0) //zero clip? + if (Is_Melee + Healing + Reloading != 0) { if ((Target->Identifier ^ 72) % 348 >= 72) { @@ -417,6 +419,8 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu Perform_Shove_Trace((unsigned __int32)Client_Module + 3220512)(Weapon, Direction); + Perform_Trace_Target = nullptr; + if (Perform_Trace_Damage == 1) { Command->Tick_Number = Target->Tick_Number; @@ -469,7 +473,7 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu { __int8 Can_Attack = (*(float*)((unsigned __int32)Weapon + 2400) <= Global_Variables->Current_Time) * (*(__int32*)((unsigned __int32)Weapon + 2436) > 0 - Is_Melee * 2) * (*(float*)((unsigned __int32)Local_Player + 3872) <= Global_Variables->Current_Time); - if ((Can_Attack == 0) + (Weapon_Identifier == 96) + Healing == 0) + if ((Can_Attack ^ 1) + (Weapon_Identifier == 96) + Healing == 0) { Target_Structure* Aim_Target = nullptr; @@ -576,11 +580,9 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu *(void**)((unsigned __int32)Engine_Module + 5050008) = Previous_Audio_Device; - *(__int32*)((unsigned __int32)Weapon_Data + 2520) = Bullets; - Perform_Trace_Target = nullptr; - wprintf(L"%f\n", Perform_Trace_Damage); + *(__int32*)((unsigned __int32)Weapon_Data + 2520) = Bullets; return (Perform_Trace_Damage >= Interface_Penetration_Damage.Floating_Point) * (Perform_Trace_Damage != 0); }; @@ -652,13 +654,13 @@ void __thiscall Redirected_Copy_Command(void* Unknown_Parameter, Command_Structu 0 }; - if (Perform_Trace(Command->Angles) == 1) + if (Perform_Trace(Angles) == 1) { Command->Tick_Number = Target->Tick_Number; - //Byte_Manager::Copy_Bytes(0, Command->Angles, sizeof(Angles), Angles); + Byte_Manager::Copy_Bytes(0, Command->Angles, sizeof(Angles), Angles); - //Command->Buttons |= 1; + Command->Buttons |= 1; *(float*)((unsigned __int32)Target->Self + 16) = Get_Target_Time(Target); diff --git a/Entry_Point.cpp b/Entry_Point.cpp index 9ac05f2..f296bca 100755 --- a/Entry_Point.cpp +++ b/Entry_Point.cpp @@ -181,14 +181,6 @@ __int32 __stdcall DllMain(HMODULE This_Module, unsigned __int32 Call_Reason, voi Client_Module = GetModuleHandleW(L"client.dll"); - //DEBUG - { - *(__int32*)((unsigned __int32)Client_Module + 0x7B25A8 + 0x14) &= ~0xA; - *(__int32*)((unsigned __int32)Client_Module + 0x782838 + 0x14) &= ~0xA; - *(__int32*)((unsigned __int32)Client_Module + 0x7803D8 + 0x14) &= ~0xA; - *(__int32*)((unsigned __int32)Engine_Module + 0x679538 + 0x14) &= ~0xA; - } - _putws(L"[ + ] Events"); { Redirection_Manager::Redirect_Function(Original_Post_Network_Data_Received_Caller, 0, (void*)((unsigned __int32)Client_Module + 1555264), 1, (void*)Redirected_Post_Network_Data_Received); diff --git a/Extended_Interface.hpp b/Extended_Interface.hpp index 0e6db9e..9915dc9 100755 --- a/Extended_Interface.hpp +++ b/Extended_Interface.hpp @@ -1,10 +1,6 @@ struct Interface_Structure { - __int8 Additional_Bytes_1[36]; - - char* String; - - __int8 Additional_Bytes_2[4]; + __int8 Additional_Bytes_1[44]; float Floating_Point; @@ -66,7 +62,7 @@ void Implement_Extended_Interface() Create_Console_Interface(Pointer_Name(Interface_Aim_Intersection), (char*)"1", nullptr); - Create_Console_Interface(Pointer_Name(Interface_Penetration_Damage), (char*)"25", nullptr); + Create_Console_Interface(Pointer_Name(Interface_Penetration_Damage), (char*)"20", nullptr); Create_Console_Interface(Pointer_Name(Interface_Equipment_Distance), (char*)"2048", nullptr); diff --git a/Perform_Shove_Trace.hpp b/Perform_Shove_Trace.hpp index 22d0ffd..a74e3df 100755 --- a/Perform_Shove_Trace.hpp +++ b/Perform_Shove_Trace.hpp @@ -4,8 +4,6 @@ void __thiscall Perform_Shove_Trace(void* Stack) if (Entity == Perform_Trace_Target) { - Perform_Trace_Target = nullptr; - Perform_Trace_Damage = 1; } } diff --git a/Perform_Trace.hpp b/Perform_Trace.hpp index b25a708..8e9ff98 100755 --- a/Perform_Trace.hpp +++ b/Perform_Trace.hpp @@ -71,15 +71,22 @@ void __thiscall Perform_Trace(void* Stack) static void* Calculate_Damage = (void*)((unsigned __int32)GetModuleHandleW(L"server.dll") + 3950416); { - asm("pushal"); //temporary. just in case asm("movl %0, %%esi" : : "m"(Weapon_Data) : "esi"); asm("subl $16, %esp"); asm("movss %0, %%xmm0" : : "m"(Distance) : "esp"); asm("movdqu %xmm0, (%esp)"); - asm("calll *%0" : : "m"(Calculate_Damage)); + asm("calll *%0" : : "m"(Calculate_Damage) : "eax", "ecx", "edx"); asm("movd %%xmm0, %0" : "=m"(Damage)); asm("addl $16, %esp"); - asm("popal"); + } + + __int32 Bullet_Type = *(__int32*)((unsigned __int32)Weapon_Data + 2128); + + __int8 Is_Shotgun = (Bullet_Type ^ 12) % 7 == 4; + + if (Upgrade_Type * Is_Shotgun == 1) + { + Damage *= *(__int32*)((unsigned __int32)Weapon_Data + 2520); } __int32 Identifier = Get_Identifier(Entity, 1, 0); @@ -93,39 +100,53 @@ void __thiscall Perform_Trace(void* Stack) Damage *= Multipliers[Get_Difficulty_Type((unsigned __int32)Client_Module + 2650448)()]; }; - __int32 Bullet_Type = *(__int32*)((unsigned __int32)Weapon_Data + 2128); + char* Mode = *(char**)((unsigned __int32)Client_Module + 8145092); - __int8 Is_Shotgun = (Bullet_Type ^ 12) % 7 == 4; + __int8 Realism = Mode[0] == 'r'; - //should make sure it's not mutation8, mutation12, realism auto Apply_Shotgun_Scaling = [&]() -> void { if (Is_Shotgun == 1) { - using Compute_Bounds_Type = void(__thiscall*)(void* Collision, float* Start, float* Bounds); + __int8 Casual_Mode = 1; - using Get_Center_Type = float*(__thiscall*)(void* Entity); + char* Mode = *(char**)((unsigned __int32)Client_Module + 8145092); - void* Local_Player = *(void**)Trace_Information; - - float Bounds[3]; - - Compute_Bounds_Type((unsigned __int32)Client_Module + 878528)((void*)((unsigned __int32)Entity + 540), Get_Center_Type((unsigned __int32)Client_Module + 114400)(Local_Player), Bounds); - - using Calculate_Distance_Type = float(__thiscall*)(void* Collision, float* Bounds); - - float Distance = Calculate_Distance_Type((unsigned __int32)Client_Module + 878608)((void*)((unsigned __int32)Local_Player + 540), Bounds); - - if (Distance < 100) + if (__builtin_strlen(Mode) > 8) { - Damage += (4.f * Damage) * __builtin_powf(1.f - Distance / 100.f, 2); + Casual_Mode = (Mode[8] != '8') + (Mode[9] != '2'); + } + else + { + Casual_Mode += Realism ^ 1; + } + + if (Casual_Mode == 2) + { + using Get_Bounds_Type = void(__thiscall*)(void* Collision, float* Start, float* Bounds); + + using Get_Center_Type = float* (__thiscall*)(void* Entity); + + void* Local_Player = *(void**)Trace_Information; + + float Bounds[3]; + + Get_Bounds_Type((unsigned __int32)Client_Module + 878528)((void*)((unsigned __int32)Entity + 540), Get_Center_Type((unsigned __int32)Client_Module + 114400)(Local_Player), Bounds); + + using Calculate_Distance_Type = float(__thiscall*)(void* Collision, float* Bounds); + + float Distance = Calculate_Distance_Type((unsigned __int32)Client_Module + 878608)((void*)((unsigned __int32)Local_Player + 540), Bounds); + + if (Distance < 100) + { + Damage += (4.f * Damage) * __builtin_powf(1.f - Distance / 100.f, 2); + } } } }; if (Identifier == 277) { - //nb_delete_all;z_spawn witch if (Group != 1) { Apply_Difficulty_Scaling(); @@ -137,88 +158,69 @@ void __thiscall Perform_Trace(void* Stack) { if (Identifier == 264) { - //nb_delete_all;ent_create commentary_zombie_spawner; ent_fire commentary_zombie_spawner spawnzombie common_male_fallen_survivor; ent_fire commentary_zombie_spawner kill - //id: 14 - //nb_delete_all;ent_create commentary_zombie_spawner; ent_fire commentary_zombie_spawner spawnzombie common_male_jimmy; ent_fire commentary_zombie_spawner kill - //id: 17 - if (Bullet_Type == 6) + if ((Upgrade_Type == 1) + (Bullet_Type == 6)) { Damage = __builtin_inff(); } else { - if (Upgrade_Type == 1) - { - Damage = __builtin_inff(); - } - else - { - Apply_Shotgun_Scaling(); + Apply_Shotgun_Scaling(); - __int8 Is_Sniper_Rifle = Bullet_Type == 9 || Bullet_Type == 10; + __int8 Is_Sniper_Rifle = (Bullet_Type - 8) > 0; - if (Group == 1) + if (Group == 1) + { + if (Gender == 14) { - if (Gender == 14) + auto Is_Neutral = [&]() -> __int8 { - auto Is_Neutral = [&]() -> __int8 + __int32 Sequence_Activity = *(__int32*)((unsigned __int32)Entity + 4688); + + unsigned __int32 Absolute_Sequence_Activity = Sequence_Activity - 563; + + if (Absolute_Sequence_Activity <= 29) { - __int32 Sequence_Activity = *(__int32*)((unsigned __int32)Entity + 4688); - - unsigned __int32 Absolute_Sequence_Activity = Sequence_Activity - 563; - - if (Absolute_Sequence_Activity <= 29) - { - return (536870929 & (1 << (Absolute_Sequence_Activity & 31))) != 0; - } - - return (Sequence_Activity == 600) + (Sequence_Activity == 648); - }; - - if (Is_Neutral() == 1) - { - Damage = __builtin_inff(); + return (536870929 & (1 << (Absolute_Sequence_Activity & 31))) != 0; } - } - else + + return (Sequence_Activity == 600) + (Sequence_Activity == 648); + }; + + if (Is_Neutral() == 1) { - if (Gender != 17) - { - Damage = __builtin_inff(); - } + Damage = __builtin_inff(); } } else { - - if (Is_Shotgun * (Group == 3) == 1) + if (Gender != 17) { Damage = __builtin_inff(); } - else - { - Apply_Difficulty_Scaling(); + } + } + else + { + if (Group * (Gender != 14) * (Gender != 17) * Is_Shotgun == 3) + { + Damage = __builtin_inff(); + } + else + { + Apply_Difficulty_Scaling(); - if (Bullet_Type == 2 || Is_Sniper_Rifle == 1) + if ((Bullet_Type == 2) + Is_Sniper_Rifle != 0) + { + if (Gender == 14) { - if (Gender == 14) + if (Is_Sniper_Rifle * Realism == 0) { Damage = 450; } - else - { - Damage = __builtin_inff(); - } } else { - if (Bullet_Type >= 6) - { - if ((Bullet_Type - 3) % 4 > 1) - { - Damage = __builtin_inff(); - } - } + Damage = __builtin_inff(); } } } @@ -229,40 +231,29 @@ void __thiscall Perform_Trace(void* Stack) { if (Identifier != 13) { - //nb_delete_all;z_spawn tank if (Identifier + Bullet_Type == 284) { Damage *= 0.85f; } - if (Upgrade_Type != 1) + if ((Identifier != 276) + (Upgrade_Type != 1) == 2) { - if (Identifier != 276) - { - Damage *= 1.f + 3.f * (Group == 1) + 0.25f * ((Group == 3) + -(Group == 7)); + float Multipliers[8] = { 1.f, 4.f, 1.f, 1.25f, 1.f, 1.f, 0.75f, 0.75f }; - if (Identifier * Group == 270) - { - if (*(void**)((unsigned __int32)Entity + 8040) != INVALID_HANDLE_VALUE) - { - Damage = __builtin_inff(); - } - } - } + Damage *= Multipliers[Group]; } - Damage = (__int32)(Damage + 1.f * (Damage < 1)); + //CTerrorPlayer::OnTakeDamage + //"AI controlled Chargers take 66% less damage while charging." (CTerrorPlayer::IsCustomAbilityActive) + + if (Damage != __builtin_inff()) + { + Damage = (__int32)(Damage + 1.f * (Damage < 1)); + } } } } - if (Is_Shotgun * Upgrade_Type == 1) - { - Damage *= *(__int32*)((unsigned __int32)Weapon_Data + 2520); - } - - wprintf(L"[%d] type %d, %d\n", Group, Bullet_Type, Upgrade_Type); - Perform_Trace_Damage += Damage; } };