Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -360,4 +360,9 @@ MigrationBackup/
.ionide/

# Fody - auto-generated XML schema
FodyWeavers.xsd
FodyWeavers.xsd

/BackdoorBandit.csproj
dist/
build.ps1
**.7z
153 changes: 0 additions & 153 deletions BackdoorBandit.csproj

This file was deleted.

53 changes: 26 additions & 27 deletions DamageUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@ namespace BackdoorBandit
{
internal static class DamageUtility
{
internal static void CheckWeaponAndAmmo(DamageInfo damageInfo, ref bool validDamage, ref HashSet<string> validWeapons, Func<AmmoTemplate, bool> isRoundValid, Func<DamageInfo, bool> isValidLockHit)
internal static void CheckWeaponAndAmmo(DamageInfoStruct damageInfo, ref bool validDamage, ref HashSet<string> validWeapons, Func<AmmoTemplate, bool> isRoundValid, Func<DamageInfoStruct, bool> isValidLockHit)
{
var material = damageInfo.HittedBallisticCollider.TypeOfMaterial;
var weapon = damageInfo.Weapon.TemplateId;

MaterialType material = damageInfo.HittedBallisticCollider.TypeOfMaterial;
MongoID weaponID = damageInfo.Weapon.TemplateId;

//semi-pleb mode. All regular doors are shootable any weapon except for reinforced doors
if (DoorBreachPlugin.SemiPlebMode.Value && material != MaterialType.MetalThin && material != MaterialType.MetalThick)
Expand All @@ -28,24 +27,24 @@ internal static void CheckWeaponAndAmmo(DamageInfo damageInfo, ref bool validDam
//regular valid melee weapon check
if (damageInfo.DamageType != EDamageType.Bullet && damageInfo.DamageType != EDamageType.GrenadeFragment)
{
if (damageInfo.DamageType == EDamageType.Melee && DoorBreachComponent.MeleeWeapons.Contains(weapon) && material != MaterialType.MetalThin && material != MaterialType.MetalThick)
if (damageInfo.DamageType == EDamageType.Melee && DoorBreachComponent.MeleeWeapons.Contains(weaponID) && material != MaterialType.MetalThin && material != MaterialType.MetalThick)
{
validDamage = true;
}

return;
}

var bulletTemplate = Singleton<ItemFactory>.Instance.ItemTemplates[damageInfo.SourceId] as AmmoTemplate;
AmmoTemplate bulletTemplate = Singleton<ItemFactoryClass>.Instance.ItemTemplates[damageInfo.SourceId] as AmmoTemplate;

#if DEBUG
DoorBreachComponent.Logger.LogInfo($"ammoTemplate: {bulletTemplate.Name}");
DoorBreachComponent.Logger.LogInfo($"BB: Actual DamageType is : {damageInfo.DamageType}");
DoorBreachComponent.Logger.LogInfo($"isValidLockHit: {isValidLockHit(damageInfo)}");
DoorBreachComponent.Logger.LogInfo($"isRoundValid: {isRoundValid(bulletTemplate)}");
DoorBreachComponent.Logger.LogInfo($"weapon used: {damageInfo.Weapon.LocalizedName()}, id: {damageInfo.Weapon.TemplateId}");
DoorBreachComponent.Logger.LogInfo($"validWeapons Contains weapon tpl id: {validWeapons.Contains(weapon).ToString()}");
DoorBreachComponent.Logger.LogDebug($"ammoTemplate: {bulletTemplate.Name}");
DoorBreachComponent.Logger.LogDebug($"BB: Actual DamageType is : {damageInfo.DamageType}");
DoorBreachComponent.Logger.LogDebug($"isValidLockHit: {isValidLockHit(damageInfo)}");
DoorBreachComponent.Logger.LogDebug($"isRoundValid: {isRoundValid(bulletTemplate)}");
DoorBreachComponent.Logger.LogDebug($"weapon used: {damageInfo.Weapon.LocalizedName()}, id: {damageInfo.Weapon.TemplateId}");
#endif

//check if weapon is a shotgun and material type is metal
if (!DoorBreachPlugin.BreachingRoundsOpenMetalDoors.Value)
{
Expand All @@ -57,16 +56,16 @@ internal static void CheckWeaponAndAmmo(DamageInfo damageInfo, ref bool validDam
}

//check if its on the validWeapons hashset and its not a shotgun.. something user added then we need to skip the isRoundValidCheck
if (validWeapons.Contains(weapon) && !isShotgun(damageInfo) && isValidLockHit(damageInfo))
if (validWeapons.Contains(weaponID) && !isShotgun(damageInfo) && isValidLockHit(damageInfo))
{
validDamage = true;
return;
}
//regular valid weapon and round check
else if (validWeapons.Contains(weapon) && isRoundValid(bulletTemplate) && isValidLockHit(damageInfo))
else if (validWeapons.Contains(weaponID) && isRoundValid(bulletTemplate) && isValidLockHit(damageInfo))
{
#if DEBUG
DoorBreachComponent.Logger.LogInfo($"BB: Valid round detected.");
DoorBreachComponent.Logger.LogDebug($"BB: Valid round detected.");
#endif
validDamage = true;

Expand All @@ -80,19 +79,19 @@ internal static void CheckWeaponAndAmmo(DamageInfo damageInfo, ref bool validDam
}
}

internal static void CheckDoorWeaponAndAmmo(DamageInfo damageInfo, ref bool validDamage)
internal static void CheckDoorWeaponAndAmmo(DamageInfoStruct damageInfo, ref bool validDamage)
{
CheckWeaponAndAmmo(damageInfo, ref validDamage, ref DoorBreachComponent.ApplicableWeapons,
ammo => isHEGrenade(ammo) || isShrapnel(ammo) || isBreachingSlug(ammo), isValidDoorLockHit);
}

internal static void CheckCarWeaponAndAmmo(DamageInfo damageInfo, ref bool validDamage)
internal static void CheckCarWeaponAndAmmo(DamageInfoStruct damageInfo, ref bool validDamage)
{
CheckWeaponAndAmmo(damageInfo, ref validDamage, ref DoorBreachComponent.ApplicableWeapons,
ammo => isHEGrenade(ammo) || isShrapnel(ammo) || isBreachingSlug(ammo), isValidCarTrunkLockHit);
}

internal static void CheckLootableContainerWeaponAndAmmo(DamageInfo damageInfo, ref bool validDamage)
internal static void CheckLootableContainerWeaponAndAmmo(DamageInfoStruct damageInfo, ref bool validDamage)
{
CheckWeaponAndAmmo(damageInfo, ref validDamage, ref DoorBreachComponent.ApplicableWeapons,
ammo => isHEGrenade(ammo) || isShrapnel(ammo) || isBreachingSlug(ammo), isValidContainerLockHit);
Expand All @@ -118,13 +117,13 @@ internal static bool isBreachingSlug(AmmoTemplate bulletTemplate)

return (bulletTemplate._id == "660249a0712c1005a4a3ab41");
}
internal static bool isShotgun(DamageInfo damageInfo)
internal static bool isShotgun(DamageInfoStruct damageInfo)
{
//check if weapon is a shotgun

return ((damageInfo.Weapon as Weapon)?.WeapClass == "shotgun");
}
internal static bool isValidDoorLockHit(DamageInfo damageInfo)
internal static bool isValidDoorLockHit(DamageInfoStruct damageInfo)
{
//check if door handle area was hit
Collider col = damageInfo.HitCollider;
Expand All @@ -146,19 +145,19 @@ internal static bool isValidDoorLockHit(DamageInfo damageInfo)

}

internal static bool isValidCarTrunkLockHit(DamageInfo damageInfo)
internal static bool isValidCarTrunkLockHit(DamageInfoStruct damageInfo)
{
//check if door handle area was hit
Collider col = damageInfo.HitCollider;

//if doorhandle exists and is hit
if (col.GetComponentInParent<Trunk>().GetComponentInChildren<DoorHandle>() != null)
{
var gameobj = col.GetComponentInParent<Trunk>().gameObject;
GameObject gameobj = col.GetComponentInParent<Trunk>().gameObject;

//find child game object Lock from gameobj
var carLockObj = gameobj.transform.Find("CarLock_Hand").gameObject;
var lockObj = carLockObj.transform.Find("Lock").gameObject;
GameObject carLockObj = gameobj.transform.Find("CarLock_Hand").gameObject;
GameObject lockObj = carLockObj.transform.Find("Lock").gameObject;

float distanceToLock = Vector3.Distance(damageInfo.HitPoint, lockObj.transform.position);

Expand All @@ -172,18 +171,18 @@ internal static bool isValidCarTrunkLockHit(DamageInfo damageInfo)

}

internal static bool isValidContainerLockHit(DamageInfo damageInfo)
internal static bool isValidContainerLockHit(DamageInfoStruct damageInfo)
{
//check if door handle area was hit
Collider col = damageInfo.HitCollider;

//if doorhandle exists and is hit
if (col.GetComponentInParent<LootableContainer>().GetComponentInChildren<DoorHandle>() != null)
{
var gameobj = col.GetComponentInParent<LootableContainer>().gameObject;
GameObject gameobj = col.GetComponentInParent<LootableContainer>().gameObject;

//find child game object Lock from gameobj
var lockObj = gameobj.transform.Find("Lock").gameObject;
GameObject lockObj = gameobj.transform.Find("Lock").gameObject;

float distanceToLock = Vector3.Distance(damageInfo.HitPoint, lockObj.transform.position);
return distanceToLock < 0.25f;
Expand Down
21 changes: 13 additions & 8 deletions DoorBreachComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ private void ProcessObjectsOfType<T>(string objectType, int interactiveLayer) wh
if (!IsValidObject(obj, ref invalidCount, ref inoperableCount, ref invalidLayerCount, interactiveLayer))
return;

var randHitPoints = UnityEngine.Random.Range(DoorBreachPlugin.MinHitPoints.Value, DoorBreachPlugin.MaxHitPoints.Value);
var hitpoints = obj.gameObject.GetOrAddComponent<Hitpoints>();
int randHitPoints = UnityEngine.Random.Range(DoorBreachPlugin.MinHitPoints.Value, DoorBreachPlugin.MaxHitPoints.Value);
Hitpoints hitpoints = obj.gameObject.GetOrAddComponent<Hitpoints>();
hitpoints.hitpoints = randHitPoints;

if (obj is Door door)
Expand Down Expand Up @@ -173,8 +173,13 @@ private bool IsValidObject<T>(T obj, ref int invalidCount, ref int inoperableCou
return true;
}

private bool IsValidDoorState(Door door) =>
door.DoorState == EDoorState.Shut || door.DoorState == EDoorState.Locked || door.DoorState == EDoorState.Breaching || door.DoorState == EDoorState.Open;
private bool IsValidDoorState(Door door)
{
if(door.DoorState == EDoorState.Shut || door.DoorState == EDoorState.Locked || door.DoorState == EDoorState.Breaching || door.DoorState == EDoorState.Open)
return true;

return false;
}

private bool IsValidContainerState(LootableContainer container) =>
container.DoorState == EDoorState.Shut || container.DoorState == EDoorState.Locked || container.DoorState == EDoorState.Breaching;
Expand All @@ -198,7 +203,7 @@ public static void Enable()
{
if (Singleton<IBotGame>.Instantiated)
{
var gameWorld = Singleton<GameWorld>.Instance;
GameWorld gameWorld = Singleton<GameWorld>.Instance;
gameWorld.GetOrAddComponent<DoorBreachComponent>();
}
}
Expand Down Expand Up @@ -226,10 +231,10 @@ internal static void SetupApplicableWeapons()
ApplicableWeapons.UnionWith(DoorBreachComponent.OtherWeapons);
#if DEBUG
//print out applicable weapons hashes to console
Logger.LogInfo("Applicable Weapons:");
foreach (var weapon in ApplicableWeapons)
Logger.LogDebug("Applicable Weapons:");
foreach (string weapon in ApplicableWeapons)
{
Logger.LogInfo(weapon);
Logger.LogDebug(weapon);
}
#endif
}
Expand Down
Loading