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; }
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); }
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); } }