/*************************************************************************************************************************/ void crew_killed_handler(EventReport report) { #if DEBUG //if (Debug_Level_1_Active) Log.PushStackInfo("FMRS_Core.crew_killed_handler", "enter crew_killed_handler(EventReport report) " + report.sender); if (Debug_Active) { Log.Info("crew member killed: " + report.sender + " rep los: " + last_rep_change.ToString()); } #endif if (HighLogic.CurrentGame.Mode != Game.Modes.CAREER) { return; } if (Kerbal_dropped.ContainsKey(report.sender)) { killed_kerbal_str killed; killed.name = report.sender; killed.rep = last_rep_change; killed.vessel_id = Kerbal_dropped[killed.name]; killed_kerbals.Add(killed); #if DEBUG if (Debug_Active) { Log.Info("" + report.sender + " was in dropped stage"); } #endif } #if DEBUG //if (Debug_Level_1_Active) Log.PopStackInfo("leave crew_killed_handler(EventReport report)"); #endif }
/*************************************************************************************************************************/ void crew_killed_handler(EventReport report) { Log.PushStackInfo("FMRS_Core.crew_killed_handler", "enter crew_killed_handler(EventReport report) {0}", report.sender); Log.dbg("crew member killed: {0} rep los: {1}", report.sender, last_rep_change); if (HighLogic.CurrentGame.Mode != Game.Modes.CAREER) { return; } if (Kerbal_dropped.ContainsKey(report.sender)) { killed_kerbal_str killed; killed.name = report.sender; killed.rep = last_rep_change; killed.vessel_id = Kerbal_dropped[killed.name]; killed_kerbals.Add(killed); Log.dbg("{0} was in dropped stage", report.sender); } Log.PopStackInfo("leave crew_killed_handler(EventReport report)"); }
/*************************************************************************************************************************/ public bool search_for_new_vessels(string save_file_name) { bool new_vessel_found = false, controllable = false; Log.PushStackInfo("FMRS_Core.search_for_new_vessels(string)", "entering search_for_new_vessels(string save_file_name) {0}", save_file_name); foreach (Vessel temp_vessel in FlightGlobals.Vessels) { controllable = false; //Check if the stage was claimed by another mod or by this mod string controllingMod = RecoveryControllerWrapper.ControllingMod(temp_vessel); bool FMRSIsControllingMod = false; if (controllingMod != null) { Log.info("RecoveryControllerWrapper.ControllingMod for vessel: {0} : {1}", temp_vessel.name, controllingMod); FMRSIsControllingMod = string.Equals(controllingMod, "FMRS", StringComparison.OrdinalIgnoreCase); } if (controllingMod == null || string.Equals(controllingMod, "auto", StringComparison.OrdinalIgnoreCase) || FMRSIsControllingMod) { if (!Vessels.Contains(temp_vessel.id)) { if (FMRSIsControllingMod || ( ((temp_vessel.isCommandable && temp_vessel.IsControllable) || (_SETTING_Control_Uncontrollable && controllingMod == null)) && temp_vessel.vesselType != VesselType.EVA && temp_vessel.vesselType != VesselType.Flag && temp_vessel.vesselType != VesselType.SpaceObject && temp_vessel.vesselType != VesselType.Unknown ) ) { controllable = true; } else { foreach (ProtoPartSnapshot proto_part in temp_vessel.protoVessel.protoPartSnapshots) { List <ProtoPartModuleSnapshot> proto_modules = proto_part.modules; ProtoPartModuleSnapshot module = null; if (proto_modules != null && (_SETTING_Parachutes && ((controllingMod != null && string.Equals(controllingMod, "FMRS", StringComparison.OrdinalIgnoreCase)) || !_SETTING_Defer_Parachutes_to_StageRecovery || !stageRecoveryInstalled) ) ) { // module = proto_part.modules.Find(p => p.moduleName == "RealChuteModule" || p.moduleName == "ModuleParachute" || p.moduleName == "ModuleKrKerbalParachute" || p.moduleName == "RealChuteFAR"); if (module != null) { controllable = true; } } if (proto_part.protoCrewNames.Count > 0) { controllable = true; } } } foreach (Part p in temp_vessel.Parts) { foreach (PartModule pm in p.Modules) { if (pm.moduleName == "FMRS_PM") { if ((pm as FMRS_PM).parent_vessel != "00000000-0000-0000-0000-000000000000") { controllable = false; break; } } } break; } if (controllable) { Log.dbg("{0} Found and will be added to the dicts", temp_vessel.vesselName); Vessels_dropped.Add(temp_vessel.id, save_file_name); Vessels_dropped_names.Add(temp_vessel.id, temp_vessel.vesselName); Vessel_State.Add(temp_vessel.id, vesselstate.FLY); foreach (Part p in temp_vessel.Parts) { foreach (PartModule pm in p.Modules) { if (pm.moduleName == "FMRS_PM") { pm.StartCoroutine("setid"); } } } foreach (ProtoPartSnapshot part_snapshot in temp_vessel.protoVessel.protoPartSnapshots) { foreach (ProtoCrewMember member in part_snapshot.protoModuleCrew) { if (!Kerbal_dropped.ContainsKey(member.name)) { Kerbal_dropped.Add(member.name, temp_vessel.id); } } } new_vessel_found = true; } Vessels.Add(temp_vessel.id); } } } Log.PopStackInfo("leaving search_for_new_vessels(string save_file_name)"); return(new_vessel_found); }
/*************************************************************************************************************************/ public bool search_for_new_vessels(string save_file_name) { bool new_vessel_found = false, controllable = false; #if DEBUG // if (Debug_Level_1_Active) Log.PushStackInfo("FMRS_Core.search_for_new_vessels(string)", "entering search_for_new_vessels(string save_file_name) " + save_file_name); #endif foreach (Vessel temp_vessel in FlightGlobals.Vessels) { controllable = false; if (!Vessels.Contains(temp_vessel.id)) { if (temp_vessel.isCommandable && temp_vessel.IsControllable && temp_vessel.vesselType != VesselType.EVA && temp_vessel.vesselType != VesselType.Flag && temp_vessel.vesselType != VesselType.SpaceObject && temp_vessel.vesselType != VesselType.Unknown) { controllable = true; } else { foreach (ProtoPartSnapshot proto_part in temp_vessel.protoVessel.protoPartSnapshots) { List <ProtoPartModuleSnapshot> proto_modules = proto_part.modules; ProtoPartModuleSnapshot module = null; if (proto_modules != null && (_SETTING_Parachutes && (!_SETTING_Defer_Parachutes_to_StageRecovery || !stageRecoveryInstalled))) { // module = proto_part.modules.Find(p => p.moduleName == "RealChuteModule" || p.moduleName == "ModuleParachute" || p.moduleName == "ModuleKrKerbalParachute" || p.moduleName == "RealChuteFAR"); if (module != null) { controllable = true; } } if (proto_part.protoCrewNames.Count > 0) { controllable = true; } } } foreach (Part p in temp_vessel.Parts) { foreach (PartModule pm in p.Modules) { if (pm.moduleName == "FMRS_PM") { if ((pm as FMRS_PM).parent_vessel != "00000000-0000-0000-0000-000000000000") { controllable = false; break; } } } break; } if (controllable) { #if DEBUG if (Debug_Active) { Log.Info("" + temp_vessel.vesselName + " Found and will be added to the dicts"); } #endif Vessels_dropped.Add(temp_vessel.id, save_file_name); Vessels_dropped_names.Add(temp_vessel.id, temp_vessel.vesselName); Vessel_State.Add(temp_vessel.id, vesselstate.FLY); foreach (Part p in temp_vessel.Parts) { foreach (PartModule pm in p.Modules) { if (pm.moduleName == "FMRS_PM") { pm.StartCoroutine("setid"); } } } foreach (ProtoPartSnapshot part_snapshot in temp_vessel.protoVessel.protoPartSnapshots) { foreach (ProtoCrewMember member in part_snapshot.protoModuleCrew) { if (!Kerbal_dropped.ContainsKey(member.name)) { Kerbal_dropped.Add(member.name, temp_vessel.id); } } } new_vessel_found = true; } Vessels.Add(temp_vessel.id); } } #if DEBUG // if (Debug_Level_1_Active) Log.PopStackInfo("leaving search_for_new_vessels(string save_file_name)"); #endif return(new_vessel_found); }