private void Awake() { aiPilot = GetComponent <AIPilot>(); autoPilot = aiPilot.autoPilot; Networker.PlaneUpdate += PlaneUpdate; Networker.WeaponSet_Result += WeaponSet_Result; Networker.Disconnecting += OnDisconnect; Networker.WeaponFiring += WeaponFiring; Networker.WeaponStoppedFiring += WeaponStoppedFiring; weaponManager = GetComponent <WeaponManager>(); if (weaponManager == null) { Debug.LogError("Weapon Manager was null on " + gameObject.name); } cmManager = GetComponentInChildren <CountermeasureManager>(); if (cmManager == null) { Debug.LogError("CountermeasureManager was null on " + gameObject.name); } fuelTank = GetComponent <FuelTank>(); if (fuelTank == null) { Debug.LogError("FuelTank was null on " + gameObject.name); } traverse = Traverse.Create(weaponManager); }
public static List <int> generateCounterMeasuresFromCmManager(CountermeasureManager cmManager) { List <int> cm = new List <int>(); for (int i = 0; i < cmManager.countermeasures.Count; i++) { cm.Add(cmManager.countermeasures[i].count); } return(cm); }
static void Postfix(CountermeasureManager __instance) { if (CustomBetty.instance.currentCommonWarnings != null) { FlightWarnings.CommonWarningsClips bettyVoiceProfile = CustomBetty.instance.currentCommonWarnings; Debug.Log("Replacing cm sounds"); __instance.chaffAnnounceClip = bettyVoiceProfile.Chaff; __instance.flareAnnounceClip = bettyVoiceProfile.Flare; } }
private void Awake() { lastMessage = new Message_PlaneUpdate(false, 0, 0, 0, 0, 0, 0, false, false, networkUID); lastFiringMessage = new Message_WeaponFiring(-1, networkUID); lastStoppedFiringMessage = new Message_WeaponStoppedFiring(networkUID); wheelsController = GetComponent <WheelsController>(); aeroController = GetComponent <AeroController>(); vRThrottle = gameObject.GetComponentInChildren <VRThrottle>(); if (vRThrottle == null) { Debug.Log("Cound't find throttle"); } else { vRThrottle.OnSetThrottle.AddListener(SetThrottle); } weaponManager = GetComponent <WeaponManager>(); if (weaponManager == null) { Debug.LogError("Weapon Manager was null on our vehicle"); } cmManager = GetComponentInChildren <CountermeasureManager>(); if (cmManager == null) { Debug.LogError("CountermeasureManager was null on our vehicle"); } fuelTank = GetComponent <FuelTank>(); if (fuelTank == null) { Debug.LogError("FuelTank was null on our vehicle"); } Networker.WeaponSet += WeaponSet; traverse = Traverse.Create(weaponManager); Debug.Log("Done Plane Sender"); }
public void Rearm() { Debug.Log("Rearm!"); GameObject vehicle = VTOLAPI.GetPlayersVehicleGameObject(); WeaponManager wm = vehicle.GetComponentInChildren <WeaponManager>(); CountermeasureManager cm = vehicle.GetComponentInChildren <CountermeasureManager>(); Message_WeaponSet_Result rearm = new Message_WeaponSet_Result( PlaneEquippableManager.generateHpInfoListFromWeaponManager(wm, PlaneEquippableManager.HPInfoListGenerateNetworkType.generate, PlayerManager.localUID).ToArray(), PlaneEquippableManager.generateCounterMeasuresFromCmManager(cm).ToArray(), PlaneEquippableManager.generateLocalFuelValue(), PlayerManager.localUID); if (Networker.isHost) { NetworkSenderThread.Instance.SendPacketAsHostToAllClients(rearm, Steamworks.EP2PSend.k_EP2PSendReliable); } else { NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, rearm, Steamworks.EP2PSend.k_EP2PSendReliable); } }
public void EquipCustomWeapons(Loadout loadout, WeaponManager wm) { triggered = true; Traverse traverse = Traverse.Create(wm); HPEquippable[] equips = (HPEquippable[])traverse.Field("equips").GetValue(); MassUpdater component = wm.vesselRB.GetComponent <MassUpdater>(); string[] hpLoadout = loadout.hpLoadout; int num = 0; Debug.Log("sLoadout\n" + loadout.hpLoadout.ToString()); // var bundle = AssetBundle.LoadFromFile(resourcePath); while (num < wm.hardpointTransforms.Length && num < hpLoadout.Length) { if (!string.IsNullOrEmpty(hpLoadout[num]) && hpLoadout[num] == "Nuke") { Debug.Log(hpLoadout[num] + " will be tried to be loaded."); GameObject missileObject = PatcherHelper.GetAssetBundle().LoadAsset <GameObject>(hpLoadout[num]); Debug.Log("Got missileObject"); //GameObject missileObject = Instantiate(@object, wm.hardpointTransforms[num]); // toCheckAgainst = wm.hardpointTransforms[num]; Debug.Log("Instantiated custom weapon."); missileObject.name = hpLoadout[num]; Debug.Log("Changed name."); missileObject.transform.localRotation = Quaternion.identity; Debug.Log("Quaternion identity."); missileObject.transform.localPosition = Vector3.zero; Debug.Log("local position."); missileObject.transform.localScale = new Vector3(20f, 20f, 20f); Debug.Log("local scale."); if (missileObject == null) { Debug.LogError("missileObject is null."); } // missileLauncher.SetParentRigidbody(rB); GameObject equipper = Instantiate(new GameObject()); GameObject edgeTransform = missileObject.transform.GetChild(0).gameObject; Nuke nuke = missileObject.AddComponent <Nuke>(); nuke.edgeTransform = edgeTransform; nuke.equipper = equipper; equipper.SetActive(true); Debug.Log("Nuke added."); nuke.init(); Debug.Log("Nuke inited."); if (equipper == null) { Debug.LogError("Equipper is null."); } if (equipper.transform.position == null) { Debug.LogError("Equipper transform posiiton null"); } if (wm.hardpointTransforms[num].position == null) { Debug.LogError("wm hardopint transforms position null"); } equipper.transform.position = wm.hardpointTransforms[num].position; Debug.Log("Equipper transform."); equipper.transform.parent = wm.hardpointTransforms[num]; Debug.Log("Equipper transform parent."); HPEquipBombRack HPEquipper = nuke.HPEquipper; Debug.Log("HPEquipper inited."); HPEquipper.SetWeaponManager(wm); Debug.Log("Weapon Manager."); equips[num] = HPEquipper; Debug.Log("equips = component."); HPEquipper.wasPurchased = true; Debug.Log("was purchased."); HPEquipper.hardpointIdx = num; Debug.Log("hardpointIDX."); HPEquipper.Equip(); Debug.Log("Equip()."); Debug.Log("Tipping nuke"); if (HPEquipper.jettisonable) { Rigidbody component3 = HPEquipper.GetComponent <Rigidbody>(); if (component3) { component3.interpolation = RigidbodyInterpolation.None; } } Debug.Log("jettisonable."); if (HPEquipper.armable) { HPEquipper.armed = true; wm.RefreshWeapon(); } Debug.Log("RefrshWeapon()."); missileObject.SetActive(true); foreach (Component component4 in HPEquipper.gameObject.GetComponentsInChildren <Component>()) { if (component4 is IParentRBDependent) { ((IParentRBDependent)component4).SetParentRigidbody(wm.vesselRB); } if (component4 is IRequiresLockingRadar) { ((IRequiresLockingRadar)component4).SetLockingRadar(wm.lockingRadar); } if (component4 is IRequiresOpticalTargeter) { ((IRequiresOpticalTargeter)component4).SetOpticalTargeter(wm.opticalTargeter); } } Debug.Log("DLZ shit"); MissileLauncher missileLauncher = nuke.missileLauncher; if (missileLauncher.missilePrefab == null) { Debug.LogError("MissilePrefab is null"); } if (missileLauncher.missilePrefab.GetComponent <Missile>() == null) { Debug.LogError("Missile not found on prefab"); } if (missileLauncher.hardpoints[0] == null) { Debug.LogError("Hardpoints null"); } missileLauncher.LoadAllMissiles(); Debug.Log(missileLauncher.missiles[0]); Debug.Log("HEY IT WORKED"); Warhead nyuk = missileLauncher.missiles[0].gameObject.AddComponent <Warhead>(); missileLauncher.missiles[0].OnDetonate = new UnityEvent(); missileLauncher.missiles[0].OnDetonate.AddListener(new UnityAction(() => { Debug.Log("Nuke is now critical."); nyuk.DoNuke(); })); missileLauncher.missiles[0].enabled = true; if (missileLauncher.missiles[0].transform == null) { Debug.LogError("Missile[0] null"); } Debug.Log("Nuke should now have teeth"); if (missileLauncher.overrideDecoupleSpeed > 0f) { missileLauncher.missiles[0].decoupleSpeed = missileLauncher.overrideDecoupleSpeed; } if (missileLauncher.overrideDecoupleDirections != null && missileLauncher.overrideDecoupleDirections.Length > 0 && missileLauncher.overrideDecoupleDirections[0] != null) { missileLauncher.missiles[0].overrideDecoupleDirTf = missileLauncher.overrideDecoupleDirections[0]; } if (missileLauncher.overrideDropTime >= 0f) { missileLauncher.missiles[0].thrustDelay = missileLauncher.overrideDropTime; } // int missileCount = missileLauncher.missileCount; /*GameObject dummyMissile = Instantiate(@object, wm.hardpointTransforms[num]); * dummyMissile.transform.localScale = new Vector3(20f, 20f, 20f); * dummyMissile.transform.eulerAngles = new Vector3(dummyMissile.transform.eulerAngles.x, dummyMissile.transform.eulerAngles.y, dummyMissile.transform.eulerAngles.z + 90f); * dummyMissile.SetActive(true);*/ missileLauncher.missiles[0].transform.localScale = new Vector3(20f, 20f, 20f); missileLauncher.missiles[0].transform.parent = equipper.transform; missileLauncher.missiles[0].transform.position = equipper.transform.position; missileLauncher.missiles[0].transform.eulerAngles = new Vector3(missileLauncher.missiles[0].transform.eulerAngles.x, missileLauncher.missiles[0].transform.eulerAngles.y, missileLauncher.missiles[0].transform.eulerAngles.z + 90f); missileLauncher.missiles[0].gameObject.SetActive(true); // Destroy(dummyMissile); Missile.LaunchEvent launchEvent = new Missile.LaunchEvent(); launchEvent.delay = 0f; launchEvent.launchEvent = new UnityEvent(); launchEvent.launchEvent.AddListener(new UnityAction(() => { Debug.Log("Launch event was called."); // dummyMissile.SetActive(false); /*Destroy(dummyMissile); */ })); missileLauncher.missiles[0].launchEvents = new List <Missile.LaunchEvent>(); missileLauncher.missiles[0].launchEvents.Add(launchEvent); toCheck = missileLauncher.missiles[0]; Debug.Log("Missiles loaded!"); } else { Debug.LogError(hpLoadout[num] + " is null or empty."); } num++; } if (wm.vesselRB) { wm.vesselRB.ResetInertiaTensor(); } Debug.Log("intertia tensor."); if (loadout.cmLoadout != null) { CountermeasureManager componentInChildren = GetComponentInChildren <CountermeasureManager>(); if (componentInChildren) { int num2 = 0; while (num2 < componentInChildren.countermeasures.Count && num2 < loadout.cmLoadout.Length) { componentInChildren.countermeasures[num2].count = Mathf.Clamp(loadout.cmLoadout[num2], 0, componentInChildren.countermeasures[num2].maxCount); componentInChildren.countermeasures[num2].UpdateCountText(); num2++; } } } traverse.Field("weaponIdx").SetValue(0); Debug.Log("weaponIDX."); wm.ToggleMasterArmed(); wm.ToggleMasterArmed(); if (wm.OnWeaponChanged != null) { wm.OnWeaponChanged.Invoke(); } component.UpdateMassObjects(); traverse.Field("rcsAddDirty").SetValue(true); // wm.ReattachWeapons(); Debug.Log("Should be working now..."); wm.RefreshWeapon(); foreach (var equip in wm.GetCombinedEquips()) { Debug.Log(equip); } }
private void Awake() { actor = gameObject.GetComponent <Actor>(); lastFiringMessage = new Message_WeaponFiring(-1, false, false, networkUID); // lastStoppedFiringMessage = new Message_WeaponStoppedFiring(networkUID); lastCountermeasureMessage = new Message_FireCountermeasure(true, true, networkUID); lastDeathMessage = new Message_Death(networkUID, false); wheelsController = GetComponent <WheelsController>(); aeroController = GetComponent <AeroController>(); isPlayer = actor.isPlayer; sequenceNumber = 0; lastMessage = new Message_PlaneUpdate(false, 0, 0, 0, 0, 0, 0, false, false, false, networkUID, sequenceNumber); engine = gameObject.GetComponentInChildren <ModuleEngine>(); if (engine == null) { Debug.Log("engine was null on vehicle " + gameObject.name); } weaponManager = GetComponent <WeaponManager>(); if (weaponManager == null) { Debug.LogError("Weapon Manager was null on vehicle " + gameObject.name); } else { traverse = Traverse.Create(weaponManager); Networker.WeaponSet += WeaponSet; //weaponManager.OnWeaponEquipped += Rearm; //weaponManager.OnWeaponUnequippedHPIdx +=Rearm; //detect player rearm PlayerVehicleSetup pv = gameObject.GetComponent <PlayerVehicleSetup>(); if (pv != null) { pv.OnEndRearming.AddListener(Rearm); } if (actor.isPlayer && weaponManager.GetIWBForEquip(3) != null) { iwb = weaponManager.GetIWBForEquip(3); } } cmManager = GetComponentInChildren <CountermeasureManager>(); if (cmManager == null) { Debug.LogError("CountermeasureManager was null on vehicle " + gameObject.name); } else { cmManager.OnFiredCM += FireCountermeasure; } fuelTank = GetComponent <FuelTank>(); if (fuelTank == null) { Debug.LogError("FuelTank was null on vehicle " + gameObject.name); } Debug.Log("Done Plane Sender"); tailhook = GetComponentInChildren <Tailhook>(); launchBar = GetComponentInChildren <CatapultHook>(); refuelPort = GetComponentInChildren <RefuelPort>(); }
private void Awake() { firstMessageReceived = false; aiPilot = GetComponent <AIPilot>(); autoPilot = aiPilot.autoPilot; aiPilot.enabled = false; Networker.PlaneUpdate += PlaneUpdate; Networker.WeaponSet_Result += WeaponSet_Result; Networker.Disconnecting += OnDisconnect; Networker.WeaponFiring += WeaponFiring; Networker.JettisonUpdate += JettisonUpdate; // Networker.WeaponStoppedFiring += WeaponStoppedFiring; Networker.FireCountermeasure += FireCountermeasure; weaponManager = GetComponent <WeaponManager>(); mostCurrentUpdateNumber = 0; if (weaponManager == null) { Debug.LogError("Weapon Manager was null on " + gameObject.name); } else { traverse = Traverse.Create(weaponManager); } foreach (var iwb in weaponManager.internalWeaponBays) { iwb.openOnAnyWeaponMatch = true; } cmManager = GetComponentInChildren <CountermeasureManager>(); if (cmManager == null) { Debug.LogError("CountermeasureManager was null on " + gameObject.name); } fuelTank = GetComponent <FuelTank>(); if (fuelTank == null) { Debug.LogError("FuelTank was null on " + gameObject.name); } ownerActor = this.GetComponentInParent <Actor>(); collidersStore = new List <int>(); //?fix gun sight jitter if (ownerActor != null) { ownerActor.flightInfo.PauseGCalculations(); //FlightSceneManager.instance.playerActor.flightInfo.OverrideRecordedAcceleration(Vector3.zero); foreach (Rigidbody rb in ownerActor.gameObject.GetComponentsInChildren <Rigidbody>()) { rb.detectCollisions = false; } foreach (Collider collider in ownerActor.gameObject.GetComponentsInChildren <Collider>()) { if (collider) { Hitbox hitbox = collider.GetComponent <Hitbox>(); if (hitbox != null) { hitbox.health.invincible = true; collidersStore.Add(collider.gameObject.layer); collider.gameObject.layer = 9; } else { collider.gameObject.layer = 9; } } } } StartCoroutine(colliderTimer()); }
/// <summary> /// When the user has received a message of spawn player vehicle, /// this creates the player vehicle and removes any thing which shouldn't /// be on it. /// </summary> /// <param name="packet">The message</param> public static void SpawnPlayerVehicle(Packet packet, CSteamID sender) //Both, but never spawns the local vehicle, only executes spawn vehicle messages from other clients { // We don't actually need the "sender" id, unless we're a client and want to check that the packet came from the host // which we're not doing right now. Message_SpawnPlayerVehicle message = (Message_SpawnPlayerVehicle)((PacketSingle)packet).message; if (message.networkID == PlayerManager.localUID) { return; } Debug.Log($"Recived a Spawn Vehicle Message from: {message.csteamID}"); CSteamID spawnerSteamId = new CSteamID(message.csteamID); if (!gameLoaded) { Debug.LogWarning("Our game isn't loaded, adding spawn vehicle to queue"); playersToSpawnQueue.Enqueue(packet); playersToSpawnIdQueue.Enqueue(sender); return; } //foreach (ulong id in spawnedVehicles) //{ // if (id == message.csteamID) // { // Debug.Log("Got a spawnedVehicle message for a vehicle we have already added! Returning...."); // return; // } //} //spawnedVehicles.Add(message.csteamID); Debug.Log("Got a new spawnVehicle uID."); if (Networker.isHost) { //Debug.Log("Generating UIDS for any missiles the new vehicle has"); for (int i = 0; i < message.hpLoadout.Length; i++) { for (int j = 0; j < message.hpLoadout[i].missileUIDS.Length; j++) { if (message.hpLoadout[i].missileUIDS[j] != 0) { //Storing the old one ulong clientsUID = message.hpLoadout[i].missileUIDS[j]; //Generating a new global UID for that missile message.hpLoadout[i].missileUIDS[j] = Networker.GenerateNetworkUID(); //Sending it back to that client NetworkSenderThread.Instance.SendPacketToSpecificPlayer(spawnerSteamId, new Message_RequestNetworkUID(clientsUID, message.hpLoadout[i].missileUIDS[j]), EP2PSend.k_EP2PSendReliable); } } } Debug.Log("Telling other clients about new player and new player about other clients. Player count = " + players.Count); for (int i = 0; i < players.Count; i++) { if (players[i].cSteamID == SteamUser.GetSteamID()) { //Debug.LogWarning("Skiping this one as it's the host"); //Send the host player to the new player. //Debug.Log($"Running host code to tell new player about host vehicle."); GameObject localVehicle = VTOLAPI.GetPlayersVehicleGameObject(); WeaponManager localWeaponManager = localVehicle.GetComponent <WeaponManager>(); List <HPInfo> hpInfos = PlaneEquippableManager.generateHpInfoListFromWeaponManager(localWeaponManager, PlaneEquippableManager.HPInfoListGenerateNetworkType.sender); CountermeasureManager cmManager = localVehicle.GetComponentInChildren <CountermeasureManager>(); List <int> cm = PlaneEquippableManager.generateCounterMeasuresFromCmManager(cmManager); float fuel = PlaneEquippableManager.generateLocalFuelValue(); NetworkSenderThread.Instance.SendPacketToSpecificPlayer(spawnerSteamId, new Message_SpawnPlayerVehicle( players[i].vehicleType, VTMapManager.WorldToGlobalPoint(players[i].vehicle.transform.position), players[i].vehicle.transform.rotation, players[i].cSteamID.m_SteamID, players[i].vehicleUID, hpInfos.ToArray(), cm.ToArray(), fuel, players[i].leftie), EP2PSend.k_EP2PSendReliable); //Debug.Log($"We have told the new player about the host and NOT the other way around."); //Debug.Log($"We don't need to resync the host weapons, that's guaranteed to already be up to date."); continue; } if (players[i].vehicle != null) { PlaneNetworker_Receiver existingPlayersPR = players[i].vehicle.GetComponent <PlaneNetworker_Receiver>(); //We first send the new player to an existing spawned in player NetworkSenderThread.Instance.SendPacketToSpecificPlayer(players[i].cSteamID, message, EP2PSend.k_EP2PSendReliable); //Then we send this current player to the new player. NetworkSenderThread.Instance.SendPacketToSpecificPlayer(spawnerSteamId, new Message_SpawnPlayerVehicle( players[i].vehicleType, VTMapManager.WorldToGlobalPoint(players[i].vehicle.transform.position), players[i].vehicle.transform.rotation, players[i].cSteamID.m_SteamID, players[i].vehicleUID, existingPlayersPR.GenerateHPInfo(), existingPlayersPR.GetCMS(), existingPlayersPR.GetFuel(), players[i].leftie), EP2PSend.k_EP2PSendReliable); //Debug.Log($"We have told {players[i].cSteamID.m_SteamID} about the new player ({message.csteamID}) and the other way round."); //We ask the existing player what their load out just incase the host's player receiver was out of sync. NetworkSenderThread.Instance.SendPacketToSpecificPlayer(players[i].cSteamID, new Message(MessageType.WeaponsSet), EP2PSend.k_EP2PSendReliable); //Debug.Log($"We have asked {players[i].cSteamID.m_SteamID} what their current weapons are, and now waiting for a responce."); // marsh typo response lmao } else { Debug.Log("players[" + i + "].vehicle is null"); } } } if (Networker.isHost) { Debug.Log("Telling connected client about AI units"); AIManager.TellClientAboutAI(spawnerSteamId); } AddToPlayerList(new Player(spawnerSteamId, null, message.vehicle, message.networkID, message.leftie)); GameObject puppet = SpawnRepresentation(message.networkID, message.position, message.rotation, message.leftie); if (puppet != null) { PlaneEquippableManager.SetLoadout(puppet, message.networkID, message.normalizedFuel, message.hpLoadout, message.cmLoadout); } }
public static void SetupLocalAircraft(GameObject localVehicle, Vector3 pos, Quaternion rot, ulong UID) { VTOLVehicles currentVehicle = VTOLAPI.GetPlayersVehicleEnum(); Actor actor = localVehicle.GetComponent <Actor>(); if (VTOLVR_Multiplayer.AIDictionaries.allActors.ContainsKey(UID)) { VTOLVR_Multiplayer.AIDictionaries.allActors[UID] = actor; } else { VTOLVR_Multiplayer.AIDictionaries.allActors.Add(UID, actor); } if (VTOLVR_Multiplayer.AIDictionaries.allActors.ContainsKey(UID)) { VTOLVR_Multiplayer.AIDictionaries.reverseAllActors[actor] = UID; } else { VTOLVR_Multiplayer.AIDictionaries.reverseAllActors.Add(actor, UID); } RigidbodyNetworker_Sender rbSender = localVehicle.AddComponent <RigidbodyNetworker_Sender>(); rbSender.networkUID = UID; //rbSender.SetSpawn(pos, rot); if (currentVehicle == VTOLVehicles.AV42C) { rbSender.originOffset = av42Offset; } 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 (actor != null) { if (actor.unitSpawn != null) { if (actor.unitSpawn.unitSpawner == null) { Debug.Log("unit spawner was null, adding one"); actor.unitSpawn.unitSpawner = actor.gameObject.AddComponent <UnitSpawner>(); } } } if (localVehicle.GetComponent <Health>() != null) { HealthNetworker_Sender healthNetworker = localVehicle.AddComponent <HealthNetworker_Sender>(); PlayerNetworker_Sender playerNetworker = localVehicle.AddComponent <PlayerNetworker_Sender>(); healthNetworker.networkUID = UID; playerNetworker.networkUID = UID; Debug.Log("added health sender to local player"); } else { Debug.Log("local player has no health?"); } if (localVehicle.GetComponentInChildren <WingFoldController>() != null) { WingFoldNetworker_Sender wingFold = localVehicle.AddComponent <WingFoldNetworker_Sender>(); wingFold.wingController = localVehicle.GetComponentInChildren <WingFoldController>().toggler; wingFold.networkUID = UID; } if (localVehicle.GetComponentInChildren <StrobeLightController>() != null) { ExtLight_Sender extLight = localVehicle.AddComponent <ExtLight_Sender>(); extLight.networkUID = UID; } if (localVehicle.GetComponentInChildren <LockingRadar>() != null) { Debug.Log($"Adding LockingRadarSender to player {localVehicle.name}"); LockingRadarNetworker_Sender radarSender = localVehicle.AddComponent <LockingRadarNetworker_Sender>(); radarSender.networkUID = UID; } if (currentVehicle == VTOLVehicles.AV42C) { AvatarManager.SetupAircraftRoundels(localVehicle.transform, currentVehicle, GetPlayerCSteamID(localUID), av42Offset); } else { AvatarManager.SetupAircraftRoundels(localVehicle.transform, currentVehicle, GetPlayerCSteamID(localUID), Vector3.zero); } if (Multiplayer.SoloTesting) { pos += new Vector3(20, 0, 0); } List <HPInfo> hpInfos = PlaneEquippableManager.generateLocalHpInfoList(UID); CountermeasureManager cmManager = localVehicle.GetComponentInChildren <CountermeasureManager>(); List <int> cm = PlaneEquippableManager.generateCounterMeasuresFromCmManager(cmManager); float fuel = PlaneEquippableManager.generateLocalFuelValue(); Debug.Log("Assembled our local vehicle"); if (!Networker.isHost || Multiplayer.SoloTesting) { // Not host, so send host the spawn vehicle message Debug.Log($"Sending spawn vehicle message to: {Networker.hostID}"); NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, new Message_SpawnPlayerVehicle(currentVehicle, new Vector3D(pos), rot, SteamUser.GetSteamID().m_SteamID, UID, hpInfos.ToArray(), cm.ToArray(), fuel, PlayerManager.teamLeftie), EP2PSend.k_EP2PSendReliable); } else { //Debug.Log("I am host, no need to immediately forward my assembled vehicle"); NetworkSenderThread.Instance.SendPacketAsHostToAllClients(new Message_SpawnPlayerVehicle(currentVehicle, new Vector3D(pos), rot, SteamUser.GetSteamID().m_SteamID, UID, hpInfos.ToArray(), cm.ToArray(), fuel, PlayerManager.teamLeftie), EP2PSend.k_EP2PSendReliable); } }
/// <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); } }