public void SendVesselResources(Vessel vessel) { var msgData = NetworkMain.CliMsgFactory.CreateNewMessageData <VesselResourceMsgData>(); msgData.VesselId = vessel.id; var resourcesCount = GetResourcesCount(vessel); if (resourcesCount == 0) { return; //No need to send msg if there's no resources in the vessel } msgData.ResourcesCount = resourcesCount; if (_resources.Length < resourcesCount) { _resources = new VesselResourceInfo[resourcesCount]; } var resourceIndex = 0; for (var i = 0; i < vessel.Parts.Count; i++) { for (var j = 0; j < vessel.Parts[i].Resources.Count; j++) { if (_resources[resourceIndex] == null) { _resources[resourceIndex] = new VesselResourceInfo(); } _resources[resourceIndex].ResourceName = vessel.Parts[i].Resources[j].resourceName; _resources[resourceIndex].PartFlightId = vessel.Parts[i].flightID; _resources[resourceIndex].Amount = vessel.Parts[i].Resources[j].amount; resourceIndex++; } } if (msgData.Resources.Length < resourcesCount) { msgData.Resources = new VesselResourceInfo[resourcesCount]; } Array.Copy(_resources, msgData.Resources, resourcesCount); //Update our own values in the store aswell as otherwise if we leave the vessel it can still be in the safety bubble VesselsProtoStore.UpdateVesselProtoResources(msgData); SendMessage(msgData); }
public void HandleMessage(IServerMessageBase msg) { if (!(msg.Data is VesselResourceMsgData msgData)) { return; } //Vessel might exist in the store but not in game (if the vessel is in safety bubble for example) VesselsProtoStore.UpdateVesselProtoResources(msgData); var vessel = FlightGlobals.FindVessel(msgData.VesselId); if (vessel == null) { return; } UpdateProtoVesselResources(vessel.protoVessel, msgData); }