static bool RollingBlockPatch_ForceExtractable(FVRFireArmChamber __instance) { if (__instance.Firearm is RollingBlock) { __instance.IsManuallyExtractable = true; } return(true); }
static bool GeneralPatch_FailureToExtract(FVRFireArmChamber __instance) { if (__instance.Firearm != null) { MCM.IncRoundsUsed(__instance.Firearm); } return(true); }
public void Start() { _chamber = firearm switch { ClosedBoltWeapon weapon => weapon.Chamber, OpenBoltReceiver receiver => receiver.Chamber, Handgun handgun => handgun.Chamber, _ => _chamber }; }
public void CleanupHeldObject() { ClearObjectControls(); Object = null; if (Panel != null && Panel.PageNameText != null) { Panel.PageNameText.text = PageTitle; } m_curChamber = null; m_curChamberIndex = -1; }
static bool DefaultPatch_LightPrimerStrike(ref bool __result, FVRFireArmChamber __instance, FVRFireArmRound ___m_round) { if (__instance.Firearm is Revolver || __instance.Firearm is RevolvingShotgun) { return(true); } if (CalcLightPrimerStrikeFail(__instance.Firearm)) { return(true); } __result = false; return(false); }
static bool RollingBlockPatch_FailureToExtract(FVRFireArmChamber __instance) { if (!Meatyceiver.enableFirearmFailures.Value) { return(true); } if (__instance.Firearm is RollingBlock) { string failureName = "Rolling block FTE"; float chance = Meatyceiver.breakActionFTE.Value * (Meatyceiver.generalMult.Value - 1) * Meatyceiver.breakActionFTEMultAffect.Value; if (Meatyceiver.CalcFail(chance, __instance.Firearm)) { return(false); } } return(true); }
public void Start() { if (firearm is ClosedBoltWeapon) { var wep = firearm as ClosedBoltWeapon; chamber = wep.Chamber; } if (firearm is OpenBoltReceiver) { var wep = firearm as OpenBoltReceiver; chamber = wep.Chamber; } if (firearm is Handgun) { var wep = firearm as Handgun; chamber = wep.Chamber; } }
public static bool RoundPatch_InsertEmptyRound(FVRFireArmRound __instance, ref Collider collider) { if (__instance.isManuallyChamberable && __instance.HoveredOverChamber == null && __instance.m_hoverOverReloadTrigger == null && collider.gameObject.CompareTag("FVRFireArmChamber")) { FVRFireArmChamber component = collider.gameObject.GetComponent <FVRFireArmChamber>(); if (component.RoundType == __instance.RoundType && component.IsManuallyChamberable && component.IsAccessible && !component.IsFull) { __instance.HoveredOverChamber = component; } } if (__instance.isMagazineLoadable && __instance.HoveredOverChamber == null && collider.gameObject.CompareTag("FVRFireArmMagazineReloadTrigger")) { FVRFireArmMagazineReloadTrigger component2 = collider.gameObject.GetComponent <FVRFireArmMagazineReloadTrigger>(); if (component2.IsClipTrigger) { if (component2 != null && component2.Clip != null && component2.Clip.RoundType == __instance.RoundType && !component2.Clip.IsFull() && (component2.Clip.FireArm == null || component2.Clip.IsDropInLoadable)) { __instance.m_hoverOverReloadTrigger = component2; } } else if (component2.IsSpeedloaderTrigger) { if (!component2.SpeedloaderChamber.IsLoaded) { __instance.m_hoverOverReloadTrigger = component2; } } else if (component2 != null && component2.Magazine != null && component2.Magazine.RoundType == __instance.RoundType && !component2.Magazine.IsFull() && (component2.Magazine.FireArm == null || component2.Magazine.IsDropInLoadable)) { __instance.m_hoverOverReloadTrigger = component2; } } if (__instance.isPalmable && __instance.ProxyRounds.Count < __instance.MaxPalmedAmount && collider.gameObject.CompareTag("FVRFireArmRound")) { FVRFireArmRound component3 = collider.gameObject.GetComponent <FVRFireArmRound>(); if (component3.RoundType == __instance.RoundType && component3.QuickbeltSlot == null) { __instance.HoveredOverRound = component3; } } return(false); }
static bool RevolverPatch_FailureToExtract(FVRFireArmChamber __instance) { if (!Meatyceiver.enableFirearmFailures.Value) { return(true); } if (__instance.Firearm is Revolver) { if (__instance.RotationInterpSpeed == 1) { string failureName = "Revolver FTE"; float chance = Meatyceiver.revolverFTE.Value * (Meatyceiver.generalMult.Value - 1) * Meatyceiver.revolverFTEGenMultAffect.Value; if (Meatyceiver.CalcFail(chance, __instance.Firearm)) { __instance.RotationInterpSpeed = 2; return(false); } } } return(true); }
public void TryToGetCurrentChamber() { if (Object != null && Object.GetComponent <FVRFireArm>() != null && AccessTools.Field(Object.GetType(), "m_curChamber") != null) { int CurChamber = (int)AccessTools.Field(Object.GetType(), "m_curChamber").GetValue(Object); if (CurChamber != m_curChamberIndex && Object.GetType().GetField("Chambers") != null) { m_curChamberIndex = CurChamber; FVRFireArmChamber[] Chambers = (FVRFireArmChamber[])Object.GetType().GetField("Chambers").GetValue(Object); m_curChamber = Chambers[m_curChamberIndex]; //i'm so sorry foreach (ModPanelV2ObjectControl control in UpdatingObjectControls) { if (control.Instance.GetType() == typeof(FVRFireArmChamber)) { control.Instance = m_curChamber; } } } } }
public static void FVRFireArmRound_DuplicateFromSpawnLock(FVRFireArmRound __instance, ref GameObject __result, FVRViveHand hand) { FVRFireArmRound round = __result.GetComponent <FVRFireArmRound>(); if (_enableSmartPalming.Value && round != null && hand.OtherHand.CurrentInteractable != null) { int roundsNeeded = 0; FVRFireArmMagazine mag = hand.OtherHand.CurrentInteractable.GetComponentInChildren <FVRFireArmMagazine>(); if (mag != null) { roundsNeeded = mag.m_capacity - mag.m_numRounds; } FVRFireArmClip clip = hand.OtherHand.CurrentInteractable.GetComponentInChildren <FVRFireArmClip>(); if (clip != null) { roundsNeeded = clip.m_capacity - clip.m_numRounds; } if (hand.OtherHand.CurrentInteractable is FVRFireArm) { if (hand.OtherHand.CurrentInteractable is BreakActionWeapon) { BreakActionWeapon baw = hand.OtherHand.CurrentInteractable as BreakActionWeapon; for (int j = 0; j < baw.Barrels.Length; j++) { if (!baw.Barrels[j].Chamber.IsFull) { roundsNeeded += 1; } } } else if (hand.OtherHand.CurrentInteractable is Derringer) { Derringer derringer = hand.OtherHand.CurrentInteractable as Derringer; for (int j = 0; j < derringer.Barrels.Count; j++) { if (!derringer.Barrels[j].Chamber.IsFull) { roundsNeeded += 1; } } } else if (hand.OtherHand.CurrentInteractable is SingleActionRevolver) { SingleActionRevolver saRevolver = hand.OtherHand.CurrentInteractable as SingleActionRevolver; for (int j = 0; j < saRevolver.Cylinder.Chambers.Length; j++) { if (!saRevolver.Cylinder.Chambers[j].IsFull) { roundsNeeded += 1; } } } if (hand.OtherHand.CurrentInteractable.GetType().GetField("Chamber") != null) //handles most guns { FVRFireArmChamber Chamber = (FVRFireArmChamber)hand.OtherHand.CurrentInteractable.GetType().GetField("Chamber").GetValue(hand.OtherHand.CurrentInteractable); if (!Chamber.IsFull) { roundsNeeded += 1; } } if (hand.OtherHand.CurrentInteractable.GetType().GetField("Chambers") != null) //handles Revolver, LAPD2019, RevolvingShotgun { FVRFireArmChamber[] Chambers = (FVRFireArmChamber[])hand.OtherHand.CurrentInteractable.GetType().GetField("Chambers").GetValue(hand.OtherHand.CurrentInteractable); for (int j = 0; j < Chambers.Length; j++) { if (!Chambers[j].IsFull) { roundsNeeded += 1; } } } } //if rounds are needed, and if rounds needed is less than the proxy rounds + the real round (1) if (roundsNeeded > 0 && roundsNeeded < round.ProxyRounds.Count + 1) { for (int i = roundsNeeded - 1; i < round.ProxyRounds.Count; i++) { Destroy(round.ProxyRounds[i].GO); } round.ProxyRounds.RemoveRange(roundsNeeded - 1, (round.ProxyRounds.Count + 1) - roundsNeeded); round.UpdateProxyDisplay(); } } }
private void UpdateBulletMode(FVRFireArm firearm) { if (Attachment != null && Attachment.GetRootObject() != null && Attachment.GetRootObject() == firearm) { MeatTrak.NumberTarget = 0; FVRFireArmMagazine mag = firearm.GetComponentInChildren <FVRFireArmMagazine>(); if (mag != null) { MeatTrak.NumberTarget = mag.m_numRounds; } FVRFireArmClip clip = firearm.GetComponentInChildren <FVRFireArmClip>(); if (clip != null) { MeatTrak.NumberTarget = clip.m_numRounds; } if (firearm is FVRFireArm) { if (firearm is BreakActionWeapon) { BreakActionWeapon baw = firearm as BreakActionWeapon; for (int j = 0; j < baw.Barrels.Length; j++) { if (baw.Barrels[j].Chamber.IsFull && !baw.Barrels[j].Chamber.IsSpent) { MeatTrak.NumberTarget += 1; } } } else if (firearm is Derringer) { Derringer derringer = firearm as Derringer; for (int j = 0; j < derringer.Barrels.Count; j++) { if (derringer.Barrels[j].Chamber.IsFull && !derringer.Barrels[j].Chamber.IsSpent) { MeatTrak.NumberTarget += 1; } } } else if (firearm is SingleActionRevolver) { SingleActionRevolver saRevolver = firearm as SingleActionRevolver; for (int j = 0; j < saRevolver.Cylinder.Chambers.Length; j++) { if (saRevolver.Cylinder.Chambers[j].IsFull && !saRevolver.Cylinder.Chambers[j].IsSpent) { MeatTrak.NumberTarget += 1; } } } if (firearm.GetType().GetField("Chamber") != null) //handles most guns { FVRFireArmChamber Chamber = (FVRFireArmChamber)firearm.GetType().GetField("Chamber").GetValue(firearm); if (Chamber.IsFull && !Chamber.IsSpent) { MeatTrak.NumberTarget += 1; } } if (firearm.GetType().GetField("Chambers") != null) //handles Revolver, LAPD2019, RevolvingShotgun { FVRFireArmChamber[] Chambers = (FVRFireArmChamber[])firearm.GetType().GetField("Chambers").GetValue(firearm); for (int j = 0; j < Chambers.Length; j++) { if (Chambers[j].IsFull && !Chambers[j].IsSpent) { MeatTrak.NumberTarget += 1; } } } } } }
static void GeneralFixPatch_FailureToExtract(FVRFireArmChamber __instance) { MCM.RemoveFlag(__instance, states.StuckRound); }