public static bool Prefix(string weaponName, int hpIdx, LoadoutConfigurator __instance)
    {
        if (weaponName != "Nuke")
        {
            Debug.Log("Prefix 0 true");
            return(true);
        }
        Debug.Log("Prefix 0 false.");
        Transform transform = PatcherHelper.nukeObject.transform;

        Debug.Log("TRANSFORM");
        __instance.equips[hpIdx] = transform.GetComponent <HPEquippable>();
        // Traverse traverse = Traverse.Create<LoadoutConfigurator>().Field("hpTransforms");
        Transform[] transforms = __instance.wm.hardpointTransforms;
        transform.parent        = transforms[hpIdx];
        transform.localPosition = Vector3.zero;
        transform.localRotation = Quaternion.identity;
        transform.localScale    = Vector3.one;
        // __instance.equips[hpIdx].OnConfigAttach(__instance);

        /*if (__instance.OnAttachHPIdx != null)
         * {
         *  __instance.OnAttachHPIdx(hpIdx);
         * }*/
        __instance.UpdateNodes();
        return(false);
    }
    public static bool Prefix(int hpIdx, string weaponName, LoadoutConfigurator __instance)
    {
        if (weaponName != "Nuke")
        {
            Debug.Log("Prefix 69 true");
            return(true);
        }
        Debug.Log("Prefix 69 false");
        GameObject instantiated = PatcherHelper.nukeObject;

        instantiated.SetActive(true);
        Nuke       nuke          = instantiated.AddComponent <Nuke>();
        GameObject equipper      = new GameObject();
        GameObject edgeTransform = instantiated.transform.GetChild(0).gameObject;

        nuke.edgeTransform = edgeTransform;
        nuke.equipper      = equipper;
        equipper.SetActive(true);
        Debug.Log("Nuke added.");
        nuke.init();
        Debug.Log("PH instantiate");
        Transform weaponTf = equipper.transform;

        nuke.missileLauncher.LoadAllMissiles();
        Debug.Log("wTf transform");
        // Traverse hpTransformsTraverse = Traverse.Create<LoadoutConfigurator>().Field("hpTransforms");
        Debug.Log("traverse hpTransforms");
        Transform[] transforms = __instance.wm.hardpointTransforms;
        Debug.Log("get");
        Transform hpTf = transforms[hpIdx];

        Debug.Log("hpTf = transforms");
        InternalWeaponBay iwb = null;

        Debug.Log("null iwb");
        // Traverse iwbAttachTraverse = Traverse.Create<LoadoutConfigurator>().Field("iwbAttach");
        MethodInfo dynMethod = __instance.GetType().GetMethod("iwbAttach", BindingFlags.NonPublic | BindingFlags.Instance);

        Debug.Log("dyn method");
        // object iwbAttach = (InternalWeaponBay)dynMethod.Invoke(__instance, null);
        Debug.Log("iwb attach");
        // object iwbAttach = iwbAttachTraverse.GetValue(__instance);

        /*for (int i = 0; i < __instance.wm.internalWeaponBays.Length; i++)
         * {
         *  InternalWeaponBay internalWeaponBay = __instance.wm.internalWeaponBays[i];
         *  if (internalWeaponBay.hardpointIdx == hpIdx)
         *  {
         *      iwb = internalWeaponBay;
         *      iwb.RegisterOpenReq(iwbAttach);
         *  }
         * }*/
        Debug.Log("iterator");
        __instance.equips[hpIdx] = weaponTf.GetComponent <HPEquippable>();
        Debug.Log("equips weaponTf");
        // __instance.equips[hpIdx].OnConfigAttach(__instance);
        // Debug.Log("__instance,equips onconfigtattach");
        weaponTf.rotation = hpTf.rotation;
        Debug.Log("ROTATIOENATEAITJAOTATATETED");
        Vector3 localPos = new Vector3(0f, -4f, 0f);

        Debug.Log("create localPos");
        weaponTf.position = hpTf.TransformPoint(localPos);
        Debug.Log("Position");
        __instance.UpdateNodes();
        Debug.Log("Update Nodes");
        Vector3 tgt = new Vector3(0f, 0f, 0.5f);

        Debug.Log("tgt");
        if (hpIdx == 0 || iwb)
        {
            tgt = Vector3.zero;
        }
        Debug.Log("if vector3");
        while ((localPos - tgt).sqrMagnitude > 0.01f)
        {
            localPos          = Vector3.Lerp(localPos, tgt, 5f * Time.deltaTime);
            weaponTf.position = hpTf.TransformPoint(localPos);
        }
        Debug.Log("while");
        weaponTf.parent = hpTf;
        Debug.Log("parent");
        weaponTf.localPosition = tgt;
        Debug.Log("localPosition = tgt");
        weaponTf.localRotation = Quaternion.identity;
        Debug.Log("Quaternion.identity");
        __instance.vehicleRb.AddForceAtPosition(Vector3.up * __instance.equipImpulse, __instance.wm.hardpointTransforms[hpIdx].position, ForceMode.Impulse);
        Debug.Log("ADD FORCE AT POSITION! POGGERS");

        /*Traverse hpAudioSourcesTraverse = Traverse.Create<LoadoutConfigurator>().Field("hpAudioSources");
         * Debug.Log("hpAudioSourcesTraverse created!");
         * AudioSource[] hpAudioSources = (AudioSource[])hpTransformsTraverse.GetValue(__instance);*/
        AudioSource audioSource = new GameObject("HPAudio").AddComponent <AudioSource>();

        audioSource.transform.parent   = __instance.gameObject.transform;
        audioSource.transform.position = hpTf.position;
        audioSource.spatialBlend       = 1f;
        audioSource.minDistance        = 4f;
        audioSource.maxDistance        = 1000f;
        audioSource.dopplerLevel       = 0f;
        Debug.Log("hpAudioSources 200");
        audioSource.PlayOneShot(__instance.attachAudioClip);
        Debug.Log("play 1 shot");
        __instance.attachPs.transform.position = hpTf.position;
        Debug.Log("Attach p's transform");
        __instance.attachPs.FireBurst();
        Debug.Log("FireBurst()");
        while (weaponTf.localPosition.sqrMagnitude > 0.001f)
        {
            weaponTf.localPosition = Vector3.MoveTowards(weaponTf.localPosition, Vector3.zero, 4f * Time.deltaTime);
        }
        Debug.Log("While 2 or 3 i dont remember or give a f**k");

        /*if (iwb)
         *      {
         *              iwb.UnregisterOpenReq(iwbAttach);
         * }
         * Debug.Log("iwb unregister");*/
        weaponTf.localPosition = Vector3.zero;
        Debug.Log("Vector3.zero");
        __instance.UpdateNodes();
        Debug.Log("UpdateNodes called, we're all done! Return false time;!!!!!!!!!");
        return(false);
    }