From 86c2cdd905c713e778f30d2f80be18785df1e384 Mon Sep 17 00:00:00 2001 From: ihsoft Date: Wed, 7 Mar 2018 22:31:55 -0800 Subject: [PATCH] Migrate to Utils 0.31 --- Binaries/KSPDev_Utils.0.30.dll | Bin 86016 -> 0 bytes Binaries/KSPDev_Utils.0.31.dll | Bin 0 -> 90112 bytes ...v_Utils.0.30.xml => KSPDev_Utils.0.31.xml} | 875 +++++++++++------- Source/KIS.csproj | 9 +- 4 files changed, 536 insertions(+), 348 deletions(-) delete mode 100644 Binaries/KSPDev_Utils.0.30.dll create mode 100644 Binaries/KSPDev_Utils.0.31.dll rename Binaries/{KSPDev_Utils.0.30.xml => KSPDev_Utils.0.31.xml} (90%) diff --git a/Binaries/KSPDev_Utils.0.30.dll b/Binaries/KSPDev_Utils.0.30.dll deleted file mode 100644 index 1b42c6be37faeddaea767d87fe5584a641f81097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86016 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 diff --git a/Binaries/KSPDev_Utils.0.31.dll b/Binaries/KSPDev_Utils.0.31.dll new file mode 100644 index 0000000000000000000000000000000000000000..4d85f2de9d0c17a701aad07c34bf5e2f662db879 GIT binary patch literal 90112 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%0DL4K`$z$l`$Kqexl;h;{!*@b=|1Ys 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 literal 0 HcmV?d00001 diff --git a/Binaries/KSPDev_Utils.0.30.xml b/Binaries/KSPDev_Utils.0.31.xml similarity index 90% rename from Binaries/KSPDev_Utils.0.30.xml rename to Binaries/KSPDev_Utils.0.31.xml index 2e0ea57b..a88f8ab0 100644 --- a/Binaries/KSPDev_Utils.0.30.xml +++ b/Binaries/KSPDev_Utils.0.31.xml @@ -1,7 +1,7 @@ - KSPDev_Utils.0.30 + KSPDev_Utils.0.31 @@ -282,9 +282,9 @@ It takes into account the module index, so in case of the part has multiple modules of the same type, the right module config will be returned. - Module to get config for. + The module to get config for. - Part's config to use. If omitted then part's prefab config is used. + The part's config to use. If omitted then part's prefab config is used. Either the found config node or an empty node. It's never null. @@ -492,6 +492,17 @@ + +

Transforms a URL-like string path into the nodes path. + + A list of path elements, separated by symbol "/". An empty string (no elements) addresses + the root node. + + + The array of the path components. There will be no null or empty components. + + + Reads values of the annotated persistent fields from a config file. @@ -535,19 +546,32 @@ - - Reads persistent fields from the config files specified by the class annotation. - - A type to load fields for. - An instance of type . If it's null then - only static fields will be loaded. - A group to load fields for. If null then all groups that are - defined in the class annotation via will be - loaded. + Reads the persistent fields from the URI specified by the class annotation. + The type to load the fields for. + + The instance of type . If it's null, then only the static fields + will be loaded. + + + The group to load the fields for. If null, then all the groups that are defined in the + class annotation via will be loaded. + + Reads custom type fileds from the part's config. + + The consumer code must call this method from both the OnAwake and OnLoad + methods. Depending on the game scene, the part can be either created or cloned, and the fields + initalization is different depending on the case. See the example for more details. + + The module to load the data for. + + + + + Writes values of the annotated persistent fields into a file. @@ -875,187 +899,172 @@ - A simple attribute for the fields that need (de)serialization. - - This form allows adjusting any property - in the annotation, and has a shortcut to mark a field as a collection - ( = true). - - By default the ordinal values are handled via - and the collection fields via . These proto handlers can - be changed in the annotation by assigning properties - and/or - . - - - - Below is a simple usage of the attribute. - sampleList = new List(); - - internal struct ComplexType { - [PersistentField("val1", group = "nevermind")] - public bool boolVal; - [PersistentField("val2")] - public Color colorVal; - } - - [PersistentField("my/setField", isCollection = true, group = "abc")] - private HashSet sampleSet = new HashSet(); - - void SaveConfigs() { - // Save a default group of fields: only field "sampleList" qualifies. - ConfigAccessor.WriteFieldsIntoFile("settings.cfg", instance: this); - /* The following structure in the file will be created: - * { - * my - * { - * listField: string1 - * listField: string2 - * } - * } - */ - - // Save a specific group of fields: only field "sampleSet" belongs to group "abc". - sampleSet.Add(new ComplexType() { boolVal = true, colorVal = Color.black }); - sampleSet.Add(new ComplexType() { boolVal = false, colorVal = Color.white }); - ConfigAccessor.WriteFieldsIntoFile("settings.cfg", instance: this, group: "abc"); - /* The following structure in the file will be created: - * { - * setField - * { - * val1: True - * val2: 0,0,0,1 - * } - * setField - * { - * val1: false - * val2: 1,1,1,1 - * } - * } - * } - */ - } - } - ]]> - - Note that the group is ignored in the nested types. I.e. in ComplexType in this case. - However, if ComplexType was an immediate target of the WriteFieldsIntoFile call - then the group would be considered. - - - Visibility of the annotated field is also important. The persistent field attributes are only - visible in the child class if they were public or protected in the parent. The private field - annotations are not inherited and need to be handled at the level of the declaring class. - - - - The code above implies that in a common case unsealed class should put the private fields in a - group other than default to avoid settings collision. - - - When the type of the field is different from a primitive C# type or a common Unity 4 type you - may need to provide a custom value handler to deal with (de)serializing. E.g. for an ordinary - type it may look like this: - - - - Or your custom class can implement a KSP interface , and it will be - invoked during the field saving and restoring. - - - - It's important to note that complex (a.k.a. "compound") types like this are only handled when - the field's value is not null. I.e. in the following example the value of field1 - will not be restored even if there is a node in the config file: - - A simple attribute for the fields that need (de)serialization. + + This form allows adjusting any property + in the annotation, and has a shortcut to mark a field as a collection + ( = true). + + By default the ordinal values are handled via + and the collection fields via . These proto handlers can + be changed in the annotation by assigning properties + and/or + . + + + + Below is a simple usage of the attribute. + sampleList = new List(); - [PersistentField("field2")] - public NodeCustomType field2 = new NodeCustomType(); - } - ]]> - - In case of your type is really simple, and you can serialize it into a plain string, you may - choose to implement instead. It works in a similar way but the - source/target of the persistense is a string instead of a config node. Simple types deal with - null's in a different way (read the docs for the interface). - - - If your custom type is a collection that cannot be handled by the standard proto you can provide - your own collection proto handler. Note that if you do then the annotated field will be treated - as a collection. In fact, when you set isCollection = true what actually happens is just - assigning as a collection proto handler. - - - For more examples on custom proto handlers see and - . - - - - - - KSP: IConfigNode + internal struct ComplexType { + [PersistentField("val1", group = "nevermind")] + public bool boolVal; + [PersistentField("val2")] + public Color colorVal; + } + + [PersistentField("my/setField", isCollection = true, group = "abc")] + private HashSet sampleSet = new HashSet(); + + void SaveConfigs() { + // Save a default group of fields: only field "sampleList" qualifies. + ConfigAccessor.WriteFieldsIntoFile("settings.cfg", instance: this); + /* The following structure in the file will be created: + * { + * my + * { + * listField: string1 + * listField: string2 + * } + * } + */ + + // Save a specific group of fields: only field "sampleSet" belongs to group "abc". + sampleSet.Add(new ComplexType() { boolVal = true, colorVal = Color.black }); + sampleSet.Add(new ComplexType() { boolVal = false, colorVal = Color.white }); + ConfigAccessor.WriteFieldsIntoFile("settings.cfg", instance: this, group: "abc"); + /* The following structure in the file will be created: + * { + * setField + * { + * val1: True + * val2: 0,0,0,1 + * } + * setField + * { + * val1: false + * val2: 1,1,1,1 + * } + * } + * } + */ + } + } + ]]> + + Note that the group is ignored in the nested types. I.e. in ComplexType in this case. + However, if ComplexType was an immediate target of the WriteFieldsIntoFile call + then the group would be considered. + + + Visibility of the annotated field is also important. The persistent field attributes are only + visible in the child class if they were public or protected in the parent. The private field + annotations are not inherited and need to be handled at the level of the declaring class. + + + + The code above implies that in a common case unsealed class should put the private fields in a + group other than default to avoid settings collision. + + + When the type of the field is different from a primitive C# type or a common Unity 4 type you + may need to provide a custom value handler to deal with (de)serializing. E.g. for an ordinary + type it may look like this: + + + + Or your custom class can implement a KSP interface , and it will be + invoked during the field saving and restoring. + + + + In case of your type is really simple, and you can serialize it into a plain string, you may + choose to implement instead. It works in a similar way but the + source/target of the persistense is a string instead of a config node. + + + If your custom type is a collection that cannot be handled by the standard proto you can provide + your own collection proto handler. Note that if you do then the annotated field will be treated + as a collection. In fact, when you set isCollection = true what actually happens is just + assigning as a collection proto handler. + + + For more examples on custom proto handlers see and + . + + + + + + KSP: IConfigNode @@ -1076,20 +1085,21 @@ - + Group names that have special meaning. - + A public group that can be saved/loaded on every game scene. By the contract any caller can save/load this group at any time. If the class declares the persistent fields with a specific save/load logic, then they need to have a group different from the default. + - + A public group that designates the fields that are saved/loaded during the vessel persistense. @@ -1098,6 +1108,16 @@ methods: OnSave and OnLoad. Dealing with them outside of this logic is highly discouraged. + + + + A public group for the feilds that needs to be loaded from a part config. + + It's a very special group, never deal with it directly. The consumer code is only allowed to + use this group when defining the persistent fields via annotations. + + + Helper extensions for the generic dictionary container. @@ -1329,6 +1349,42 @@ + + Utility class to help building various GUILayout controls. + + + Makes a button that fires a callback when pressed or released. + + The callabacks are only fired once for every state change, and are guarnteed to not be called + during the layout phase. The callback is called *after* the state is updated. + + The state to read and modify. + The GUI content to present as the button's caption. + The GUI style of the control. + The GUILayout options to apply to the control. + The callback to call when the button is pressed. + The callback to call when the button is released. + + + Makes a toggle control that fires a callback when teh state changes. + + + The callabacks are only fired once for every state change, and are guarnteed to not be called + during the layout phase. The callback is called *after* the state is updated. + + + The GUI.changed state is preserved by these control. I.e. if the button state has + changed, then GUI.changed will be true. Otherwise, it will retain its value + before entering the method. + + + The state to read and modify. + The GUI content to present as the button's caption. + The GUI style of the control. + The GUILayout options to apply to the control. + The callback to call when the control is checked. + The callback to call when the control is released. + Holds a mapping of a value to a localized message. Type of the key. It must be non-nullable. @@ -1411,6 +1467,12 @@ A utility class to deal with the GUI windows. + + The stock window cancels dragging when the window layout is changed. It makes it useless when + dealing with windows that can change their layout depending on the position. This method + doesn't have this drawback. Moreover, it can tell if the window is being dragged, so that the + code could postpone the layout update until the dragging is over. + @@ -1422,12 +1484,6 @@ Makes the window movable. It's an improved version of the stock GUI.DragWindow() method. - - The stock method cancels dragging when the window layout is changed. It makes it useless when - dealing with windows that can change their layout depending on the position. This method - doesn't have this drawback. Moreover, it can tell if the window is being dragged, so that the - code could postpone the layout update until the dragging is over. - The window rectangle. It must be the same instance which is passed to the GUILayout.Window method. @@ -1848,17 +1904,20 @@ Arguments for the formattign string. - A wrapper class to present simple overlay window with text. + A wrapper class to present a simple overlay window with some text. - Overlay windows doesn't have border or title. Main purpose of such windows is "hints". - I.e. short lived piece of information presented for the current context. The hint won't be shown - in UI until explicitly requsted via call to a ShowAt* method. - Keep in mind that this window contains graphics objects that will be destroyed on scene - re-loading. I.e. it must be re-created on every scene change. + The overlay windows don't have a border or title. The main purpose of such windows is + present the "hints". I.e. short a lived piece of information presented for the current context. + The hint won't be shown in UI until explicitly requsted via a call to the ShowAt* method. + + + Keep in mind that this window resources will be destroyed when the scene is re-loaded. I.e. the + hint window must be re-created on every scene change. + - In a common case initialization of the hint window is done on the game object awakening, and - it's either shown or hidden in OnGUI method. + In a common case, the initialization of the hint window is done on the game object awakening, + and it's either shown or hidden in the OnGUI method. class MyMod : MonoBehaviour { HintOverlay hint; @@ -1981,7 +2040,7 @@ - + Lingoona Grammar help @@ -2028,7 +2087,7 @@ - + Lingoona Grammar help @@ -2077,7 +2136,7 @@ - + Lingoona Grammar help @@ -2128,7 +2187,7 @@ - + Lingoona Grammar help @@ -2181,7 +2240,7 @@ - + Lingoona Grammar help @@ -2281,7 +2340,7 @@ Use it as a generic parameter when creating a descendants. - + @@ -2342,7 +2401,7 @@ - + @@ -2401,7 +2460,7 @@ - + @@ -2472,7 +2531,7 @@ - + @@ -2558,7 +2617,7 @@ - + @@ -2620,7 +2679,7 @@ Use it as a generic parameter when creating a descendants. - + @@ -2669,7 +2728,7 @@ - + @@ -2752,7 +2811,7 @@ Use it as a generic parameter when creating a descendants. - + @@ -2821,7 +2880,7 @@ - + @@ -2892,7 +2951,7 @@ - + @@ -2963,7 +3022,7 @@ - + @@ -3030,17 +3089,89 @@ A string representing the value. + + + Localized message formatting class for a numeric value that represents a velocity. The + resulted message may have a unit specification. + + + + Use it as a generic parameter when creating a descendants. + + + The class uses the unit name localizations from the stock module ModuleEnviroSensor. In + case of this module is deprecated or the tags are changed, the default English values will be + used for the unit names. + + + + + + + + + + Localized suffix for the "metre per second" units. Scale x1. + + + A wrapped numeric value. + This is the original non-rounded and unscaled value. + + + Constructs an object from a numeric value. + The numeric value in the base units. + + + + + + + Coverts a numeric value into a type object. + The numeric value to convert. + An object. + + + Converts a type object into a numeric value. + The object type to convert. + A numeric value. + + + Formats the value into a human friendly string with a unit specification. + + + The method tries to keep the resulted string meaningful and as short as possible. For this + reason the big values may be scaled down and/or rounded. + + + The base velocity unit in the game is m/s. I.e. value 1.0 in the game + units is one meter per second. Keep it in mind when passing the argument. + + + The numeric value to format. + + The specific float number format to use. If the format is not specified, then it's choosen + basing on the value. + + A formatted and localized string + + + + + Returns a string formatted as a human friendly pressure specification. + A string representing the value. + + Helper class to play sounds in the game GUI. Such sounds are not 3D aligned. Use this player when the source of the sound is a GUI object (e.g. a GUI control). This class implements all the boilerplate to load and play the sound resources. All the sounds are cached - wihtin the scene, so repeating requests to the same sound won't add extra latency. + within the scene, so repeating requests to the same sound won't add extra latency. - In case of the very first usage of the sound is latency restricted, the sound resource can be - pre-cached via the method. It will increase the loading time, though. + If latency is ciritcal for the caller, then the sound resource can be pre-cached via the + method. It will increase the scene loading time, though. This module is initialized from the KSPDev Utils loader. @@ -4091,6 +4222,15 @@ The node at the target to allign the vessel against. + + Aligns two vessels via the attach nodes. + + The source vessel is positioned and rotated so that its attach node matches the target vessel + attach node, and the nodes are "looking" at each other. + + The node of the source vessel. + The node of the traget vessel. + Places the vessel at the new position and resets the momentum on it. If the vessel had any angular velocity, it will be reset to zero. @@ -4696,90 +4836,123 @@ + + Forces the context menu of the part to refresh itself. + Use it when the GUI fields/events list is changed. + The part to refresh the menu for. + + + Add an event into a part module. + + + This method will not add the same event twice. So it's safe to call it multiple times for the + same event object. + + + The name of the event may be used by the other modules to get the event. So keeping it unique + may be needed to not break the behavior of the part. + + + The part module to add the event into. + The event object. + + + Injects an event from one part to another. + + + This method will not add the same event twice. So it's safe to call it multiple times for the + same event object. + + + The name of the event in the target part will be the same as in the original part. It may make + troubles in case of the name conflict. + + + The module that originally owns the event. + The event signature in the owner's module. + The part to inject the event into. + true if the event has been successfully injected. + + + Removes the specified event from the part module. + + It's ok if the event being removed doesn't exist on the part. The call will just silently + return. + + The part module to remove the event from. + The event to remove. + + + Removes an event that was previously injected. + + It's ok if the event being removed doesn't exist on the part. The call will just silently + return. + + The module that originally owns the event. + The event signature in the owner's module. + The part to withdraw the event from. + Set of tools to execute a delayed code. - Use these tools when code needs to be executed with some delay or at a specific moment of the - game. + Use these tools when the code needs to be executed with some delay or at the specific moment + of time. - - Delays execution of the delegate till the end of the current frame. + + Delays execution of the delegate till the end of the frame. - Caller can continue executing its logic. The delegate will be called at the end of - the frame via Unity StartCoroutine mechanism. The delegate will be called only once. + The delegate will trigger at the end of the selected frame update. + If is set to 0, then the delegate will be + called at the end of the current frame. Calling this method in the "end of frame" callback + will not schedule the callback on the next frame, the execution will just be placed at + the end of the current frame execution queue. This behavior can be used to execute a logic + that depends on some other delayed logic. In order to schedule the execution on the frame + different from the current, specify the parameter. - Unity object to run coroutine on. If this object dies then the async call will not be invoked. + The Unity object to run the coroutine on. If this object dies, then the async call will not be + invoked. - Delegate to execute. - Coroutine instance. - - Debug.LogFormat("Async call!")); - } - } - ]]> - + The delegate to execute. + The number of frames to skip. + The coroutine instance. Unity 3D: Coroutines Unity 3D: WaitForEndOfFrame + Delays execution of the delegate for the specified amount of time. - - Caller can continue executing its logic. The delegate will be called once the timeout is - expired via Unity StartCoroutine mechanism. The delegate will be called only once. - Using returned instance caller may cancel the call before the timeout expired. - + The delegate will be called when the timeout is expired. - Unity object to run coroutine on. If this object dies then the async call will not be invoked. + The Unity object to run the coroutine on. If this object dies, then the async call will not be + invoked. - Timeout in seconds. - Delegate to execute. - Coroutine instance. - - Debug.LogFormat("Async call!")); - } - } - ]]> - + The timeout in seconds. + The delegate to execute. + The coroutine instance. Unity 3D: Coroutines Unity 3D: WaitForSeconds + - + Delays execution of the delegate till the next fixed update. - Caller can continue executing its logic. The delegate will be called at the beginning of the - next fixed (physics) update via Unity StartCoroutine mechanism. The delegate will be called - only once. + The delegate will be called during the following fixed (physics) update. - Unity object to run coroutine on. If this object dies then the async call will not be invoked. + The Unity object to run the coroutine on. If this object dies, then the async call will not be + invoked. - Delegate to execute. - Coroutine instance. - - Debug.LogFormat("Async call!")); - } - } - ]]> - + The delegate to execute. + The number of fixed frames to skip. + The coroutine instance. Unity 3D: Coroutines Unity 3D: WaitForFixedUpdate + @@ -4787,84 +4960,63 @@ number of fixed frame updates. - Can be used when a particular state of the game is required to perform an action. Method - provides ability to define for how long to wait, what to do while waiting, and what to execute - when target state is reached or missed. + Can be used when the code expects some specific physical state of the game. The method + allows to define for how long to wait, what to do while waiting, and what to execute when + target state is reached or missed. - Unity object to run coroutine on. If this object dies then waiting will be aborted without - calling any callbacks. + The Unity object to run the coroutine on. If this object dies, then the async call will not be + invoked. - Number of fixed frame updates to wait before giving up. + The number of fixed frame updates to wait before giving up. - State checking function. It should return true once target state is reached. The very - first execution happens immediately, before exiting from the method. If this - this execution returned true then the successful callback is also called immediately. + The state checking function. It should return true once the target state is reached. + The very first execution happens immediately on the method call, before exiting from + the method. If this execution returns true, then the successful callback is also called + immediately. + + + The callback to execute when the state has been successfully reached. - Callback to execute when state has been successfully reached. - Callabck to execute when state has not been reached before frame update limit is exhausted. + The callabck to execute when the state has not been reached before the frame update limit is + exhausted. - Callback to execute every fixed frame update while waiting. This callabck will be called at - least once, and teh first call happens immediately. The argument tells how many frames the - method was waiting so far. For the very first call it's, obviously, zero. + The callback to execute every fixed frame update while waiting. This callabck will be called + at least once, and the first call happens immediately. The argument tells how many frames the + method was waiting so far. For the very first call it's 0. - Enumerator that can be used as coroutine target. - - --count == 0, - success: () => Debug.Log("Success!"), - failure: () => Debug.Log("Failure!"), - update: x => Debug.LogFormat("...waiting: {0}", x)); - Debug.Log("After start waiting"); - } - } - ]]> - - This example will print the following: - - - If you adjust count to 11 then the last message will be "Failure!". - + The coroutine instance. Unity 3D: Coroutines Unity 3D: WaitForFixedUpdate + + Async version of . - Number of fixed frame updates to wait before giving up. + The number of fixed frame updates to wait before giving up. - State checking function. It should return true once target state is reached. The very - first execution happens immediately, before exiting from the method. If this - this execution returned true then the successful callback is also called immediately. + The state checking function. It should return true once the target state is reached. + The very first execution happens immediately on the method call, before exiting from + the method. If this execution returns true, then the successful callback is also called + immediately. + + + The callback to execute when the state has been successfully reached. - Callback to execute when state has been successfully reached. - Callabck to execute when state has not been reached before frame update limit is exhausted. + The callabck to execute when the state has not been reached before the frame update limit is + exhausted. - Callback to execute every fixed frame update while waiting. This callabck will be called at - least once, and teh first call happens immediately. The argument tells how many frames the - method was waiting so far. For the very first call it's, obviously, zero. + The callback to execute every fixed frame update while waiting. This callabck will be called + at least once, and the first call happens immediately. The argument tells how many frames the + method was waiting so far. For the very first call it's 0. - Enumerator that can be used as a coroutine target. + The enumerator that can be used as a coroutine target. This method is useful when synchronous wait is needed within a coroutine. Instead of @@ -4928,7 +5080,7 @@ The source state to clear the tarnsitions for. - + Adds a state change event. @@ -4951,6 +5103,16 @@ is triggered before the state has actually changed. The callback's parameter is the new state, to which the machine is going to switch. + + Tells if this handler is allowed to be called when the state machine intitates from the + null state. This usually means the owning object is in process of loading its state. + Not all functionality can be availabe at this moment. + + + Tells if this handler is allowed to be called when the state machine goes into the null + state. This usually means execution of the cleanup code, and the state of the owning object + can be reduced. + @@ -5024,9 +5186,23 @@ + + Event that fires before the state machine has changed its state. + + The event is fired before the new state has been applied to the state machine and the + transition callbacks are called, but after the transition validation is done. I.e. this + event won't trigger if the transition failed due to the constraints. + + + + + Event that fires when the state machine has changed its state. - The event is fired after the actual state change. + + The event is fired after the new state has been applied to the state machine and all + the transition callbacks are handled. + @@ -5038,7 +5214,7 @@ callback has been called. - + @@ -5157,6 +5333,21 @@ The maximum distance at which the sound is hearable. An audio source object attached to the . + + Persistent type to hold bare ConfigNode. + + This type can be used if the module needs to do a run-time parsing of the values. + + + + + Copies valus from a node. + The node to copy from. + + + Copies values into the node. + The node to copy the values into. + Type to hold position and rotation of a transform. It can be serialized. diff --git a/Source/KIS.csproj b/Source/KIS.csproj index c5404ac2..bd9f60dc 100644 --- a/Source/KIS.csproj +++ b/Source/KIS.csproj @@ -40,6 +40,9 @@ Q:\KSP_Data\Managed\Assembly-CSharp-firstpass.dll False + + ..\Binaries\KSPDev_Utils.0.31.dll + @@ -80,12 +83,6 @@ - - - {01a7b80c-e283-4651-b879-3cc5efaaa1a4} - KSPDev_Utils - - IF EXIST "Q:\GameData\KIS" xcopy "$(TargetPath)" "Q:\GameData\KIS\Plugins\" /Y