public static bool ToggleSafetyPrefix(Handgun __instance, ref int ___m_fireSelectorMode, ref bool ___m_isSafetyEngaged, ref bool ___m_isHammerCocked, ref bool __result) { if (!__instance.HasSafety) { __result = false; return(false); } if (__instance.DoesSafetyRequireSlideForward && __instance.Slide.CurPos != HandgunSlide.SlidePos.Forward) { __result = false; return(false); } if (__instance.Slide.CurPos == HandgunSlide.SlidePos.Forward || __instance.Slide.CurPos >= HandgunSlide.SlidePos.Locked) { if (___m_isSafetyEngaged) { __instance.PlayAudioEvent(FirearmAudioEventType.Safety); ___m_isSafetyEngaged = false; if (__instance.DoesSafetyDisengageCockHammer) { __instance.CockHammer(true); } ___m_fireSelectorMode = 0; } else if (__instance.FireSelectorModes[___m_fireSelectorMode].ModeType != Handgun.FireSelectorModeType.FullAuto) { __instance.PlayAudioEvent(FirearmAudioEventType.Safety, 0.7f); ___m_fireSelectorMode = (___m_fireSelectorMode + 1) % __instance.FireSelectorModes.Length; } else { ___m_fireSelectorMode = 0; var flag = !(__instance.DoesSafetyRequireCockedHammer && !___m_isHammerCocked); if (flag) { ___m_isSafetyEngaged = true; if (__instance.DoesSafetyEngagingDecock) { __instance.DeCockHammer(true, true); } __instance.PlayAudioEvent(FirearmAudioEventType.Safety); } } UpdateSafetyPos(__instance); __result = true; return(false); } __result = false; return(false); }