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);
 }
Beispiel #3
0
 public void Start()
 {
     _chamber = firearm switch
     {
         ClosedBoltWeapon weapon => weapon.Chamber,
         OpenBoltReceiver receiver => receiver.Chamber,
         Handgun handgun => handgun.Chamber,
                          _ => _chamber
     };
 }
Beispiel #4
0
        public void CleanupHeldObject()
        {
            ClearObjectControls();
            Object = null;
            if (Panel != null && Panel.PageNameText != null)
            {
                Panel.PageNameText.text = PageTitle;
            }

            m_curChamber      = null;
            m_curChamberIndex = -1;
        }
Beispiel #5
0
 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);
 }
Beispiel #10
0
        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;
                        }
                    }
                }
            }
        }
Beispiel #11
0
        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();
                }
            }
        }
Beispiel #12
0
        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);
 }