public static bool Prefix(SAMLauncher __instance)
    {
        if (!Networker.isHost)
        {
            return(true);
        }
        Debug.Log("Beginning sam launch prefix.");
        int j = 0;

        Missile[] missiles = (Missile[])Traverse.Create(__instance).Field("missiles").GetValue();
        for (int i = 0; i < missiles.Length; i++)
        {
            if (missiles[i] != null)
            {
                Debug.Log("Found a suitable missile to attach a sender to.");
                MissileNetworker_Sender missileSender = missiles[i].gameObject.AddComponent <MissileNetworker_Sender>();
                missileSender.networkUID = Networker.GenerateNetworkUID();
                SAMHelper.SAMmissile     = missileSender.networkUID;
                return(true);
            }
        }
        Debug.Log("Could not find a suitable missile to attach a sender to.");
        SAMHelper.SAMmissile = 0;
        return(true);
        // __state = 0;
    }
Esempio n. 2
0
    public void WeaponSet(Packet packet)
    {
        //This message has only been sent to us so no need to check UID
        List <HPInfo> hpInfos = new List <HPInfo>();
        List <int>    cm      = new List <int>();
        float         fuel    = 0.65f;

        HPEquippable lastEquippable = null;

        for (int i = 0; i < weaponManager.equipCount; i++)
        {
            lastEquippable = weaponManager.GetEquip(i);
            List <ulong> missileUIDS = new List <ulong>();
            if (lastEquippable.weaponType != HPEquippable.WeaponTypes.Gun &&
                lastEquippable.weaponType != HPEquippable.WeaponTypes.Rocket)
            {
                HPEquipMissileLauncher HPml = lastEquippable as HPEquipMissileLauncher;
                if (HPml.ml == null) //I think this could be null.
                {
                    break;
                }
                for (int j = 0; j < HPml.ml.missiles.Length; j++)
                {
                    //If they are null, they have been shot.
                    if (HPml.ml.missiles[i] == null)
                    {
                        missileUIDS.Add(0);
                        continue;
                    }

                    MissileNetworker_Sender sender = HPml.ml.missiles[i].gameObject.GetComponent <MissileNetworker_Sender>();
                    if (sender != null)
                    {
                        missileUIDS.Add(sender.networkUID);
                    }
                    else
                    {
                        Debug.LogError($"Failed to get NetworkUID for missile ({HPml.ml.missiles[i].gameObject.name})");
                    }
                }
            }

            hpInfos.Add(new HPInfo(
                            lastEquippable.gameObject.name.Replace("(Clone)", ""),
                            lastEquippable.weaponType,
                            missileUIDS.ToArray()));
        }

        for (int i = 0; i < cmManager.countermeasures.Count; i++)
        {
            cm.Add(cmManager.countermeasures[i].count);
        }

        fuel = fuelTank.fuel / fuelTank.totalFuel;

        Networker.SendP2P(Networker.hostID,
                          new Message_WeaponSet_Result(hpInfos.ToArray(), cm.ToArray(), fuel, networkUID),
                          Steamworks.EP2PSend.k_EP2PSendReliable);
    }
Esempio n. 3
0
    public static List <HPInfo> generateHpInfoListFromWeaponManager(WeaponManager weaponManager, HPInfoListGenerateNetworkType networkType, ulong networkID = 0)
    {
        List <HPInfo> hpInfos = new List <HPInfo>();
        HPEquippable  lastEquippable;

        bool playerFlag = weaponManager.actor.isPlayer;

        for (int i = 0; i < weaponManager.equipCount; i++)
        {
            //Debug.Log("Weapon Manager, Equip " + i);
            lastEquippable = weaponManager.GetEquip(i);
            if (lastEquippable == null) //If this is null, it means there isn't any weapon in that slot.
            {
                continue;
            }
            //Debug.Log("Last Equippable = " + lastEquippable.fullName);
            List <ulong> missileUIDS = new List <ulong>();
            if (lastEquippable is HPEquipMissileLauncher HPml)
            {
                //Debug.Log("This last equip is a missile launcher");
                if (HPml.ml == null)
                {
                    Debug.LogError("The Missile Launcher was null on this Missile Launcher");
                    Debug.LogError("Type was = " + lastEquippable.weaponType);
                    continue;
                }
                if (HPml.ml.missiles == null)
                {
                    Debug.LogError("The missile list is null");
                    continue;
                }
                //Debug.Log($"This has {HPml.ml.missiles.Length} missiles");
                for (int j = 0; j < HPml.ml.missiles.Length; j++)
                {
                    //There shouldn't be any shot missiles, but if so this skips them as they are null.
                    if (HPml.ml.missiles[j] == null)
                    {
                        missileUIDS.Add(0);
                        //Debug.LogError("It seems there was a missile shot as it was null");
                        continue;
                    }
                    //Debug.Log("Adding Missle Networker to missile");
                    switch (networkType)
                    {
                    case HPInfoListGenerateNetworkType.generate:
                        MissileNetworker_Sender mnSender = HPml.ml.missiles[j].gameObject.AddComponent <MissileNetworker_Sender>();
                        mnSender.networkUID = Networker.GenerateNetworkUID();
                        missileUIDS.Add(mnSender.networkUID);
                        if (playerFlag)
                        {
                            HPml.ml.missiles[j].gameObject.name = Steamworks.SteamFriends.GetPersonaName() + "'s " + HPml.ml.missiles[j].gameObject.name;
                        }
                        break;

                    case HPInfoListGenerateNetworkType.sender:
                        MissileNetworker_Sender sender = HPml.ml.missiles[j].gameObject.GetComponent <MissileNetworker_Sender>();
                        if (playerFlag)
                        {
                            HPml.ml.missiles[j].gameObject.name = Steamworks.SteamFriends.GetPersonaName() + "'s " + HPml.ml.missiles[j].gameObject.name;
                        }
                        if (sender != null)
                        {
                            missileUIDS.Add(sender.networkUID);
                        }
                        else
                        {
                            Debug.LogError($"Failed to get NetworkUID for missile ({HPml.ml.missiles[j].gameObject.name})");
                        }
                        break;

                    case HPInfoListGenerateNetworkType.receiver:
                        MissileNetworker_Receiver reciever = HPml.ml.missiles[j].gameObject.GetComponent <MissileNetworker_Receiver>();
                        if (reciever != null)
                        {
                            missileUIDS.Add(reciever.networkUID);
                        }
                        else
                        {
                            Debug.LogError($"Receiver null, Failed to get NetworkUID for missile ({HPml.ml.missiles[j].gameObject.name})");
                        }
                        break;
                    }
                }
            }
            else if (lastEquippable is HPEquipGunTurret HPm230 && networkID != 0)
            {
                switch (networkType)
                {
                case HPInfoListGenerateNetworkType.generate:
                    Debug.Log("Added m230 turret sender");
                    TurretNetworker_Sender sender = HPm230.gameObject.AddComponent <TurretNetworker_Sender>();
                    sender.networkUID = networkID;
                    sender.turret     = HPm230.GetComponent <ModuleTurret>();
                    break;

                default:
                    break;
                }
            }

            hpInfos.Add(new HPInfo(
                            lastEquippable.gameObject.name.Replace("(Clone)", ""),
                            lastEquippable.hardpointIdx,
                            lastEquippable.weaponType,
                            missileUIDS.ToArray()));
        }

        return(hpInfos);
    }
    /// <summary>
    /// Sends the message to other clients to spawn their vehicles
    /// </summary>
    /// <param name="localVehicle">The local clients gameobject</param>
    public static void SendSpawnVehicle(GameObject localVehicle, Vector3 pos, Vector3 rot, ulong UID) //Both
    {
        Debug.Log("Sending our location to spawn our vehicle");
        VTOLVehicles currentVehicle = VTOLAPI.GetPlayersVehicleEnum();

        players.Add(new Player(SteamUser.GetSteamID(), localVehicle, currentVehicle, UID));

        RigidbodyNetworker_Sender rbSender = localVehicle.AddComponent <RigidbodyNetworker_Sender>();

        rbSender.networkUID = UID;
        rbSender.spawnPos   = pos;
        rbSender.spawnRot   = rot;
        rbSender.SetSpawn();

        Debug.Log("Adding Plane Sender");
        PlaneNetworker_Sender planeSender = localVehicle.AddComponent <PlaneNetworker_Sender>();

        planeSender.networkUID = UID;

        if (currentVehicle == VTOLVehicles.AV42C || currentVehicle == VTOLVehicles.F45A)
        {
            Debug.Log("Added Tilt Updater to our vehicle");
            EngineTiltNetworker_Sender tiltSender = localVehicle.AddComponent <EngineTiltNetworker_Sender>();
            tiltSender.networkUID = UID;
        }

        if (Multiplayer.SoloTesting)
        {
            pos += new Vector3(20, 0, 0);
        }

        List <int> cm   = new List <int>();
        float      fuel = 0.65f;

        //Setting up missiles with MissileUpdate Scripts
        Debug.Log("Setting up missiles");
        WeaponManager weaponManager  = localVehicle.GetComponent <WeaponManager>();
        List <HPInfo> hpInfos        = new List <HPInfo>();
        HPEquippable  lastEquippable = null;

        for (int i = 0; i < weaponManager.equipCount; i++)
        {
            Debug.Log("Weapon Manager, Equip " + i);
            lastEquippable = weaponManager.GetEquip(i);
            if (lastEquippable == null) //If this is null, it means there isn't any weapon in that slot.
            {
                continue;
            }
            Debug.Log("Last Equippable = " + lastEquippable.fullName);
            List <ulong> missileUIDS = new List <ulong>();
            if (lastEquippable.weaponType != HPEquippable.WeaponTypes.Gun &&
                lastEquippable.weaponType != HPEquippable.WeaponTypes.Rocket)
            {
                Debug.Log("This last equip is a missile launcher");
                HPEquipMissileLauncher HPml = lastEquippable as HPEquipMissileLauncher;
                if (HPml.ml == null)
                {
                    Debug.LogError("The Missile Launcher was null on this Missile Launcher");
                    Debug.LogError("Type was = " + lastEquippable.weaponType);
                    continue;
                }
                if (HPml.ml.missiles == null)
                {
                    Debug.LogError("The missile list is null");
                    continue;
                }
                Debug.Log($"This has {HPml.ml.missiles.Length} missiles");
                for (int j = 0; j < HPml.ml.missiles.Length; j++)
                {
                    //There shouldn't be any shot missiles, but if so this skips them as they are null.
                    if (HPml.ml.missiles[j] == null)
                    {
                        missileUIDS.Add(0);
                        Debug.LogError("It seems there wa sa missile shot as it was null");
                        continue;
                    }
                    Debug.Log("Adding Missle Networker to missile");
                    MissileNetworker_Sender sender = HPml.ml.missiles[j].gameObject.AddComponent <MissileNetworker_Sender>();
                    sender.networkUID = Networker.GenerateNetworkUID();
                    missileUIDS.Add(sender.networkUID);
                }
            }

            hpInfos.Add(new HPInfo(
                            lastEquippable.gameObject.name.Replace("(Clone)", ""),
                            lastEquippable.weaponType,
                            missileUIDS.ToArray()));
        }

        //Getting Counter Measure flares.
        Debug.Log("Setting up Counter Measure");
        CountermeasureManager cmManager = localVehicle.GetComponentInChildren <CountermeasureManager>();

        for (int i = 0; i < cmManager.countermeasures.Count; i++)
        {
            cm.Add(cmManager.countermeasures[i].count);
        }

        //Getting Fuel
        if (VehicleEquipper.loadoutSet)
        {
            fuel = VehicleEquipper.loadout.normalizedFuel;
        }

        if (!Networker.isHost || Multiplayer.SoloTesting)
        {
            Networker.SendP2P(Networker.hostID,
                              new Message_SpawnVehicle(currentVehicle, new Vector3D(pos), new Vector3D(rot), SteamUser.GetSteamID().m_SteamID, UID, hpInfos.ToArray(), cm.ToArray(), fuel),
                              EP2PSend.k_EP2PSendReliable);
        }
    }