Implemented infinite ammo / clip commands

This commit is contained in:
TjgL 2025-02-01 16:27:43 +01:00
parent 1e3baeb391
commit 44d6d7f36a
8 changed files with 60 additions and 13 deletions

Binary file not shown.

Binary file not shown.

View File

@ -3,6 +3,7 @@
#include "Weapon/LMRevolver.h"
#include "LMUtils.h"
#include "Player/LMBulletInfo.h"
#include "Player/LMPlayer.h"
@ -35,8 +36,12 @@ void ALMRevolver::PrimaryFire()
const FVector Origin = Player->GetWeaponFiringOrigin();
const FVector Direction = Player->GetAimVector();
ClipAmmo--;
const int InfiniteClip = LMCheats::CVarInfiniteClip.GetValueOnGameThread();
if (InfiniteClip == 0)
ClipAmmo--;
else if (InfiniteClip == 1 and ClipAmmo > 1)
ClipAmmo--;
FLMBulletInfo ShotInfo = FLMBulletInfo(1, Origin, Direction, WeaponSpread, MaxDistance, DamageFalloff, AmmoType, Damage);

View File

@ -3,6 +3,7 @@
#include "Weapon/LMShotgun.h"
#include "LMUtils.h"
#include "Player/LMBulletInfo.h"
#include "Player/LMPlayer.h"
@ -35,7 +36,11 @@ void ALMShotgun::PrimaryFire()
const FVector Origin = Player->GetWeaponFiringOrigin();
const FVector Direction = Player->GetAimVector();
ClipAmmo--;
const int InfiniteClip = LMCheats::CVarInfiniteClip.GetValueOnGameThread();
if (InfiniteClip == 0)
ClipAmmo--;
else if (InfiniteClip == 1 and ClipAmmo > 1)
ClipAmmo--;
FLMBulletInfo ShotInfo = FLMBulletInfo(PelletCount, Origin, Direction, WeaponSpread, MaxDistance, DamageFalloff, AmmoType, Damage);

View File

@ -3,6 +3,7 @@
#include "Weapon/LMWeaponBase.h"
#include "LMUtils.h"
#include "Components/AudioComponent.h"
#include "Player/LMPlayer.h"
@ -81,10 +82,14 @@ bool ALMWeaponBase::DefaultReload()
{
if (State != EWeaponState::EWS_Idle)
return false;
const int AmmoCount = Player->GetAmmoCount(AmmoType);
if (AmmoCount <= 0)
return false;
int InfiniteAmmo = LMCheats::CVarInfiniteAmmo.GetValueOnGameThread();
if (InfiniteAmmo <= 0)
{
const int AmmoCount = Player->GetAmmoCount(AmmoType);
if (AmmoCount <= 0)
return false;
}
if (ClipAmmo >= MaxClip)
return false;
@ -102,6 +107,13 @@ bool ALMWeaponBase::DefaultReload()
return true;
}
void ALMWeaponBase::OnDefaultReload_Implementation()
{
const int RequestedAmmo = MaxClip - ClipAmmo;
const int ReceivedAmmo = Player->RemoveAmmo(AmmoType, RequestedAmmo);
ClipAmmo += ReceivedAmmo;
}
void ALMWeaponBase::AllowRefire()
{
// TODO : improve this

View File

@ -3,6 +3,7 @@
#include "Weapon/LMWeaponManager.h"
#include "LMUtils.h"
#include "Weapon/LMWeaponBase.h"
@ -48,6 +49,10 @@ int ULMWeaponManager::RemoveAmmo(const EAmmoType Ammo, const int Count)
{
if (AmmoData.Contains(Ammo))
{
const int InfiniteAmmo = LMCheats::CVarInfiniteAmmo.GetValueOnGameThread();
if (InfiniteAmmo == 2)
return Count;
FLMAmmoData &Data = AmmoData[Ammo];
int Difference = Data.AmmoCount - Count;
@ -55,7 +60,7 @@ int ULMWeaponManager::RemoveAmmo(const EAmmoType Ammo, const int Count)
if (Difference < 0)
{
UE_LOG(LogTemp, Error, TEXT("%i - %i = %i"), Data.AmmoCount, Count, Data.AmmoCount - Count);
Data.AmmoCount = FMath::Clamp(Data.AmmoCount - Count, 0, Data.MaxAmmo);
Data.AmmoCount = FMath::Clamp(Data.AmmoCount - Count, InfiniteAmmo == 1 ? 1 : 0, Data.MaxAmmo);
UE_LOG(LogTemp, Warning, TEXT("Difference < 0 | Munition to add: %i | Removed: %i | New Munition: %i"), Count + Difference, Count, Data.AmmoCount)
return Count + Difference;
}

View File

@ -2,3 +2,23 @@
/** The Trace Channel for Bullets. */
#define TRACE_BULLET ECC_GameTraceChannel1
namespace LMCheats
{
static TAutoConsoleVariable<int> CVarInfiniteAmmo(
TEXT("l.InfiniteAmmo"),
0,
TEXT("Defines if an ammo type stockage is infinite or not.\n")
TEXT("0 = off\n")
TEXT("1 = decrease until 1 ammo\n")
TEXT("2 = infinite ammo"));
static TAutoConsoleVariable<int> CVarInfiniteClip(
TEXT("l.InfiniteClip"),
0,
TEXT("Defines if a clip is infinite or not.\n")
TEXT("0 = off\n")
TEXT("1 = decrease until 1 bullet left in clip\n")
TEXT("2 = infinite clip"));
}

View File

@ -44,7 +44,7 @@ public:
UFUNCTION(BlueprintCallable)
FName GetAttachmentSocketName() const { return WeaponSocket; }
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
void OnDefaultReload();
protected: