public override void TransmitData() { ThrowIfNotCPUVessel(); IScienceDataContainer container = module as IScienceDataContainer; ScienceData[] data = container.GetData(); List <IScienceDataTransmitter> tranList = module.vessel.FindPartModulesImplementing <IScienceDataTransmitter>(); if (tranList.Count() > 0 && data.Count() > 0) { tranList.OrderBy(ScienceUtil.GetTransmitterScore).First().TransmitData(new List <ScienceData>(data)); if (!container.IsRerunnable()) { module.SetInoperable(); } DumpData(); } else { ScreenMessages.PostScreenMessage("No transmitters available on this vessel or no data to transmit.", 4f, ScreenMessageStyle.UPPER_LEFT); } }
private void DumpData() { if (!module.rerunnable) { module.SetInoperable(); } dumpDataMethod.Invoke(module, new object[] { }); }
public void Transmit() { var data = experiment.GetData(); if (!data.Any()) { return; } var transmitters = experiment.vessel.FindPartModulesImplementing <IScienceDataTransmitter> (); if (!transmitters.Any()) { throw new InvalidOperationException("No transmitters available to transmit the data"); } transmitters.OrderBy(ScienceUtil.GetTransmitterScore).First().TransmitData(data.ToList()); if (!experiment.IsRerunnable()) { experiment.SetInoperable(); } Dump(); }
public void SaveExperiment(Vessel vessel) { if (persistentId != 0) { ModuleScienceExperiment mod = vessel.FindPartModulesImplementing <ModuleScienceExperiment>() .Where(m => (m.part.persistentId == persistentId) && (m.experimentID == experimentID)) .First(); mod.Inoperable = inoperable; if (inoperable) { mod.Deployed = true; mod.SetInoperable(); mod.DumpData(null); } else { mod.DumpData(null); mod.ResetExperiment(); } } }
private void createScienceDMagic(ModuleScienceExperiment currentExperiment, ScienceSubject currentScienceSubject, float currentScienceValue) { var scienceData = new ScienceData(currentScienceValue, currentExperiment.xmitDataScalar, 0, currentScienceSubject.id, currentScienceSubject.title); try { currentExperiment.GetType().InvokeMember("deployEvent", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreReturn | System.Reflection.BindingFlags.InvokeMethod, null, currentExperiment, null); } catch (Exception) { } if (!currentExperiment.rerunnable) { currentExperiment.SetInoperable(); GameEvents.OnExperimentDeployed.Fire(scienceData); } container.AddData(scienceData); }
protected bool isInstrumentOk() { //MerillData.log("SCIENCE! isInstrumentOk isInactive="+isInactive+" for part "+part.name); if (isInactive) { return(false); } float chance = 15 + 40f / ((((float)MerillData.instance.partNameTested.Count) / 8f) + 1); // luck? int peudoAleat = MerillData.instance.get0to99FromNotAleatTable("science_" + part.name + "_vessel_" + part.vessel.id.ToString()); print("[MERILL][Mun Rush] experiment " + part.name + " self-testing : " + peudoAleat + " ?> " + chance); isInactive = peudoAleat < chance; //Here, can send event to btsmExperiemnt, like "set inactive" "set dead" if (isInactive) { //TODO: use a field to get displaymessage (and rand to get one) //set the display to "dead" stateDisplay = "Dead"; if (scienceExperiment != null) { //MerillData.log("sciecnefail set to inoperable"); scienceExperiment.SetInoperable(); } MerillData.instance.nbPartDestroy++; if (!MerillData.instance.partNameCrashed.Contains(part.name + "_Break")) { MerillData.instance.partNameCrashed.Add(part.name + "_Break"); } if (!MerillData.instance.partNameTested.Contains(part.name + "_Break")) { MerillData.instance.partNameTested.Add(part.name + "_Break"); MerillData.instance.nbPartTested++; } //emit message //ScreenMessages.PostScreenMessage("Experiment " + part.partInfo.title.ToString() // + " is not working anymore, something britlle or delicate has fail." // , 10f, ScreenMessageStyle.UPPER_LEFT); ScreenMessages.PostScreenMessage(string.Format(MerillData.str_science_fail, part.partInfo.title.ToString()) , 10f, ScreenMessageStyle.UPPER_LEFT); //maj gui BaseEvent merillScienceEvent = Events["MERILLScienceEventDeployOrTest"]; if (merillScienceEvent != null) { merillScienceEvent.guiActive = false; } BaseAction merillScienceAction = Actions["MERILLScienceActionDeployOrTest"]; if (merillScienceAction != null) { merillScienceAction.active = false; } } //fail return(!isInactive); }