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()); }
private void SamUpdate(Packet packet) { if (samLauncher.lockingRadars == null) { List <LockingRadar> lockingRadars = new List <LockingRadar>(); Actor lastActor; foreach (var uID in radarUIDS) { Debug.Log($"Try adding uID {uID} to SAM's radars."); if (VTOLVR_Multiplayer.AIDictionaries.allActors.TryGetValue(uID, out lastActor)) { Debug.Log("Got the actor."); foreach (var radar in lastActor.gameObject.GetComponentsInChildren <LockingRadar>()) { lockingRadars.Add(radar); Debug.Log("Added radar to a sam launcher!"); } } else { Debug.LogError($"Could not resolve actor from uID {uID}."); } } samLauncher.lockingRadars = lockingRadars.ToArray(); } lastMessage = (Message_SamUpdate)((PacketSingle)packet).message; if (lastMessage.senderUID != networkUID) { return; } Debug.Log("Got a sam update message."); if (VTOLVR_Multiplayer.AIDictionaries.allActors.TryGetValue(lastMessage.actorUID, out lastActor)) { foreach (var radar in samLauncher.lockingRadars) { Debug.Log("Found a suitable radar for this sam."); radar.ForceLock(lastActor, out lastData); if (lastData.locked) { Debug.Log("Beginning sam launch routine for reciever."); int j = 0; Missile[] missiles = (Missile[])Traverse.Create(samLauncher).Field("missiles").GetValue(); for (int i = 0; i < missiles.Length; i++) { if (missiles[i] != null) { Debug.Log("Found a suitable missile to attach a reciever to."); MissileNetworker_Receiver missileReciever = missiles[i].gameObject.AddComponent <MissileNetworker_Receiver>(); missileReciever.networkUID = lastMessage.missileUID; Debug.Log($"Made new missile receiver with uID {missileReciever.networkUID}"); break; } } Debug.Log("Firing sam."); samLauncher.FireMissile(lastData); /*Missile missile = (Missile)Traverse.Create(samLauncher).Field("firedMissile").GetValue(); * MissileNetworker_Receiver reciever = missile.gameObject.AddComponent<MissileNetworker_Receiver>(); * reciever.networkUID = lastMessage.missileUID;*/ return; } else { Debug.Log("Couldn't force a lock, trying with another radar."); } } } else { Debug.Log($"Could not resolve lock for sam {networkUID}."); } }
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); }