public override bool Pop(FlightComputer f) { if (BaseField != null) { try { var field = (BaseField as WrappedField); if (field == null) // we lost the Wrapped field instance, this is due to the fact that the command was loaded from a save { if (NewValue != null) { var newfield = new WrappedField(BaseField, WrappedField.KspFieldFromBaseField(BaseField)); if (newfield.NewValueFromString(NewValueString)) { newfield.Invoke(); } } } else { // invoke the field value change field.Invoke(); } if (UIPartActionController.Instance != null) { UIPartActionController.Instance.UpdateFlight(); } #if !KSP131 for (int i = 0; i < f.Vessel.parts.Count; i++) { for (int j = 0; j < f.Vessel.parts[i].Modules.Count; j++) { if (f.Vessel.parts[i].Modules[j] is ModuleRoboticServoPiston) { // stock bug: targetExtension set by player in PartActionMenu is not passed to targetPosition unlike other robotic parts like hinge var agModule = f.Vessel.parts[i].Modules[j] as ModuleRoboticServoPiston; RTUtil.SetInstanceField(typeof(ModuleRoboticServoPiston), agModule, "targetPosition", agModule.targetExtension); } } } #endif } catch (Exception invokeException) { RTLog.Notify("BaseField InvokeAction() by '{0}' with message: {1}", RTLogLevel.LVL1, this.BaseField.guiName, invokeException.Message); } } return(false); }