Merge pull request #349 from diamante0018/develop

Add sustain ammo dvar
This commit is contained in:
Maurice Heumann 2022-03-23 12:58:37 +01:00 committed by GitHub
commit 8680aa31c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 46 additions and 6 deletions

View File

@ -27,7 +27,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check out files - name: Check out files
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
submodules: true submodules: true
fetch-depth: 0 fetch-depth: 0

View File

@ -9,6 +9,8 @@ namespace gameplay
{ {
namespace namespace
{ {
utils::hook::detour pm_weapon_use_ammo_hook;
void stuck_in_client_stub(void* entity) void stuck_in_client_stub(void* entity)
{ {
if (dvars::g_playerEjection->current.enabled) if (dvars::g_playerEjection->current.enabled)
@ -17,14 +19,13 @@ namespace gameplay
} }
} }
void cm_transformed_capsule_trace_stub(struct trace_t* results, const float* start, const float* end, void cm_transformed_capsule_trace_stub(game::trace_t* results, const float* start, const float* end,
struct Bounds* bounds, struct Bounds* capsule, int contents, game::Bounds* bounds, game::Bounds* capsule, int contents, const float* origin, const float* angles)
const float* origin, const float* angles)
{ {
if (dvars::g_playerCollision->current.enabled) if (dvars::g_playerCollision->current.enabled)
{ {
reinterpret_cast<void(*) reinterpret_cast<void(*)
(struct trace_t*, const float*, const float*, struct Bounds*, struct Bounds*, unsigned int, (game::trace_t*, const float*, const float*, game::Bounds*, game::Bounds*, unsigned int,
const float*, const float*)> const float*, const float*)>
(0x1403AB1C0) (0x1403AB1C0)
(results, start, end, bounds, capsule, contents, origin, angles); // CM_TransformedCapsuleTrace (results, start, end, bounds, capsule, contents, origin, angles); // CM_TransformedCapsuleTrace
@ -54,6 +55,15 @@ namespace gameplay
a.bind(loc_14014DF48); a.bind(loc_14014DF48);
a.jmp(0x14014DF48); a.jmp(0x14014DF48);
}); });
void pm_weapon_use_ammo_stub(game::playerState_s* ps, game::Weapon weapon,
bool is_alternate, int amount, game::PlayerHandIndex hand)
{
if (!dvars::player_sustainAmmo->current.enabled)
{
pm_weapon_use_ammo_hook.invoke<void>(ps, weapon, is_alternate, amount, hand);
}
}
} }
class component final : public component_interface class component final : public component_interface
@ -61,6 +71,10 @@ namespace gameplay
public: public:
void post_unpack() override void post_unpack() override
{ {
dvars::player_sustainAmmo = game::Dvar_RegisterBool("player_sustainAmmo", false,
game::DVAR_FLAG_REPLICATED, "Firing weapon will not decrease clip ammo");
pm_weapon_use_ammo_hook.create(SELECT_VALUE(0x1403DD050, 0x140162B20), &pm_weapon_use_ammo_stub);
if (game::environment::is_sp()) return; if (game::environment::is_sp()) return;
// Implement player ejection dvar // Implement player ejection dvar

View File

@ -22,6 +22,8 @@ namespace dvars
game::dvar_t* pm_bouncing = nullptr; game::dvar_t* pm_bouncing = nullptr;
game::dvar_t* player_sustainAmmo = nullptr;
game::dvar_t* r_fullbright = nullptr; game::dvar_t* r_fullbright = nullptr;
game::dvar_t* cg_legacyCrashHandling = nullptr; game::dvar_t* cg_legacyCrashHandling = nullptr;

View File

@ -1,6 +1,5 @@
#pragma once #pragma once
#include "game.hpp"
#include "structs.hpp" #include "structs.hpp"
namespace dvars namespace dvars
@ -22,6 +21,8 @@ namespace dvars
extern game::dvar_t* pm_bouncing; extern game::dvar_t* pm_bouncing;
extern game::dvar_t* player_sustainAmmo;
extern game::dvar_t* r_fullbright; extern game::dvar_t* r_fullbright;
extern game::dvar_t* cg_legacyCrashHandling; extern game::dvar_t* cg_legacyCrashHandling;

View File

@ -1331,6 +1331,29 @@ namespace game
SV_LIVE_DROP_DISCONNECT = 0x1, SV_LIVE_DROP_DISCONNECT = 0x1,
}; };
struct trace_t
{
};
struct Bounds
{
float midPoint[3];
float halfSize[3];
};
enum PlayerHandIndex
{
WEAPON_HAND_DEFAULT = 0x0,
WEAPON_HAND_RIGHT = 0x0,
WEAPON_HAND_LEFT = 0x1,
NUM_WEAPON_HANDS = 0x2,
};
union Weapon
{
unsigned int data;
};
namespace mp namespace mp
{ {
struct cachedSnapshot_t struct cachedSnapshot_t