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 bool Prefix(HPEquippable equip) { if (VTOLAPI.currentScene == VTOLScenes.VehicleConfiguration) { if (!Multiplayer._instance.buttonMade) { Multiplayer.CreateVehicleButton(); } } return(true); }
private bool HasDroptanks() { for (int i = 0; i < ai.wm.equipCount; i++) { HPEquippable equip = ai.wm.GetEquip(i); if (equip && equip is HPEquipDropTank) { return(true); } } return(false); }
public HPInfo[] GenerateHPInfo() { if (!Networker.isHost) { Debug.LogError("Generate HPInfo was ran from a player which isn't the host."); return(null); } List <HPInfo> hpInfos = new List <HPInfo>(); 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_Receiver reciever = HPml.ml.missiles[i].gameObject.GetComponent <MissileNetworker_Receiver>(); if (reciever != null) { missileUIDS.Add(reciever.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())); } return(hpInfos.ToArray()); }
public static bool Prefix(WeaponManager __instance) { if (PlaneNetworker_Receiver.dontPrefixNextJettison) { PlaneNetworker_Receiver.dontPrefixNextJettison = false; return(true); } List <int> toJettison = new List <int>(); Traverse traverse; Message_JettisonUpdate lastMesage; if (__instance.actor == null) { return(false); } else if (VTOLVR_Multiplayer.AIDictionaries.reverseAllActors.TryGetValue(__instance.actor, out ulong networkUID)) { traverse = Traverse.Create(__instance); for (int i = 0; i < 30; i++) { HPEquippable equip = __instance.GetEquip(i); if (equip != null) { if (equip.markedForJettison) { toJettison.Add(equip.hardpointIdx); } } } if (toJettison.Count == 0) { Debug.Log("Tried to jettison nothing, not doing it"); return(true); } lastMesage = new Message_JettisonUpdate(toJettison.ToArray(), networkUID); if (Networker.isHost) { NetworkSenderThread.Instance.SendPacketAsHostToAllClients(lastMesage, Steamworks.EP2PSend.k_EP2PSendUnreliable); } else { NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, lastMesage, Steamworks.EP2PSend.k_EP2PSendUnreliable); } } else { Debug.LogError($"{networkUID} not found in AIDictionaries for jettison messsage to send."); } return(true); }
private void JettisonUpdate(Packet packet) { Message_JettisonUpdate message = ((PacketSingle)packet).message as Message_JettisonUpdate; if (message.networkUID != networkUID) { return; } if (message.toJettison == null) { Debug.LogError("Why did we get a jettison message that want's to jettison nothing?"); return; } foreach (var idx in message.toJettison) { HPEquippable equip = weaponManager.GetEquip(idx); if (equip != null) { equip.markedForJettison = true; } } dontPrefixNextJettison = true; weaponManager.JettisonMarkedItems(); }
public static void SetLoadout(GameObject vehicle, ulong networkID, float fuel, HPInfo[] hpLoadout, int[] cmLoadout) { int playerIDX = PlayerManager.GetPlayerIDFromCSteamID(new CSteamID(networkID)); bool playerFlag = false; string playerName = ""; if (playerIDX != -1) { playerFlag = true; } if (playerFlag) { playerName = PlayerManager.players[playerIDX].nameTag + "'s "; } WeaponManager weaponManager = vehicle.GetComponent <WeaponManager>(); if (weaponManager == null) { Debug.LogError("Failed to get weapon manager on " + vehicle.name); } string[] hpLoadoutNames = new string[30]; //Debug.Log("foreach var equip in message.hpLoadout"); int debugInteger = 0; foreach (var equip in hpLoadout) { Debug.Log(debugInteger); hpLoadoutNames[equip.hpIdx] = equip.hpName; debugInteger++; } Loadout loadout = new Loadout(); loadout.normalizedFuel = fuel; loadout.hpLoadout = hpLoadoutNames; loadout.cmLoadout = cmLoadout; weaponManager.EquipWeapons(loadout); weaponManager.RefreshWeapon(); //Debug.Log("Refreshed this weapon manager's weapons."); MissileNetworker_Receiver lastReciever; for (int i = 0; i < 30; i++) { int uIDidx = 0; HPEquippable equip = weaponManager.GetEquip(i); if (equip is HPEquipMissileLauncher) { //Debug.Log(equip.name + " is a missile launcher"); HPEquipMissileLauncher hpML = equip as HPEquipMissileLauncher; //Debug.Log("This missile launcher has " + hpML.ml.missiles.Length + " missiles."); for (int j = 0; j < hpML.ml.missiles.Length; j++) { //Debug.Log("Adding missile reciever"); lastReciever = hpML.ml.missiles[j].gameObject.AddComponent <MissileNetworker_Receiver>(); lastReciever.thisMissile = hpML.ml.missiles[j]; foreach (var thingy in hpLoadout) // it's a loop... because f**k you! { //Debug.Log("Try adding missile reciever uID"); if (equip.hardpointIdx == thingy.hpIdx) { if (uIDidx < thingy.missileUIDS.Length) { lastReciever.networkUID = thingy.missileUIDS[uIDidx]; Debug.Log($"Missile ({lastReciever.gameObject.name}) has received their UID from the host. \n Missiles UID = {lastReciever.networkUID}"); lastReciever.thisML = hpML.ml; if (playerFlag) { lastReciever.gameObject.name = playerName + lastReciever.gameObject.name; } lastReciever.idx = j; uIDidx++; } } } } } else if (equip is HPEquipGunTurret) { TurretNetworker_Receiver reciever = equip.gameObject.AddComponent <TurretNetworker_Receiver>(); reciever.networkUID = networkID; reciever.turret = equip.GetComponent <ModuleTurret>(); equip.enabled = false; Debug.Log("Added m230 turret reciever"); } } FuelTank fuelTank = vehicle.GetComponent <FuelTank>(); if (fuelTank == null) { Debug.LogError("Failed to get fuel tank on " + vehicle.name); } fuelTank.startingFuel = loadout.normalizedFuel * fuelTank.maxFuel; fuelTank.SetNormFuel(loadout.normalizedFuel); }
public void Rearm(HPEquippable hpEquip) { Rearm(); }
public static bool Prefix(HPEquippable equip) { if (PilotSaveManager.currentScenario.equipConfigurable == false) { return(true); } if (!AEAT.buttonMade && VTOLAPI.currentScene == VTOLScenes.VehicleConfiguration) { foreach (var controller in GameObject.FindObjectsOfType <VRHandController>()) { if (!controller.isLeft) { GameObject button = GameObject.Instantiate(GameObject.Find("RecenterCanvas")); button.transform.SetParent(controller.transform); button.transform.localPosition = new Vector3(0.101411f, 0.02100047f, -0.128024f); button.transform.localRotation = Quaternion.Euler(-5.834f, 283.583f, 328.957f); button.transform.localScale = new Vector3(button.transform.localScale.x * -1, button.transform.localScale.y * -1, button.transform.localScale.z); VRInteractable bInteractable = button.GetComponentInChildren <VRInteractable>(); Text text = button.GetComponentInChildren <Text>(); text.transform.localScale = text.transform.localScale * 0.75f; AEAT.path = VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <WeaponManager>().resourcePath.ToLower(); AEAT.path = AEAT.path.Remove(0, 9); text.text = "A.E.A.T. Super Menu"; bInteractable.interactableName = "Switch vehicle weapons\n (Current Weapons: " + AEAT.path + ")"; bInteractable.OnInteract = new UnityEngine.Events.UnityEvent(); bInteractable.transform.localPosition = new Vector3(-141f, -62f, -3f); Transform roundButtonBase1 = bInteractable.transform.parent.Find("roundButtonBase"); roundButtonBase1.localPosition = new Vector3(-141f, -62f, -3f); LoadoutConfigurator config = Resources.FindObjectsOfTypeAll <LoadoutConfigurator>()[0]; VehicleConfigSceneSetup setup = Resources.FindObjectsOfTypeAll <VehicleConfigSceneSetup>()[0]; Traverse setupHelper = Traverse.Create(setup); bInteractable.OnInteract.AddListener(delegate { if (config == null) { config = Resources.FindObjectsOfTypeAll <LoadoutConfigurator>()[0]; } switch (AEAT.path.ToLower()) { case "abomber": AEAT.path = "afighter"; break; case "afighter": AEAT.path = "asf-30"; break; case "asf-30": AEAT.path = "asf-33"; break; case "asf-33": AEAT.path = "ebomber"; break; case "ebomber": AEAT.path = "eucav"; break; case "eucav": AEAT.path = "f45a"; break; case "f45a": AEAT.path = "gav-25"; break; case "gav-25": AEAT.path = "j4"; break; case "j4": AEAT.path = "mq-31"; break; case "mq-31": AEAT.path = "vtol"; break; case "vtol": AEAT.path = "abomber"; break; default: Debug.LogWarning("Uncaught case in vehicle switcher: " + AEAT.path); AEAT.path = "vtol"; break; } //text.text = "Weapons: " + AEAT.path; bInteractable.interactableName = "Switch vehicle weapons\n (Current Weapons: " + AEAT.path + ")"; Debug.Log(AEAT.path + " is AEAT.path"); //Debug.Log(text.text + " is weapons text"); VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <WeaponManager>().resourcePath = "hpequips/" + AEAT.path; config.wm.resourcePath = VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <WeaponManager>().resourcePath; Debug.Log(AEAT.path); PilotSaveManager.currentVehicle.equipsResourcePath = "hpequips/" + AEAT.path; List <string> marsh = new List <string>(); List <GameObject> ketkev = new List <GameObject>(); Dictionary <string, EqInfo> lol = new Dictionary <string, EqInfo>(); foreach (var gameobject in Resources.LoadAll <GameObject>("hpequips/" + AEAT.path)) { if (!AllowedEquips.allowedEquips.Contains(gameobject.name)) { Debug.Log("Unauthorized gameobject " + gameobject.name); continue; } marsh.Add(gameobject.name); ketkev.Add(gameobject); } config.availableEquipStrings = marsh; PilotSaveManager.currentVehicle.allEquipPrefabs = ketkev; Traverse.Create(config).Field("unlockedWeaponPrefabs").SetValue(new Dictionary <string, EqInfo>()); Traverse.Create(config).Field("allWeaponPrefabs").SetValue(new Dictionary <string, EqInfo>()); config.lockedHardpoints = new List <int>(); // making sure all hardpoints are unlocked for (int i = 0; i < config.wm.hardpointTransforms.Length; i++) { config.Detach(i); } config.Initialize(PilotSaveManager.current.GetVehicleSave(PilotSaveManager.currentVehicle.vehicleName).GetCampaignSave(PilotSaveManager.currentCampaign.campaignID), false); if (config.fullInfo != null) { config.fullInfo.CloseInfo(); } }); Debug.Log("Made right hand bottom button."); button = GameObject.Instantiate(bInteractable.gameObject, bInteractable.transform.parent); Debug.Log("Current vehicle name is " + PilotSaveManager.currentVehicle.name); button.transform.localPosition = new Vector3(147f, -62f, -3f); VRInteractable bInteractable2 = button.GetComponent <VRInteractable>(); //Text text2 = button.GetComponentInChildren<Text>(); //text2.transform.localScale = text2.transform.localScale * 0.75f; //text2.text = PilotSaveManager.currentVehicle.name; bInteractable2.interactableName = "Switch Vehicles"; bInteractable2.OnInteract = new UnityEvent(); foreach (var vehicle in VTResources.GetPlayerVehicles()) { Debug.Log(vehicle.name); Debug.Log(vehicle.vehicleName); } bInteractable2.OnInteract.AddListener(delegate { if (PilotSaveManager.currentVehicle.name == "AV-42C") { PilotSaveManager.currentVehicle = VTResources.GetPlayerVehicle("F/A-26B"); } else if (PilotSaveManager.currentVehicle.name == "FA-26B") { PilotSaveManager.currentVehicle = VTResources.GetPlayerVehicle("F-45A"); } else { PilotSaveManager.currentVehicle = VTResources.GetPlayerVehicle("AV-42C"); } //text2.text = PilotSaveManager.currentVehicle.vehicleName; AEAT.selectedVehicle = PilotSaveManager.currentVehicle; if (VTOLAPI.currentScene == VTOLScenes.VehicleConfiguration) { AEAT.buttonMade = false; Debug.Log("Resetting up scene."); SceneManager.LoadScene("VehicleConfiguration"); } }); Transform bigButton2 = GameObject.Instantiate(roundButtonBase1, roundButtonBase1.parent); bigButton2.localPosition = bInteractable2.transform.localPosition; AEAT.trueSave = PilotSaveManager.current.GetVehicleSave(PilotSaveManager.currentVehicle.vehicleName).GetCampaignSave(PilotSaveManager.currentCampaign.campaignID); Debug.Log("Made right hand top button, and true save's id is " + AEAT.trueSave.campaignID); break; } } AEAT.buttonMade = true; } equip.allowedHardpoints = "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30"; equip.unitCost = 0f; return(true); }
/// <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); } }