diff --git a/BepinexPackages/Subnautica_Packages/QModManager/QModManager/Bepinex/patchers/QModManager/QModManager.QModPluginGenerator.dll b/BepinexPackages/Subnautica_Packages/QModManager/QModManager/Bepinex/patchers/QModManager/QModManager.QModPluginGenerator.dll index f846a9ea..d94617ad 100644 Binary files a/BepinexPackages/Subnautica_Packages/QModManager/QModManager/Bepinex/patchers/QModManager/QModManager.QModPluginGenerator.dll and b/BepinexPackages/Subnautica_Packages/QModManager/QModManager/Bepinex/patchers/QModManager/QModManager.QModPluginGenerator.dll differ diff --git a/BepinexPackages/Subnautica_Packages/QModManager/QModManager/Bepinex/plugins/QModManager/QModInstaller.dll b/BepinexPackages/Subnautica_Packages/QModManager/QModManager/Bepinex/plugins/QModManager/QModInstaller.dll index 4c361013..bf5ecfbc 100644 Binary files a/BepinexPackages/Subnautica_Packages/QModManager/QModManager/Bepinex/plugins/QModManager/QModInstaller.dll and b/BepinexPackages/Subnautica_Packages/QModManager/QModManager/Bepinex/plugins/QModManager/QModInstaller.dll differ diff --git a/BepinexPackages/Subnautica_Packages/QModManager_Subnautica.zip b/BepinexPackages/Subnautica_Packages/QModManager_Subnautica.zip index de0f4e3b..85d4f6b4 100644 Binary files a/BepinexPackages/Subnautica_Packages/QModManager_Subnautica.zip and b/BepinexPackages/Subnautica_Packages/QModManager_Subnautica.zip differ diff --git a/Dependencies/BepInEx/BepInEx/config/MirrorInternalLogs.cfg b/Dependencies/BepInEx/BepInEx/config/MirrorInternalLogs.cfg deleted file mode 100644 index a2005466..00000000 --- a/Dependencies/BepInEx/BepInEx/config/MirrorInternalLogs.cfg +++ /dev/null @@ -1,28 +0,0 @@ -[Logging.File] - -## Enables logging to file -# Setting type: Boolean -# Default value: true -Enabled = true - -## Path to the generated log file. If path contains directories, the directories are created automatically. -## The string supports templated inside curly brackets like "log_{timestamp}.log" -## -## Supported template variables: -## timestamp - unix timestamp -## process - process name -## -# Setting type: String -# Default value: unity_log.txt -Path = qmodmanager_log-{process}.txt - -## Format for log messages. Accepts same input as String.Format. -## Available parameters: -## 0 - Log level as reported by unity -## 1 - The actual log message -## 2 - Current timestamp as DateTime object -## -# Setting type: String -# Default value: [{0}] {1} -LogFormat = {1} - diff --git a/Dependencies/BepInEx/BepInEx/core/0Harmony.dll b/Dependencies/BepInEx/BepInEx/core/0Harmony.dll deleted file mode 100644 index 1020cf34..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/0Harmony.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/0Harmony.xml b/Dependencies/BepInEx/BepInEx/core/0Harmony.xml deleted file mode 100644 index fb272027..00000000 --- a/Dependencies/BepInEx/BepInEx/core/0Harmony.xml +++ /dev/null @@ -1,4148 +0,0 @@ - - - - 0Harmony - - - - A factory to create delegate types - - - - Instance for the delegate type factory - - - Exists for API compatibility with Harmony - - - - - Creates a delegate type for a method - - Type of the return value - Types of the arguments - The new delegate type for the given type info - - - - Creates a delegate type for a method - - Type of the return value - Types of the arguments - Calling convention. If specified, adds to the delegate type - The new delegate type for the given type info - - - Creates a delegate type for a method - The method - The new delegate type - - - Creates a delegate type for a method - The method - Calling convention. If specified, adds to the delegate type. - The new delegate type - - - A getter delegate type - Type that getter gets field/property value from - Type of the value that getter gets - The instance get getter uses - An delegate - - - - A setter delegate type - Type that setter sets field/property value for - Type of the value that setter sets - The instance the setter uses - The value the setter uses - An delegate - - - - A constructor delegate type - Type that constructor creates - An delegate - - - - A helper class for fast access to getters and setters - - - Creates an instantiation delegate - Type that constructor creates - The new instantiation delegate - - - - Creates an getter delegate for a property - Type that getter reads property from - Type of the property that gets accessed - The property - The new getter delegate - - - - Creates an getter delegate for a field - Type that getter reads field from - Type of the field that gets accessed - The field - The new getter delegate - - - - Creates an getter delegate for a field (with a list of possible field names) - Type that getter reads field/property from - Type of the field/property that gets accessed - A list of possible field names - The new getter delegate - - - - Creates an setter delegate - Type that setter assigns property value to - Type of the property that gets assigned - The property - The new setter delegate - - - - Creates an setter delegate for a field - Type that setter assigns field value to - Type of the field that gets assigned - The field - The new getter delegate - - - - A delegate to invoke a method - The instance - The method parameters - The method result - - - A helper class to invoke method with delegates - - - Creates a fast invocation handler from a method - The method to invoke - Controls if boxed value object is accessed/updated directly - The - - - The directBoxValueAccess option controls how value types passed by reference (e.g. ref int, out my_struct) are handled in the arguments array - passed to the fast invocation handler. - Since the arguments array is an object array, any value types contained within it are actually references to a boxed value object. - Like any other object, there can be other references to such boxed value objects, other than the reference within the arguments array. - For example, - - var val = 5; - var box = (object)val; - var arr = new object[] { box }; - handler(arr); // for a method with parameter signature: ref/out/in int - - - - - If directBoxValueAccess is true, the boxed value object is accessed (and potentially updated) directly when the handler is called, - such that all references to the boxed object reflect the potentially updated value. - In the above example, if the method associated with the handler updates the passed (boxed) value to 10, both box and arr[0] - now reflect the value 10. Note that the original val is not updated, since boxing always copies the value into the new boxed value object. - - - If directBoxValueAccess is false (default), the boxed value object in the arguments array is replaced with a "reboxed" value object, - such that potential updates to the value are reflected only in the arguments array. - In the above example, if the method associated with the handler updates the passed (boxed) value to 10, only arr[0] now reflects the value 10. - - - - - Patch function helpers - - - Sorts patch methods by their priority rules - The original method - Patches to sort - Use debug mode - The sorted patch methods - - - - Sorts patch methods by their priority rules - The original method - Patches to sort - Use debug mode - The sorted patch methods - - - - Creates new replacement method with the latest patches and detours the original method - The original method - Information describing the patches - The newly created replacement method - - - - - High-level IL code manipulator for MonoMod that allows to manipulate a method as a stream of CodeInstructions. - - - - - Initialize IL transpiler - - Body of the method to transpile - Whether to always log everything for this instance - - - - Adds a transpiler method that edits the IL of the given method - - Transpiler method - Currently not implemented - - - - Processes and writes IL to the provided method body. - Note that this cleans the existing method body (removes insturctions and exception handlers). - - Method body to write to. - Original method that transpiler can optionally call into - - One of IL opcodes contains a CallSide (e.g. calli), which is currently not - fully supported. - - One of IL opcodes with an operand contains a null operand. - - - - Converts all branches to long types. This exists to mimic the behaviour of Harmony 2 - - Enumerable of instructions - Enumerable of fixed instructions - - - - Helper wrapper around ILProcessor to allow emitting code at certain positions - - - - - Write method body to a ILDasm -like representation - - Method body to write - String representation of the method body (locals and instruction) - Unexpected exception block type - - - - Patching methods potentially messes up the stack. - Especially calls to GetExecutingAssembly won't turn in correct methods - - - - Creates a patch sorter - Array of patches that will be sorted - Use debugging - - - Sorts internal PatchSortingWrapper collection and caches the results. - After first run the result is provided from the cache. - The original method - The sorted patch methods - - - Sorts internal PatchSortingWrapper collection and caches the results. - After first run the result is provided from the cache. - The original method - The sorted patch methods as instance - - - Checks if the sorter was created with the same patch list and as a result can be reused to - get the sorted order of the patches. - List of patches to check against - true if equal - - - Removes one unresolved dependency from the least important patch. - - - Outputs all unblocked patches from the waiting list to results list - - - Adds patch to both results list and handled patches set - Patch to add - - - Wrapper used over the Patch object to allow faster dependency access and - dependency removal in case of cyclic dependencies - - - Create patch wrapper object used for sorting - Patch to wrap - - - Determines how patches sort - The other patch - integer to define sort order (-1, 0, 1) - - - Determines whether patches are equal - The other patch - true if equal - - - Hash function - A hash code - - - Bidirectionally registers Patches as after dependencies - List of dependencies to register - - - Bidirectionally registers Patches as before dependencies - List of dependencies to register - - - Bidirectionally removes Patch from after dependencies - Patch to remove - - - Bidirectionally removes Patch from before dependencies - Patch to remove - - - Specifies the type of method - - - - This is a normal method - - - This is a getter - - - This is a setter - - - This is a constructor - - - This is a static constructor - - - Specifies the type of argument - - - - This is a normal argument - - - This is a reference argument (ref) - - - This is an out argument (out) - - - This is a pointer argument (&) - - - Specifies the type of patch - - - - Any patch - - - A prefix patch - - - A postfix patch - - - A transpiler - - - A finalizer - - - A reverse patch - - - A MonoMod - - - Specifies the type of reverse patch - - - - Use the unmodified original method (directly from IL) - - - Use the original as it is right now including previous patches but excluding future ones - - - Specifies the type of method call dispatching mechanics - - - - Call the method using dynamic dispatching if method is virtual (including overriden) - - - This is the built-in form of late binding (a.k.a. dynamic binding) and is the default dispatching mechanic in C#. - This directly corresponds with the instruction. - - - For virtual (including overriden) methods, the instance type's most-derived/overriden implementation of the method is called. - For non-virtual (including static) methods, same behavior as : the exact specified method implementation is called. - - - Note: This is not a fully dynamic dispatch, since non-virtual (including static) methods are still called non-virtually. - A fully dynamic dispatch in C# involves using - the dynamic type - (actually a fully dynamic binding, since even the name and overload resolution happens at runtime), which does not support. - - - - - Call the method using static dispatching, regardless of whether method is virtual (including overriden) or non-virtual (including static) - - - a.k.a. non-virtual dispatching, early binding, or static binding. - This directly corresponds with the instruction. - - - For both virtual (including overriden) and non-virtual (including static) methods, the exact specified method implementation is called, without virtual/override mechanics. - - - - - The base class for all Harmony annotations (not meant to be used directly) - - - - The common information for all attributes - - - Annotation to define your Harmony patch methods - - - - An empty annotation can be used together with TargetMethod(s) - - - - An annotation that specifies a class to patch - The declaring class/type - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The argument types of the method or constructor to patch - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The name of the method, property or constructor to patch - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The name of the method, property or constructor to patch - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The name of the method, property or constructor to patch - An array of argument types to target overloads - Array of - - - - An annotation that specifies a method, property or constructor to patch - Assembly-qualified name of the declaring class/type - The name of the method, property or constructor to patch - - - - An annotation that specifies a method, property or constructor to patch - Assembly-qualified name of the declaring class/type - The name of the method, property or constructor to patch - The - An array of argument types to target overloads - Array of - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The - An array of argument types to target overloads - Array of - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The name of the method, property or constructor to patch - The - - - - An annotation that specifies a method, property or constructor to patch - The name of the method, property or constructor to patch - - - - An annotation that specifies a method, property or constructor to patch - The name of the method, property or constructor to patch - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - The name of the method, property or constructor to patch - An array of argument types to target overloads - An array of - - - - An annotation that specifies a method, property or constructor to patch - The name of the method, property or constructor to patch - The - - - - An annotation that specifies a method, property or constructor to patch - The - - - - An annotation that specifies a method, property or constructor to patch - The - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - The - An array of argument types to target overloads - An array of - - - - An annotation that specifies a method, property or constructor to patch - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - An array of argument types to target overloads - An array of - - - - Annotation to define the original method for delegate injection - - - - An annotation that specifies a class to patch - The declaring class/type - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The argument types of the method or constructor to patch - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The name of the method, property or constructor to patch - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The name of the method, property or constructor to patch - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The name of the method, property or constructor to patch - An array of argument types to target overloads - Array of - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The - An array of argument types to target overloads - Array of - - - - An annotation that specifies a method, property or constructor to patch - The declaring class/type - The name of the method, property or constructor to patch - The - - - - An annotation that specifies a method, property or constructor to patch - The name of the method, property or constructor to patch - - - - An annotation that specifies a method, property or constructor to patch - The name of the method, property or constructor to patch - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - The name of the method, property or constructor to patch - An array of argument types to target overloads - An array of - - - - An annotation that specifies a method, property or constructor to patch - The name of the method, property or constructor to patch - The - - - - An annotation that specifies call dispatching mechanics for the delegate - The - - - - An annotation that specifies a method, property or constructor to patch - The - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - The - An array of argument types to target overloads - An array of - - - - An annotation that specifies a method, property or constructor to patch - An array of argument types to target overloads - - - - An annotation that specifies a method, property or constructor to patch - An array of argument types to target overloads - An array of - - - - Annotation to define your standin methods for reverse patching - - - - An annotation that specifies the type of reverse patching - The of the reverse patch - - - - A Harmony annotation to define that all methods in a class are to be patched - - - - A Harmony annotation - - - - A Harmony annotation to define patch priority - The priority - - - - A Harmony annotation - - - - A Harmony annotation to define that a patch comes before another patch - The array of harmony IDs of the other patches - - - - A Harmony annotation - - - A Harmony annotation to define that a patch comes after another patch - The array of harmony IDs of the other patches - - - - A Harmony annotation - - - A Harmony annotation to debug a patch (output uses to log to your Desktop) - - - - A Harmony attribute - - - If specified on a prefix, postfix or a finalizer, the method will be automatically wrapped into try/catch. - - - - Specifies the Prepare function in a patch class - - - - Specifies the Cleanup function in a patch class - - - - Specifies the TargetMethod function in a patch class - - - - Specifies the TargetMethods function in a patch class - - - - Specifies the Prefix function in a patch class - - - - Specifies the Postfix function in a patch class - - - - Specifies the Transpiler function in a patch class - - - - Specifies the ILManipulator function in a patch class> - - - - Specifies the Finalizer function in a patch class - - - - A Harmony annotation - - - - The name of the original argument - - - - The index of the original argument - - - - The new name of the original argument - - - - An annotation to declare injected arguments by name - - - - An annotation to declare injected arguments by index - Zero-based index - - - - An annotation to declare injected arguments by renaming them - Name of the original argument - New name - - - - An annotation to declare injected arguments by index and renaming them - Zero-based index - New name - - - - An abstract wrapper around OpCode and their operands. Used by transpilers - - - - The opcode - - - - The operand - - - - All labels defined on this instruction - - - - All exception block boundaries defined on this instruction - - - - Creates a new CodeInstruction with a given opcode and optional operand - The opcode - The operand - - - - Create a full copy (including labels and exception blocks) of a CodeInstruction - The to copy - - - - Clones a CodeInstruction and resets its labels and exception blocks - A lightweight copy of this code instruction - - - - Clones a CodeInstruction, resets labels and exception blocks and sets its opcode - The opcode - A copy of this CodeInstruction with a new opcode - - - - Clones a CodeInstruction, resets labels and exception blocks and sets its operand - The operand - A copy of this CodeInstruction with a new operand - - - - Creates a CodeInstruction calling a method (CALL) - The class/type where the method is declared - The name of the method (case sensitive) - Optional parameters to target a specific overload of the method - Optional list of types that define the generic version of the method - A code instruction that calls the method matching the arguments - - - - Creates a CodeInstruction calling a method (CALL) - The target method in the form TypeFullName:MethodName, where the type name matches a form recognized by Type.GetType like Some.Namespace.Type. - Optional parameters to target a specific overload of the method - Optional list of types that define the generic version of the method - A code instruction that calls the method matching the arguments - - - - Creates a CodeInstruction calling a method (CALL) - The lambda expression using the method - - - - - Creates a CodeInstruction calling a method (CALL) - The lambda expression using the method - - - - - Creates a CodeInstruction calling a method (CALL) - The lambda expression using the method - - - - - Creates a CodeInstruction calling a method (CALL) - The lambda expression using the method - - - - - Creates a CodeInstruction loading a field (LD[S]FLD[A]) - The class/type where the field is defined - The name of the field (case sensitive) - Use address of field - - - - Creates a CodeInstruction storing to a field (ST[S]FLD) - The class/type where the field is defined - The name of the field (case sensitive) - - - - Returns a string representation of the code instruction - A string representation of the code instruction - - - - Exception block types - - - - The beginning of an exception block - - - - The beginning of a catch block - - - - The beginning of an except filter block - - - - The beginning of a fault block - - - - The beginning of a finally block - - - - The end of an exception block - - - - An exception block - - - - Block type - - - - Catch type - - - - Creates an exception block - The - The catch type - - - - - An exception thrown when a patch argument in a Harmony patch is invalid. - - - - - Original method to be patched. - - - - - Patch that was attempted to be applied. - - - - - - - - Constructs a new exception instance. - - Message of the exception. - Original method to be patched. - Patch that was attempted to be applied. - - - - An exception thrown when a reflection member is not found. - - - - - - - The Harmony instance is the main entry to Harmony. After creating one with an unique identifier, it is used to patch and query the current application domain - - - - Set to true before instantiating Harmony to debug Harmony or use an environment variable to set HARMONY_DEBUG to '1' like this: cmd /C "set HARMONY_DEBUG=1 && game.exe" - This is for full debugging. To debug only specific patches, use the attribute - - - - Creates a new Harmony instance - A unique identifier (you choose your own) - A Harmony instance - - - - The unique identifier - - - - Searches the current assembly for Harmony annotations and uses them to create patches - This method can fail to use the correct assembly when being inlined. It calls StackTrace.GetFrame(1) which can point to the wrong method/assembly. If you are unsure or run into problems, use PatchAll(Assembly.GetExecutingAssembly()) instead. - - - - Creates a empty patch processor for an original method - The original method/constructor - A new instance - - - - Creates a patch class processor from an annotated class - The class/type - A new instance - - - - Creates a patch class processor from an annotated class - The class/type - If true, the type doesn't need to have any attributes present for processing - A new instance - - - - Creates a reverse patcher for one of your stub methods - The original method/constructor - The stand-in stub method as - A new instance - - - - Searches an assembly for Harmony annotations and uses them to create patches - The assembly - - - - Searches the given type for Harmony annotation and uses them to create patches - The type to search - - - - Creates patches by manually specifying the methods - The original method/constructor - An optional prefix method wrapped in a object - An optional postfix method wrapped in a object - An optional transpiler method wrapped in a object - An optional finalizer method wrapped in a object - An optional ilmanipulator method wrapped in a - The replacement method that was created to patch the original method - - - - Creates patches by manually specifying the methods - The original method/constructor - An optional prefix method wrapped in a object - An optional postfix method wrapped in a object - An optional transpiler method wrapped in a object - An optional finalizer method wrapped in a object - The replacement method that was created to patch the original method - - - - Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process - The original method/constructor you want to duplicate - Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) - An optional transpiler as method that will be applied during the process - An optional ilmanipulator as method that will be applied during the process - The replacement method that was created to patch the stub method - - - - Patches a foreign method onto a stub method of yours and optionally applies transpilers during the process - The original method/constructor you want to duplicate - Your stub method as that will become the original. Needs to have the correct signature (either original or whatever your transpilers generates) - An optional transpiler as method that will be applied during the process - The replacement method that was created to patch the stub method - - - - Unpatches methods by patching them with zero patches. Fully unpatching is not supported. Be careful, unpatching is global - The optional Harmony ID to restrict unpatching to a specific Harmony instance - This method could be static if it wasn't for the fact that unpatching creates a new replacement method that contains your harmony ID - - - - Unpatches all methods that were patched by this Harmony instance's ID. Unpatching is done by repatching methods without patches of this instance. - - - - Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global - The original method/constructor - The - The optional Harmony ID to restrict unpatching to a specific Harmony instance - - - - Unpatches a method by patching it with zero patches. Fully unpatching is not supported. Be careful, unpatching is global - The original method/constructor - The patch method as method to remove - - - - Test for patches from a specific Harmony ID - The Harmony ID - True if patches for this ID exist - - - - Gets patch information for a given original method - The original method/constructor - The patch information as - - - - Gets the methods this instance has patched - An enumeration of original methods/constructors - - - - Gets all patched original methods in the appdomain - An enumeration of patched original methods/constructors - - - - Gets the original method from a given replacement method - A replacement method, for example from a stacktrace - The original method/constructor or null if not found - - - - Tries to get the method from a stackframe including dynamic replacement methods - The - For normal frames, frame.GetMethod() is returned. For frames containing patched methods, the replacement method is returned or null if no method can be found - - - - Gets Harmony version for all active Harmony instances - [out] The current Harmony version - A dictionary containing assembly versions keyed by Harmony IDs - - - - Creates a new Harmony instance and applies all patches specified in the type - The type to scan for patches. - The ID for the Harmony instance to create, which will be used. - - - - Applies all patches specified in the assembly - The assembly to scan. - The ID for the Harmony instance to create, which will be used. - - - - Under Mono, HarmonyException wraps IL compile errors with detailed information about the failure - - - - Default serialization constructor (not implemented) - The info - The context - - - - Get a list of IL instructions in pairs of offset+code - A list of key/value pairs which represent an offset and the code at that offset - - - - Get a list of IL instructions without offsets - A list of - - - - Get the error offset of the errornous IL instruction - The offset - - - - Get the index of the errornous IL instruction - The index into the list of instructions or -1 if not found - - - - A wrapper around a method to use it as a patch (for example a Prefix) - - - - The original method - - - - Class/type declaring this patch - - - - Patch method name - - - - Optional patch - - - - Array of argument types of the patch method - - - - of the patch - - - - Install this patch before patches with these Harmony IDs - - - - Install this patch after patches with these Harmony IDs - - - - Reverse patch type, see - - - - Create debug output for this patch - - - - Whether to use (true) or (false) mechanics - for -attributed delegate - - - - Whether to wrap the patch itself into a try/catch. - - - - Default constructor - - - - Creates a patch from a given method - The original method - - - - Creates a patch from a given method - The original method - The patch - A list of harmony IDs that should come after this patch - A list of harmony IDs that should come before this patch - Set to true to generate debug output - - - - Creates a patch from a given method - The patch class/type - The patch method name - The optional argument types of the patch method (for overloaded methods) - - - - Gets the names of all internal patch info fields - A list of field names - - - - Merges annotations - The list of to merge - The merged - - - - Returns a string that represents the annotation - A string representation - - - - Annotation extensions - - - - Copies annotation information - The source - The destination - - - - Clones an annotation - The to clone - A copied - - - - Merges annotations - The master - The detail - A new, merged - - - - Gets all annotations on a class/type - The class/type - A list of all - - - - Gets merged annotations on a class/type - The class/type - The merged - - - - Gets all annotations on a method - The method/constructor - A list of - - - - Gets merged annotations on a method - The method/constructor - The merged - - - - - A mutable representation of an inline signature, similar to Mono.Cecil's CallSite. - Used by the calli instruction, can be used by transpilers - - - - - See - - - - See - - - - See - - - - The list of all parameter types or function pointer signatures received by the call site - - - - The return type or function pointer signature returned by the call site - - - - Returns a string representation of the inline signature - A string representation of the inline signature - - - - - A mutable representation of a parameter type with an attached type modifier, - similar to Mono.Cecil's OptionalModifierType / RequiredModifierType and C#'s modopt / modreq - - - - - Whether this is a modopt (optional modifier type) or a modreq (required modifier type) - - - - The modifier type attached to the parameter type - - - - The modified parameter type - - - - Returns a string representation of the modifier type - A string representation of the modifier type - - - - Patch serialization - - - - Control the binding of a serialized object to a type - Specifies the assembly name of the serialized object - Specifies the type name of the serialized object - The type of the object the formatter creates a new instance of - - - - Serializes a patch info - The - The serialized data - - - - Deserialize a patch info - The serialized data - A - - - - Compare function to sort patch priorities - The patch - Zero-based index - The priority - A standard sort integer (-1, 0, 1) - - - - Serializable patch information - - - - Prefixes as an array of - - - - Postfixes as an array of - - - - Transpilers as an array of - - - - Finalizers as an array of - - - - ILManipulators as an array of - - - - Returns if any of the patches wants debugging turned on - - - - Adds prefixes - An owner (Harmony ID) - The patch methods - - - - Adds a prefix - - - Removes prefixes - The owner of the prefixes, or * for all - - - - Adds postfixes - An owner (Harmony ID) - The patch methods - - - - Adds a postfix - - - Removes postfixes - The owner of the postfixes, or * for all - - - - Adds transpilers - An owner (Harmony ID) - The patch methods - - - - Adds a transpiler - - - Removes transpilers - The owner of the transpilers, or * for all - - - - Adds finalizers - An owner (Harmony ID) - The patch methods - - - - Adds a finalizer - - - Removes finalizers - The owner of the finalizers, or * for all - - - - Adds ilmanipulators - An owner (Harmony ID) - The patch methods - - - - Removes ilmanipulators - The owner of the ilmanipulators, or * for all - - - - Removes a patch using its method - The method of the patch to remove - - - - Gets a concatenated list of patches - The Harmony instance ID adding the new patches - The patches to add - The current patches - - - - Gets a list of patches with any from the given owner removed - The owner of the methods, or * for all - The current patches - - - - A serializable patch - - - - Zero-based index - - - - The owner (Harmony ID) - - - - The priority, see - - - - Keep this patch before the patches indicated in the list of Harmony IDs - - - - Keep this patch after the patches indicated in the list of Harmony IDs - - - - A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future - - - - Whether to wrap the patch into a general try/catch that logs the error - - - - The method of the static patch method - - - - Creates a patch - The method of the patch - Zero-based index - An owner (Harmony ID) - The priority, see - A list of Harmony IDs for patches that should run after this patch - A list of Harmony IDs for patches that should run before this patch - A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future - - - - Creates a patch - The method of the patch - Zero-based index - An owner (Harmony ID) - The priority, see - A list of Harmony IDs for patches that should run after this patch - A list of Harmony IDs for patches that should run before this patch - A flag that will log the replacement method via every time this patch is used to build the replacement, even in the future - Whether to wrap the patch into a general try/catch that logs the error - - - - Creates a patch - The method of the patch - Zero-based index - An owner (Harmony ID) - - - Get the patch method or a DynamicMethod if original patch method is a patch factory - The original method/constructor - The method of the patch - - - - Determines whether patches are equal - The other patch - true if equal - - - - Determines how patches sort - The other patch - integer to define sort order (-1, 0, 1) - - - - Hash function - A hash code - - - - A PatchClassProcessor used to turn on a class/type into patches - - - - Creates a patch class processor by pointing out a class. Similar to PatchAll() but without searching through all classes. - The Harmony instance - The class to process (need to have at least a [HarmonyPatch] attribute if allowUnannotatedType is set to false) - - - - Creates a patch class processor by pointing out a class. Similar to PatchAll() but without searching through all classes. - The Harmony instance - The class to process (need to have at least a [HarmonyPatch] attribute if allowUnannotatedType is set to false) - If true, the type doesn't need to have any attributes present for processing - - - - Applies the patches - A list of all created replacement methods or null if patch class is not annotated - - - - A group of patches - - - - A collection of prefix - - - - A collection of postfix - - - - A collection of transpiler - - - - A collection of finalizer - - - - A collection of ILManipulator - - - - Gets all owners (Harmony IDs) or all known patches - The patch owners - - - - Creates a group of patches - An array of prefixes as - An array of postfixes as - An array of transpileres as - An array of finalizeres as - An array of ilmanipulators as - - - - Creates a group of patches - An array of prefixes as - An array of postfixes as - An array of transpileres as - An array of finalizeres as - - - - - IL manipulator to create Harmony-style patches - - - - - - Manipulates a by applying Harmony patches to it. - - Reference to the method that should be considered as original. Used to reference parameter and return types. - Collection of Harmony patches to apply. - Method body to manipulate as instance. Should contain instructions to patch. - - In most cases you will want to use to create or obtain global - patch info for the method that contains aggregated info of all Harmony instances. - - - - - - Method patcher for normal managed methods that have IL body attached to them. - Uses in order to apply hooks in a way compatible with MonoMod's own - hooking system. - - - - - - - - - - - - - - - - - - A handler for that checks if a method is a normal Managed method. - - Not used - Patch resolver arguments - - - - - A general method patcher for implementing custom Harmony patcher backends. - - - - - - Constructs a method patcher - - Original method to patch - - - - - Original method to patch. - - - - - - Prepares method body for the unpatched that simply calls - function. - - - A that contains a call to - the original method to pass to the IL manipulator. - If null, Harmony patches must be manually applied to the original via . - - - - - - Detours to the provided replacement function. If called multiple times, - is re-detoured to the new method. - - - Result of - if returned non-null. - Otherwise, this will be null, in which case you must manually generate Harmony-patched method - with . - - of the hook, if it's different from `replacement`. - - - - - Creates a copy of the original method. If not possible, creates a method that calls into the original method. - - Copy of the original method that is transpileable. If not possible, returns null. - - This method creates a pure copy of the original method that is usable with transpilers. Currently, this - method is used to generate reverse patchers. - If a purse IL copy is not possible, a best approximation should be generated - (e.g. a wrapper that calls original method). - If no best approximation is possible, this method should return null, in which case generating reverse - patchers for the method will fail. - - - - - - A method patcher that uses to patch internal calls, - methods marked with and any other managed method that CLR managed-to-native - trampolines for and which has no IL body defined. - - - - - Constructs a new instance of method patcher. - - - - - - - - - - - - - - - A handler for that checks if a method doesn't have a body - (e.g. it's icall or marked with ) and thus can be patched with - . - - Not used - Patch resolver arguments - - - - - A global manager for handling Harmony patch state. Contains information about all patched methods and all - actual instances that handle patching implementation. - - - - - - Method patcher resolve event. - - - When a method is to be patched, this resolver event is called once on the method to determine which - backend to use in order to patch the method. - To make Harmony use the specified backend, set to an - instance of the method patcher backend to use. - - - - - - Creates or gets an existing instance of that handles patching the method. - - Method to patch. - Instance of that handles patching the method. - No suitable patcher found for the method. - - - - - Gets patch info for the given target method. - - Method to get patch info for. - Current patch info of the method. - - - - - Gets or creates patch info for the given method. - - Method to get info from. - An existing or new patch info for the method containing information about the applied patches. - - - - - Gets all methods that have been patched. - - List of methods that have been patched. - - - - - Removes all method resolvers. Use with care, this removes the default ones too! - - - - - Patcher resolve event arguments. - - - - - - Original method that is to be patched. - - - - - - Method patcher to use to patch . - Set this value to specify which one to use. - - - - - A PatchProcessor handles patches on a method/constructor - - - - Creates an empty patch processor - The Harmony instance - The original method/constructor - - - - Adds a prefix - The prefix as a - A for chaining calls - - - - Adds a prefix - The prefix method - A for chaining calls - - - - Adds a postfix - The postfix as a - A for chaining calls - - - - Adds a postfix - The postfix method - A for chaining calls - - - - Adds a transpiler - The transpiler as a - A for chaining calls - - - - Adds a transpiler - The transpiler method - A for chaining calls - - - - Adds a finalizer - The finalizer as a - A for chaining calls - - - - Adds a finalizer - The finalizer method - A for chaining calls - - - - Adds an ilmanipulator - The ilmanipulator as a - A for chaining calls - - - - Adds an ilmanipulator - The ilmanipulator method - A for chaining calls - - - - Gets all patched original methods in the appdomain - An enumeration of patched method/constructor - - - - Applies all registered patches - The generated replacement method - - - - Unpatches patches of a given type and/or Harmony ID - The patch type - Harmony ID or * for any - A for chaining calls - - - - Unpatches a specific patch - The method of the patch - A for chaining calls - - - - Gets patch information on an original - The original method/constructor - The patch information as - - - - Sort patch methods by their priority rules - The original method - Patches to sort - The sorted patch methods - - - - Gets Harmony version for all active Harmony instances - [out] The current Harmony version - A dictionary containing assembly version keyed by Harmony ID - - - - Creates a new empty generator to use when reading method bodies - A new - - - - Creates a new generator matching the method/constructor to use when reading method bodies - The original method/constructor to copy method information from - A new - - - - Returns the methods unmodified list of code instructions - The original method/constructor - Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) - A list containing all the original - - - - Returns the methods unmodified list of code instructions - The original method/constructor - A new generator that now contains all local variables and labels contained in the result - A list containing all the original - - - - Returns the methods current list of code instructions after all existing transpilers have been applied - The original method/constructor - Apply only the first count of transpilers - Optionally an existing generator that will be used to create all local variables and labels contained in the result (if not specified, an internal generator is used) - A list of - - - - Returns the methods current list of code instructions after all existing transpilers have been applied - The original method/constructor - A new generator that now contains all local variables and labels contained in the result - Apply only the first count of transpilers - A list of - - - - A low level way to read the body of a method. Used for quick searching in methods - The original method - All instructions as opcode/operand pairs - - - - A low level way to read the body of a method. Used for quick searching in methods - The original method - An existing generator that will be used to create all local variables and labels contained in the result - All instructions as opcode/operand pairs - - - - A patch priority - - - - Patch last - - - - Patch with very low priority - - - - Patch with low priority - - - - Patch with lower than normal priority - - - - Patch with normal priority - - - - Patch with higher than normal priority - - - - Patch with high priority - - - - Patch with very high priority - - - - Patch first - - - - A reverse patcher - - - - Creates a reverse patcher - The Harmony instance - The original method/constructor - Your stand-in stub method as - - - - Applies the patch - The type of patch, see - The generated replacement method - - - - A collection of commonly used transpilers - - - - Returns an instruction to call the specified delegate - The delegate type to emit - The delegate to emit - The instruction to call the specified action - - - - A transpiler that replaces all occurrences of a given method with another one using the same signature - The enumeration of to act on - Method or constructor to search for - Method or constructor to replace with - Modified enumeration of - - - - A transpiler that alters instructions that match a predicate by calling an action - The enumeration of to act on - A predicate selecting the instructions to change - An action to apply to matching instructions - Modified enumeration of - - - - A transpiler that logs a text at the beginning of the method - The instructions to act on - The log text - Modified enumeration of - - - - A transpiler that replaces the entire body of the method with another one - The replacement method. It's up to the caller of this transpiler to make sure that the signatures match. - of the patch. This is passed via transpiler. - A collection of that contains instructions of replacement method. - The replacement method is not a managed method that contains any IL. - This transpiler has a side effect of clearing up all previous locals and previous transpilers. - Use to run this transpiler as early as possible. - - - A helper class for reflection related functions - - - - Shortcut for to simplify the use of reflections and make it work for any access level - - - - Shortcut for to simplify the use of reflections and make it work for any access level but only within the current type - - - - Enumerates all assemblies in the current app domain, excluding visual studio assemblies - An enumeration of - - - Gets a type by name. Prefers a full name with namespace but falls back to the first type matching the name otherwise - The name - A type or null if not found - - - - Gets all successfully loaded types from a given assembly - The assembly - An array of types - - This calls and returns , while catching any thrown . - If such an exception is thrown, returns the successfully loaded types (, - filtered for non-null values). - - - - - Enumerates all successfully loaded types in the current app domain, excluding visual studio assemblies - An enumeration of all in all assemblies, excluding visual studio assemblies - - - Applies a function going up the type hierarchy and stops at the first non-null result - Result type of func() - The class/type to start with - The evaluation function returning T - The first non-null result, or null if no match - - The type hierarchy of a class or value type (including struct) does NOT include implemented interfaces, - and the type hierarchy of an interface is only itself (regardless of whether that interface implements other interfaces). - The top-most type in the type hierarchy of all non-interface types (including value types) is . - - - - - Applies a function going into inner types and stops at the first non-null result - Generic type parameter - The class/type to start with - The evaluation function returning T - The first non-null result, or null if no match - - - - Gets the reflection information for a directly declared field - The class/type where the field is defined - The name of the field - A field or null when type/name is null or when the field cannot be found - - - - Gets the reflection information for a field by searching the type and all its super types - The class/type where the field is defined - The name of the field (case sensitive) - A field or null when type/name is null or when the field cannot be found - - - - Gets the reflection information for a field - The class/type where the field is declared - The zero-based index of the field inside the class definition - A field or null when type is null or when the field cannot be found - - - - Gets the reflection information for a directly declared property - The class/type where the property is declared - The name of the property (case sensitive) - A property or null when type/name is null or when the property cannot be found - - - - Gets the reflection information for the getter method of a directly declared property - The class/type where the property is declared - The name of the property (case sensitive) - A method or null when type/name is null or when the property cannot be found - - - - Gets the reflection information for the setter method of a directly declared property - The class/type where the property is declared - The name of the property (case sensitive) - A method or null when type/name is null or when the property cannot be found - - - - Gets the reflection information for a property by searching the type and all its super types - The class/type - The name - A property or null when type/name is null or when the property cannot be found - - - - Gets the reflection information for the getter method of a property by searching the type and all its super types - The class/type - The name - A method or null when type/name is null or when the property cannot be found - - - - Gets the reflection information for the setter method of a property by searching the type and all its super types - The class/type - The name - A method or null when type/name is null or when the property cannot be found - - - - Gets the reflection information for a directly declared method - The class/type where the method is declared - The name of the method (case sensitive) - Optional parameters to target a specific overload of the method - Optional list of types that define the generic version of the method - A method or null when type/name is null or when the method cannot be found - - - - Gets the reflection information for a method by searching the type and all its super types - The class/type where the method is declared - The name of the method (case sensitive) - Optional parameters to target a specific overload of the method - Optional list of types that define the generic version of the method - A method or null when type/name is null or when the method cannot be found - - - - Gets the reflection information for a method by searching the type and all its super types - The target method in the form TypeFullName:MethodName, where the type name matches a form recognized by Type.GetType like Some.Namespace.Type. - Optional parameters to target a specific overload of the method - Optional list of types that define the generic version of the method - A method or null when type/name is null or when the method cannot be found - - - - Gets the names of all method that are declared in a type - The declaring class/type - A list of method names - - - - Gets the names of all method that are declared in the type of the instance - An instance of the type to search in - A list of method names - - - - Gets the names of all fields that are declared in a type - The declaring class/type - A list of field names - - - - Gets the names of all fields that are declared in the type of the instance - An instance of the type to search in - A list of field names - - - - Gets the names of all properties that are declared in a type - The declaring class/type - A list of property names - - - - Gets the names of all properties that are declared in the type of the instance - An instance of the type to search in - A list of property names - - - - Gets the type of any class member of - A member - The class/type of this member - - - - Test if a class member is actually an concrete implementation - A member - True if the member is a declared - - - - Gets the real implementation of a class member - A member - The member itself if its declared. Otherwise the member that is actually implemented in some base type - - - - Gets the reflection information for a directly declared constructor - The class/type where the constructor is declared - Optional parameters to target a specific overload of the constructor - Optional parameters to only consider static constructors - A constructor info or null when type is null or when the constructor cannot be found - - - - Gets the reflection information for a constructor by searching the type and all its super types - The class/type where the constructor is declared - Optional parameters to target a specific overload of the method - Optional parameters to only consider static constructors - A constructor info or null when type is null or when the method cannot be found - - - - Gets reflection information for all declared constructors - The class/type where the constructors are declared - Optional parameters to only consider static constructors - A list of constructor infos - - - - Gets reflection information for all declared methods - The class/type where the methods are declared - A list of methods - - - - Gets reflection information for all declared properties - The class/type where the properties are declared - A list of properties - - - - Gets reflection information for all declared fields - The class/type where the fields are declared - A list of fields - - - - Gets the return type of a method or constructor - The method/constructor - The return type - - - - Given a type, returns the first inner type matching a recursive search by name - The class/type to start searching at - The name of the inner type (case sensitive) - The inner type or null if type/name is null or if a type with that name cannot be found - - - - Given a type, returns the first inner type matching a recursive search with a predicate - The class/type to start searching at - The predicate to search with - The inner type or null if type/predicate is null or if a type with that name cannot be found - - - - Given a type, returns the first method matching a predicate - The class/type to start searching at - The predicate to search with - The method or null if type/predicate is null or if a type with that name cannot be found - - - - Given a type, returns the first constructor matching a predicate - The class/type to start searching at - The predicate to search with - The constructor info or null if type/predicate is null or if a type with that name cannot be found - - - - Given a type, returns the first property matching a predicate - The class/type to start searching at - The predicate to search with - The property or null if type/predicate is null or if a type with that name cannot be found - - - - Returns an array containing the type of each object in the given array - An array of objects - An array of types or an empty array if parameters is null (if an object is null, the type for it will be object) - - - - Creates an array of input parameters for a given method and a given set of potential inputs - The method/constructor you are planing to call - The possible input parameters in any order - An object array matching the method signature - - - - A readable/assignable reference delegate to an instance field of a class or static field (NOT an instance field of a struct) - - An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ), - implemented interface, or derived class of this type - - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The runtime instance to access the field (ignored and can be omitted for static fields) - A readable/assignable reference to the field - Null instance passed to a non-static field ref delegate - - Instance of invalid type passed to a non-static field ref delegate - (this can happen if is a parent class or interface of the field's declaring type) - - - - This delegate cannot be used for instance fields of structs, since a struct instance passed to the delegate would be passed by - value and thus would be a copy that only exists within the delegate's invocation. This is fine for a readonly reference, - but makes assignment futile. Use instead. - - - Note that is not required to be the field's declaring type. It can be a parent class (including ), - implemented interface, or a derived class of the field's declaring type ("instanceOfT is FieldDeclaringType" must be possible). - Specifically, must be assignable from OR to the field's declaring type. - Technically, this allows Nullable, although Nullable is only relevant for structs, and since only static fields of structs - are allowed for this delegate, and the instance passed to such a delegate is ignored, this hardly matters. - - - Similarly, is not required to be the field's field type, unless that type is a non-enum value type. - It can be a parent class (including object) or implemented interface of the field's field type. It cannot be a derived class. - This variance is not allowed for value types, since that would require boxing/unboxing, which is not allowed for ref values. - Special case for enum types: can also be the underlying integral type of the enum type. - Specifically, for reference types, must be assignable from - the field's field type; for non-enum value types, must be exactly the field's field type; for enum types, - must be either the field's field type or the underyling integral type of that field type. - - - This delegate supports static fields, even those defined in structs, for legacy reasons. - For such static fields, is effectively ignored. - Consider using (and StaticFieldRefAccess methods that return it) instead for static fields. - - - - - - Creates a field reference delegate for an instance field of a class - The class that defines the instance field, or derived class of this type - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The name of the field - A readable/assignable delegate - - - For backwards compatibility, there is no class constraint on . - Instead, the non-value-type check is done at runtime within the method. - - - - - - Creates an instance field reference for a specific instance of a class - The class that defines the instance field, or derived class of this type - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The instance - The name of the field - A readable/assignable reference to the field - - - This method is meant for one-off access to a field's value for a single instance. - If you need to access a field's value for potentially multiple instances, use instead. - FieldRefAccess<T, F>(instance, fieldName) is functionally equivalent to FieldRefAccess<T, F>(fieldName)(instance). - - - For backwards compatibility, there is no class constraint on . - Instead, the non-value-type check is done at runtime within the method. - - - - - - Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct) - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - - The type that defines the field, or derived class of this type; must not be a struct type unless the field is static - - The name of the field - - A readable/assignable delegate with T=object - (for static fields, the instance delegate parameter is ignored) - - - - This method is meant for cases where the given type is only known at runtime and thus can't be used as a type parameter T - in e.g. . - - - This method supports static fields, even those defined in structs, for legacy reasons. - Consider using (and other overloads) instead for static fields. - - - - - - Creates a field reference delegate for an instance field of a class or static field (NOT an instance field of a struct) - - An arbitrary type if the field is static; otherwise the class that defines the field, or a parent class (including ), - implemented interface, or derived class of this type ("instanceOfT is FieldDeclaringType" must be possible) - - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The field - A readable/assignable delegate - - - This method is meant for cases where the field has already been obtained, avoiding the field searching cost in - e.g. . - - - This method supports static fields, even those defined in structs, for legacy reasons. - For such static fields, is effectively ignored. - Consider using (and other overloads) instead for static fields. - - - For backwards compatibility, there is no class constraint on . - Instead, the non-value-type check is done at runtime within the method. - - - - - - Creates a field reference for an instance field of a class - - The type that defines the field; or a parent class (including ), implemented interface, or derived class of this type - ("instanceOfT is FieldDeclaringType" must be possible) - - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The instance - The field - A readable/assignable reference to the field - - - This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained. - If you need to access a field's value for potentially multiple instances, use instead. - FieldRefAccess<T, F>(instance, fieldInfo) is functionally equivalent to FieldRefAccess<T, F>(fieldInfo)(instance). - - - For backwards compatibility, there is no class constraint on . - Instead, the non-value-type check is done at runtime within the method. - - - - - - A readable/assignable reference delegate to an instance field of a struct - The struct that defines the instance field - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - A reference to the runtime instance to access the field - A readable/assignable reference to the field - - - - Creates a field reference delegate for an instance field of a struct - The struct that defines the instance field - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The name of the field - A readable/assignable delegate - - - - Creates an instance field reference for a specific instance of a struct - The struct that defines the instance field - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The instance - The name of the field - A readable/assignable reference to the field - - - This method is meant for one-off access to a field's value for a single instance. - If you need to access a field's value for potentially multiple instances, use instead. - StructFieldRefAccess<T, F>(ref instance, fieldName) is functionally equivalent to StructFieldRefAccess<T, F>(fieldName)(ref instance). - - - - - - Creates a field reference delegate for an instance field of a struct - The struct that defines the instance field - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The field - A readable/assignable delegate - - - This method is meant for cases where the field has already been obtained, avoiding the field searching cost in - e.g. . - - - - - - Creates a field reference for an instance field of a struct - The struct that defines the instance field - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The instance - The field - A readable/assignable reference to the field - - - This method is meant for one-off access to a field's value for a single instance and where the field has already been obtained. - If you need to access a field's value for potentially multiple instances, use instead. - StructFieldRefAccess<T, F>(ref instance, fieldInfo) is functionally equivalent to StructFieldRefAccess<T, F>(fieldInfo)(ref instance). - - - - - - A readable/assignable reference delegate to a static field - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - A readable/assignable reference to the field - - - - Creates a static field reference - The type (can be class or struct) the field is defined in - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The name of the field - A readable/assignable reference to the field - - - - Creates a static field reference - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The type (can be class or struct) the field is defined in - The name of the field - A readable/assignable reference to the field - - - - Creates a static field reference - An arbitrary type (by convention, the type the field is defined in) - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The field - A readable/assignable reference to the field - - The type parameter is only used in exception messaging and to distinguish between this method overload - and the overload (which returns a rather than a reference). - - - - - Creates a static field reference delegate - - The type of the field; or if the field's type is a reference type (a class or interface, NOT a struct or other value type), - a type that is assignable from that type; or if the field's type is an enum type, - either that type or the underlying integral type of that enum type - - The field - A readable/assignable delegate - - - - Creates a delegate to a given method - The delegate Type - The method to create a delegate from. - - Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate - where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound) - instance delegate where the delegate invocation always applies to the given . - - - Only applies for instance methods. If true (default) and is virtual, invocation of the delegate - calls the instance method virtually (the instance type's most-derived/overriden implementation of the method is called); - else, invocation of the delegate calls the exact specified (this is useful for calling base class methods) - Note: if false and is an interface method, an ArgumentException is thrown. - - A delegate of given to given - - - Delegate invocation is more performant and more convenient to use than - at a one-time setup cost. - - - Works for both type of static and instance methods, both open and closed (a.k.a. unbound and bound) instance methods, - and both class and struct methods. - - - - - - Creates a delegate for a given delegate definition, attributed with [] - The delegate Type, attributed with [] - - Only applies for instance methods. If null (default), returned delegate is an open (a.k.a. unbound) instance delegate - where an instance is supplied as the first argument to the delegate invocation; else, delegate is a closed (a.k.a. bound) - instance delegate where the delegate invocation always applies to the given . - - A delegate of given to the method specified via [] - attributes on - - This calls with the method and virtualCall arguments - determined from the [] attributes on , - and the given (for closed instance delegates). - - - - - Returns who called the current method - The calling method/constructor (excluding the caller) - - - - Rethrows an exception while preserving its stack trace (throw statement typically clobbers existing stack traces) - The exception to rethrow - - - - True if the current runtime is based on Mono, false otherwise (.NET) - - - - True if the current runtime is .NET Framework, false otherwise (.NET Core or Mono, although latter isn't guaranteed) - - - - True if the current runtime is .NET Core, false otherwise (Mono or .NET Framework) - - - - Throws a missing member runtime exception - The type that is involved - A list of names - - - - Gets default value for a specific type - The class/type - The default value - - - - Creates an (possibly uninitialized) instance of a given type - The class/type - The new instance - - - - Creates an (possibly uninitialized) instance of a given type - The class/type - The new instance - - - - - A cache for the or similar Add methods for different types. - - - - Makes a deep copy of any object - The type of the instance that should be created; for legacy reasons, this must be a class or interface - The original object - A copy of the original object but of type T - - - - Makes a deep copy of any object - The type of the instance that should be created - The original object - [out] The copy of the original object - Optional value transformation function (taking a field name and src/dst instances) - The optional path root to start with - - - - Makes a deep copy of any object - The original object - The type of the instance that should be created - Optional value transformation function (taking a field name and src/dst instances) - The optional path root to start with - The copy of the original object - - - - Tests if a type is a struct - The type - True if the type is a struct - - - - Tests if a type is a class - The type - True if the type is a class - - - - Tests if a type is a value type - The type - True if the type is a value type - - - - Tests if a type is an integer type - The type - True if the type represents some integer - - - - Tests if a type is a floating point type - The type - True if the type represents some floating point - - - - Tests if a type is a numerical type - The type - True if the type represents some number - - - - Tests if a type is void - The type - True if the type is void - - - - Test whether an instance is of a nullable type - Type of instance - An instance to test - True if instance is of nullable type, false if not - - - - Tests whether a type or member is static, as defined in C# - The type or member - True if the type or member is static - - - - Tests whether a type is static, as defined in C# - The type - True if the type is static - - - - Tests whether a property is static, as defined in C# - The property - True if the property is static - - - - Tests whether an event is static, as defined in C# - The event - True if the event is static - - - - Calculates a combined hash code for an enumeration of objects - The objects - The hash code - - - - A CodeInstruction match - - - The name of the match - - - The matched opcodes - - - The matched operands - - - The matched labels - - - The matched blocks - - - The jumps from the match - - - The jumps to the match - - - The match predicate - - - Creates a code match - The optional opcode - The optional operand - The optional name - - - - Creates a code match - The CodeInstruction - An optional name - - - - Creates a code match - The predicate - An optional name - - - - Returns a string that represents the match - A string representation - - - - A CodeInstruction matcher - - - The current position - The index or -1 if out of bounds - - - - Gets the number of code instructions in this matcher - The count - - - - Checks whether the position of this CodeMatcher is within bounds - True if this CodeMatcher is valid - - - - Checks whether the position of this CodeMatcher is outside its bounds - True if this CodeMatcher is invalid - - - - Gets the remaining code instructions - The remaining count - - - - Gets the opcode at the current position - The opcode - - - - Gets the operand at the current position - The operand - - - - Gets the labels at the current position - The labels - - - - Gets the exception blocks at the current position - The blocks - - - - Creates an empty code matcher - - - Creates a code matcher from an enumeration of instructions - The instructions (transpiler argument) - An optional IL generator - - - - Makes a clone of this instruction matcher - A copy of this matcher - - - - Gets instructions at the current position - The instruction - - - - Gets instructions at the current position with offset - The offset - The instruction - - - - Gets all instructions - A list of instructions - - - - Gets all instructions as an enumeration - A list of instructions - - - - Gets some instructions counting from current position - Number of instructions - A list of instructions - - - - Gets all instructions within a range - The start index - The end index - A list of instructions - - - - Gets all instructions within a range (relative to current position) - The start offset - The end offset - A list of instructions - - - - Gets a list of all distinct labels - The instructions (transpiler argument) - A list of Labels - - - - Reports a failure - The method involved - The logger - True if current position is invalid and error was logged - - - - Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed) - Explanation of where/why the exception was thrown that will be added to the exception message - The same code matcher - - - - Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed), - or if the matches do not match at current position - Explanation of where/why the exception was thrown that will be added to the exception message - Some code matches - The same code matcher - - - - Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed), - or if the matches do not match at any point between current position and the end - Explanation of where/why the exception was thrown that will be added to the exception message - Some code matches - The same code matcher - - - - Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed), - or if the matches do not match at any point between current position and the start - Explanation of where/why the exception was thrown that will be added to the exception message - Some code matches - The same code matcher - - - - Throw an InvalidOperationException if current state is invalid (position out of bounds / last match failed), - or if the check function returns false - Explanation of where/why the exception was thrown that will be added to the exception message - Function that checks validity of current state. If it returns false, an exception is thrown - The same code matcher - - - - Sets an instruction at current position - The instruction to set - The same code matcher - - - - Sets instruction at current position and advances - The instruction - The same code matcher - - - - Sets opcode and operand at current position - The opcode - The operand - The same code matcher - - - - Sets opcode and operand at current position and advances - The opcode - The operand - The same code matcher - - - - Sets opcode at current position and advances - The opcode - The same code matcher - - - - Sets operand at current position and advances - The operand - The same code matcher - - - - Creates a label at current position - [out] The label - The same code matcher - - - - Creates a label at a position - The position - [out] The new label - The same code matcher - - - - Adds an enumeration of labels to current position - The labels - The same code matcher - - - - Adds an enumeration of labels at a position - The position - The labels - The same code matcher - - - - Sets jump to - Branch instruction - Destination for the jump - [out] The created label - The same code matcher - - - - Inserts some instructions - The instructions - The same code matcher - - - - Inserts an enumeration of instructions - The instructions - The same code matcher - - - - Inserts a branch - The branch opcode - Branch destination - The same code matcher - - - - Inserts some instructions and advances the position - The instructions - The same code matcher - - - - Inserts an enumeration of instructions and advances the position - The instructions - The same code matcher - - - - Inserts a branch and advances the position - The branch opcode - Branch destination - The same code matcher - - - - Removes current instruction - The same code matcher - - - - Removes some instruction fro current position by count - Number of instructions - The same code matcher - - - - Removes the instructions in a range - The start - The end - The same code matcher - - - - Removes the instructions in a offset range - The start offset - The end offset - The same code matcher - - - - Advances the current position - The offset - The same code matcher - - - - Moves the current position to the start - The same code matcher - - - - Moves the current position to the end - The same code matcher - - - - Searches forward with a predicate and advances position - The predicate - The same code matcher - - - - Searches backwards with a predicate and reverses position - The predicate - The same code matcher - - - - Matches forward and advances position - True to set position to end of match, false to set it to the beginning of the match - Some code matches - The same code matcher - - - - Matches backwards and reverses position - True to set position to end of match, false to set it to the beginning of the match - Some code matches - The same code matcher - - - - Repeats a match action until boundaries are met - The match action - An optional action that is executed when no match is found - The same code matcher - - - - Gets a match by its name - The match name - An instruction - - - - General extensions for common cases - - - - Joins an enumeration with a value converter and a delimiter to a string - The inner type of the enumeration - The enumeration - An optional value converter (from T to string) - An optional delimiter - The values joined into a string - - - - Converts an array of types (for example methods arguments) into a human readable form - The array of types - A human readable description including brackets - - - - A full description of a type - The type - A human readable description - - - - A a full description of a method or a constructor without assembly details but with generics - The method/constructor - A human readable description - - - - A helper converting parameter infos to types - The array of parameter infos - An array of types - - - - A helper to access a value via key from a dictionary - The key type - The value type - The dictionary - The key - The value for the key or the default value (of T) if that key does not exist - - - - A helper to access a value via key from a dictionary with extra casting - The value type - The dictionary - The key - The value for the key or the default value (of T) if that key does not exist or cannot be cast to T - - - - Escapes Unicode and ASCII non printable characters - The string to convert - The string to convert - A string literal surrounded by - - - - Extensions for - - - - Shortcut for testing whether the operand is equal to a non-null value - The - The value - True if the operand has the same type and is equal to the value - - - - Shortcut for testing whether the operand is equal to a non-null value - The - The value - True if the operand is equal to the value - This is an optimized version of for - - - - Shortcut for code.opcode == opcode && code.OperandIs(operand) - The - The - The operand value - True if the opcode is equal to the given opcode and the operand has the same type and is equal to the given operand - - - - Shortcut for code.opcode == opcode && code.OperandIs(operand) - The - The - The operand value - True if the opcode is equal to the given opcode and the operand is equal to the given operand - This is an optimized version of for - - - - Tests for any form of Ldarg* - The - The (optional) index - True if it matches one of the variations - - - - Tests for Ldarga/Ldarga_S - The - The (optional) index - True if it matches one of the variations - - - - Tests for Starg/Starg_S - The - The (optional) index - True if it matches one of the variations - - - - Tests for any form of Ldloc* - The - The optional local variable - True if it matches one of the variations - - - - Tests for any form of Stloc* - The - The optional local variable - True if it matches one of the variations - - - - Tests if the code instruction branches - The - The label if the instruction is a branch operation or if not - True if the instruction branches - - - - Tests if the code instruction calls the method/constructor - The - The method - True if the instruction calls the method or constructor - - - - Tests if the code instruction loads a constant - The - True if the instruction loads a constant - - - - Tests if the code instruction loads an integer constant - The - The integer constant - True if the instruction loads the constant - - - - Tests if the code instruction loads a floating point constant - The - The floating point constant - True if the instruction loads the constant - - - - Tests if the code instruction loads an enum constant - The - The enum - True if the instruction loads the constant - - - - Tests if the code instruction loads a field - The - The field - Set to true if the address of the field is loaded - True if the instruction loads the field - - - - Tests if the code instruction stores a field - The - The field - True if the instruction stores this field - - - - Adds labels to the code instruction and return it - The - One or several to add - The same code instruction - - - Adds labels to the code instruction and return it - The - An enumeration of - The same code instruction - - - Extracts all labels from the code instruction and returns them - The - A list of - - - Moves all labels from the code instruction to a different one - The to move the labels from - The to move the labels to - The code instruction labels were moved from (now empty) - - - Moves all labels from a different code instruction to the current one - The to move the labels from - The to move the labels to - The code instruction that received the labels - - - Adds ExceptionBlocks to the code instruction and return it - The - One or several to add - The same code instruction - - - Adds ExceptionBlocks to the code instruction and return it - The - An enumeration of - The same code instruction - - - Extracts all ExceptionBlocks from the code instruction and returns them - The - A list of - - - Moves all ExceptionBlocks from the code instruction to a different one - The to move the ExceptionBlocks from - The to move the ExceptionBlocks to - The code instruction blocks were moved from (now empty) - - - Moves all ExceptionBlocks from a different code instruction to the current one - The to move the ExceptionBlocks from - The to move the ExceptionBlocks to - The code instruction that received the blocks - - - General extensions for collections - - - - A simple way to execute code for every element in a collection - The inner type of the collection - The collection - The action to execute - - - - A simple way to execute code for elements in a collection matching a condition - The inner type of the collection - The collection - The predicate - The action to execute - - - - A helper to add an item to a collection - The inner type of the collection - The collection - The item to add - The collection containing the item - - - - A helper to add an item to an array - The inner type of the collection - The array - The item to add - The array containing the item - - - - A helper to add items to an array - The inner type of the collection - The array - The items to add - The array containing the items - - - - General extensions for collections - - - - Tests a class member if it has an IL method body (external methods for example don't have a body) - The member to test - Returns true if the member has an IL body or false if not - - - A file log for debugging - - - - Full pathname of the log file, defaults to a file called harmony.log.txt on your Desktop - - - - The indent character. The default is tab - - - - The current indent level - - - - Changes the indentation level - The value to add to the indentation level - - - - Log a string in a buffered way. Use this method only if you are sure that FlushBuffer will be called - or else logging information is incomplete in case of a crash - The string to log - - - - Logs a list of string in a buffered way. Use this method only if you are sure that FlushBuffer will be called - or else logging information is incomplete in case of a crash - A list of strings to log (they will not be re-indented) - - - - Returns the log buffer and optionally empties it - True to empty the buffer - The buffer. - - - - Replaces the buffer with new lines - The lines to store - - - - Flushes the log buffer to disk (use in combination with LogBuffered) - - - - Log a string directly to disk. Slower method that prevents missing information in case of a crash - The string to log. - - - - Resets and deletes the log - - - - Logs some bytes as hex values - The pointer to some memory - The length of bytes to log - - - - - Default Harmony logger that writes to a file - - - - - Whether or not to enable writing the log. - - - - - Text writer to write the logs to. If not set, defaults to a file log. - - - - - File path of the log. - - - - - Main logger class that exposes log events. - - - - - A single log event that represents a single log message. - - - - - Log channel of the message. - - - - - The log message. - - - - - Log channel for the messages. - - - - - No channels (or an empty channel). - - - - - Basic information. - - - - - Full IL dumps of the generated dynamic methods. - - - - - Channel for warnings. - - - - - Channel for errors. - - - - - Additional debug information that is related to patching - - - - - All channels. - - - - - Filter for which channels should be listened to. - If the channel is in the filter, all log messages from that channel get propagated into event. - - - - - Event fired on any incoming message that passes the channel filter. - - - - - Pretty print a full type name. - - The . - The pretty printed full type name. - - - - A helper class to retrieve reflection info for non-private methods - - - - Given a lambda expression that calls a method, returns the method info - The lambda expression using the method - The method in the lambda expression - - - - Given a lambda expression that calls a method, returns the method info - The generic type - The lambda expression using the method - The method in the lambda expression - - - - Given a lambda expression that calls a method, returns the method info - The generic type - The generic result type - The lambda expression using the method - The method in the lambda expression - - - - Given a lambda expression that calls a method, returns the method info - The lambda expression using the method - The method in the lambda expression - - - - A reflection helper to read and write private elements - The result type defined by GetValue() - - - - Creates a traverse instance from an existing instance - The existing instance - - - - Gets/Sets the current value - The value to read or write - - - - A reflection helper to read and write private elements - - - - Creates a new traverse instance from a class/type - The class/type - A instance - - - - Creates a new traverse instance from a class T - The class - A instance - - - - Creates a new traverse instance from an instance - The object - A instance - - - - Creates a new traverse instance from a named type - The type name, for format see - A instance - - - - Creates a new and empty traverse instance - - - - Creates a new traverse instance from a class/type - The class/type - - - - Creates a new traverse instance from an instance - The object - - - - Gets the current value - The value - - - - Gets the current value - The type of the value - The value - - - - Invokes the current method with arguments and returns the result - The method arguments - The value returned by the method - - - - Invokes the current method with arguments and returns the result - The type of the value - The method arguments - The value returned by the method - - - - Sets a value of the current field or property - The value - The same traverse instance - - - - Gets the type of the current field or property - The type - - - - Moves the current traverse instance to a inner type - The type name - A traverse instance - - - - Moves the current traverse instance to a field - The type name - A traverse instance - - - - Moves the current traverse instance to a field - The type of the field - The type name - A traverse instance - - - - Gets all fields of the current type - A list of field names - - - - Moves the current traverse instance to a property - The type name - Optional property index - A traverse instance - - - - Moves the current traverse instance to a field - The type of the property - The type name - Optional property index - A traverse instance - - - - Gets all properties of the current type - A list of property names - - - - Moves the current traverse instance to a method - The name of the method - The arguments defining the argument types of the method overload - A traverse instance - - - - Moves the current traverse instance to a method - The name of the method - The argument types of the method - The arguments for the method - A traverse instance - - - - Gets all methods of the current type - A list of method names - - - - Checks if the current traverse instance is for a field - True if its a field - - - - Checks if the current traverse instance is for a property - True if its a property - - - - Checks if the current traverse instance is for a method - True if its a method - - - - Checks if the current traverse instance is for a type - True if its a type - - - - Iterates over all fields of the current type and executes a traverse action - Original object - The action receiving a instance for each field - - - - Iterates over all fields of the current type and executes a traverse action - Original object - Target object - The action receiving a pair of instances for each field pair - - - - Iterates over all fields of the current type and executes a traverse action - Original object - Target object - The action receiving a dot path representing the field pair and the instances - - - - Iterates over all properties of the current type and executes a traverse action - Original object - The action receiving a instance for each property - - - - Iterates over all properties of the current type and executes a traverse action - Original object - Target object - The action receiving a pair of instances for each property pair - - - - Iterates over all properties of the current type and executes a traverse action - Original object - Target object - The action receiving a dot path representing the property pair and the instances - - - - A default field action that copies fields to fields - - - - Returns a string that represents the current traverse - A string representation - - - - - Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), - so this symbol will not be reported as unused (as well as by other usage inspections). - - - - - Can be applied to attributes, type parameters, and parameters of a type assignable from . - When applied to an attribute, the decorated attribute behaves the same as . - When applied to a type parameter or to a parameter of type , indicates that the corresponding type - is used implicitly. - - - - - Specify the details of implicitly used symbol when it is marked - with or . - - - - Only entity marked with attribute considered used. - - - Indicates implicit assignment to a member. - - - - Indicates implicit instantiation of a type with fixed constructor signature. - That means any unused constructor parameters won't be reported as such. - - - - Indicates implicit instantiation of a type. - - - - Specify what is considered to be used implicitly when marked - with or . - - - - Members of entity marked with attribute are considered used. - - - Inherited entities are considered used. - - - Entity marked with attribute and all its members considered used. - - - diff --git a/Dependencies/BepInEx/BepInEx/core/0Harmony109.dll b/Dependencies/BepInEx/BepInEx/core/0Harmony109.dll deleted file mode 100644 index d8f55941..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/0Harmony109.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/0Harmony12.dll b/Dependencies/BepInEx/BepInEx/core/0Harmony12.dll deleted file mode 100644 index 563269a5..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/0Harmony12.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/0Harmony20.dll b/Dependencies/BepInEx/BepInEx/core/0Harmony20.dll deleted file mode 100644 index 33158c3e..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/0Harmony20.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/BepInEx.Harmony.dll b/Dependencies/BepInEx/BepInEx/core/BepInEx.Harmony.dll deleted file mode 100644 index 03565da7..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/BepInEx.Harmony.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/BepInEx.Harmony.xml b/Dependencies/BepInEx/BepInEx/core/BepInEx.Harmony.xml deleted file mode 100644 index 86b7dc6e..00000000 --- a/Dependencies/BepInEx/BepInEx/core/BepInEx.Harmony.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - BepInEx.Harmony - - - - - Specifies the indices of parameters that are ByRef. - - - - - The indices of parameters that are ByRef. - - - - The indices of parameters that are ByRef. - - - - An extension class for Harmony based operations. - - - - - Applies all patches specified in the type. - - The HarmonyInstance to use. - The type to scan. - - - - A wrapper for Harmony based operations. - - - - - Applies all patches specified in the type. - - The type to scan. - The HarmonyInstance to use. - - - - Applies all patches specified in the type. - - The type to scan. - The ID for the Harmony instance to create, which will be used. - - - - Applies all patches specified in the assembly. - - The assembly to scan. - The HarmonyInstance to use. - - - - Applies all patches specified in the assembly. - - The assembly to scan. - The ID for the Harmony instance to create, which will be used. - - - - Applies all patches specified in the calling assembly. - - The Harmony instance to use. - - - - Applies all patches specified in the calling assembly. - - The ID for the Harmony instance to create, which will be used. - - - - Returns an instruction to call the specified delegate. - - The delegate type to emit. - The delegate to emit. - The instruction to - - - diff --git a/Dependencies/BepInEx/BepInEx/core/BepInEx.Preloader.dll b/Dependencies/BepInEx/BepInEx/core/BepInEx.Preloader.dll deleted file mode 100644 index b7a0427d..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/BepInEx.Preloader.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/BepInEx.Preloader.xml b/Dependencies/BepInEx/BepInEx/core/BepInEx.Preloader.xml deleted file mode 100644 index fe5607df..00000000 --- a/Dependencies/BepInEx/BepInEx/core/BepInEx.Preloader.xml +++ /dev/null @@ -1,169 +0,0 @@ - - - - BepInEx.Preloader - - - - - Doorstop environment variables, passed into the BepInEx preloader. - https://github.com/NeighTools/UnityDoorstop/wiki#environment-variables - - - - - Path to the assembly that was invoked via Doorstop. Contains the same value as in "targetAssembly" configuration option in the config file. - - - - - Full path to the game's "Managed" folder that contains all the game's managed assemblies - - - - - Full path to the game executable currently running. - - - - - Array of paths where Mono searches DLLs from before assembly resolvers are invoked. - - - - - Delegate used in patching assemblies. - - The assembly that is being patched. - - - - Worker class which is used for loading and patching entire folders of assemblies, or alternatively patching and - loading assemblies one at a time. - - - - - List of all patcher plugins to be applied - - - - - Adds a single assembly patcher to the pool of applicable patches. - - Patcher to apply. - - - - Adds all patchers from all managed assemblies specified in a directory. - - Directory to search patcher DLLs from. - - - - Releases all patchers to let them be collected by GC. - - - - - Applies patchers to all assemblies in the given directory and loads patched assemblies into memory. - - Directories to load CLR assemblies from in their search order. - - - - Loads an individual assembly definition into the CLR. - - The assembly to load. - File name of the assembly being loaded. - - - - A single assembly patcher. - - - - - Target assemblies to patch. - - - - - Initializer method that is run before any patching occurs. - - - - - Finalizer method that is run after all patching is done. - - - - - The main patcher method that is called on every DLL defined in . - - - - - Type name of the patcher. - - - - - - - - - - - The main entrypoint of BepInEx, called from Doorstop. - - - - - Recreation of MonoMod's PlatformHelper.DeterminePlatform method, but with libc calls instead of creating processes. - - - - - This exists because the Mono implementation of is/was broken, and would call Write directly instead of calling TraceEvent. - - - - - The main entrypoint of BepInEx, and initializes all patchers and the chainloader. - - - - - The log writer that is specific to the preloader. - - - - - Inserts BepInEx's own chainloader entrypoint into UnityEngine. - - The assembly that will be attempted to be patched. - - - - Allocates a console window for use by BepInEx safely. - - - - - Log listener that listens to logs during preloading time and buffers messages for output in Unity logs later. - - - - - - - - - - - - - - - diff --git a/Dependencies/BepInEx/BepInEx/core/BepInEx.dll b/Dependencies/BepInEx/BepInEx/core/BepInEx.dll deleted file mode 100644 index babf943c..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/BepInEx.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/BepInEx.xml b/Dependencies/BepInEx/BepInEx/core/BepInEx.xml deleted file mode 100644 index 1c3d1c4f..00000000 --- a/Dependencies/BepInEx/BepInEx/core/BepInEx.xml +++ /dev/null @@ -1,1657 +0,0 @@ - - - - BepInEx - - - - - Base type of all classes representing and enforcing acceptable values of config settings. - - - - Type of values that this class can Clamp. - - - - Change the value to be acceptable, if it's not already. - - - - - Check if the value is an acceptable value. - - - - - Type of the supported values. - - - - - Get the string for use in config files. - - - - - Specify the list of acceptable values for a setting. - - - - - List of values that a setting can take. - - - - - Specify the list of acceptable values for a setting. - If the setting does not equal any of the values, it will be set to the first one. - - - - - - - - - - - - - - Specify the range of acceptable values for a setting. - - - - Lowest acceptable value - Highest acceptable value - - - - Lowest acceptable value - - - - - Highest acceptable value - - - - - - - - - - - - - - Provides access to a single setting inside of a . - - Type of the setting. - - - - Fired when the setting is changed. Does not detect changes made outside from this object. - - - - - Value of this setting. - - - - - - - - Container for a single setting of a . - Each config entry is linked to one config file. - - - - - Types of defaultValue and definition.AcceptableValues have to be the same as settingType. - - - - - Config file this entry is a part of. - - - - - Category and name of this setting. Used as a unique key for identification within a . - - - - - Description / metadata of this setting. - - - - - Type of the that this setting holds. - - - - - Default value of this setting (set only if the setting was not changed before). - - - - - Get or set the value of the setting. - - - - - Get the serialized representation of the value. - - - - - Set the value by using its serialized form. - - - - - If necessary, clamp the value to acceptable value range. T has to be equal to settingType. - - - - - Trigger setting changed event. - - - - - Write a description of this setting using all available metadata. - - - - - Section and key of a setting. Used as a unique key for identification within a . - The same definition can be used in multiple config files, it will point to different settings then. - - - - - - Group of the setting. All settings within a config file are grouped by this. - - - - - Name of the setting. - - - - - Create a new definition. Definitions with same section and key are equal. - - Group of the setting, case sensitive. - Name of the setting, case sensitive. - - - - - - - Check if the definitions are the same. - - - - - - Check if the definitions are the same. - - - - - - - - Check if the definitions are the same. - - - - - Check if the definitions are the same. - - - - - - - - Metadata of a . - - - - - Create a new description. - - Text describing the function of the setting and any notes or warnings. - Range of values that this setting can take. The setting's value will be automatically clamped. - Objects that can be used by user-made classes to add functionality. - - - - Text describing the function of the setting and any notes or warnings. - - - - - Range of acceptable values for a setting. - - - - - Objects that can be used by user-made classes to add functionality. - - - - - An empty description. - - - - - A helper class to handle persistent data. All public methods are thread-safe. - - - - - All config entries inside - - - - - Create a list with all config entries inside of this config file. - - - - - Create an array with all config entries inside of this config file. Should be only used for metadata purposes. - If you want to access and modify an existing setting then use - instead with no description. - - - - - Full path to the config file. The file might not exist until a setting is added and changed, or is called. - - - - - If enabled, writes the config to disk every time a value is set. - If disabled, you have to manually use or the changes will be lost! - - - - - - - - Create a new config file at the specified config path. - - Full path to a file that contains settings. The file will be created as needed. - If the config file/directory doesn't exist, create it immediately. - Information about the plugin that owns this setting file. - - - - Reloads the config from disk. Unsaved changes are lost. - - - - - Writes the config to disk. - - - - - Access one of the existing settings. If the setting has not been added yet, null is returned. - If the setting exists but has a different type than T, an exception is thrown. - New settings should be added with . - - Type of the value contained in this setting. - Section and Key of the setting. - - - - Access one of the existing settings. If the setting has not been added yet, null is returned. - If the setting exists but has a different type than T, an exception is thrown. - New settings should be added with . - - Type of the value contained in this setting. - Section/category/group of the setting. Settings are grouped by this. - Name of the setting. - - - - Access one of the existing settings. If the setting has not been added yet, false is returned. Otherwise, true. - If the setting exists but has a different type than T, an exception is thrown. - New settings should be added with . - - Type of the value contained in this setting. - Section and Key of the setting. - The ConfigEntry value to return. - - - - Access one of the existing settings. If the setting has not been added yet, null is returned. - If the setting exists but has a different type than T, an exception is thrown. - New settings should be added with . - - Type of the value contained in this setting. - Section/category/group of the setting. Settings are grouped by this. - Name of the setting. - The ConfigEntry value to return. - - - - Create a new setting. The setting is saved to drive and loaded automatically. - Each definition can be used to add only one setting, trying to add a second setting will throw an exception. - - Type of the value contained in this setting. - Section and Key of the setting. - Value of the setting if the setting was not created yet. - Description of the setting shown to the user and other metadata. - - - - Create a new setting. The setting is saved to drive and loaded automatically. - Each section and key pair can be used to add only one setting, trying to add a second setting will throw an exception. - - Type of the value contained in this setting. - Section/category/group of the setting. Settings are grouped by this. - Name of the setting. - Value of the setting if the setting was not created yet. - Description of the setting shown to the user and other metadata. - - - - Create a new setting. The setting is saved to drive and loaded automatically. - Each section and key pair can be used to add only one setting, trying to add a second setting will throw an exception. - - Type of the value contained in this setting. - Section/category/group of the setting. Settings are grouped by this. - Name of the setting. - Value of the setting if the setting was not created yet. - Simple description of the setting shown to the user. - - - - Create a new setting. The setting is saved to drive and loaded automatically. - Each definition can be used to add only one setting, trying to add a second setting will throw an exception. - - Type of the value contained in this setting. - Section and Key of the setting. - Value of the setting if the setting was not created yet. - Description of the setting shown to the user and other metadata. - - - - Create a new setting. The setting is saved to drive and loaded automatically. - Each section and key pair can be used to add only one setting, trying to add a second setting will throw an exception. - - Type of the value contained in this setting. - Section/category/group of the setting. Settings are grouped by this. - Name of the setting. - Value of the setting if the setting was not created yet. - Description of the setting shown to the user and other metadata. - - - - Create a new setting. The setting is saved to drive and loaded automatically. - Each section and key pair can be used to add only one setting, trying to add a second setting will throw an exception. - - Type of the value contained in this setting. - Section/category/group of the setting. Settings are grouped by this. - Name of the setting. - Value of the setting if the setting was not created yet. - Simple description of the setting shown to the user. - - - - Access a setting. Use Bind instead. - - - - - Access a setting. Use Bind instead. - - - - - An event that is fired every time the config is reloaded. - - - - - Fired when one of the settings is changed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns the ConfigDefinitions that the ConfigFile contains. - Creates a new array when the property is accessed. Thread-safe. - - - - - Returns the ConfigEntryBase values that the ConfigFile contains. - Creates a new array when the property is accessed. Thread-safe. - - - - - Provides access to a single setting inside of a . - - Type of the setting. - - - - Entry of this setting in the . - - - - - Unique definition of this setting. - - - - - Config file this setting is inside of. - - - - - Fired when the setting is changed. Does not detect changes made outside from this object. - - - - - Value of this setting. - - - - - A keyboard shortcut that can be used in Update method to check if user presses a key combo. The shortcut is only - triggered when the user presses the exact combination. For example, F + LeftCtrl will trigger only if user - presses and holds only LeftCtrl, and then presses F. If any other keys are pressed, the shortcut will not trigger. - - Can be used as a value of a setting in - to allow user to change this shortcut and have the changes saved. - - How to use: Use in this class instead of in the Update loop. - - - - - Shortcut that never triggers. - - - - - All KeyCode values that can be used in a keyboard shortcut. - - - - - Create a new keyboard shortcut. - - Main key to press - Keys that should be held down before main key is registered - - - - Main key of the key combination. It has to be pressed / let go last for the combination to be triggered. - If the combination is empty, is returned. - - - - - Modifiers of the key combination, if any. - - - - - Attempt to deserialize key combination from the string. - - - - - Serialize the key combination into a user readable string. - - - - - Check if the main key was just pressed (Input.GetKeyDown), and specified modifier keys are all pressed - - - - - Check if the main key is currently held down (Input.GetKey), and specified modifier keys are all pressed - - - - - Check if the main key was just lifted (Input.GetKeyUp), and specified modifier keys are all pressed. - - - - - - - - - - - - - - Arguments for events concerning a change of a setting. - - - - - - - - - Setting that was changed - - - - - Serializer/deserializer used by the config system. - - - - - Convert object of a given type to a string using available converters. - - - - - Convert string to an object of a given type using available converters. - - - - - Convert string to an object of a given type using available converters. - - - - - Get a converter for a given type if there is any. - - - - - Add a new type converter for a given type. - If a different converter is already added, this call is ignored and false is returned. - - - - - Check if a given type can be converted to and from string. - - - - - Give a list of types with registered converters. - - - - - For types that are in assemblies that can't get loaded before preloader runs (or it won't work on these assemblies) - - - - - A serializer/deserializer combo for some type(s). Used by the config system. - - - - - Used to serialize the type into a (hopefully) human-readable string. - Object is the instance to serialize, Type is the object's type. - - - - - Used to deserialize the type from a string. - String is the data to deserialize, Type is the object's type, should return instance to an object of Type. - - - - - True if an external console has been started, false otherwise. - - - - - The stream that writes to the standard out stream of the process. Should never be null. - - - - - The stream that writes to an external console. Null if no such console exists - - - - - Data class that represents information about a loadable BepInEx plugin. - Contains all metadata and additional info required for plugin loading by . - - - - - General metadata about a plugin. - - - - - Collection of attributes that describe what processes the plugin can run on. - - - - - Collection of attributes that describe what plugins this plugin depends on. - - - - - Collection of attributes that describe what plugins this plugin - is incompatible with. - - - - - File path to the plugin DLL - - - - - Instance of the plugin that represents this info. NULL if no plugin is instantiated from info (yet) - - - - - - - - This attribute denotes that a class is a plugin, and specifies the required metadata. - - - - - The unique identifier of the plugin. Should not change between plugin versions. - - - - - The user friendly name of the plugin. Is able to be changed between versions. - - - - - The specfic version of the plugin. - - - - The unique identifier of the plugin. Should not change between plugin versions. - The user friendly name of the plugin. Is able to be changed between versions. - The specfic version of the plugin. - - - - This attribute specifies any dependencies that this plugin has on other plugins. - - - - - Flags that are applied to a dependency - - - - - The plugin has a hard dependency on the referenced plugin, and will not run without it. - - - - - This plugin has a soft dependency on the referenced plugin, and is able to run without it. - - - - - The GUID of the referenced plugin. - - - - - The flags associated with this dependency definition. - - - - - The minimum version of the referenced plugin. - - - - - Marks this as depenant on another plugin. The other plugin will be loaded before this one. - If the other plugin doesn't exist, what happens depends on the parameter. - - The GUID of the referenced plugin. - The flags associated with this dependency definition. - - - - Marks this as depenant on another plugin. The other plugin will be loaded before this one. - If the other plugin doesn't exist or is of a version below , this plugin will not load and an error will be logged instead. - - The GUID of the referenced plugin. - The minimum version of the referenced plugin. - When version is supplied the dependency is always treated as HardDependency - - - - This attribute specifies other plugins that are incompatible with this plugin. - - - - - The GUID of the referenced plugin. - - - - - Marks this as incompatible with another plugin. - If the other plugin exists, this plugin will not be loaded and a warning will be shown. - - The GUID of the referenced plugin. - - - - This attribute specifies which processes this plugin should be run for. Not specifying this attribute will load the plugin under every process. - - - - - The name of the process that this plugin will run under. - - - - The name of the process that this plugin will run under. - - - - Helper class to use for retrieving metadata about a plugin, defined as attributes. - - - - - Retrieves the BepInPlugin metadata from a plugin type. - - The plugin type. - The BepInPlugin metadata of the plugin type. - - - - Retrieves the BepInPlugin metadata from a plugin instance. - - The plugin instance. - The BepInPlugin metadata of the plugin instance. - - - - Gets the specified attributes of a type, if they exist. - - The attribute type to retrieve. - The plugin type. - The attributes of the type, if existing. - - - - Gets the specified attributes of an instance, if they exist. - - The attribute type to retrieve. - The plugin instance. - The attributes of the instance, if existing. - - - - Retrieves the dependencies of the specified plugin type. - - The plugin type. - A list of all plugin types that the specified plugin type depends upon. - - - - This class is appended to AssemblyInfo.cs when BepInEx is built via a CI pipeline. - It is mainly intended to signify that the current build is not a release build and is special, like for instance a bleeding edge build. - - - - - The manager and loader for all plugins, and the entry point for BepInEx plugin system. - - - - - The loaded and initialized list of plugins. - - - - - List of all loaded via the chainloader. - - - - - Collection of error chainloader messages that occured during plugin loading. - Contains information about what certain plugins were not loaded. - - - - - The GameObject that all plugins are attached to as components. - - - - - Initializes BepInEx to be able to start the chainloader. - - - - - Analyzes the given type definition and attempts to convert it to a valid - - Type definition to analyze. - If the type represent a valid plugin, returns a instance. Otherwise, return null. - - - - The entrypoint for the BepInEx plugin system. - - - - - A cacheable metadata item. Can be used with and to cache plugin metadata. - - - - - Serialize the object into a binary format. - - - - - - Loads the object from binary format. - - - - - - A cached assembly. - - - - - - List of cached items inside the assembly. - - - - - Timestamp of the assembly. Used to check the age of the cache. - - - - - Provides methods for loading specified types from an assembly. - - - - - Default assembly resolved used by the - - - - - Default reader parameters used by - - - - - Event fired when fails to resolve a type during type loading. - - - - - Looks up assemblies in the given directory and locates all types that can be loaded and collects their metadata. - - The specific base type to search for. - The directory to search for assemblies. - A function to check if a type should be selected and to build the type metadata. - A filter function to quickly determine if the assembly can be loaded. - The name of the cache to get cached types from. - A dictionary of all assemblies in the directory and the list of type metadatas of types that match the selector. - - - - Loads an index of type metadatas from a cache. - - Name of the cache - Cacheable item - Cached type metadatas indexed by the path of the assembly that defines the type. If no cache is defined, return null. - - - - Saves indexed type metadata into a cache. - - Name of the cache - List of plugin metadatas indexed by the path to the assembly that contains the types - Cacheable item - - - - Converts TypeLoadException to a readable string. - - TypeLoadException - Readable representation of the exception - - - - The base plugin type that is used by the BepInEx plugin loader. - - - - - Information about this plugin as it was loaded. - - - - - Logger instance tied to this plugin. - - - - - Default config file tied to this plugin. The config file will not be created until - any settings are added and changed, or is called. - - - - - Create a new instance of a plugin and all of its tied in objects. - - BepInPlugin attribute is missing. - - - - Logs entries using Unity specific outputs. - - - - - Log levels to display. - - - - - Writer for the disk log. - - - - - Timer for flushing the logs to a file. - - - - - Whether to write Unity log messages to disk log. - - - - - Creates a new disk log listener. - - Path to the log. - Log levels to display. - Whether to append logs to an already existing log file. - Whether to include Unity log into the disk log. - - - - - - - - - - Disposes of Disk logger - - - - - Log event arguments. Contains info about the log message. - - - - - Logged data. - - - - - Log levels for the data. - - - - - Log source that emitted the log event. - - - - - Creates the log event args- - - Logged data. - Log level of the data. - Log source that emits these args. - - - - - - - Like but appends newline at the end. - - Same output as but with new line. - - - - A static Logger instance. - - - - - Collection of all log listeners that receive log events. - - - - - Collection of all log source that output log events. - - - - - Logs an entry to the current logger instance. - - The level of the entry. - The textual value of the entry. - - - - Creates a new log source with a name and attaches it to log sources. - - Name of the log source to create. - An instance of that allows to write logs. - - - - The level, or severity of a log entry. - - - - - No level selected. - - - - - A fatal error has occurred, which cannot be recovered from. - - - - - An error has occured, but can be recovered from. - - - - - A warning has been produced, but does not necessarily mean that something wrong has happened. - - - - - An important message that should be displayed to the user. - - - - - A message of low importance. - - - - - A message that would likely only interest a developer. - - - - - All log levels. - - - - - Helper methods for log level handling. - - - - - Gets the highest log level when there could potentially be multiple levels provided. - - The log level(s). - The highest log level supplied. - - - - Returns a translation of a log level to it's associated console colour. - - The log level(s). - A console color associated with the highest log level supplied. - - - - A generic log listener that receives log events and can route them to some output (e.g. file, console, socket). - - - - - Handle an incoming log event. - - Log source that sent the event. Don't use; instead use - Information about the log message. - - - - Log source that can output log messages. - - - - - Name of the log source. - - - - - Event that sends the log message. Call to send a log message. - - - - - A generic, multi-purpose log source. Exposes simple API to manually emit logs. - - - - - - - - - - - Creates a manual log source. - - Name of the log source. - - - - Logs a message with the specified log level. - - Log levels to attach to the message. Multiple can be used with bitwise ORing. - Data to log. - - - - Logs a message with level. - - Data to log. - - - - Logs a message with level. - - Data to log. - - - - Logs a message with level. - - Data to log. - - - - Logs a message with level. - - Data to log. - - - - Logs a message with level. - - Data to log. - - - - Logs a message with level. - - Data to log. - - - - - - - A source that routes all logs from API to BepInEx logger. - - - - - - Whether Trace logs are rerouted. - - - - - Creates a new trace log source. - - New log source (or already existing one). - - - - Internal log source. - - - - - Creates a new trace log source. - - - - - Writes a message to the underlying instance. - - The message to write. - - - - Writes a message and a newline to the underlying instance. - - The message to write. - - - - - - - - - - Logs entries using Unity specific outputs. - - - - - - - - - - - Logs entries using Unity specific outputs. - - - - - - - - - - - Logs entries using Unity specific outputs. - - - - - - - - - - - Creates a new Unity log source. - - - - - - - - Paths used by BepInEx - - - - - List of directories from where Mono will search assemblies before assembly resolving is invoked. - - - - - The directory that the core BepInEx DLLs reside in. - - - - - The path to the core BepInEx DLL. - - - - - The path to the main BepInEx folder. - - - - - The path of the currently executing program BepInEx is encapsulated in. - - - - - The directory that the currently executing process resides in. - On OSX however, this is the parent directory of the game.app folder. - - - - - The path to the Managed folder of the currently running Unity game. - - - - - The path to the config directory. - - - - - The path to the global BepInEx configuration file. - - - - - The path to temporary cache files. - - - - - The path to the patcher plugin folder which resides in the BepInEx folder. - - - - - The path to the plugin folder which resides in the BepInEx folder. - - This is ONLY guaranteed to be set correctly when Chainloader has been initialized. - - - - - - The name of the currently executing process. - - - - - Provides methods for running code on other threads and synchronizing with the main thread. - - - - - Current instance of the helper. - - - - - Gives methods for invoking delegates on the main unity thread, both synchronously and asynchronously. - Can be used in many built-in framework types, for example - and to make their events fire on the main unity thread. - - - - - Queue the delegate to be invoked on the main unity thread. Use to synchronize your threads. - - - - - Queue the delegate to be invoked on a background thread. Use this to run slow tasks without affecting the game. - NOTE: Most of Unity API can not be accessed while running on another thread! - - - Task to be executed on another thread. Can optionally return an Action that will be executed on the main thread. - You can use this action to return results of your work safely. Return null if this is not needed. - - - - - False if current code is executing on the main unity thread, otherwise True. - Warning: Will return true before the first frame finishes (i.e. inside plugin Awake and Start methods). - - - - - - Convenience extensions for utilizing multiple threads and using the . - - - - - - - - Apply a function to a collection of data by spreading the work on multiple threads. - Outputs of the functions are returned to the current thread and yielded one by one. - - Type of the input values. - Type of the output values. - Input values for the work function. - Function to apply to the data on multiple threads at once. - Number of worker threads. By default SystemInfo.processorCount is used. - An exception was thrown inside one of the threads, and the operation was aborted. - Need at least 1 workerCount. - - - - Generic helper properties and methods. - - - - - Whether current Common Language Runtime supports dynamic method generation using namespace. - - - - - An encoding for UTF-8 which does not emit a byte order mark (BOM). - - - - - Try to perform an action. - - Action to perform. - Possible exception that gets returned. - True, if action succeeded, false if an exception occured. - - - - Combines multiple paths together, as the specific method is not available in .NET 3.5. - - The multiple paths to combine together. - A combined path. - - - - Returns the parent directory of a path, optionally specifying the amount of levels. - - The path to get the parent directory of. - The amount of levels to traverse. Defaults to 1 - The parent directory. - - - - Tries to parse a bool, with a default value if unable to parse. - - The string to parse - The value to return if parsing is unsuccessful. - Boolean value of input if able to be parsed, otherwise default value. - - - - Converts a file path into a UnityEngine.WWW format. - - The file path to convert. - A converted file path. - - - - Indicates whether a specified string is null, empty, or consists only of white-space characters. - - The string to test. - True if the value parameter is null or empty, or if value consists exclusively of white-space characters. - - - - Sorts a given dependency graph using a direct toposort, reporting possible cyclic dependencies. - - Nodes to sort - Function that maps a node to a collection of its dependencies. - Type of the node in a dependency graph. - Collection of nodes sorted in the order of least dependencies to the most. - Thrown when a cyclic dependency occurs. - - - - Checks whether a given cecil type definition is a subtype of a provided type. - - Cecil type definition - Type to check against - Whether the given cecil type is a subtype of the type. - - - - Try to resolve and load the given assembly DLL. - - Name of the assembly, of the type . - Directory to search the assembly from. - The loaded assembly. - True, if the assembly was found and loaded. Otherwise, false. - - - - Try to resolve and load the given assembly DLL. - - Name of the assembly, of the type . - Directory to search the assembly from. - Reader parameters that contain possible custom assembly resolver. - The loaded assembly. - True, if the assembly was found and loaded. Otherwise, false. - - - - Tries to create a file with the given name - - Path of the file to create - File open mode - Resulting filestream - File access options - File share options - - - - - Try to parse given string as an assembly name - - Fully qualified assembly name - Resulting instance - true, if parsing was successful, otherwise false - - On some versions of mono, using fails because it runs on unmanaged side - which has problems with encoding. - Using solves this by doing parsing on managed side instead. - - - - - Gets unique files in all given directories. If the file with the same name exists in multiple directories, - only the first occurrence is returned. - - Directories to search from. - File pattern to search. - Collection of all files in the directories. - - - - Console class with safe handlers for Unity 4.x, which does not have a proper Console implementation - - - - diff --git a/Dependencies/BepInEx/BepInEx/core/HarmonyXInterop.dll b/Dependencies/BepInEx/BepInEx/core/HarmonyXInterop.dll deleted file mode 100644 index f8f88dc5..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/HarmonyXInterop.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Mdb.dll b/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Mdb.dll deleted file mode 100644 index bddf5cbd..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Mdb.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Pdb.dll b/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Pdb.dll deleted file mode 100644 index 9227f6db..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Pdb.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Rocks.dll b/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Rocks.dll deleted file mode 100644 index a77ac871..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.Rocks.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.dll b/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.dll deleted file mode 100644 index 18735f93..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/Mono.Cecil.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/MonoMod.RuntimeDetour.dll b/Dependencies/BepInEx/BepInEx/core/MonoMod.RuntimeDetour.dll deleted file mode 100644 index bbb7779e..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/MonoMod.RuntimeDetour.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/MonoMod.RuntimeDetour.xml b/Dependencies/BepInEx/BepInEx/core/MonoMod.RuntimeDetour.xml deleted file mode 100644 index 45e9d3b6..00000000 --- a/Dependencies/BepInEx/BepInEx/core/MonoMod.RuntimeDetour.xml +++ /dev/null @@ -1,178 +0,0 @@ - - - - MonoMod.RuntimeDetour - - - - - A fully managed detour. - Multiple Detours for a method to detour from can exist at any given time. Detours can be layered. - If you're writing your own detour manager or need to detour native functions, it's better to create instances of NativeDetour instead. - - - - - Mark the detour as applied in the detour chain. This can be done automatically when creating an instance. - - - - - Undo the detour without freeing it, allowing you to reapply it later. - - - - - Free the detour, while also permanently undoing it. This makes any further operations on this detour invalid. - - - - - Undo and free this temporary detour. - - - - - Generate a new DynamicMethod with which you can invoke the previous state. - - - - - Generate a new DynamicMethod with which you can invoke the previous state. - - - - - Generate a new DynamicMethod with which you can invoke the previous state. - - - - - A "raw" native detour, acting as a wrapper around NativeDetourData with a few helpers. - Only one NativeDetour for a method to detour from can exist at any given time. NativeDetours cannot be layered. - If you don't need the trampoline generator or any of the management helpers, use DetourManager.Native directly. - Unless you're writing your own detour manager or need to detour native functions, it's better to create instances of Detour instead. - - - - - Apply the native detour. This can be done automatically when creating an instance. - - - - - Undo the native detour without freeing the detour native data, allowing you to reapply it later. - - - - - Changes the source of this native detour to a new source address. This does not repair the old source location. - This also assumes that is simply a new address for the same method as this was constructed with. - - The new source location. - - - - Changed the target of this native detour to a new target. - - The new target address. - - - - Free the detour's data without undoing it. This makes any further operations on this detour invalid. - - - - - Undo and free this temporary detour. - - - - - Generate a new DynamicMethod with which you can invoke the previous state. - If the NativeDetour holds a reference to a managed method, a copy of the original method is returned. - If the NativeDetour holds a reference to a native function, an "undo-call-redo" trampoline with a matching signature is returned. - - - - - Generate a new delegate with which you can invoke the previous state. - If the NativeDetour holds a reference to a managed method, a copy of the original method is returned. - If the NativeDetour holds a reference to a native function, an "undo-call-redo" trampoline with a matching signature is returned. - - - - - Write the given value at the address to + offs, afterwards advancing offs by sizeof(byte). - - - - - Write the given value at the address to + offs, afterwards advancing offs by sizeof(ushort). - - - - - Write the given value at the address to + offs, afterwards advancing offs by sizeof(ushort). - - - - - Write the given value at the address to + offs, afterwards advancing offs by sizeof(ulong). - - - - - Generate a DynamicMethod to easily call the given native function from another DynamicMethod. - - The pointer to the native function to call. - A MethodBase with the target function's signature. - The detoured DynamicMethod. - - - - Fill the DynamicMethodDefinition with a throw. - - - - - Emit a call to DetourManager.Native.Copy using the given parameters. - - - - - Emit a call to DetourManager.Native.Apply using a copy of the given data. - - - - - The data forming a "raw" native detour, created and consumed by DetourManager.Native. - - - - - The method to detour from. Set when the structure is created by the IDetourNativePlatform. - - - - - The target method to be called instead. Set when the structure is created by the IDetourNativePlatform. - - - - - The type of the detour. Determined when the structure is created by the IDetourNativePlatform. - - - - - The size of the detour. Calculated when the structure is created by the IDetourNativePlatform. - - - - - DetourManager.Native-specific data. - - - - diff --git a/Dependencies/BepInEx/BepInEx/core/MonoMod.Utils.dll b/Dependencies/BepInEx/BepInEx/core/MonoMod.Utils.dll deleted file mode 100644 index 664faff7..00000000 Binary files a/Dependencies/BepInEx/BepInEx/core/MonoMod.Utils.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/core/MonoMod.Utils.xml b/Dependencies/BepInEx/BepInEx/core/MonoMod.Utils.xml deleted file mode 100644 index 98b3a7db..00000000 --- a/Dependencies/BepInEx/BepInEx/core/MonoMod.Utils.xml +++ /dev/null @@ -1,1465 +0,0 @@ - - - - MonoMod.Utils - - - - - An IL manipulation "context" with various helpers and direct access to the MethodBody. - - - - - The manipulator callback, accepted by the Invoke method. - - - - - - The manipulated method. - - - - - The manipulated method's IL processor. - - - - - The manipulated method body. - - - - - The manipulated method's module. - - - - - The manipulated method instructions. - - - - - A readonly list of all defined labels. - - - - - Has the context been made read-only? No further method access is possible, but the context has not yet been disposed. - - - - - Events which run when the context will be disposed. - - - - - The current reference bag. Used for methods such as EmitReference and EmitDelegate. - - - - - Invoke a given manipulator callback. - - The manipulator to run in this context. - - - - Mark this ILContext as read-only and prevent this context from further accessing the originally passed method. - - - If the method is altered prior to calling MakeReadOnly or afterwards by accessing the method directly, the results are undefined. - - - - - See - - - - - See - - - - - See - - - - - Define a new label to be marked with a cursor. - - A label without a target instruction. - - - - Define a new label pointing at a given instruction. - - The instruction the label will point at. - A label pointing at the given instruction. - - - - Determine the index of a given instruction. - - The instruction to get the index of. - The instruction index, or the end of the method body if it hasn't been found. - - - - Obtain all labels pointing at the given instruction. - - The instruction to get all labels for. - All labels targeting the given instruction. - - - - Bind an arbitary object to an ILContext for static retrieval. - - The type of the object. The combination of typeparam and id provides the unique static reference. - The object to store. - The id to use in combination with the typeparam for object retrieval. - - - - Dispose this context, making it read-only and invoking all OnDispose event listeners. - - - - - Obtain a string representation of this context (method ID and body). - - A string representation of this context. - - - - Specifies where a ILCursor should be positioned in relation to the target of a search function - - - - - Move the cursor before the first instruction in the match - - - - - Equivalent to Before with `cursor.MoveAfterLabels()` causing emitted instructions to become the target of incoming labels - - - - - Move the cursor after the last instruction in the match - - - - - Indicates whether the position of a ILCursor is the result of a search function and - if the next search should ignore the instruction preceeding or following this cursor. - - SearchTarget.Next is the result of searching with MoveType.Before, and SearchTarget.Prev from MoveType.After - - - - - A foward searching function cannot match the Next instruction and must move the cursor forward - - - - - A reverse searching function cannot match the Next instruction and must move the cursor backward - - - - - A cursor used to manipulate a method body in an ILContext. - - - - - The context to which this cursor belongs to. - - - - - The instruction immediately following the cursor position or null if the cursor is at the end of the instruction list. - - - - - The instruction immediately preceding the cursor position or null if the cursor is at the start of the instruction list. - - - - - The instruction immediately preceding the cursor position or null if the cursor is at the start of the instruction list. - - - - - The index of the instruction immediately following the cursor position. Range: 0 to Instrs.Count - Setter accepts negative indexing by adding Instrs.Count to the operand - - - - - Indicates whether the position of a MMILCursor is the result of a search function and - if the next search should ignore the instruction preceeding or following this cursor. - - See - - - - - Enumerates all labels which point to the current instruction (label.Target == Next) - - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - Create a clone of this cursor. - - The cloned cursor. - - - - Is this cursor before the given instruction? - - The instruction to check. - True if this cursor is before the given instruction, false otherwise. - - - - Is this cursor after the given instruction? - - The instruction to check. - True if this cursor is after the given instruction, false otherwise. - - - - Obtain a string representation of this cursor (method ID, index, search target, surrounding instructions). - - A string representation of this cursor. - - - - Move the cursor to a target instruction. All other movements go through this. - - The target instruction - Where to move in relation to the target instruction and incoming labels (branches) - Whether to set the `SearchTarget` and skip the target instruction with the next search function - this - - - - Move the cursor after incoming labels (branches). If an instruction is emitted, all labels which currently point to Next, will point to the newly emitted instruction. - - this - - - - Move the cursor before incoming labels (branches). This is the default behaviour. Emitted instructions will not cause labels to change targets. - - this - - - - Move the cursor to a target index. Supports negative indexing. See - - this - - - - Overload for Goto(label.Target). defaults to MoveType.AfterLabel - - this - - - - Search forward and moves the cursor to the next sequence of instructions matching the corresponding predicates. See also - - this - If no match is found - - - - Search forward and moves the cursor to the next sequence of instructions matching the corresponding predicates. - - True if a match was found - - - - Search backward and moves the cursor to the next sequence of instructions matching the corresponding predicates. See also - - this - If no match is found - - - - Search backward and moves the cursor to the next sequence of instructions matching the corresponding predicates. - - True if a match was found - - - - Find the next occurences of a series of instructions matching the given set of predicates with gaps permitted. - - An array of cursors corresponding to each found instruction (MoveType.Before) - If no match is found - - - - Find the next occurences of a series of instructions matching the given set of predicates with gaps permitted. - - An array of cursors corresponding to each found instruction (MoveType.Before) - True if a match was found - - - - Search backwards for occurences of a series of instructions matching the given set of predicates with gaps permitted. - - An array of cursors corresponding to each found instruction (MoveType.Before) - If no match is found - - - - Search backwards for occurences of a series of instructions matching the given set of predicates with gaps permitted. - - An array of cursors corresponding to each found instruction (MoveType.Before) - True if a match was found - - - - Set the target of a label to the current position (label.Target = Next) and moves after it. - - The label to mark - - - - Create a new label targetting the current position (label.Target = Next) and moves after it. - - The newly created label - - - - Create a new label for use with - - A new label with no target - - - - Remove the Next instruction - - - - - Remove several instructions - - - - - Move the cursor and all labels the cursor is positioned after to a target instruction - - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position. - - The instruction opcode. - The instruction operand. - this - - - - Emit a new instruction at this cursor's current position, accessing a given member. - - The type in which the member is defined. - The instruction opcode. - The accessed member name. - this - - - - Bind an arbitary object to an ILContext for static retrieval. See - - - - - Emit the IL to retrieve a stored reference of type with the given and place it on the stack. - - - - - Store an object in the reference store, and emit the IL to retrieve it and place it on the stack. - - - - - Emit the IL to invoke a delegate as if it were a method. Stack behaviour matches OpCodes.Call - - - - - A label to be used in ILContexts. - - - - - The target instruction this label points at. - - - - - All instructions using this label. - - - - - An IL inline reference bag used for ILContexts. - - - - - Get the object for the given ID. - - The object type. - The object ID. - The stored object. - - - - Get a MethodInfo for the getter. - - The object type. - The getter method. - - - - Store a new object. - - The object type. - The object to be stored. - An ID to be used for all further operations. - - - - Remove the object with the given ID from the bag, essentially clearing the ID's slot. - - The object type. - The object ID. - - - - Get a MethodInfo invoking a delegate of the given type, with the delegate at the top of the stack. Used by . - - The delegate type. - A MethodInfo invoking a delegate of the given type. - - - - The default IL reference bag. Throws NotSupportedException for every operation. - - - - - An IL reference bag implementation to be used for runtime-generated methods. - - - - - Collection of extensions used by MonoMod and other projects. - - - - - Create a hexadecimal string for the given bytes. - - The input bytes. - The output hexadecimal string. - - - - Invokes all delegates in the invocation list, passing on the result to the next. - - Type of the result. - The multicast delegate. - The initial value and first parameter. - Any other arguments that may be passed. - The result of all delegates. - - - - Invokes all delegates in the invocation list, as long as the previously invoked delegate returns true. - - - - - Invokes all delegates in the invocation list, as long as the previously invoked delegate returns false. - - - - - Invokes all delegates in the invocation list, as long as the previously invoked delegate returns null. - - - - - Split PascalCase words to become Pascal Case instead. - - PascalCaseString - Pascal Case String - - - - Read the string from the BinaryReader BinaryWriter in a C-friendly format. - - The input which the method reads from. - The output string. - - - - Write the string to the BinaryWriter in a C-friendly format. - - The output which the method writes to. - The input string. - - - - Cast a delegate from one type to another. Compatible with delegates holding an invocation list (combined delegates). - - The input delegate. - The output delegate. - - - - Cast a delegate from one type to another. Compatible with delegates holding an invocation list (combined delegates). - - The input delegate. - The wanted output delegate type. - The output delegate. - - - - Print the exception to the console, including extended loading / reflection data useful for mods. - - - - - Get the method of interest for a given state machine method. - - The method creating the state machine. - The "main" method in the state machine. - - - - Gets the actual generic method definition of a method, as defined on the fully open type. - - The potentially instantiated method to find the definition of. - The original method definition, with no generic arguments filled in. - - - - Safely resolve a reference, silently discarding any exceptions. - - The reference to resolve. - The resolved definition or null. - - - - Safely resolve a reference, silently discarding any exceptions. - - The reference to resolve. - The resolved definition or null. - - - - Safely resolve a reference, silently discarding any exceptions. - - The reference to resolve. - The resolved definition or null. - - - - Safely resolve a reference, silently discarding any exceptions. - - The reference to resolve. - The resolved definition or null. - - - - Get a certain custom attribute from an attribute provider. - - The attribute provider. - The custom attribute name. - The first matching custom attribute, or null if no matching attribute has been found. - - - - Determine if an attribute provider has got a specific custom attribute. - - The attribute provider. - The custom attribute name. - true if the attribute provider contains the given custom attribute, false otherwise. - - - - Get the integer value pushed onto the stack with this instruction. - - The instruction to get the pushed integer value for. - The pushed integer value. - - - - Get the integer value pushed onto the stack with this instruction. - - The instruction to get the pushed integer value for. - The pushed integer value or null. - - - - Determine if the method call is a base method call. - - The caller method body. - The called method. - True if the called method is a base method of the caller method, false otherwise. - - - - Determine if the given method can be preferably called using callvirt. - - The called method. - True if the called method can be called using callvirt, false otherwise. - - - - Determine if the given type is a struct (also known as "value type") or struct-alike (f.e. primitive). - - The type to check. - True if the type is a struct, primitive or similar, false otherwise. - - - - Get the long form opcode for any short form opcode. - - The short form opcode. - The long form opcode. - - - - Get the short form opcode for any long form opcode. - - The long form opcode. - The short form opcode. - - - - Calculate updated instruction offsets. Required for certain manual fixes. - - The method to recalculate the IL instruction offsets for. - - - - Fix (and optimize) any instructions which should use the long / short form opcodes instead. - - The method to apply the fixes to. - - - - Check if the signatures of a given System.Reflection and Mono.Cecil member reference match. - - The System.Reflection member reference. - The Mono.Cecil member reference. - True if both references share the same signature, false otherwise. - - - - Check if the signatures of a given System.Reflection and Mono.Cecil member reference match. - - The Mono.Cecil member reference. - The System.Reflection member reference. - True if both references share the same signature, false otherwise. - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - Determine if two types are compatible with each other (f.e. object with string, or enums with their underlying integer type). - - The first type. - The second type. - True if both types are compatible with each other, false otherwise. - - - - Creates a delegate of the specified type from this method. - - The method to create the delegate from. - The type of the delegate to create. - The delegate for this method. - - - - Creates a delegate of the specified type with the specified target from this method. - - The method to create the delegate from. - The type of the delegate to create. - The object targeted by the delegate. - The delegate for this method. - - - - Creates a delegate of the specified type from this method. - - The method to create the delegate from. - The type of the delegate to create. - The delegate for this method. - - - - Creates a delegate of the specified type with the specified target from this method. - - The method to create the delegate from. - The type of the delegate to create. - The object targeted by the delegate. - The delegate for this method. - - - - Find a method for a given ID. - - The type to search in. - The method ID. - Whether to perform a simple search pass as well or not. - The first matching method or null. - - - - Find a method for a given ID recursively (including the passed type's base types). - - The type to search in. - The method ID. - Whether to perform a simple search pass as well or not. - The first matching method or null. - - - - Find a method for a given ID. - - The type to search in. - The method ID. - Whether to perform a simple search pass as well or not. - The first matching method or null. - - - - Find a method for a given ID recursively (including the passed type's base types). - - The type to search in. - The method ID. - Whether to perform a simple search pass as well or not. - The first matching method or null. - - - - Find a property for a given name. - - The type to search in. - The property name. - The first matching property or null. - - - - Find a property for a given name recursively (including the passed type's base types). - - The type to search in. - The property name. - The first matching property or null. - - - - Find a field for a given name. - - The type to search in. - The field name. - The first matching field or null. - - - - Find a field for a given name recursively (including the passed type's base types). - - The type to search in. - The field name. - The first matching field or null. - - - - Find an event for a given name. - - The type to search in. - The event name. - The first matching event or null. - - - - Find an event for a given name recursively (including the passed type's base types). - - The type to search in. - The event name. - The first matching event or null. - - - - Get a reference ID that is similar to the full name, but consistent between System.Reflection and Mono.Cecil. - - The method to get the ID for. - The name to use instead of the reference's own name. - The ID to use instead of the reference's declaring type ID. - Whether the type ID should be included or not. System.Reflection avoids it by default. - Whether the ID should be "simple" (name only). - The ID. - - - - Get a reference ID that is similar to the full name, but consistent between System.Reflection and Mono.Cecil. - - The call site to get the ID for. - The ID. - - - - Get a reference ID that is similar to the full name, but consistent between System.Reflection and Mono.Cecil. - - The method to get the ID for. - The name to use instead of the reference's own name. - The ID to use instead of the reference's declaring type ID. - Whether the type ID should be included or not. System.Reflection avoids it by default. - Whether the method is regarded as a proxy method or not. Setting this paramater to true will skip the first parameter. - Whether the ID should be "simple" (name only). - The ID. - - - - Get the "patch name" - the name of the target to patch - for the given member. - - The member to get the patch name for. - The patch name. - - - - Get the "patch name" - the name of the target to patch - for the given member. - - The member to get the patch name for. - The patch name. - - - - Clone the given method definition. - - The original method. - The method definition to apply the cloning process onto, or null to create a new method. - A clone of the original method. - - - - Clone the given method body. - - The original method body. - The method which will own the newly cloned method body. - A clone of the original method body. - - - - Force-update a generic parameter's position and type. - - The generic parameter to update. - The new position. - The new type. - The updated generic parameter. - - - - Resolve a given generic parameter in another context. - - The new context. - The original generic parameter. - A generic parameter provided by the given context which matches the original generic parameter. - - - - Relink the given member reference (metadata token provider). - - The reference to relink. - The relinker to use during the relinking process. - The generic context provided to relink generic references. - A relinked reference. - - - - Relink the given type reference. - - The reference to relink. - The relinker to use during the relinking process. - The generic context provided to relink generic references. - A relinked reference. - - - - Relink the given method reference. - - The reference to relink. - The relinker to use during the relinking process. - The generic context provided to relink generic references. - A relinked reference. - - - - Relink the given callsite. - - The reference to relink. - The relinker to use during the relinking process. - The generic context provided to relink generic references. - A relinked reference. - - - - Relink the given field reference. - - The reference to relink. - The relinker to use during the relinking process. - The generic context provided to relink generic references. - A relinked reference. - - - - Relink the given parameter definition. - - The reference to relink. - The relinker to use during the relinking process. - The generic context provided to relink generic references. - A relinked reference. - - - - Clone the given parameter definition. - - The original parameter definition. - A clone of the original parameter definition. - - - - Relink the given custom attribute. - - The reference to relink. - The relinker to use during the relinking process. - The generic context provided to relink generic references. - A relinked reference. - - - - Clone the given custom attribute. - - The original custom attribute. - A clone of the original custom attribute. - - - - Relink the given generic parameter reference. - - The reference to relink. - The relinker to use during the relinking process. - The generic context provided to relink generic references. - A relinked reference. - - - - Clone the given generic parameter. - - The original generic parameter. - A clone of the original generic parameter. - - - - Get the managed size of a given type. This matches an IL-level sizeof(t), even if it cannot be determined normally in C#. - Note that sizeof(t) != Marshal.SizeOf(t), f.e. when t is char. - - The type to get the size from. - The managed type size. - - - - Get a type which matches what the method should receive via ldarg.0 - - The method to obtain the "this" parameter type from. - The "this" parameter type. - - - - Get a native function pointer for a given method. This matches an IL-level ldftn. - - - The result of ldftn doesn't always match that of MethodHandle.GetFunctionPointer(). - For example, ldftn doesn't JIT-compile the method on mono, which thus keeps the class constructor untouched. - And on .NET, struct overrides (f.e. ToString) have got multiple entry points pointing towards the same code. - - The method to get a native function pointer for. - The native function pointer. - - - - A variant of ILGenerator which uses Mono.Cecil under the hood. - - - - - The underlying Mono.Cecil.Cil.ILProcessor. - - - - - Abstract version of System.Reflection.Emit.ILGenerator. See for proper documentation. - - - - - Get a "real" ILGenerator for this ILGeneratorShim. - - A "real" ILGenerator. - - - - Get the proxy type for a given ILGeneratorShim type. The proxy type implements ILGenerator. - - The ILGeneratorShim type. - The "real" ILGenerator type. - - - - Get the proxy type for a given ILGeneratorShim type. The proxy type implements ILGenerator. - - The ILGeneratorShim type. - The "real" ILGenerator type. - - - - Get the non-generic proxy type implementing ILGenerator. - - The "real" ILGenerator type, non-generic. - - - - A DynamicMethodDefinition "generator", responsible for generating a runtime MethodInfo from a DMD MethodDefinition. - - - - - - A DMDGenerator implementation using Mono.Cecil to build an in-memory assembly. - - - - - Fill the DynamicMethod with a stub. - - - - - Fill the DynamicMethod with a stub. - - - - - Emit a reference to an arbitrary object. Note that the references "leak." - - - - - Emit a reference to an arbitrary object. Note that the references "leak." - - - - - Emit a reference to an arbitrary object. Note that the references "leak." - - - - - Emit a reference to an arbitrary object. Note that the references "leak." - - - - - Allows you to remap library paths / names and specify loading flags. Useful for cross-platform compatibility. Applies only to DynDll. - - - - - Open a given library and get its handle. - - The library name. - Whether to skip using the mapping or not. - Any optional platform-specific flags. - The library handle. - - - - Try to open a given library and get its handle. - - The library name. - The library handle, or null if it failed loading. - Whether to skip using the mapping or not. - Any optional platform-specific flags. - True if the handle was obtained, false otherwise. - - - - Release a library handle obtained via OpenLibrary. Don't release the result of OpenLibrary(null)! - - The library handle. - - - - Get a function pointer for a function in the given library. - - The library handle. - The function name. - The function pointer. - - - - Get a function pointer for a function in the given library. - - The library handle. - The function name. - The function pointer, or null if it wasn't found. - True if the function pointer was obtained, false otherwise. - - - - Extension method wrapping Marshal.GetDelegateForFunctionPointer - - - - - Fill all static delegate fields with the DynDllImport attribute. - Call this early on in the static constructor. - - The type containing the DynDllImport delegate fields. - Any optional mappings similar to the static mappings. - - - - Fill all instance delegate fields with the DynDllImport attribute. - Call this early on in the constructor. - - An instance of a type containing the DynDllImport delegate fields. - Any optional mappings similar to the static mappings. - - - - Similar to DllImport, but requires you to run typeof(DeclaringType).ResolveDynDllImports(); - - - - - The library or library alias to use. - - - - - A list of possible entrypoints that the function can be resolved to. Implicitly includes the field name and delegate name. - - - - The library or library alias to use. - A list of possible entrypoints that the function can be resolved to. Implicitly includes the field name and delegate name. - - - - A mapping entry, to be used by . - - - - - The name as which the library will be resolved as. Useful to remap libraries or to provide full paths. - - - - - Platform-dependent loading flags. - - - - The name as which the library will be resolved as. Useful to remap libraries or to provide full paths. - Platform-dependent loading flags. - - - - The relinker callback delegate type. - - The reference (metadata token provider) to relink. - The generic context provided to relink generic references. - A relinked reference. - - - - Generic platform enum. - - - - - Bit applied to all OSes (Unknown, Windows, MacOS, ...). - - - - - On demand 64-bit platform bit. - - - - - Applied to all NT and NT-oid platforms (Windows). - - - - - Applied to all Unix and Unix-oid platforms (macOS, Linux, ...). - - - - - On demand ARM platform bit. - - - - - Unknown OS. - - - - - Windows, using the NT kernel. - - - - - macOS, using the Darwin kernel. - - - - - Linux. - - - - - Android, using the Linux kernel. - - - - - iOS, sharing components with macOS. - - - - diff --git a/Dependencies/BepInEx/BepInEx/patchers/BepInEx.MultiFolderLoader.dll b/Dependencies/BepInEx/BepInEx/patchers/BepInEx.MultiFolderLoader.dll deleted file mode 100644 index 138e5768..00000000 Binary files a/Dependencies/BepInEx/BepInEx/patchers/BepInEx.MultiFolderLoader.dll and /dev/null differ diff --git a/Dependencies/BepInEx/BepInEx/patchers/MirrorInternalLogs.dll b/Dependencies/BepInEx/BepInEx/patchers/MirrorInternalLogs.dll deleted file mode 100644 index c2800c16..00000000 Binary files a/Dependencies/BepInEx/BepInEx/patchers/MirrorInternalLogs.dll and /dev/null differ diff --git a/Dependencies/BepInEx/doorstop_config.ini b/Dependencies/BepInEx/doorstop_config.ini deleted file mode 100644 index 2e860502..00000000 --- a/Dependencies/BepInEx/doorstop_config.ini +++ /dev/null @@ -1,19 +0,0 @@ -[UnityDoorstop] -# Specifies whether assembly executing is enabled -enabled=true -# Specifies the path (absolute, or relative to the game's exe) to the DLL/EXE that should be executed by Doorstop -targetAssembly=BepInEx\core\BepInEx.Preloader.dll -# Specifies whether Unity's output log should be redirected to \output_log.txt -redirectOutputLog=false -# If enabled, DOORSTOP_DISABLE env var value is ignored -# USE THIS ONLY WHEN ASKED TO OR YOU KNOW WHAT THIS MEANS -ignoreDisableSwitch=false -# Overrides default Mono DLL search path -# Sometimes it is needed to instruct Mono to seek its assemblies from a different path -# (e.g. mscorlib is stripped in original game) -# This option causes Mono to seek mscorlib and core libraries from a different folder before Managed -# Original Managed folder is added as a secondary folder in the search path -dllSearchPathOverride= - -[MultiFolderLoader] -baseDir=.\QMods \ No newline at end of file diff --git a/Dependencies/BepInEx/winhttp.dll b/Dependencies/BepInEx/winhttp.dll deleted file mode 100644 index 3e62571c..00000000 Binary files a/Dependencies/BepInEx/winhttp.dll and /dev/null differ diff --git a/Dependencies/Inno/Compil32.exe b/Dependencies/Inno/Compil32.exe deleted file mode 100644 index e91f9b70..00000000 Binary files a/Dependencies/Inno/Compil32.exe and /dev/null differ diff --git a/Dependencies/Inno/Default.isl b/Dependencies/Inno/Default.isl deleted file mode 100644 index ce9b70e2..00000000 --- a/Dependencies/Inno/Default.isl +++ /dev/null @@ -1,384 +0,0 @@ -; *** Inno Setup version 6.1.0+ English messages *** -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=English -LanguageID=$0409 -LanguageCodePage=0 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Setup -SetupWindowTitle=Setup - %1 -UninstallAppTitle=Uninstall -UninstallAppFullTitle=%1 Uninstall - -; *** Misc. common -InformationTitle=Information -ConfirmTitle=Confirm -ErrorTitle=Error - -; *** SetupLdr messages -SetupLdrStartupMessage=This will install %1. Do you wish to continue? -LdrCannotCreateTemp=Unable to create a temporary file. Setup aborted -LdrCannotExecTemp=Unable to execute file in the temporary directory. Setup aborted -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nError %2: %3 -SetupFileMissing=The file %1 is missing from the installation directory. Please correct the problem or obtain a new copy of the program. -SetupFileCorrupt=The setup files are corrupted. Please obtain a new copy of the program. -SetupFileCorruptOrWrongVer=The setup files are corrupted, or are incompatible with this version of Setup. Please correct the problem or obtain a new copy of the program. -InvalidParameter=An invalid parameter was passed on the command line:%n%n%1 -SetupAlreadyRunning=Setup is already running. -WindowsVersionNotSupported=This program does not support the version of Windows your computer is running. -WindowsServicePackRequired=This program requires %1 Service Pack %2 or later. -NotOnThisPlatform=This program will not run on %1. -OnlyOnThisPlatform=This program must be run on %1. -OnlyOnTheseArchitectures=This program can only be installed on versions of Windows designed for the following processor architectures:%n%n%1 -WinVersionTooLowError=This program requires %1 version %2 or later. -WinVersionTooHighError=This program cannot be installed on %1 version %2 or later. -AdminPrivilegesRequired=You must be logged in as an administrator when installing this program. -PowerUserPrivilegesRequired=You must be logged in as an administrator or as a member of the Power Users group when installing this program. -SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. -UninstallAppRunningError=Uninstall has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Select Setup Install Mode -PrivilegesRequiredOverrideInstruction=Select install mode -PrivilegesRequiredOverrideText1=%1 can be installed for all users (requires administrative privileges), or for you only. -PrivilegesRequiredOverrideText2=%1 can be installed for you only, or for all users (requires administrative privileges). -PrivilegesRequiredOverrideAllUsers=Install for &all users -PrivilegesRequiredOverrideAllUsersRecommended=Install for &all users (recommended) -PrivilegesRequiredOverrideCurrentUser=Install for &me only -PrivilegesRequiredOverrideCurrentUserRecommended=Install for &me only (recommended) - -; *** Misc. errors -ErrorCreatingDir=Setup was unable to create the directory "%1" -ErrorTooManyFilesInDir=Unable to create a file in the directory "%1" because it contains too many files - -; *** Setup common messages -ExitSetupTitle=Exit Setup -ExitSetupMessage=Setup is not complete. If you exit now, the program will not be installed.%n%nYou may run Setup again at another time to complete the installation.%n%nExit Setup? -AboutSetupMenuItem=&About Setup... -AboutSetupTitle=About Setup -AboutSetupMessage=%1 version %2%n%3%n%n%1 home page:%n%4 -AboutSetupNote= -TranslatorNote= - -; *** Buttons -ButtonBack=< &Back -ButtonNext=&Next > -ButtonInstall=&Install -ButtonOK=OK -ButtonCancel=Cancel -ButtonYes=&Yes -ButtonYesToAll=Yes to &All -ButtonNo=&No -ButtonNoToAll=N&o to All -ButtonFinish=&Finish -ButtonBrowse=&Browse... -ButtonWizardBrowse=B&rowse... -ButtonNewFolder=&Make New Folder - -; *** "Select Language" dialog messages -SelectLanguageTitle=Select Setup Language -SelectLanguageLabel=Select the language to use during the installation. - -; *** Common wizard text -ClickNext=Click Next to continue, or Cancel to exit Setup. -BeveledLabel= -BrowseDialogTitle=Browse For Folder -BrowseDialogLabel=Select a folder in the list below, then click OK. -NewFolderName=New Folder - -; *** "Welcome" wizard page -WelcomeLabel1=Welcome to the [name] Setup Wizard -WelcomeLabel2=This will install [name/ver] on your computer.%n%nIt is recommended that you close all other applications before continuing. - -; *** "Password" wizard page -WizardPassword=Password -PasswordLabel1=This installation is password protected. -PasswordLabel3=Please provide the password, then click Next to continue. Passwords are case-sensitive. -PasswordEditLabel=&Password: -IncorrectPassword=The password you entered is not correct. Please try again. - -; *** "License Agreement" wizard page -WizardLicense=License Agreement -LicenseLabel=Please read the following important information before continuing. -LicenseLabel3=Please read the following License Agreement. You must accept the terms of this agreement before continuing with the installation. -LicenseAccepted=I &accept the agreement -LicenseNotAccepted=I &do not accept the agreement - -; *** "Information" wizard pages -WizardInfoBefore=Information -InfoBeforeLabel=Please read the following important information before continuing. -InfoBeforeClickLabel=When you are ready to continue with Setup, click Next. -WizardInfoAfter=Information -InfoAfterLabel=Please read the following important information before continuing. -InfoAfterClickLabel=When you are ready to continue with Setup, click Next. - -; *** "User Information" wizard page -WizardUserInfo=User Information -UserInfoDesc=Please enter your information. -UserInfoName=&User Name: -UserInfoOrg=&Organization: -UserInfoSerial=&Serial Number: -UserInfoNameRequired=You must enter a name. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Select Destination Location -SelectDirDesc=Where should [name] be installed? -SelectDirLabel3=Setup will install [name] into the following folder. -SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. -DiskSpaceGBLabel=At least [gb] GB of free disk space is required. -DiskSpaceMBLabel=At least [mb] MB of free disk space is required. -CannotInstallToNetworkDrive=Setup cannot install to a network drive. -CannotInstallToUNCPath=Setup cannot install to a UNC path. -InvalidPath=You must enter a full path with drive letter; for example:%n%nC:\APP%n%nor a UNC path in the form:%n%n\\server\share -InvalidDrive=The drive or UNC share you selected does not exist or is not accessible. Please select another. -DiskSpaceWarningTitle=Not Enough Disk Space -DiskSpaceWarning=Setup requires at least %1 KB of free space to install, but the selected drive only has %2 KB available.%n%nDo you want to continue anyway? -DirNameTooLong=The folder name or path is too long. -InvalidDirName=The folder name is not valid. -BadDirName32=Folder names cannot include any of the following characters:%n%n%1 -DirExistsTitle=Folder Exists -DirExists=The folder:%n%n%1%n%nalready exists. Would you like to install to that folder anyway? -DirDoesntExistTitle=Folder Does Not Exist -DirDoesntExist=The folder:%n%n%1%n%ndoes not exist. Would you like the folder to be created? - -; *** "Select Components" wizard page -WizardSelectComponents=Select Components -SelectComponentsDesc=Which components should be installed? -SelectComponentsLabel2=Select the components you want to install; clear the components you do not want to install. Click Next when you are ready to continue. -FullInstallation=Full installation -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Compact installation -CustomInstallation=Custom installation -NoUninstallWarningTitle=Components Exist -NoUninstallWarning=Setup has detected that the following components are already installed on your computer:%n%n%1%n%nDeselecting these components will not uninstall them.%n%nWould you like to continue anyway? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Current selection requires at least [gb] GB of disk space. -ComponentsDiskSpaceMBLabel=Current selection requires at least [mb] MB of disk space. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Select Additional Tasks -SelectTasksDesc=Which additional tasks should be performed? -SelectTasksLabel2=Select the additional tasks you would like Setup to perform while installing [name], then click Next. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Select Start Menu Folder -SelectStartMenuFolderDesc=Where should Setup place the program's shortcuts? -SelectStartMenuFolderLabel3=Setup will create the program's shortcuts in the following Start Menu folder. -SelectStartMenuFolderBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. -MustEnterGroupName=You must enter a folder name. -GroupNameTooLong=The folder name or path is too long. -InvalidGroupName=The folder name is not valid. -BadGroupName=The folder name cannot include any of the following characters:%n%n%1 -NoProgramGroupCheck2=&Don't create a Start Menu folder - -; *** "Ready to Install" wizard page -WizardReady=Ready to Install -ReadyLabel1=Setup is now ready to begin installing [name] on your computer. -ReadyLabel2a=Click Install to continue with the installation, or click Back if you want to review or change any settings. -ReadyLabel2b=Click Install to continue with the installation. -ReadyMemoUserInfo=User information: -ReadyMemoDir=Destination location: -ReadyMemoType=Setup type: -ReadyMemoComponents=Selected components: -ReadyMemoGroup=Start Menu folder: -ReadyMemoTasks=Additional tasks: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Downloading additional files... -ButtonStopDownload=&Stop download -StopDownload=Are you sure you want to stop the download? -ErrorDownloadAborted=Download aborted -ErrorDownloadFailed=Download failed: %1 %2 -ErrorDownloadSizeFailed=Getting size failed: %1 %2 -ErrorFileHash1=File hash failed: %1 -ErrorFileHash2=Invalid file hash: expected %1, found %2 -ErrorProgress=Invalid progress: %1 of %2 -ErrorFileSize=Invalid file size: expected %1, found %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Preparing to Install -PreparingDesc=Setup is preparing to install [name] on your computer. -PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name]. -CannotContinue=Setup cannot continue. Please click Cancel to exit. -ApplicationsFound=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. -ApplicationsFound2=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. After the installation has completed, Setup will attempt to restart the applications. -CloseApplications=&Automatically close the applications -DontCloseApplications=&Do not close the applications -ErrorCloseApplications=Setup was unable to automatically close all applications. It is recommended that you close all applications using files that need to be updated by Setup before continuing. -PrepareToInstallNeedsRestart=Setup must restart your computer. After restarting your computer, run Setup again to complete the installation of [name].%n%nWould you like to restart now? - -; *** "Installing" wizard page -WizardInstalling=Installing -InstallingLabel=Please wait while Setup installs [name] on your computer. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Completing the [name] Setup Wizard -FinishedLabelNoIcons=Setup has finished installing [name] on your computer. -FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed shortcuts. -ClickFinish=Click Finish to exit Setup. -FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now? -FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now? -ShowReadmeCheck=Yes, I would like to view the README file -YesRadio=&Yes, restart the computer now -NoRadio=&No, I will restart the computer later -; used for example as 'Run MyProg.exe' -RunEntryExec=Run %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=View %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Setup Needs the Next Disk -SelectDiskLabel2=Please insert Disk %1 and click OK.%n%nIf the files on this disk can be found in a folder other than the one displayed below, enter the correct path or click Browse. -PathLabel=&Path: -FileNotInDir2=The file "%1" could not be located in "%2". Please insert the correct disk or select another folder. -SelectDirectoryLabel=Please specify the location of the next disk. - -; *** Installation phase messages -SetupAborted=Setup was not completed.%n%nPlease correct the problem and run Setup again. -AbortRetryIgnoreSelectAction=Select action -AbortRetryIgnoreRetry=&Try again -AbortRetryIgnoreIgnore=&Ignore the error and continue -AbortRetryIgnoreCancel=Cancel installation - -; *** Installation status messages -StatusClosingApplications=Closing applications... -StatusCreateDirs=Creating directories... -StatusExtractFiles=Extracting files... -StatusCreateIcons=Creating shortcuts... -StatusCreateIniEntries=Creating INI entries... -StatusCreateRegistryEntries=Creating registry entries... -StatusRegisterFiles=Registering files... -StatusSavingUninstall=Saving uninstall information... -StatusRunProgram=Finishing installation... -StatusRestartingApplications=Restarting applications... -StatusRollback=Rolling back changes... - -; *** Misc. errors -ErrorInternal2=Internal error: %1 -ErrorFunctionFailedNoCode=%1 failed -ErrorFunctionFailed=%1 failed; code %2 -ErrorFunctionFailedWithMessage=%1 failed; code %2.%n%3 -ErrorExecutingProgram=Unable to execute file:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Error opening registry key:%n%1\%2 -ErrorRegCreateKey=Error creating registry key:%n%1\%2 -ErrorRegWriteKey=Error writing to registry key:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Error creating INI entry in file "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Skip this file (not recommended) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignore the error and continue (not recommended) -SourceIsCorrupted=The source file is corrupted -SourceDoesntExist=The source file "%1" does not exist -ExistingFileReadOnly2=The existing file could not be replaced because it is marked read-only. -ExistingFileReadOnlyRetry=&Remove the read-only attribute and try again -ExistingFileReadOnlyKeepExisting=&Keep the existing file -ErrorReadingExistingDest=An error occurred while trying to read the existing file: -FileExistsSelectAction=Select action -FileExists2=The file already exists. -FileExistsOverwriteExisting=&Overwrite the existing file -FileExistsKeepExisting=&Keep the existing file -FileExistsOverwriteOrKeepAll=&Do this for the next conflicts -ExistingFileNewerSelectAction=Select action -ExistingFileNewer2=The existing file is newer than the one Setup is trying to install. -ExistingFileNewerOverwriteExisting=&Overwrite the existing file -ExistingFileNewerKeepExisting=&Keep the existing file (recommended) -ExistingFileNewerOverwriteOrKeepAll=&Do this for the next conflicts -ErrorChangingAttr=An error occurred while trying to change the attributes of the existing file: -ErrorCreatingTemp=An error occurred while trying to create a file in the destination directory: -ErrorReadingSource=An error occurred while trying to read the source file: -ErrorCopying=An error occurred while trying to copy a file: -ErrorReplacingExistingFile=An error occurred while trying to replace the existing file: -ErrorRestartReplace=RestartReplace failed: -ErrorRenamingTemp=An error occurred while trying to rename a file in the destination directory: -ErrorRegisterServer=Unable to register the DLL/OCX: %1 -ErrorRegSvr32Failed=RegSvr32 failed with exit code %1 -ErrorRegisterTypeLib=Unable to register the type library: %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=All users -UninstallDisplayNameMarkCurrentUser=Current user - -; *** Post-installation errors -ErrorOpeningReadme=An error occurred while trying to open the README file. -ErrorRestartingComputer=Setup was unable to restart the computer. Please do this manually. - -; *** Uninstaller messages -UninstallNotFound=File "%1" does not exist. Cannot uninstall. -UninstallOpenError=File "%1" could not be opened. Cannot uninstall -UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall -UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log -ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components? -UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows. -OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges. -UninstallStatusLabel=Please wait while %1 is removed from your computer. -UninstalledAll=%1 was successfully removed from your computer. -UninstalledMost=%1 uninstall complete.%n%nSome elements could not be removed. These can be removed manually. -UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now? -UninstallDataCorrupted="%1" file is corrupted. Cannot uninstall - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Remove Shared File? -ConfirmDeleteSharedFile2=The system indicates that the following shared file is no longer in use by any programs. Would you like for Uninstall to remove this shared file?%n%nIf any programs are still using this file and it is removed, those programs may not function properly. If you are unsure, choose No. Leaving the file on your system will not cause any harm. -SharedFileNameLabel=File name: -SharedFileLocationLabel=Location: -WizardUninstalling=Uninstall Status -StatusUninstalling=Uninstalling %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installing %1. -ShutdownBlockReasonUninstallingApp=Uninstalling %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 version %2 -AdditionalIcons=Additional shortcuts: -CreateDesktopIcon=Create a &desktop shortcut -CreateQuickLaunchIcon=Create a &Quick Launch shortcut -ProgramOnTheWeb=%1 on the Web -UninstallProgram=Uninstall %1 -LaunchProgram=Launch %1 -AssocFileExtension=&Associate %1 with the %2 file extension -AssocingFileExtension=Associating %1 with the %2 file extension... -AutoStartProgramGroupDescription=Startup: -AutoStartProgram=Automatically start %1 -AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway? diff --git a/Dependencies/Inno/Examples/64Bit.iss b/Dependencies/Inno/Examples/64Bit.iss deleted file mode 100644 index 823f363a..00000000 --- a/Dependencies/Inno/Examples/64Bit.iss +++ /dev/null @@ -1,33 +0,0 @@ -; -- 64Bit.iss -- -; Demonstrates installation of a program built for the x64 (a.k.a. AMD64) -; architecture. -; To successfully run this installation and the program it installs, -; you must have a "x64" edition of Windows. - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -Compression=lzma2 -SolidCompression=yes -OutputDir=userdocs:Inno Setup Examples Output -; "ArchitecturesAllowed=x64" specifies that Setup cannot run on -; anything but x64. -ArchitecturesAllowed=x64 -; "ArchitecturesInstallIn64BitMode=x64" requests that the install be -; done in "64-bit mode" on x64, meaning it should use the native -; 64-bit Program Files directory and the 64-bit view of the registry. -ArchitecturesInstallIn64BitMode=x64 - -[Files] -Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe" -Source: "MyProg.chm"; DestDir: "{app}" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Dependencies/Inno/Examples/64BitThreeArch.iss b/Dependencies/Inno/Examples/64BitThreeArch.iss deleted file mode 100644 index 332b5089..00000000 --- a/Dependencies/Inno/Examples/64BitThreeArch.iss +++ /dev/null @@ -1,53 +0,0 @@ -; -- 64BitThreeArch.iss -- -; Demonstrates how to install a program built for three different -; architectures (x86, x64, ARM64) using a single installer. - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -Compression=lzma2 -SolidCompression=yes -OutputDir=userdocs:Inno Setup Examples Output -; "ArchitecturesInstallIn64BitMode=x64 arm64" requests that the install -; be done in "64-bit mode" on x64 & ARM64, meaning it should use the -; native 64-bit Program Files directory and the 64-bit view of the -; registry. On all other architectures it will install in "32-bit mode". -ArchitecturesInstallIn64BitMode=x64 arm64 - -[Files] -; Install MyProg-x64.exe if running on x64, MyProg-ARM64.exe if -; running on ARM64, MyProg.exe otherwise. -; Place all x64 files here -Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: InstallX64 -; Place all ARM64 files here, first one should be marked 'solidbreak' -Source: "MyProg-ARM64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: InstallARM64; Flags: solidbreak -; Place all x86 files here, first one should be marked 'solidbreak' -Source: "MyProg.exe"; DestDir: "{app}"; Check: InstallOtherArch; Flags: solidbreak -; Place all common files here, first one should be marked 'solidbreak' -Source: "MyProg.chm"; DestDir: "{app}"; Flags: solidbreak -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" - -[Code] -function InstallX64: Boolean; -begin - Result := Is64BitInstallMode and (ProcessorArchitecture = paX64); -end; - -function InstallARM64: Boolean; -begin - Result := Is64BitInstallMode and (ProcessorArchitecture = paARM64); -end; - -function InstallOtherArch: Boolean; -begin - Result := not InstallX64 and not InstallARM64; -end; diff --git a/Dependencies/Inno/Examples/64BitTwoArch.iss b/Dependencies/Inno/Examples/64BitTwoArch.iss deleted file mode 100644 index 70a7fc27..00000000 --- a/Dependencies/Inno/Examples/64BitTwoArch.iss +++ /dev/null @@ -1,41 +0,0 @@ -; -- 64BitTwoArch.iss -- -; Demonstrates how to install a program built for two different -; architectures (x86 and x64) using a single installer: on a "x86" -; edition of Windows the x86 version of the program will be -; installed but on a "x64" edition of Windows the x64 version will -; be installed. - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=My Program -AppVersion=1.5 -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -WizardStyle=modern -Compression=lzma2 -SolidCompression=yes -OutputDir=userdocs:Inno Setup Examples Output -; "ArchitecturesInstallIn64BitMode=x64" requests that the install be -; done in "64-bit mode" on x64, meaning it should use the native -; 64-bit Program Files directory and the 64-bit view of the registry. -; On all other architectures it will install in "32-bit mode". -ArchitecturesInstallIn64BitMode=x64 -; Note: We don't set ProcessorsAllowed because we want this -; installation to run on all architectures (including Itanium, -; since it's capable of running 32-bit code too). - -[Files] -; Install MyProg-x64.exe if running in 64-bit mode (x64; see above), -; MyProg.exe otherwise. -; Place all x64 files here -Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: Is64BitInstallMode -; Place all x86 files here, first one should be marked 'solidbreak' -Source: "MyProg.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode; Flags: solidbreak -; Place all common files here, first one should be marked 'solidbreak' -Source: "MyProg.chm"; DestDir: "{app}"; Flags: solidbreak -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Dependencies/Inno/Examples/AllPagesExample.iss b/Dependencies/Inno/Examples/AllPagesExample.iss deleted file mode 100644 index e0e968ab..00000000 --- a/Dependencies/Inno/Examples/AllPagesExample.iss +++ /dev/null @@ -1,116 +0,0 @@ -; -- AllPagesExample.iss -- -; Same as Example1.iss, but shows all the wizard pages Setup may potentially display - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -Compression=lzma2 -SolidCompression=yes -OutputDir=userdocs:Inno Setup Examples Output - -DisableWelcomePage=no -LicenseFile=license.txt -#define Password 'password' -Password={#Password} -InfoBeforeFile=readme.txt -UserInfoPage=yes -PrivilegesRequired=lowest -DisableDirPage=no -DisableProgramGroupPage=no -InfoAfterFile=readme.txt - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -Source: "MyProg.chm"; DestDir: "{app}" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" - -[Components] -Name: "component"; Description: "Component"; - -[Tasks] -Name: "task"; Description: "Task"; - -[Code] -var - OutputProgressWizardPage: TOutputProgressWizardPage; - OutputProgressWizardPageAfterID: Integer; - -procedure InitializeWizard; -var - InputQueryWizardPage: TInputQueryWizardPage; - InputOptionWizardPage: TInputOptionWizardPage; - InputDirWizardPage: TInputDirWizardPage; - InputFileWizardPage: TInputFileWizardPage; - OutputMsgWizardPage: TOutputMsgWizardPage; - OutputMsgMemoWizardPage: TOutputMsgMemoWizardPage; - AfterID: Integer; -begin - WizardForm.PasswordEdit.Text := '{#Password}'; - - AfterID := wpSelectTasks; - - AfterID := CreateCustomPage(AfterID, 'CreateCustomPage', 'ADescription').ID; - - InputQueryWizardPage := CreateInputQueryPage(AfterID, 'CreateInputQueryPage', 'ADescription', 'ASubCaption'); - InputQueryWizardPage.Add('&APrompt:', False); - AfterID := InputQueryWizardPage.ID; - - InputOptionWizardPage := CreateInputOptionPage(AfterID, 'CreateInputOptionPage', 'ADescription', 'ASubCaption', False, False); - InputOptionWizardPage.Add('&AOption'); - AfterID := InputOptionWizardPage.ID; - - InputDirWizardPage := CreateInputDirPage(AfterID, 'CreateInputDirPage', 'ADescription', 'ASubCaption', False, 'ANewFolderName'); - InputDirWizardPage.Add('&APrompt:'); - InputDirWizardPage.Values[0] := 'C:\'; - AfterID := InputDirWizardPage.ID; - - InputFileWizardPage := CreateInputFilePage(AfterID, 'CreateInputFilePage', 'ADescription', 'ASubCaption'); - InputFileWizardPage.Add('&APrompt:', 'Executable files|*.exe|All files|*.*', '.exe'); - AfterID := InputFileWizardPage.ID; - - OutputMsgWizardPage := CreateOutputMsgPage(AfterID, 'CreateOutputMsgPage', 'ADescription', 'AMsg'); - AfterID := OutputMsgWizardPage.ID; - - OutputMsgMemoWizardPage := CreateOutputMsgMemoPage(AfterID, 'CreateOutputMsgMemoPage', 'ADescription', 'ASubCaption', 'AMsg'); - AfterID := OutputMsgMemoWizardPage.ID; - - OutputProgressWizardPage := CreateOutputProgressPage('CreateOutputProgressPage', 'ADescription'); - OutputProgressWizardPageAfterID := AfterID; - - { See CodeDownloadFiles.iss for a CreateDownloadPage example } -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -var - Position, Max: Integer; -begin - if CurPageID = OutputProgressWizardPageAfterID then begin - try - Max := 25; - for Position := 0 to Max do begin - OutputProgressWizardPage.SetProgress(Position, Max); - if Position = 0 then - OutputProgressWizardPage.Show; - Sleep(2000 div Max); - end; - finally - OutputProgressWizardPage.Hide; - end; - end; - Result := True; -end; - -function PrepareToInstall(var NeedsRestart: Boolean): String; -begin - if SuppressibleMsgBox('Do you want to stop Setup at the Preparing To Install wizard page?', mbConfirmation, MB_YESNO, IDNO) = IDYES then - Result := 'Stopped by user'; -end; \ No newline at end of file diff --git a/Dependencies/Inno/Examples/CodeAutomation.iss b/Dependencies/Inno/Examples/CodeAutomation.iss deleted file mode 100644 index e36a5d08..00000000 --- a/Dependencies/Inno/Examples/CodeAutomation.iss +++ /dev/null @@ -1,311 +0,0 @@ -; -- CodeAutomation.iss -- -; -; This script shows how to use IDispatch based COM Automation objects. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DisableWelcomePage=no -CreateAppDir=no -DisableProgramGroupPage=yes -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output - -[Code] - -{--- SQLDMO ---} - -const - SQLServerName = 'localhost'; - SQLDMOGrowth_MB = 0; - -procedure SQLDMOButtonOnClick(Sender: TObject); -var - SQLServer, Database, DBFile, LogFile: Variant; - IDColumn, NameColumn, Table: Variant; -begin - if MsgBox('Setup will now connect to Microsoft SQL Server ''' + SQLServerName + ''' via a trusted connection and create a database. Do you want to continue?', mbInformation, mb_YesNo) = idNo then - Exit; - - { Create the main SQLDMO COM Automation object } - - try - SQLServer := CreateOleObject('SQLDMO.SQLServer'); - except - RaiseException('Please install Microsoft SQL server connectivity tools first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); - end; - - { Connect to the Microsoft SQL Server } - - SQLServer.LoginSecure := True; - SQLServer.Connect(SQLServerName); - - MsgBox('Connected to Microsoft SQL Server ''' + SQLServerName + '''.', mbInformation, mb_Ok); - - { Setup a database } - - Database := CreateOleObject('SQLDMO.Database'); - Database.Name := 'Inno Setup'; - - DBFile := CreateOleObject('SQLDMO.DBFile'); - DBFile.Name := 'ISData1'; - DBFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.mdf'; - DBFile.PrimaryFile := True; - DBFile.FileGrowthType := SQLDMOGrowth_MB; - DBFile.FileGrowth := 1; - - Database.FileGroups.Item('PRIMARY').DBFiles.Add(DBFile); - - LogFile := CreateOleObject('SQLDMO.LogFile'); - LogFile.Name := 'ISLog1'; - LogFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.ldf'; - - Database.TransactionLog.LogFiles.Add(LogFile); - - { Add the database } - - SQLServer.Databases.Add(Database); - - MsgBox('Added database ''' + Database.Name + '''.', mbInformation, mb_Ok); - - { Setup some columns } - - IDColumn := CreateOleObject('SQLDMO.Column'); - IDColumn.Name := 'id'; - IDColumn.Datatype := 'int'; - IDColumn.Identity := True; - IDColumn.IdentityIncrement := 1; - IDColumn.IdentitySeed := 1; - IDColumn.AllowNulls := False; - - NameColumn := CreateOleObject('SQLDMO.Column'); - NameColumn.Name := 'name'; - NameColumn.Datatype := 'varchar'; - NameColumn.Length := '64'; - NameColumn.AllowNulls := False; - - { Setup a table } - - Table := CreateOleObject('SQLDMO.Table'); - Table.Name := 'authors'; - Table.FileGroup := 'PRIMARY'; - - { Add the columns and the table } - - Table.Columns.Add(IDColumn); - Table.Columns.Add(NameColumn); - - Database.Tables.Add(Table); - - MsgBox('Added table ''' + Table.Name + '''.', mbInformation, mb_Ok); -end; - -{--- IIS ---} - -const - IISServerName = 'localhost'; - IISServerNumber = '1'; - IISURL = 'http://127.0.0.1'; - -procedure IISButtonOnClick(Sender: TObject); -var - IIS, WebSite, WebServer, WebRoot, VDir: Variant; - ErrorCode: Integer; -begin - if MsgBox('Setup will now connect to Microsoft IIS Server ''' + IISServerName + ''' and create a virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then - Exit; - - { Create the main IIS COM Automation object } - - try - IIS := CreateOleObject('IISNamespace'); - except - RaiseException('Please install Microsoft IIS first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); - end; - - { Connect to the IIS server } - - WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc'); - WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber); - WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); - - { (Re)create a virtual dir } - - try - WebRoot.Delete('IIsWebVirtualDir', 'innosetup'); - WebRoot.SetInfo(); - except - end; - - VDir := WebRoot.Create('IIsWebVirtualDir', 'innosetup'); - VDir.AccessRead := True; - VDir.AppFriendlyName := 'Inno Setup'; - VDir.Path := 'C:\inetpub\innosetup'; - VDir.AppCreate(True); - VDir.SetInfo(); - - MsgBox('Created virtual directory ''' + VDir.Path + '''.', mbInformation, mb_Ok); - - { Write some html and display it } - - if MsgBox('Setup will now write some HTML and display the virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then - Exit; - - ForceDirectories(VDir.Path); - SaveStringToFile(VDir.Path + '/index.htm', 'Inno Setup rocks!', False); - if not ShellExecAsOriginalUser('open', IISURL + '/innosetup/index.htm', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) then - MsgBox('Can''t display the created virtual directory: ''' + SysErrorMessage(ErrorCode) + '''.', mbError, mb_Ok); -end; - -{--- MSXML ---} - -const - XMLURL = 'http://jrsoftware.github.io/issrc/ISHelp/isxfunc.xml'; - XMLFileName = 'isxfunc.xml'; - XMLFileName2 = 'isxfuncmodified.xml'; - -procedure MSXMLButtonOnClick(Sender: TObject); -var - XMLHTTP, XMLDoc, NewNode, RootNode: Variant; - Path: String; -begin - if MsgBox('Setup will now use MSXML to download XML file ''' + XMLURL + ''' and save it to disk.'#13#13'Setup will then load, modify and save this XML file. Do you want to continue?', mbInformation, mb_YesNo) = idNo then - Exit; - - { Create the main MSXML COM Automation object } - - try - XMLHTTP := CreateOleObject('MSXML2.ServerXMLHTTP'); - except - RaiseException('Please install MSXML first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); - end; - - { Download the XML file } - - XMLHTTP.Open('GET', XMLURL, False); - XMLHTTP.Send(); - - Path := ExpandConstant('{src}\'); - XMLHTTP.responseXML.Save(Path + XMLFileName); - - MsgBox('Downloaded the XML file and saved it as ''' + XMLFileName + '''.', mbInformation, mb_Ok); - - { Load the XML File } - - XMLDoc := CreateOleObject('MSXML2.DOMDocument'); - XMLDoc.async := False; - XMLDoc.resolveExternals := False; - XMLDoc.load(Path + XMLFileName); - if XMLDoc.parseError.errorCode <> 0 then - RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ', position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason); - - MsgBox('Loaded the XML file.', mbInformation, mb_Ok); - - { Modify the XML document } - - NewNode := XMLDoc.createElement('isxdemo'); - RootNode := XMLDoc.documentElement; - RootNode.appendChild(NewNode); - RootNode.lastChild.text := 'Hello, World'; - - { Save the XML document } - - XMLDoc.Save(Path + XMLFileName2); - - MsgBox('Saved the modified XML as ''' + XMLFileName2 + '''.', mbInformation, mb_Ok); -end; - - -{--- Word ---} - -procedure WordButtonOnClick(Sender: TObject); -var - Word: Variant; -begin - if MsgBox('Setup will now check whether Microsoft Word is running. Do you want to continue?', mbInformation, mb_YesNo) = idNo then - Exit; - - { Try to get an active Word COM Automation object } - - try - Word := GetActiveOleObject('Word.Application'); - except - end; - - if VarIsEmpty(Word) then - MsgBox('Microsoft Word is not running.', mbInformation, mb_Ok) - else - MsgBox('Microsoft Word is running.', mbInformation, mb_Ok) -end; - -{--- Windows Firewall ---} - -const - NET_FW_IP_VERSION_ANY = 2; - NET_FW_SCOPE_ALL = 0; - -procedure FirewallButtonOnClick(Sender: TObject); -var - Firewall, Application: Variant; -begin - if MsgBox('Setup will now add itself to Windows Firewall as an authorized application for the current profile (' + GetUserNameString + '). Do you want to continue?', mbInformation, mb_YesNo) = idNo then - Exit; - - { Create the main Windows Firewall COM Automation object } - - try - Firewall := CreateOleObject('HNetCfg.FwMgr'); - except - RaiseException('Please install Windows Firewall first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); - end; - - { Add the authorization } - - Application := CreateOleObject('HNetCfg.FwAuthorizedApplication'); - Application.Name := 'Setup'; - Application.IPVersion := NET_FW_IP_VERSION_ANY; - Application.ProcessImageFileName := ExpandConstant('{srcexe}'); - Application.Scope := NET_FW_SCOPE_ALL; - Application.Enabled := True; - - Firewall.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(Application); - - MsgBox('Setup is now an authorized application for the current profile', mbInformation, mb_Ok); -end; - -{---} - -procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent); -begin - with TNewButton.Create(WizardForm) do begin - Left := ALeft; - Top := ATop; - Width := WizardForm.CancelButton.Width; - Height := WizardForm.CancelButton.Height; - Caption := ACaption; - OnClick := ANotifyEvent; - Parent := WizardForm.WelcomePage; - end; -end; - -procedure InitializeWizard(); -var - Left, LeftInc, Top, TopInc: Integer; -begin - Left := WizardForm.WelcomeLabel2.Left; - LeftInc := WizardForm.CancelButton.Width + ScaleX(8); - TopInc := WizardForm.CancelButton.Height + ScaleY(8); - Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc; - - CreateButton(Left, Top, '&SQLDMO...', @SQLDMOButtonOnClick); - Top := Top + TopInc; - CreateButton(Left + LeftInc, Top, '&Firewall...', @FirewallButtonOnClick); - Top := Top + TopInc; - CreateButton(Left, Top, '&IIS...', @IISButtonOnClick); - Top := Top + TopInc; - CreateButton(Left, Top, '&MSXML...', @MSXMLButtonOnClick); - Top := Top + TopInc; - CreateButton(Left, Top, '&Word...', @WordButtonOnClick); -end; \ No newline at end of file diff --git a/Dependencies/Inno/Examples/CodeAutomation2.iss b/Dependencies/Inno/Examples/CodeAutomation2.iss deleted file mode 100644 index 7b3a2552..00000000 --- a/Dependencies/Inno/Examples/CodeAutomation2.iss +++ /dev/null @@ -1,298 +0,0 @@ -; -- CodeAutomation2.iss -- -; -; This script shows how to use IUnknown based COM Automation objects. -; -; Note: some unneeded interface functions which had special types have been replaced -; by dummies to avoid having to define those types. Do not remove these dummies as -; that would change the function indices which is bad. Also, not all function -; protoypes have been tested, only those used by this example. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DisableWelcomePage=no -CreateAppDir=no -DisableProgramGroupPage=yes -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output - -[Code] - -{--- IShellLink ---} - -const - CLSID_ShellLink = '{00021401-0000-0000-C000-000000000046}'; - -type - IShellLinkW = interface(IUnknown) - '{000214F9-0000-0000-C000-000000000046}' - procedure Dummy; - procedure Dummy2; - procedure Dummy3; - function GetDescription(pszName: String; cchMaxName: Integer): HResult; - function SetDescription(pszName: String): HResult; - function GetWorkingDirectory(pszDir: String; cchMaxPath: Integer): HResult; - function SetWorkingDirectory(pszDir: String): HResult; - function GetArguments(pszArgs: String; cchMaxPath: Integer): HResult; - function SetArguments(pszArgs: String): HResult; - function GetHotkey(var pwHotkey: Word): HResult; - function SetHotkey(wHotkey: Word): HResult; - function GetShowCmd(out piShowCmd: Integer): HResult; - function SetShowCmd(iShowCmd: Integer): HResult; - function GetIconLocation(pszIconPath: String; cchIconPath: Integer; - out piIcon: Integer): HResult; - function SetIconLocation(pszIconPath: String; iIcon: Integer): HResult; - function SetRelativePath(pszPathRel: String; dwReserved: DWORD): HResult; - function Resolve(Wnd: HWND; fFlags: DWORD): HResult; - function SetPath(pszFile: String): HResult; - end; - - IPersist = interface(IUnknown) - '{0000010C-0000-0000-C000-000000000046}' - function GetClassID(var classID: TGUID): HResult; - end; - - IPersistFile = interface(IPersist) - '{0000010B-0000-0000-C000-000000000046}' - function IsDirty: HResult; - function Load(pszFileName: String; dwMode: Longint): HResult; - function Save(pszFileName: String; fRemember: BOOL): HResult; - function SaveCompleted(pszFileName: String): HResult; - function GetCurFile(out pszFileName: String): HResult; - end; - -procedure IShellLinkButtonOnClick(Sender: TObject); -var - Obj: IUnknown; - SL: IShellLinkW; - PF: IPersistFile; -begin - { Create the main ShellLink COM Automation object } - Obj := CreateComObject(StringToGuid(CLSID_ShellLink)); - - { Set the shortcut properties } - SL := IShellLinkW(Obj); - OleCheck(SL.SetPath(ExpandConstant('{srcexe}'))); - OleCheck(SL.SetArguments('')); - OleCheck(SL.SetShowCmd(SW_SHOWNORMAL)); - - { Save the shortcut } - PF := IPersistFile(Obj); - OleCheck(PF.Save(ExpandConstant('{autodesktop}\CodeAutomation2 Test.lnk'), True)); - - MsgBox('Saved a shortcut named ''CodeAutomation2 Test'' on the desktop.', mbInformation, mb_Ok); -end; - -{--- ITaskScheduler ---} - -const - CLSID_TaskScheduler = '{148BD52A-A2AB-11CE-B11F-00AA00530503}'; - CLSID_Task = '{148BD520-A2AB-11CE-B11F-00AA00530503}'; - IID_Task = '{148BD524-A2AB-11CE-B11F-00AA00530503}'; - TASK_TIME_TRIGGER_DAILY = 1; - -type - ITaskScheduler = interface(IUnknown) - '{148BD527-A2AB-11CE-B11F-00AA00530503}' - function SetTargetComputer(pwszComputer: String): HResult; - function GetTargetComputer(out ppwszComputer: String): HResult; - procedure Dummy; - function Activate(pwszName: String; var riid: TGUID; out ppUnk: IUnknown): HResult; - function Delete(pwszName: String): HResult; - function NewWorkItem(pwszTaskName: String; var rclsid: TGUID; var riid: TGUID; out ppUnk: IUnknown): HResult; - procedure Dummy2; - function IsOfType(pwszName: String; var riid: TGUID): HResult; - end; - - TDaily = record - DaysInterval: WORD; - end; - - TWeekly = record - WeeksInterval: WORD; - rgfDaysOfTheWeek: WORD; - end; - - TMonthyDate = record - rgfDays: DWORD; - rgfMonths: WORD; - end; - - TMonthlyDow = record - wWhichWeek: WORD; - rgfDaysOfTheWeek: WORD; - rgfMonths: WORD; - end; - - { ROPS doesn't support unions, replace this with the type you need and adjust padding (end size has to be 48). } - TTriggerTypeUnion = record - Daily: TDaily; - Pad1: WORD; - Pad2: WORD; - Pad3: WORD; - end; - - TTaskTrigger = record - cbTriggerSize: WORD; - Reserved1: WORD; - wBeginYear: WORD; - wBeginMonth: WORD; - wBeginDay: WORD; - wEndYear: WORD; - wEndMonth: WORD; - wEndDay: WORD; - wStartHour: WORD; - wStartMinute: WORD; - MinutesDuration: DWORD; - MinutesInterval: DWORD; - rgFlags: DWORD; - TriggerType: DWORD; - Type_: TTriggerTypeUnion; - Reserved2: WORD; - wRandomMinutesInterval: WORD; - end; - - ITaskTrigger = interface(IUnknown) - '{148BD52B-A2AB-11CE-B11F-00AA00530503}' - function SetTrigger(var pTrigger: TTaskTrigger): HResult; - function GetTrigger(var pTrigger: TTaskTrigger): HResult; - function GetTriggerString(var ppwszTrigger: String): HResult; - end; - - IScheduledWorkItem = interface(IUnknown) - '{A6B952F0-A4B1-11D0-997D-00AA006887EC}' - function CreateTrigger(out piNewTrigger: Word; out ppTrigger: ITaskTrigger): HResult; - function DeleteTrigger(iTrigger: Word): HResult; - function GetTriggerCount(out pwCount: Word): HResult; - function GetTrigger(iTrigger: Word; var ppTrigger: ITaskTrigger): HResult; - function GetTriggerString(iTrigger: Word; out ppwszTrigger: String): HResult; - procedure Dummy; - procedure Dummy2; - function SetIdleWait(wIdleMinutes: Word; wDeadlineMinutes: Word): HResult; - function GetIdleWait(out pwIdleMinutes: Word; out pwDeadlineMinutes: Word): HResult; - function Run: HResult; - function Terminate: HResult; - function EditWorkItem(hParent: HWND; dwReserved: DWORD): HResult; - procedure Dummy3; - function GetStatus(out phrStatus: HResult): HResult; - function GetExitCode(out pdwExitCode: DWORD): HResult; - function SetComment(pwszComment: String): HResult; - function GetComment(out ppwszComment: String): HResult; - function SetCreator(pwszCreator: String): HResult; - function GetCreator(out ppwszCreator: String): HResult; - function SetWorkItemData(cbData: Word; var rgbData: Byte): HResult; - function GetWorkItemData(out pcbData: Word; out prgbData: Byte): HResult; - function SetErrorRetryCount(wRetryCount: Word): HResult; - function GetErrorRetryCount(out pwRetryCount: Word): HResult; - function SetErrorRetryInterval(wRetryInterval: Word): HResult; - function GetErrorRetryInterval(out pwRetryInterval: Word): HResult; - function SetFlags(dwFlags: DWORD): HResult; - function GetFlags(out pdwFlags: DWORD): HResult; - function SetAccountInformation(pwszAccountName: String; pwszPassword: String): HResult; - function GetAccountInformation(out ppwszAccountName: String): HResult; - end; - - ITask = interface(IScheduledWorkItem) - '{148BD524-A2AB-11CE-B11F-00AA00530503}' - function SetApplicationName(pwszApplicationName: String): HResult; - function GetApplicationName(out ppwszApplicationName: String): HResult; - function SetParameters(pwszParameters: String): HResult; - function GetParameters(out ppwszParameters: String): HResult; - function SetWorkingDirectory(pwszWorkingDirectory: String): HResult; - function GetWorkingDirectory(out ppwszWorkingDirectory: String): HResult; - function SetPriority(dwPriority: DWORD): HResult; - function GetPriority(out pdwPriority: DWORD): HResult; - function SetTaskFlags(dwFlags: DWORD): HResult; - function GetTaskFlags(out pdwFlags: DWORD): HResult; - function SetMaxRunTime(dwMaxRunTimeMS: DWORD): HResult; - function GetMaxRunTime(out pdwMaxRunTimeMS: DWORD): HResult; - end; - - -procedure ITaskSchedulerButtonOnClick(Sender: TObject); -var - Obj, Obj2: IUnknown; - TaskScheduler: ITaskScheduler; - G1, G2: TGUID; - Task: ITask; - iNewTrigger: WORD; - TaskTrigger: ITaskTrigger; - TaskTrigger2: TTaskTrigger; - PF: IPersistFile; -begin - { Create the main TaskScheduler COM Automation object } - Obj := CreateComObject(StringToGuid(CLSID_TaskScheduler)); - - { Create the Task COM automation object } - TaskScheduler := ITaskScheduler(Obj); - G1 := StringToGuid(CLSID_Task); - G2 := StringToGuid(IID_Task); - //This will throw an exception if the task already exists - OleCheck(TaskScheduler.NewWorkItem('CodeAutomation2 Test', G1, G2, Obj2)); - - { Set the task properties } - Task := ITask(Obj2); - OleCheck(Task.SetComment('CodeAutomation2 Test Comment')); - OleCheck(Task.SetApplicationName(ExpandConstant('{srcexe}'))); - - { Set the task account information } - //Uncomment the following and provide actual user info to get a runnable task - //OleCheck(Task.SetAccountInformation('username', 'password')); - - { Create the TaskTrigger COM automation object } - OleCheck(Task.CreateTrigger(iNewTrigger, TaskTrigger)); - - { Set the task trigger properties } - with TaskTrigger2 do begin - cbTriggerSize := SizeOf(TaskTrigger2); - wBeginYear := 2009; - wBeginMonth := 10; - wBeginDay := 1; - wStartHour := 12; - TriggerType := TASK_TIME_TRIGGER_DAILY; - Type_.Daily.DaysInterval := 1; - end; - OleCheck(TaskTrigger.SetTrigger(TaskTrigger2)); - - { Save the task } - PF := IPersistFile(Obj2); - OleCheck(PF.Save('', True)); - - MsgBox('Created a daily task named named ''CodeAutomation2 Test''.' + #13#13 + 'Note: Account information not set so the task won''t actually run, uncomment the SetAccountInfo call and provide actual user info to get a runnable task.', mbInformation, mb_Ok); -end; - -{---} - -procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent); -begin - with TNewButton.Create(WizardForm) do begin - Left := ALeft; - Top := ATop; - Width := (WizardForm.CancelButton.Width*3)/2; - Height := WizardForm.CancelButton.Height; - Caption := ACaption; - OnClick := ANotifyEvent; - Parent := WizardForm.WelcomePage; - end; -end; - -procedure InitializeWizard(); -var - Left, LeftInc, Top, TopInc: Integer; -begin - Left := WizardForm.WelcomeLabel2.Left; - LeftInc := (WizardForm.CancelButton.Width*3)/2 + ScaleX(8); - TopInc := WizardForm.CancelButton.Height + ScaleY(8); - Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc; - - CreateButton(Left, Top, '&IShellLink...', @IShellLinkButtonOnClick); - Top := Top + TopInc; - CreateButton(Left, Top, '&ITaskScheduler...', @ITaskSchedulerButtonOnClick); -end; - - - - - diff --git a/Dependencies/Inno/Examples/CodeClasses.iss b/Dependencies/Inno/Examples/CodeClasses.iss deleted file mode 100644 index 5990f7d5..00000000 --- a/Dependencies/Inno/Examples/CodeClasses.iss +++ /dev/null @@ -1,424 +0,0 @@ -; -- CodeClasses.iss -- -; -; This script shows how to use the WizardForm object and the various VCL classes. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -CreateAppDir=no -DisableProgramGroupPage=yes -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output -PrivilegesRequired=lowest - -; Uncomment the following three lines to test the layout when scaling and rtl are active -;[LangOptions] -;RightToLeft=yes -;DialogFontSize=12 - -[Files] -Source: compiler:WizModernSmallImage.bmp; Flags: dontcopy - -[Code] -procedure ButtonOnClick(Sender: TObject); -begin - MsgBox('You clicked the button!', mbInformation, mb_Ok); -end; - -procedure BitmapImageOnClick(Sender: TObject); -begin - MsgBox('You clicked the image!', mbInformation, mb_Ok); -end; - -procedure FormButtonOnClick(Sender: TObject); -var - Form: TSetupForm; - Edit: TNewEdit; - OKButton, CancelButton: TNewButton; - W: Integer; -begin - Form := CreateCustomForm(); - try - Form.ClientWidth := ScaleX(256); - Form.ClientHeight := ScaleY(128); - Form.Caption := 'TSetupForm'; - - Edit := TNewEdit.Create(Form); - Edit.Top := ScaleY(10); - Edit.Left := ScaleX(10); - Edit.Width := Form.ClientWidth - ScaleX(2 * 10); - Edit.Height := ScaleY(23); - Edit.Anchors := [akLeft, akTop, akRight]; - Edit.Text := 'TNewEdit'; - Edit.Parent := Form; - - OKButton := TNewButton.Create(Form); - OKButton.Parent := Form; - OKButton.Caption := 'OK'; - OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10); - OKButton.Top := Form.ClientHeight - ScaleY(23 + 10); - OKButton.Height := ScaleY(23); - OKButton.Anchors := [akRight, akBottom] - OKButton.ModalResult := mrOk; - OKButton.Default := True; - - CancelButton := TNewButton.Create(Form); - CancelButton.Parent := Form; - CancelButton.Caption := 'Cancel'; - CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10); - CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10); - CancelButton.Height := ScaleY(23); - CancelButton.Anchors := [akRight, akBottom] - CancelButton.ModalResult := mrCancel; - CancelButton.Cancel := True; - - W := Form.CalculateButtonWidth([OKButton.Caption, CancelButton.Caption]); - OKButton.Width := W; - CancelButton.Width := W; - - Form.ActiveControl := Edit; - { Keep the form from sizing vertically since we don't have any controls which can size vertically } - Form.KeepSizeY := True; - { Center on WizardForm. Without this call it will still automatically center, but on the screen } - Form.FlipSizeAndCenterIfNeeded(True, WizardForm, False); - - if Form.ShowModal() = mrOk then - MsgBox('You clicked OK.', mbInformation, MB_OK); - finally - Form.Free(); - end; -end; - -procedure TaskDialogButtonOnClick(Sender: TObject); -begin - { TaskDialogMsgBox isn't a class but showing it anyway since it fits with the theme } - - case TaskDialogMsgBox('Choose A or B', - 'You can choose A or B.', - mbInformation, - MB_YESNOCANCEL, ['I choose &A'#13#10'A will be chosen.', 'I choose &B'#13#10'B will be chosen.'], - IDYES) of - IDYES: MsgBox('You chose A.', mbInformation, MB_OK); - IDNO: MsgBox('You chose B.', mbInformation, MB_OK); - end; -end; - -procedure CreateTheWizardPages; -var - Page: TWizardPage; - Button, FormButton, TaskDialogButton: TNewButton; - Panel: TPanel; - CheckBox: TNewCheckBox; - Edit: TNewEdit; - PasswordEdit: TPasswordEdit; - Memo: TNewMemo; - ComboBox: TNewComboBox; - ListBox: TNewListBox; - StaticText, ProgressBarLabel: TNewStaticText; - ProgressBar, ProgressBar2, ProgressBar3: TNewProgressBar; - CheckListBox, CheckListBox2: TNewCheckListBox; - FolderTreeView: TFolderTreeView; - BitmapImage, BitmapImage2, BitmapImage3: TBitmapImage; - BitmapFileName: String; - RichEditViewer: TRichEditViewer; -begin - { TButton and others } - - Page := CreateCustomPage(wpWelcome, 'Custom wizard page controls', 'TButton and others'); - - Button := TNewButton.Create(Page); - Button.Caption := 'TNewButton'; - Button.Width := WizardForm.CalculateButtonWidth([Button.Caption]); - Button.Height := ScaleY(23); - Button.OnClick := @ButtonOnClick; - Button.Parent := Page.Surface; - - Panel := TPanel.Create(Page); - Panel.Width := Page.SurfaceWidth div 2 - ScaleX(8); - Panel.Left := Page.SurfaceWidth - Panel.Width; - Panel.Height := Button.Height * 2; - Panel.Anchors := [akLeft, akTop, akRight]; - Panel.Caption := 'TPanel'; - Panel.Color := clWindow; - Panel.BevelKind := bkFlat; - Panel.BevelOuter := bvNone; - Panel.ParentBackground := False; - Panel.Parent := Page.Surface; - - CheckBox := TNewCheckBox.Create(Page); - CheckBox.Top := Button.Top + Button.Height + ScaleY(8); - CheckBox.Width := Page.SurfaceWidth div 2; - CheckBox.Height := ScaleY(17); - CheckBox.Caption := 'TNewCheckBox'; - CheckBox.Checked := True; - CheckBox.Parent := Page.Surface; - - Edit := TNewEdit.Create(Page); - Edit.Top := CheckBox.Top + CheckBox.Height + ScaleY(8); - Edit.Width := Page.SurfaceWidth div 2 - ScaleX(8); - Edit.Text := 'TNewEdit'; - Edit.Parent := Page.Surface; - - PasswordEdit := TPasswordEdit.Create(Page); - PasswordEdit.Left := Page.SurfaceWidth - Edit.Width; - PasswordEdit.Top := CheckBox.Top + CheckBox.Height + ScaleY(8); - PasswordEdit.Width := Edit.Width; - PasswordEdit.Anchors := [akLeft, akTop, akRight]; - PasswordEdit.Text := 'TPasswordEdit'; - PasswordEdit.Parent := Page.Surface; - - Memo := TNewMemo.Create(Page); - Memo.Top := Edit.Top + Edit.Height + ScaleY(8); - Memo.Width := Page.SurfaceWidth; - Memo.Height := ScaleY(89); - Memo.Anchors := [akLeft, akTop, akRight, akBottom]; - Memo.ScrollBars := ssVertical; - Memo.Text := 'TNewMemo'; - Memo.Parent := Page.Surface; - - FormButton := TNewButton.Create(Page); - FormButton.Caption := 'TSetupForm'; - FormButton.Top := Memo.Top + Memo.Height + ScaleY(8); - FormButton.Width := WizardForm.CalculateButtonWidth([FormButton.Caption]); - FormButton.Height := ScaleY(23); - FormButton.Anchors := [akLeft, akBottom]; - FormButton.OnClick := @FormButtonOnClick; - FormButton.Parent := Page.Surface; - - TaskDialogButton := TNewButton.Create(Page); - TaskDialogButton.Caption := 'TaskDialogMsgBox'; - TaskDialogButton.Top := FormButton.Top; - TaskDialogButton.Left := FormButton.Left + FormButton.Width + ScaleX(8); - TaskDialogButton.Width := WizardForm.CalculateButtonWidth([TaskDialogButton.Caption]); - TaskDialogButton.Height := ScaleY(23); - TaskDialogButton.Anchors := [akLeft, akBottom]; - TaskDialogButton.OnClick := @TaskDialogButtonOnClick; - TaskDialogButton.Parent := Page.Surface; - - { TComboBox and others } - - Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TComboBox and others'); - - ComboBox := TNewComboBox.Create(Page); - ComboBox.Width := Page.SurfaceWidth; - ComboBox.Anchors := [akLeft, akTop, akRight]; - ComboBox.Parent := Page.Surface; - ComboBox.Style := csDropDownList; - ComboBox.Items.Add('TComboBox'); - ComboBox.ItemIndex := 0; - - ListBox := TNewListBox.Create(Page); - ListBox.Top := ComboBox.Top + ComboBox.Height + ScaleY(8); - ListBox.Width := Page.SurfaceWidth; - ListBox.Height := ScaleY(97); - ListBox.Anchors := [akLeft, akTop, akRight, akBottom]; - ListBox.Parent := Page.Surface; - ListBox.Items.Add('TListBox'); - ListBox.ItemIndex := 0; - - StaticText := TNewStaticText.Create(Page); - StaticText.Top := ListBox.Top + ListBox.Height + ScaleY(8); - StaticText.Anchors := [akLeft, akRight, akBottom]; - StaticText.Caption := 'TNewStaticText'; - StaticText.AutoSize := True; - StaticText.Parent := Page.Surface; - - ProgressBarLabel := TNewStaticText.Create(Page); - ProgressBarLabel.Top := StaticText.Top + StaticText.Height + ScaleY(8); - ProgressBarLabel.Anchors := [akLeft, akBottom]; - ProgressBarLabel.Caption := 'TNewProgressBar'; - ProgressBarLabel.AutoSize := True; - ProgressBarLabel.Parent := Page.Surface; - - ProgressBar := TNewProgressBar.Create(Page); - ProgressBar.Left := ProgressBarLabel.Width + ScaleX(8); - ProgressBar.Top := ProgressBarLabel.Top; - ProgressBar.Width := Page.SurfaceWidth - ProgressBar.Left; - ProgressBar.Height := ProgressBarLabel.Height + ScaleY(8); - ProgressBar.Anchors := [akLeft, akRight, akBottom]; - ProgressBar.Parent := Page.Surface; - ProgressBar.Position := 25; - - ProgressBar2 := TNewProgressBar.Create(Page); - ProgressBar2.Left := ProgressBarLabel.Width + ScaleX(8); - ProgressBar2.Top := ProgressBar.Top + ProgressBar.Height + ScaleY(4); - ProgressBar2.Width := Page.SurfaceWidth - ProgressBar.Left; - ProgressBar2.Height := ProgressBarLabel.Height + ScaleY(8); - ProgressBar2.Anchors := [akLeft, akRight, akBottom]; - ProgressBar2.Parent := Page.Surface; - ProgressBar2.Position := 50; - { Note: TNewProgressBar.State property only has an effect on Windows Vista and newer } - ProgressBar2.State := npbsError; - - ProgressBar3 := TNewProgressBar.Create(Page); - ProgressBar3.Left := ProgressBarLabel.Width + ScaleX(8); - ProgressBar3.Top := ProgressBar2.Top + ProgressBar2.Height + ScaleY(4); - ProgressBar3.Width := Page.SurfaceWidth - ProgressBar.Left; - ProgressBar3.Height := ProgressBarLabel.Height + ScaleY(8); - ProgressBar3.Anchors := [akLeft, akRight, akBottom]; - ProgressBar3.Parent := Page.Surface; - { Note: TNewProgressBar.Style property only has an effect on Windows XP and newer } - ProgressBar3.Style := npbstMarquee; - - { TNewCheckListBox } - - Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TNewCheckListBox'); - - CheckListBox := TNewCheckListBox.Create(Page); - CheckListBox.Width := Page.SurfaceWidth; - CheckListBox.Height := ScaleY(97); - CheckListBox.Anchors := [akLeft, akTop, akRight, akBottom]; - CheckListBox.Flat := True; - CheckListBox.Parent := Page.Surface; - CheckListBox.AddCheckBox('TNewCheckListBox', '', 0, True, True, False, True, nil); - CheckListBox.AddRadioButton('TNewCheckListBox', '', 1, True, True, nil); - CheckListBox.AddRadioButton('TNewCheckListBox', '', 1, False, True, nil); - CheckListBox.AddCheckBox('TNewCheckListBox', '', 0, True, True, False, True, nil); - CheckListBox.AddCheckBox('TNewCheckListBox', '', 1, True, True, False, True, nil); - CheckListBox.AddCheckBox('TNewCheckListBox', '', 2, True, True, False, True, nil); - CheckListBox.AddCheckBox('TNewCheckListBox', '', 2, False, True, False, True, nil); - CheckListBox.AddCheckBox('TNewCheckListBox', '', 1, False, True, False, True, nil); - - CheckListBox2 := TNewCheckListBox.Create(Page); - CheckListBox2.Top := CheckListBox.Top + CheckListBox.Height + ScaleY(8); - CheckListBox2.Width := Page.SurfaceWidth; - CheckListBox2.Height := ScaleY(97); - CheckListBox2.Anchors := [akLeft, akRight, akBottom]; - CheckListBox2.BorderStyle := bsNone; - CheckListBox2.ParentColor := True; - CheckListBox2.MinItemHeight := WizardForm.TasksList.MinItemHeight; - CheckListBox2.ShowLines := False; - CheckListBox2.WantTabs := True; - CheckListBox2.Parent := Page.Surface; - CheckListBox2.AddGroup('TNewCheckListBox', '', 0, nil); - CheckListBox2.AddRadioButton('TNewCheckListBox', '', 0, True, True, nil); - CheckListBox2.AddRadioButton('TNewCheckListBox', '', 0, False, True, nil); - - { TFolderTreeView } - - Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TFolderTreeView'); - - FolderTreeView := TFolderTreeView.Create(Page); - FolderTreeView.Width := Page.SurfaceWidth; - FolderTreeView.Height := Page.SurfaceHeight; - FolderTreeView.Anchors := [akLeft, akTop, akRight, akBottom]; - FolderTreeView.Parent := Page.Surface; - FolderTreeView.Directory := ExpandConstant('{src}'); - - { TBitmapImage } - - Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TBitmapImage'); - - BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp'); - ExtractTemporaryFile(ExtractFileName(BitmapFileName)); - - BitmapImage := TBitmapImage.Create(Page); - BitmapImage.AutoSize := True; - BitmapImage.Bitmap.LoadFromFile(BitmapFileName); - BitmapImage.Cursor := crHand; - BitmapImage.OnClick := @BitmapImageOnClick; - BitmapImage.Parent := Page.Surface; - - BitmapImage2 := TBitmapImage.Create(Page); - BitmapImage2.BackColor := $400000; - BitmapImage2.Bitmap := BitmapImage.Bitmap; - BitmapImage2.Center := True; - BitmapImage2.Left := BitmapImage.Width + 10; - BitmapImage2.Height := 2*BitmapImage.Height; - BitmapImage2.Width := 2*BitmapImage.Width; - BitmapImage2.Cursor := crHand; - BitmapImage2.OnClick := @BitmapImageOnClick; - BitmapImage2.Parent := Page.Surface; - - BitmapImage3 := TBitmapImage.Create(Page); - BitmapImage3.Bitmap := BitmapImage.Bitmap; - BitmapImage3.Stretch := True; - BitmapImage3.Left := 3*BitmapImage.Width + 20; - BitmapImage3.Height := 4*BitmapImage.Height; - BitmapImage3.Width := 4*BitmapImage.Width; - BitmapImage3.Anchors := [akLeft, akTop, akRight, akBottom]; - BitmapImage3.Cursor := crHand; - BitmapImage3.OnClick := @BitmapImageOnClick; - BitmapImage3.Parent := Page.Surface; - - { TRichViewer } - - Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TRichViewer'); - - RichEditViewer := TRichEditViewer.Create(Page); - RichEditViewer.Width := Page.SurfaceWidth; - RichEditViewer.Height := Page.SurfaceHeight; - RichEditViewer.Anchors := [akLeft, akTop, akRight, akBottom]; - RichEditViewer.BevelKind := bkFlat; - RichEditViewer.BorderStyle := bsNone; - RichEditViewer.Parent := Page.Surface; - RichEditViewer.ScrollBars := ssVertical; - RichEditViewer.UseRichEdit := True; - RichEditViewer.RTFText := '{\rtf1\ansi\ansicpg1252\deff0\deflang1043{\fonttbl{\f0\fswiss\fcharset0 Arial;}}{\colortbl ;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue128;}\viewkind4\uc1\pard\f0\fs20 T\cf1 Rich\cf2 Edit\cf3 Viewer\cf0\par}'; - RichEditViewer.ReadOnly := True; -end; - -procedure AboutButtonOnClick(Sender: TObject); -begin - MsgBox('This demo shows some features of the various form objects and control classes.', mbInformation, mb_Ok); -end; - -procedure URLLabelOnClick(Sender: TObject); -var - ErrorCode: Integer; -begin - ShellExecAsOriginalUser('open', 'http://www.innosetup.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); -end; - -procedure CreateAboutButtonAndURLLabel(ParentForm: TSetupForm; CancelButton: TNewButton); -var - AboutButton: TNewButton; - URLLabel: TNewStaticText; -begin - AboutButton := TNewButton.Create(ParentForm); - AboutButton.Left := ParentForm.ClientWidth - CancelButton.Left - CancelButton.Width; - AboutButton.Top := CancelButton.Top; - AboutButton.Width := CancelButton.Width; - AboutButton.Height := CancelButton.Height; - AboutButton.Anchors := [akLeft, akBottom]; - AboutButton.Caption := '&About...'; - AboutButton.OnClick := @AboutButtonOnClick; - AboutButton.Parent := ParentForm; - - URLLabel := TNewStaticText.Create(ParentForm); - URLLabel.Caption := 'www.innosetup.com'; - URLLabel.Cursor := crHand; - URLLabel.OnClick := @URLLabelOnClick; - URLLabel.Parent := ParentForm; - { Alter Font *after* setting Parent so the correct defaults are inherited first } - URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline]; - URLLabel.Font.Color := clHotLight - URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2; - URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20); - URLLabel.Anchors := [akLeft, akBottom]; -end; - -procedure InitializeWizard(); -begin - { Custom wizard pages } - - CreateTheWizardPages; - - { Custom controls } - - CreateAboutButtonAndURLLabel(WizardForm, WizardForm.CancelButton); - - { Custom beveled label } - - WizardForm.BeveledLabel.Caption := ' Bevel '; -end; - -procedure InitializeUninstallProgressForm(); -begin - { Custom controls } - - CreateAboutButtonAndURLLabel(UninstallProgressForm, UninstallProgressForm.CancelButton); -end; - diff --git a/Dependencies/Inno/Examples/CodeDlg.iss b/Dependencies/Inno/Examples/CodeDlg.iss deleted file mode 100644 index 2fe57360..00000000 --- a/Dependencies/Inno/Examples/CodeDlg.iss +++ /dev/null @@ -1,207 +0,0 @@ -; -- CodeDlg.iss -- -; -; This script shows how to insert custom wizard pages into Setup and how to handle -; these pages. Furthermore it shows how to 'communicate' between the [Code] section -; and the regular Inno Setup sections using {code:...} constants. Finally it shows -; how to customize the settings text on the 'Ready To Install' page. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DisableWelcomePage=no -DefaultDirName={autopf}\My Program -DisableProgramGroupPage=yes -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output -PrivilegesRequired=lowest - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -Source: "MyProg.chm"; DestDir: "{app}" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Registry] -Root: HKA; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty -Root: HKA; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey -Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Name"; ValueData: "{code:GetUser|Name}" -Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Company"; ValueData: "{code:GetUser|Company}" -Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "DataDir"; ValueData: "{code:GetDataDir}" -; etc. - -[Dirs] -Name: {code:GetDataDir}; Flags: uninsneveruninstall - -[Code] -var - UserPage: TInputQueryWizardPage; - UsagePage: TInputOptionWizardPage; - LightMsgPage: TOutputMsgWizardPage; - KeyPage: TInputQueryWizardPage; - ProgressPage: TOutputProgressWizardPage; - DataDirPage: TInputDirWizardPage; - -procedure InitializeWizard; -begin - { Create the pages } - - UserPage := CreateInputQueryPage(wpWelcome, - 'Personal Information', 'Who are you?', - 'Please specify your name and the company for whom you work, then click Next.'); - UserPage.Add('Name:', False); - UserPage.Add('Company:', False); - - UsagePage := CreateInputOptionPage(UserPage.ID, - 'Personal Information', 'How will you use My Program?', - 'Please specify how you would like to use My Program, then click Next.', - True, False); - UsagePage.Add('Light mode (no ads, limited functionality)'); - UsagePage.Add('Sponsored mode (with ads, full functionality)'); - UsagePage.Add('Paid mode (no ads, full functionality)'); - - LightMsgPage := CreateOutputMsgPage(UsagePage.ID, - 'Personal Information', 'How will you use My Program?', - 'Note: to enjoy all features My Program can offer and to support its development, ' + - 'you can switch to sponsored or paid mode at any time by selecting ''Usage Mode'' ' + - 'in the ''Help'' menu of My Program after the installation has completed.'#13#13 + - 'Click Back if you want to change your usage mode setting now, or click Next to ' + - 'continue with the installation.'); - - KeyPage := CreateInputQueryPage(UsagePage.ID, - 'Personal Information', 'What''s your registration key?', - 'Please specify your registration key and click Next to continue. If you don''t ' + - 'have a valid registration key, click Back to choose a different usage mode.'); - KeyPage.Add('Registration key:', False); - - ProgressPage := CreateOutputProgressPage('Personal Information', - 'What''s your registration key?'); - - DataDirPage := CreateInputDirPage(wpSelectDir, - 'Select Personal Data Directory', 'Where should personal data files be installed?', - 'Select the folder in which Setup should install personal data files, then click Next.', - False, ''); - DataDirPage.Add(''); - - { Set default values, using settings that were stored last time if possible } - - UserPage.Values[0] := GetPreviousData('Name', ExpandConstant('{sysuserinfoname}')); - UserPage.Values[1] := GetPreviousData('Company', ExpandConstant('{sysuserinfoorg}')); - - case GetPreviousData('UsageMode', '') of - 'light': UsagePage.SelectedValueIndex := 0; - 'sponsored': UsagePage.SelectedValueIndex := 1; - 'paid': UsagePage.SelectedValueIndex := 2; - else - UsagePage.SelectedValueIndex := 1; - end; - - DataDirPage.Values[0] := GetPreviousData('DataDir', ''); -end; - -procedure RegisterPreviousData(PreviousDataKey: Integer); -var - UsageMode: String; -begin - { Store the settings so we can restore them next time } - SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0]); - SetPreviousData(PreviousDataKey, 'Company', UserPage.Values[1]); - case UsagePage.SelectedValueIndex of - 0: UsageMode := 'light'; - 1: UsageMode := 'sponsored'; - 2: UsageMode := 'paid'; - end; - SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode); - SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]); -end; - -function ShouldSkipPage(PageID: Integer): Boolean; -begin - { Skip pages that shouldn't be shown } - if (PageID = LightMsgPage.ID) and (UsagePage.SelectedValueIndex <> 0) then - Result := True - else if (PageID = KeyPage.ID) and (UsagePage.SelectedValueIndex <> 2) then - Result := True - else - Result := False; -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -var - I: Integer; -begin - { Validate certain pages before allowing the user to proceed } - if CurPageID = UserPage.ID then begin - if UserPage.Values[0] = '' then begin - MsgBox('You must enter your name.', mbError, MB_OK); - Result := False; - end else begin - if DataDirPage.Values[0] = '' then - DataDirPage.Values[0] := 'C:\' + UserPage.Values[0]; - Result := True; - end; - end else if CurPageID = KeyPage.ID then begin - { Just to show how 'OutputProgress' pages work. - Always use a try..finally between the Show and Hide calls as shown below. } - ProgressPage.SetText('Authorizing registration key...', ''); - ProgressPage.SetProgress(0, 0); - ProgressPage.Show; - try - for I := 0 to 10 do begin - ProgressPage.SetProgress(I, 10); - Sleep(100); - end; - finally - ProgressPage.Hide; - end; - if GetSHA1OfString('codedlg' + KeyPage.Values[0]) = '8013f310d340dab18a0d0cda2b5b115d2dcd97e4' then - Result := True - else begin - MsgBox('You must enter a valid registration key. (Hint: The key is "inno".)', mbError, MB_OK); - Result := False; - end; - end else - Result := True; -end; - -function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, - MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; -var - S: String; -begin - { Fill the 'Ready Memo' with the normal settings and the custom settings } - S := ''; - S := S + 'Personal Information:' + NewLine; - S := S + Space + UserPage.Values[0] + NewLine; - if UserPage.Values[1] <> '' then - S := S + Space + UserPage.Values[1] + NewLine; - S := S + NewLine; - - S := S + 'Usage Mode:' + NewLine + Space; - case UsagePage.SelectedValueIndex of - 0: S := S + 'Light mode'; - 1: S := S + 'Sponsored mode'; - 2: S := S + 'Paid mode'; - end; - S := S + NewLine + NewLine; - - S := S + MemoDirInfo + NewLine; - S := S + Space + DataDirPage.Values[0] + ' (personal data files)' + NewLine; - - Result := S; -end; - -function GetUser(Param: String): String; -begin - { Return a user value } - { Could also be split into separate GetUserName and GetUserCompany functions } - if Param = 'Name' then - Result := UserPage.Values[0] - else if Param = 'Company' then - Result := UserPage.Values[1]; -end; - -function GetDataDir(Param: String): String; -begin - { Return the selected DataDir } - Result := DataDirPage.Values[0]; -end; diff --git a/Dependencies/Inno/Examples/CodeDll.iss b/Dependencies/Inno/Examples/CodeDll.iss deleted file mode 100644 index 3dd808a3..00000000 --- a/Dependencies/Inno/Examples/CodeDll.iss +++ /dev/null @@ -1,95 +0,0 @@ -; -- CodeDll.iss -- -; -; This script shows how to call functions in external DLLs (like Windows API functions) -; at runtime and how to perform direct callbacks from these functions to functions -; in the script. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DisableProgramGroupPage=yes -DisableWelcomePage=no -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -Source: "MyProg.chm"; DestDir: "{app}" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme -; Install our DLL to {app} so we can access it at uninstall time. -; Use "Flags: dontcopy" if you don't need uninstall time access. -Source: "MyDll.dll"; DestDir: "{app}" - -[Code] -const - MB_ICONINFORMATION = $40; - -// Importing a Unicode Windows API function. -function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; -external 'MessageBoxW@user32.dll stdcall'; - -// Importing an ANSI custom DLL function, first for Setup, then for uninstall. -procedure MyDllFuncSetup(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); -external 'MyDllFunc@files:MyDll.dll stdcall setuponly'; - -procedure MyDllFuncUninstall(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); -external 'MyDllFunc@{app}\MyDll.dll stdcall uninstallonly'; - -// Importing an ANSI function for a DLL which might not exist at runtime. -procedure DelayLoadedFunc(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); -external 'DllFunc@DllWhichMightNotExist.dll stdcall delayload'; - -function NextButtonClick(CurPage: Integer): Boolean; -var - hWnd: Integer; -begin - if CurPage = wpWelcome then begin - hWnd := StrToInt(ExpandConstant('{wizardhwnd}')); - - MessageBox(hWnd, 'Hello from Windows API function', 'MessageBoxA', MB_OK or MB_ICONINFORMATION); - - MyDllFuncSetup(hWnd, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION); - - try - // If this DLL does not exist (it shouldn't), an exception will be raised. Press F9 to continue. - DelayLoadedFunc(hWnd, 'Hello from delay loaded function', 'DllFunc', MB_OK or MB_ICONINFORMATION); - except - // - end; - end; - Result := True; -end; - -procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); -begin - // Call our function just before the actual uninstall process begins. - if CurUninstallStep = usUninstall then begin - MyDllFuncUninstall(0, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION); - - // Now that we're finished with it, unload MyDll.dll from memory. - // We have to do this so that the uninstaller will be able to remove the DLL and the {app} directory. - UnloadDLL(ExpandConstant('{app}\MyDll.dll')); - end; -end; - -// The following shows how to use callbacks. - -function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: Longword): Longword; -external 'SetTimer@user32.dll stdcall'; - -var - TimerCount: Integer; - -procedure MyTimerProc(Arg1, Arg2, Arg3, Arg4: Longword); -begin - Inc(TimerCount); - WizardForm.BeveledLabel.Caption := ' Timer! ' + IntToStr(TimerCount) + ' '; - WizardForm.BeveledLabel.Visible := True; -end; - -procedure InitializeWizard; -begin - SetTimer(0, 0, 1000, CreateCallback(@MyTimerProc)); -end; diff --git a/Dependencies/Inno/Examples/CodeDownloadFiles.iss b/Dependencies/Inno/Examples/CodeDownloadFiles.iss deleted file mode 100644 index 880bea79..00000000 --- a/Dependencies/Inno/Examples/CodeDownloadFiles.iss +++ /dev/null @@ -1,63 +0,0 @@ -; -- CodeDownloadFiles.iss -- -; -; This script shows how the CreateDownloadPage support function can be used to -; download temporary files while showing the download progress to the user. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -; Place any regular files here -Source: "MyProg.exe"; DestDir: "{app}"; -Source: "MyProg.chm"; DestDir: "{app}"; -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme; -; These files will be downloaded -Source: "{tmp}\innosetup-latest.exe"; DestDir: "{app}"; Flags: external -Source: "{tmp}\ISCrypt.dll"; DestDir: "{app}"; Flags: external - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" - -[Code] -var - DownloadPage: TDownloadWizardPage; - -function OnDownloadProgress(const Url, FileName: String; const Progress, ProgressMax: Int64): Boolean; -begin - if Progress = ProgressMax then - Log(Format('Successfully downloaded file to {tmp}: %s', [FileName])); - Result := True; -end; - -procedure InitializeWizard; -begin - DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), @OnDownloadProgress); -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -begin - if CurPageID = wpReady then begin - DownloadPage.Clear; - DownloadPage.Add('https://jrsoftware.org/download.php/is.exe', 'innosetup-latest.exe', ''); - DownloadPage.Add('https://jrsoftware.org/download.php/iscrypt.dll', 'ISCrypt.dll', '2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc'); - DownloadPage.Show; - try - try - DownloadPage.Download; - Result := True; - except - SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbCriticalError, MB_OK, IDOK); - Result := False; - end; - finally - DownloadPage.Hide; - end; - end else - Result := True; -end; \ No newline at end of file diff --git a/Dependencies/Inno/Examples/CodeExample1.iss b/Dependencies/Inno/Examples/CodeExample1.iss deleted file mode 100644 index 1db9a711..00000000 --- a/Dependencies/Inno/Examples/CodeExample1.iss +++ /dev/null @@ -1,167 +0,0 @@ -; -- CodeExample1.iss -- -; -; This script shows various things you can achieve using a [Code] section. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DisableWelcomePage=no -DefaultDirName={code:MyConst}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -InfoBeforeFile=Readme.txt -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -Source: "MyProg.exe"; DestDir: "{app}"; Check: MyProgCheck; BeforeInstall: BeforeMyProgInstall('MyProg.exe'); AfterInstall: AfterMyProgInstall('MyProg.exe') -Source: "MyProg.chm"; DestDir: "{app}"; Check: MyProgCheck; BeforeInstall: BeforeMyProgInstall('MyProg.chm'); AfterInstall: AfterMyProgInstall('MyProg.chm') -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" - -[Code] -var - MyProgChecked: Boolean; - MyProgCheckResult: Boolean; - FinishedInstall: Boolean; - -function InitializeSetup(): Boolean; -begin - Log('InitializeSetup called'); - Result := MsgBox('InitializeSetup:' #13#13 'Setup is initializing. Do you really want to start setup?', mbConfirmation, MB_YESNO) = idYes; - if Result = False then - MsgBox('InitializeSetup:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); -end; - -procedure InitializeWizard; -begin - Log('InitializeWizard called'); -end; - - -procedure InitializeWizard2; -begin - Log('InitializeWizard2 called'); -end; - -procedure DeinitializeSetup(); -var - FileName: String; - ResultCode: Integer; -begin - Log('DeinitializeSetup called'); - if FinishedInstall then begin - if MsgBox('DeinitializeSetup:' #13#13 'The [Code] scripting demo has finished. Do you want to uninstall My Program now?', mbConfirmation, MB_YESNO) = idYes then begin - FileName := ExpandConstant('{uninstallexe}'); - if not Exec(FileName, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode) then - MsgBox('DeinitializeSetup:' #13#13 'Execution of ''' + FileName + ''' failed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); - end else - MsgBox('DeinitializeSetup:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); - end; -end; - -procedure CurStepChanged(CurStep: TSetupStep); -begin - Log('CurStepChanged(' + IntToStr(Ord(CurStep)) + ') called'); - if CurStep = ssPostInstall then - FinishedInstall := True; -end; - -procedure CurInstallProgressChanged(CurProgress, MaxProgress: Integer); -begin - Log('CurInstallProgressChanged(' + IntToStr(CurProgress) + ', ' + IntToStr(MaxProgress) + ') called'); -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -var - ResultCode: Integer; -begin - Log('NextButtonClick(' + IntToStr(CurPageID) + ') called'); - case CurPageID of - wpSelectDir: - MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardDirValue + '''.', mbInformation, MB_OK); - wpSelectProgramGroup: - MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardGroupValue + '''.', mbInformation, MB_OK); - wpReady: - begin - if MsgBox('NextButtonClick:' #13#13 'Using the script, files can be extracted before the installation starts. For example we could extract ''MyProg.exe'' now and run it.' #13#13 'Do you want to do this?', mbConfirmation, MB_YESNO) = idYes then begin - ExtractTemporaryFile('myprog.exe'); - if not ExecAsOriginalUser(ExpandConstant('{tmp}\myprog.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then - MsgBox('NextButtonClick:' #13#13 'The file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); - end; - BringToFrontAndRestore(); - MsgBox('NextButtonClick:' #13#13 'The normal installation will now start.', mbInformation, MB_OK); - end; - end; - - Result := True; -end; - -function BackButtonClick(CurPageID: Integer): Boolean; -begin - Log('BackButtonClick(' + IntToStr(CurPageID) + ') called'); - Result := True; -end; - -function ShouldSkipPage(PageID: Integer): Boolean; -begin - Log('ShouldSkipPage(' + IntToStr(PageID) + ') called'); - { Skip wpInfoBefore page; show all others } - case PageID of - wpInfoBefore: - Result := True; - else - Result := False; - end; -end; - -procedure CurPageChanged(CurPageID: Integer); -begin - Log('CurPageChanged(' + IntToStr(CurPageID) + ') called'); - case CurPageID of - wpWelcome: - MsgBox('CurPageChanged:' #13#13 'Welcome to the [Code] scripting demo. This demo will show you some possibilities of the scripting support.' #13#13 'The scripting engine used is RemObjects Pascal Script by Carlo Kok. See http://www.remobjects.com/ps for more information.', mbInformation, MB_OK); - wpFinished: - MsgBox('CurPageChanged:' #13#13 'Welcome to final page of this demo. Click Finish to exit.', mbInformation, MB_OK); - end; -end; - -function PrepareToInstall(var NeedsRestart: Boolean): String; -begin - Log('PrepareToInstall() called'); - if MsgBox('PrepareToInstall:' #13#13 'Setup is preparing to install. Using the script you can install any prerequisites, abort Setup on errors, and request restarts. Do you want to return an error now?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = idYes then - Result := '.' - else - Result := ''; -end; - -function MyProgCheck(): Boolean; -begin - Log('MyProgCheck() called'); - if not MyProgChecked then begin - MyProgCheckResult := MsgBox('MyProgCheck:' #13#13 'Using the script you can decide at runtime to include or exclude files from the installation. Do you want to install MyProg.exe and MyProg.chm to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes; - MyProgChecked := True; - end; - Result := MyProgCheckResult; -end; - -procedure BeforeMyProgInstall(S: String); -begin - Log('BeforeMyProgInstall(''' + S + ''') called'); - MsgBox('BeforeMyProgInstall:' #13#13 'Setup is now going to install ' + S + ' as ' + CurrentFileName + '.', mbInformation, MB_OK); -end; - -procedure AfterMyProgInstall(S: String); -begin - Log('AfterMyProgInstall(''' + S + ''') called'); - MsgBox('AfterMyProgInstall:' #13#13 'Setup just installed ' + S + ' as ' + CurrentFileName + '.', mbInformation, MB_OK); -end; - -function MyConst(Param: String): String; -begin - Log('MyConst(''' + Param + ''') called'); - Result := ExpandConstant('{autopf}'); -end; - diff --git a/Dependencies/Inno/Examples/CodePrepareToInstall.iss b/Dependencies/Inno/Examples/CodePrepareToInstall.iss deleted file mode 100644 index bad5065a..00000000 --- a/Dependencies/Inno/Examples/CodePrepareToInstall.iss +++ /dev/null @@ -1,122 +0,0 @@ -; -- CodePrepareToInstall.iss -- -; -; This script shows how the PrepareToInstall event function can be used to -; install prerequisites and handle any reboots in between, while remembering -; user selections across reboots. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -; Place any prerequisite files here, for example: -; Source: "MyProg-Prerequisite-setup.exe"; Flags: dontcopy -; Place any regular files here, so *after* all your prerequisites. -Source: "MyProg.exe"; DestDir: "{app}"; -Source: "MyProg.chm"; DestDir: "{app}"; -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme; - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" - -[Code] -const - (*** Customize the following to your own name. ***) - RunOnceName = 'My Program Setup restart'; - - QuitMessageReboot = 'The installation of a prerequisite program was not completed. You will need to restart your computer to complete that installation.'#13#13'After restarting your computer, Setup will continue next time an administrator logs in.'; - QuitMessageError = 'Error. Cannot continue.'; - -var - Restarted: Boolean; - -function InitializeSetup(): Boolean; -begin - Restarted := ExpandConstant('{param:restart|0}') = '1'; - - if not Restarted then begin - Result := not RegValueExists(HKA, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName); - if not Result then - MsgBox(QuitMessageReboot, mbError, mb_Ok); - end else - Result := True; -end; - -function DetectAndInstallPrerequisites: Boolean; -begin - (*** Place your prerequisite detection and extraction+installation code below. ***) - (*** Return False if missing prerequisites were detected but their installation failed, else return True. ***) - - // - //extraction example: ExtractTemporaryFile('MyProg-Prerequisite-setup.exe'); - - Result := True; - - (*** Remove the following block! Used by this demo to simulate a prerequisite install requiring a reboot. ***) - if not Restarted then - RestartReplace(ParamStr(0), ''); -end; - -function Quote(const S: String): String; -begin - Result := '"' + S + '"'; -end; - -function AddParam(const S, P, V: String): String; -begin - if V <> '""' then - Result := S + ' /' + P + '=' + V; -end; - -function AddSimpleParam(const S, P: String): String; -begin - Result := S + ' /' + P; -end; - -procedure CreateRunOnceEntry; -var - RunOnceData: String; -begin - RunOnceData := Quote(ExpandConstant('{srcexe}')) + ' /restart=1'; - RunOnceData := AddParam(RunOnceData, 'LANG', ExpandConstant('{language}')); - RunOnceData := AddParam(RunOnceData, 'DIR', Quote(WizardDirValue)); - RunOnceData := AddParam(RunOnceData, 'GROUP', Quote(WizardGroupValue)); - if WizardNoIcons then - RunOnceData := AddSimpleParam(RunOnceData, 'NOICONS'); - RunOnceData := AddParam(RunOnceData, 'TYPE', Quote(WizardSetupType(False))); - RunOnceData := AddParam(RunOnceData, 'COMPONENTS', Quote(WizardSelectedComponents(False))); - RunOnceData := AddParam(RunOnceData, 'TASKS', Quote(WizardSelectedTasks(False))); - - (*** Place any custom user selection you want to remember below. ***) - - // - - RegWriteStringValue(HKA, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, RunOnceData); -end; - -function PrepareToInstall(var NeedsRestart: Boolean): String; -var - ChecksumBefore, ChecksumAfter: String; -begin - ChecksumBefore := MakePendingFileRenameOperationsChecksum; - if DetectAndInstallPrerequisites then begin - ChecksumAfter := MakePendingFileRenameOperationsChecksum; - if ChecksumBefore <> ChecksumAfter then begin - CreateRunOnceEntry; - NeedsRestart := True; - Result := QuitMessageReboot; - end; - end else - Result := QuitMessageError; -end; - -function ShouldSkipPage(PageID: Integer): Boolean; -begin - Result := Restarted; -end; - diff --git a/Dependencies/Inno/Examples/Components.iss b/Dependencies/Inno/Examples/Components.iss deleted file mode 100644 index 46a20d61..00000000 --- a/Dependencies/Inno/Examples/Components.iss +++ /dev/null @@ -1,34 +0,0 @@ -; -- Components.iss -- -; Demonstrates a components-based installation. - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output - -[Types] -Name: "full"; Description: "Full installation" -Name: "compact"; Description: "Compact installation" -Name: "custom"; Description: "Custom installation"; Flags: iscustom - -[Components] -Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed -Name: "help"; Description: "Help File"; Types: full -Name: "readme"; Description: "Readme File"; Types: full -Name: "readme\en"; Description: "English"; Flags: exclusive -Name: "readme\de"; Description: "German"; Flags: exclusive - -[Files] -Source: "MyProg.exe"; DestDir: "{app}"; Components: program -Source: "MyProg.chm"; DestDir: "{app}"; Components: help -Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme -Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Dependencies/Inno/Examples/Example1.iss b/Dependencies/Inno/Examples/Example1.iss deleted file mode 100644 index a00ec5b9..00000000 --- a/Dependencies/Inno/Examples/Example1.iss +++ /dev/null @@ -1,23 +0,0 @@ -; -- Example1.iss -- -; Demonstrates copying 3 files and creating an icon. - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -Compression=lzma2 -SolidCompression=yes -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -Source: "MyProg.chm"; DestDir: "{app}" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Dependencies/Inno/Examples/Example2.iss b/Dependencies/Inno/Examples/Example2.iss deleted file mode 100644 index b74f3638..00000000 --- a/Dependencies/Inno/Examples/Example2.iss +++ /dev/null @@ -1,27 +0,0 @@ -; -- Example2.iss -- -; Same as Example1.iss, but creates its icon in the Programs folder of the -; Start Menu instead of in a subfolder, and also creates a desktop icon. - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -; Since no icons will be created in "{group}", we don't need the wizard -; to ask for a Start Menu folder name: -DisableProgramGroupPage=yes -UninstallDisplayIcon={app}\MyProg.exe -Compression=lzma2 -SolidCompression=yes -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -Source: "MyProg.chm"; DestDir: "{app}" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{autoprograms}\My Program"; Filename: "{app}\MyProg.exe" -Name: "{autodesktop}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Dependencies/Inno/Examples/Example3.iss b/Dependencies/Inno/Examples/Example3.iss deleted file mode 100644 index ed131bd4..00000000 --- a/Dependencies/Inno/Examples/Example3.iss +++ /dev/null @@ -1,63 +0,0 @@ -; -- Example3.iss -- -; Same as Example1.iss, but creates some registry entries too and allows the end -; use to choose the install mode (administrative or non administrative). - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -Compression=lzma2 -SolidCompression=yes -OutputDir=userdocs:Inno Setup Examples Output -ChangesAssociations=yes -UserInfoPage=yes -PrivilegesRequiredOverridesAllowed=dialog - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -Source: "MyProg.chm"; DestDir: "{app}" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" - -; NOTE: Most apps do not need registry entries to be pre-created. If you -; don't know what the registry is or if you need to use it, then chances are -; you don't need a [Registry] section. - -[Registry] -; Create "Software\My Company\My Program" keys under CURRENT_USER or -; LOCAL_MACHINE depending on administrative or non administrative install -; mode. The flags tell it to always delete the "My Program" key upon -; uninstall, and delete the "My Company" key if there is nothing left in it. -Root: HKA; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty -Root: HKA; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey -Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Language"; ValueData: "{language}" -; Associate .myp files with My Program (requires ChangesAssociations=yes) -Root: HKA; Subkey: "Software\Classes\.myp\OpenWithProgids"; ValueType: string; ValueName: "MyProgramFile.myp"; ValueData: ""; Flags: uninsdeletevalue -Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp"; ValueType: string; ValueName: ""; ValueData: "My Program File"; Flags: uninsdeletekey -Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MyProg.exe,0" -Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MyProg.exe"" ""%1""" -Root: HKA; Subkey: "Software\Classes\Applications\MyProg.exe\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: "" -; HKA (and HKCU) should only be used for settings which are compatible with -; roaming profiles so settings like paths should be written to HKLM, which -; is only possible in administrative install mode. -Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty; Check: IsAdminInstallMode -Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey; Check: IsAdminInstallMode -Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Check: IsAdminInstallMode -; User specific settings should always be written to HKCU, which should only -; be done in non administrative install mode. -Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "UserName"; ValueData: "{userinfoname}"; Check: not IsAdminInstallMode -Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "UserOrganization"; ValueData: "{userinfoorg}"; Check: not IsAdminInstallMode - -[Code] -function ShouldSkipPage(PageID: Integer): Boolean; -begin - // User specific pages should be skipped in administrative install mode - Result := IsAdminInstallMode and (PageID = wpUserInfo); -end; diff --git a/Dependencies/Inno/Examples/ISPPExample1.iss b/Dependencies/Inno/Examples/ISPPExample1.iss deleted file mode 100644 index b5287b3a..00000000 --- a/Dependencies/Inno/Examples/ISPPExample1.iss +++ /dev/null @@ -1,38 +0,0 @@ -// -- ISPPExample1.iss -- -// -// This script shows various basic things you can achieve using Inno Setup Preprocessor (ISPP). -// To enable commented #define's, either remove the '//' or use ISCC with the /D switch. -// -#pragma verboselevel 9 -// -//#define AppEnterprise -// -#ifdef AppEnterprise - #define AppName "My Program Enterprise Edition" -#else - #define AppName "My Program" -#endif -// -#define AppVersion GetVersionNumbersString(AddBackslash(SourcePath) + "MyProg.exe") -// -[Setup] -AppName={#AppName} -AppVersion={#AppVersion} -WizardStyle=modern -DefaultDirName={autopf}\{#AppName} -DefaultGroupName={#AppName} -UninstallDisplayIcon={app}\MyProg.exe -LicenseFile={#file AddBackslash(SourcePath) + "ISPPExample1License.txt"} -VersionInfoVersion={#AppVersion} -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -#ifdef AppEnterprise -Source: "MyProg.chm"; DestDir: "{app}" -#endif -Source: "Readme.txt"; DestDir: "{app}"; \ - Flags: isreadme - -[Icons] -Name: "{group}\{#AppName}"; Filename: "{app}\MyProg.exe" diff --git a/Dependencies/Inno/Examples/ISPPExample1License.txt b/Dependencies/Inno/Examples/ISPPExample1License.txt deleted file mode 100644 index 0ae5a72a..00000000 --- a/Dependencies/Inno/Examples/ISPPExample1License.txt +++ /dev/null @@ -1,4 +0,0 @@ -#pragma option -e+ -{#AppName} version {#AppVersion} License - -Bla bla bla \ No newline at end of file diff --git a/Dependencies/Inno/Examples/Languages.iss b/Dependencies/Inno/Examples/Languages.iss deleted file mode 100644 index c5ec95e3..00000000 --- a/Dependencies/Inno/Examples/Languages.iss +++ /dev/null @@ -1,55 +0,0 @@ -; -- Languages.iss -- -; Demonstrates a multilingual installation. - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName={cm:MyAppName} -AppId=My Program -AppVerName={cm:MyAppVerName,1.5} -WizardStyle=modern -DefaultDirName={autopf}\{cm:MyAppName} -DefaultGroupName={cm:MyAppName} -UninstallDisplayIcon={app}\MyProg.exe -VersionInfoDescription=My Program Setup -VersionInfoProductName=My Program -OutputDir=userdocs:Inno Setup Examples Output -; Uncomment the following line to disable the "Select Setup Language" -; dialog and have it rely solely on auto-detection. -;ShowLanguageDialog=no - -[Languages] -Name: en; MessagesFile: "compiler:Default.isl" -Name: nl; MessagesFile: "compiler:Languages\Dutch.isl" -Name: de; MessagesFile: "compiler:Languages\German.isl" - -[Messages] -en.BeveledLabel=English -nl.BeveledLabel=Nederlands -de.BeveledLabel=Deutsch - -[CustomMessages] -en.MyDescription=My description -en.MyAppName=My Program -en.MyAppVerName=My Program %1 -nl.MyDescription=Mijn omschrijving -nl.MyAppName=Mijn programma -nl.MyAppVerName=Mijn programma %1 -de.MyDescription=Meine Beschreibung -de.MyAppName=Meine Anwendung -de.MyAppVerName=Meine Anwendung %1 - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -Source: "MyProg.chm"; DestDir: "{app}"; Languages: en -Source: "Readme.txt"; DestDir: "{app}"; Languages: en; Flags: isreadme -Source: "Readme-Dutch.txt"; DestName: "Leesmij.txt"; DestDir: "{app}"; Languages: nl; Flags: isreadme -Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Languages: de; Flags: isreadme - -[Icons] -Name: "{group}\{cm:MyAppName}"; Filename: "{app}\MyProg.exe" -Name: "{group}\{cm:UninstallProgram,{cm:MyAppName}}"; Filename: "{uninstallexe}" - -[Tasks] -; The following task doesn't do anything and is only meant to show [CustomMessages] usage -Name: mytask; Description: "{cm:MyDescription}" diff --git a/Dependencies/Inno/Examples/License.txt b/Dependencies/Inno/Examples/License.txt deleted file mode 100644 index 8d31eac1..00000000 --- a/Dependencies/Inno/Examples/License.txt +++ /dev/null @@ -1 +0,0 @@ -This is the LICENSE file for My Program. diff --git a/Dependencies/Inno/Examples/MyDll.dll b/Dependencies/Inno/Examples/MyDll.dll deleted file mode 100644 index 18d7f6e3..00000000 Binary files a/Dependencies/Inno/Examples/MyDll.dll and /dev/null differ diff --git a/Dependencies/Inno/Examples/MyDll/C#/MyDll.cs b/Dependencies/Inno/Examples/MyDll/C#/MyDll.cs deleted file mode 100644 index 1ce728a9..00000000 --- a/Dependencies/Inno/Examples/MyDll/C#/MyDll.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; - -using System.Runtime.InteropServices; -using RGiesecke.DllExport; - -namespace Mydll -{ - public class Mydll - { - [DllExport("MyDllFunc", CallingConvention=CallingConvention.StdCall)] - public static void MyDllFunc(IntPtr hWnd, [MarshalAs(UnmanagedType.LPStr)] string text, [MarshalAs(UnmanagedType.LPStr)] string caption, int options) - { - MessageBox(hWnd, text, caption, options); - } - - [DllExport("MyDllFuncW", CallingConvention=CallingConvention.StdCall)] - public static void MyDllFuncW(IntPtr hWnd, string text, string caption, int options) - { - MessageBox(hWnd, text, caption, options); - } - - [DllImport("user32.dll", CharSet=CharSet.Auto)] - static extern int MessageBox(IntPtr hWnd, String text, String caption, int options); - } -} diff --git a/Dependencies/Inno/Examples/MyDll/C#/MyDll.csproj b/Dependencies/Inno/Examples/MyDll/C#/MyDll.csproj deleted file mode 100644 index 2b8f5de3..00000000 --- a/Dependencies/Inno/Examples/MyDll/C#/MyDll.csproj +++ /dev/null @@ -1,63 +0,0 @@ - - - - - Debug - AnyCPU - {79237A5C-6C62-400A-BBDD-3DA1CA327973} - Library - Properties - MyDll - MyDll - v4.5 - 512 - - - true - full - false - .\ - DEBUG;TRACE - prompt - 4 - x86 - - - pdbonly - true - .\ - TRACE - prompt - 4 - x86 - - - - packages\UnmanagedExports.1.2.7\lib\net\RGiesecke.DllExport.Metadata.dll - False - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Dependencies/Inno/Examples/MyDll/C#/MyDll.sln b/Dependencies/Inno/Examples/MyDll/C#/MyDll.sln deleted file mode 100644 index 0c7aa7d1..00000000 --- a/Dependencies/Inno/Examples/MyDll/C#/MyDll.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.40629.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyDll", "MyDll.csproj", "{79237A5C-6C62-400A-BBDD-3DA1CA327973}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Dependencies/Inno/Examples/MyDll/C#/packages.config b/Dependencies/Inno/Examples/MyDll/C#/packages.config deleted file mode 100644 index f98ea962..00000000 --- a/Dependencies/Inno/Examples/MyDll/C#/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Dependencies/Inno/Examples/MyDll/C/MyDll.c b/Dependencies/Inno/Examples/MyDll/C/MyDll.c deleted file mode 100644 index c48d8d6f..00000000 --- a/Dependencies/Inno/Examples/MyDll/C/MyDll.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -void __stdcall MyDllFunc(HWND hWnd, char *lpText, char *lpCaption, UINT uType) -{ - MessageBox(hWnd, lpText, lpCaption, uType); -} \ No newline at end of file diff --git a/Dependencies/Inno/Examples/MyDll/C/MyDll.def b/Dependencies/Inno/Examples/MyDll/C/MyDll.def deleted file mode 100644 index 1dbed903..00000000 --- a/Dependencies/Inno/Examples/MyDll/C/MyDll.def +++ /dev/null @@ -1,2 +0,0 @@ -EXPORTS - MyDllFunc \ No newline at end of file diff --git a/Dependencies/Inno/Examples/MyDll/C/MyDll.dsp b/Dependencies/Inno/Examples/MyDll/C/MyDll.dsp deleted file mode 100644 index d5a1a3cb..00000000 --- a/Dependencies/Inno/Examples/MyDll/C/MyDll.dsp +++ /dev/null @@ -1,76 +0,0 @@ -# Microsoft Developer Studio Project File - Name="MyDll" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=MyDll - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "MyDll.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "MyDll.mak" CFG="MyDll - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "MyDll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "." -# PROP Intermediate_Dir "." -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYDLL_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYDLL_EXPORTS" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x413 /d "NDEBUG" -# ADD RSC /l 0x413 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# Begin Target - -# Name "MyDll - Win32 Release" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\MyDll.c -# End Source File -# Begin Source File - -SOURCE=.\MyDll.def -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/Dependencies/Inno/Examples/MyDll/Delphi/MyDll.dpr b/Dependencies/Inno/Examples/MyDll/Delphi/MyDll.dpr deleted file mode 100644 index c4f72a09..00000000 --- a/Dependencies/Inno/Examples/MyDll/Delphi/MyDll.dpr +++ /dev/null @@ -1,14 +0,0 @@ -library MyDll; - -uses - Windows; - -procedure MyDllFunc(hWnd: Integer; lpText, lpCaption: PAnsiChar; uType: Cardinal); stdcall; -begin - MessageBoxA(hWnd, lpText, lpCaption, uType); -end; - -exports MyDllFunc; - -begin -end. diff --git a/Dependencies/Inno/Examples/MyProg-ARM64.exe b/Dependencies/Inno/Examples/MyProg-ARM64.exe deleted file mode 100644 index 4ada8b74..00000000 Binary files a/Dependencies/Inno/Examples/MyProg-ARM64.exe and /dev/null differ diff --git a/Dependencies/Inno/Examples/MyProg-x64.exe b/Dependencies/Inno/Examples/MyProg-x64.exe deleted file mode 100644 index 2db6eaf4..00000000 Binary files a/Dependencies/Inno/Examples/MyProg-x64.exe and /dev/null differ diff --git a/Dependencies/Inno/Examples/MyProg.chm b/Dependencies/Inno/Examples/MyProg.chm deleted file mode 100644 index 1c885354..00000000 Binary files a/Dependencies/Inno/Examples/MyProg.chm and /dev/null differ diff --git a/Dependencies/Inno/Examples/MyProg.exe b/Dependencies/Inno/Examples/MyProg.exe deleted file mode 100644 index 1c612db6..00000000 Binary files a/Dependencies/Inno/Examples/MyProg.exe and /dev/null differ diff --git a/Dependencies/Inno/Examples/Readme-Dutch.txt b/Dependencies/Inno/Examples/Readme-Dutch.txt deleted file mode 100644 index 7f190a69..00000000 --- a/Dependencies/Inno/Examples/Readme-Dutch.txt +++ /dev/null @@ -1 +0,0 @@ -Dit is het Leesmij bestand voor My Program. \ No newline at end of file diff --git a/Dependencies/Inno/Examples/Readme-German.txt b/Dependencies/Inno/Examples/Readme-German.txt deleted file mode 100644 index 57cf84a8..00000000 --- a/Dependencies/Inno/Examples/Readme-German.txt +++ /dev/null @@ -1 +0,0 @@ -Dies ist die LIESMICH-Datei fr "My Program". \ No newline at end of file diff --git a/Dependencies/Inno/Examples/Readme.txt b/Dependencies/Inno/Examples/Readme.txt deleted file mode 100644 index 2e7f6b47..00000000 --- a/Dependencies/Inno/Examples/Readme.txt +++ /dev/null @@ -1 +0,0 @@ -This is the README file for My Program. diff --git a/Dependencies/Inno/Examples/UnicodeExample1.iss b/Dependencies/Inno/Examples/UnicodeExample1.iss deleted file mode 100644 index 5db0a3bc..00000000 --- a/Dependencies/Inno/Examples/UnicodeExample1.iss +++ /dev/null @@ -1,30 +0,0 @@ -; -- UnicodeExample1.iss -- -; Demonstrates some Unicode functionality. -; -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -[Setup] -AppName=ɯɐɹƃoɹd ʎɯ -AppVerName=ɯɐɹƃoɹd ʎɯ version 1.5 -WizardStyle=modern -DefaultDirName={autopf}\ɯɐɹƃoɹd ʎɯ -DefaultGroupName=ɯɐɹƃoɹd ʎɯ -UninstallDisplayIcon={app}\ƃoɹdʎɯ.exe -Compression=lzma2 -SolidCompression=yes -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -Source: "MyProg.exe"; DestDir: "{app}"; DestName: "ƃoɹdʎɯ.exe" -Source: "MyProg.chm"; DestDir: "{app}"; DestName: "ƃoɹdʎɯ.chm" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\ɯɐɹƃoɹd ʎɯ"; Filename: "{app}\ƃoɹdʎɯ.exe" - -[Code] -function InitializeSetup: Boolean; -begin - MsgBox('ɯɐɹƃoɹd ʎɯ', mbInformation, MB_OK); - Result := True; -end; \ No newline at end of file diff --git a/Dependencies/Inno/Examples/UninstallCodeExample1.iss b/Dependencies/Inno/Examples/UninstallCodeExample1.iss deleted file mode 100644 index bfd9e7d9..00000000 --- a/Dependencies/Inno/Examples/UninstallCodeExample1.iss +++ /dev/null @@ -1,46 +0,0 @@ -; -- UninstallCodeExample1.iss -- -; -; This script shows various things you can achieve using a [Code] section for Uninstall. - -[Setup] -AppName=My Program -AppVersion=1.5 -WizardStyle=modern -DefaultDirName={autopf}\My Program -DefaultGroupName=My Program -UninstallDisplayIcon={app}\MyProg.exe -OutputDir=userdocs:Inno Setup Examples Output - -[Files] -Source: "MyProg.exe"; DestDir: "{app}" -Source: "MyProg.chm"; DestDir: "{app}" -Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme - -[Code] -function InitializeUninstall(): Boolean; -begin - Result := MsgBox('InitializeUninstall:' #13#13 'Uninstall is initializing. Do you really want to start Uninstall?', mbConfirmation, MB_YESNO) = idYes; - if Result = False then - MsgBox('InitializeUninstall:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); -end; - -procedure DeinitializeUninstall(); -begin - MsgBox('DeinitializeUninstall:' #13#13 'Bye bye!', mbInformation, MB_OK); -end; - -procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); -begin - case CurUninstallStep of - usUninstall: - begin - MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall is about to start.', mbInformation, MB_OK) - // ...insert code to perform pre-uninstall tasks here... - end; - usPostUninstall: - begin - MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall just finished.', mbInformation, MB_OK); - // ...insert code to perform post-uninstall tasks here... - end; - end; -end; diff --git a/Dependencies/Inno/ISCC.exe b/Dependencies/Inno/ISCC.exe deleted file mode 100644 index 37c6e1b1..00000000 Binary files a/Dependencies/Inno/ISCC.exe and /dev/null differ diff --git a/Dependencies/Inno/ISCmplr.dll b/Dependencies/Inno/ISCmplr.dll deleted file mode 100644 index 35e8cf44..00000000 Binary files a/Dependencies/Inno/ISCmplr.dll and /dev/null differ diff --git a/Dependencies/Inno/ISPP.chm b/Dependencies/Inno/ISPP.chm deleted file mode 100644 index 22025ece..00000000 Binary files a/Dependencies/Inno/ISPP.chm and /dev/null differ diff --git a/Dependencies/Inno/ISPP.dll b/Dependencies/Inno/ISPP.dll deleted file mode 100644 index 42b51a7d..00000000 Binary files a/Dependencies/Inno/ISPP.dll and /dev/null differ diff --git a/Dependencies/Inno/ISPPBuiltins.iss b/Dependencies/Inno/ISPPBuiltins.iss deleted file mode 100644 index f7f6d0d2..00000000 --- a/Dependencies/Inno/ISPPBuiltins.iss +++ /dev/null @@ -1,315 +0,0 @@ -// Inno Setup Preprocessor -// -// Inno Setup (C) 1997-2020 Jordan Russell. All Rights Reserved. -// Portions Copyright (C) 2000-2020 Martijn Laan. All Rights Reserved. -// Portions Copyright (C) 2001-2004 Alex Yackimoff. All Rights Reserved. -// -// See the ISPP help file for more documentation of the functions defined by this file -// -#if defined(ISPP_INVOKED) && !defined(_BUILTINS_ISS_) -// -#if PREPROCVER < 0x01000000 -# error Inno Setup Preprocessor version is outdated -#endif -// -#define _BUILTINS_ISS_ -// -#ifdef __OPT_E__ -# define private EnableOptE -# pragma option -e- -#endif - -#ifndef __POPT_P__ -# define private DisablePOptP -#else -# pragma parseroption -p- -#endif - -#define NewLine "\n" -#define Tab "\t" - -#pragma parseroption -p+ - -#pragma spansymbol "\" - -#define True 1 -#define False 0 -#define Yes True -#define No False - -#define MaxInt 0x7FFFFFFFFFFFFFFFL -#define MinInt 0x8000000000000000L - -#define NULL -#define void - -// TypeOf constants - -#define TYPE_ERROR 0 -#define TYPE_NULL 1 -#define TYPE_INTEGER 2 -#define TYPE_STRING 3 -#define TYPE_MACRO 4 -#define TYPE_FUNC 5 -#define TYPE_ARRAY 6 - -// Helper macro to find out the type of an array element or expression. TypeOf -// standard function only allows identifier as its parameter. Use this macro -// to convert an expression to identifier. - -#define TypeOf2(any Expr) TypeOf(Expr) - -// ReadReg constants - -#define HKEY_CLASSES_ROOT 0x80000000UL -#define HKEY_CURRENT_USER 0x80000001UL -#define HKEY_LOCAL_MACHINE 0x80000002UL -#define HKEY_USERS 0x80000003UL -#define HKEY_CURRENT_CONFIG 0x80000005UL -#define HKEY_CLASSES_ROOT_64 0x82000000UL -#define HKEY_CURRENT_USER_64 0x82000001UL -#define HKEY_LOCAL_MACHINE_64 0x82000002UL -#define HKEY_USERS_64 0x82000003UL -#define HKEY_CURRENT_CONFIG_64 0x82000005UL - -#define HKCR HKEY_CLASSES_ROOT -#define HKCU HKEY_CURRENT_USER -#define HKLM HKEY_LOCAL_MACHINE -#define HKU HKEY_USERS -#define HKCC HKEY_CURRENT_CONFIG -#define HKCR64 HKEY_CLASSES_ROOT_64 -#define HKCU64 HKEY_CURRENT_USER_64 -#define HKLM64 HKEY_LOCAL_MACHINE_64 -#define HKU64 HKEY_USERS_64 -#define HKCC64 HKEY_CURRENT_CONFIG_64 - -// Exec constants - -#define SW_HIDE 0 -#define SW_SHOWNORMAL 1 -#define SW_NORMAL 1 -#define SW_SHOWMINIMIZED 2 -#define SW_SHOWMAXIMIZED 3 -#define SW_MAXIMIZE 3 -#define SW_SHOWNOACTIVATE 4 -#define SW_SHOW 5 -#define SW_MINIMIZE 6 -#define SW_SHOWMINNOACTIVE 7 -#define SW_SHOWNA 8 -#define SW_RESTORE 9 -#define SW_SHOWDEFAULT 10 -#define SW_MAX 10 - -// Find constants - -#define FIND_MATCH 0x00 -#define FIND_BEGINS 0x01 -#define FIND_ENDS 0x02 -#define FIND_CONTAINS 0x03 -#define FIND_CASESENSITIVE 0x04 -#define FIND_SENSITIVE FIND_CASESENSITIVE -#define FIND_AND 0x00 -#define FIND_OR 0x08 -#define FIND_NOT 0x10 -#define FIND_TRIM 0x20 - -// FindFirst constants - -#define faReadOnly 0x00000001 -#define faHidden 0x00000002 -#define faSysFile 0x00000004 -#define faVolumeID 0x00000008 -#define faDirectory 0x00000010 -#define faArchive 0x00000020 -#define faSymLink 0x00000040 -#define faAnyFile 0x0000003F - -// GetStringFileInfo standard names - -#define COMPANY_NAME "CompanyName" -#define FILE_DESCRIPTION "FileDescription" -#define FILE_VERSION "FileVersion" -#define INTERNAL_NAME "InternalName" -#define LEGAL_COPYRIGHT "LegalCopyright" -#define ORIGINAL_FILENAME "OriginalFilename" -#define PRODUCT_NAME "ProductName" -#define PRODUCT_VERSION "ProductVersion" - -// GetStringFileInfo helpers - -#define GetFileCompany(str FileName) GetStringFileInfo(FileName, COMPANY_NAME) -#define GetFileDescription(str FileName) GetStringFileInfo(FileName, FILE_DESCRIPTION) -#define GetFileVersionString(str FileName) GetStringFileInfo(FileName, FILE_VERSION) -#define GetFileCopyright(str FileName) GetStringFileInfo(FileName, LEGAL_COPYRIGHT) -#define GetFileOriginalFilename(str FileName) GetStringFileInfo(FileName, ORIGINAL_FILENAME) -#define GetFileProductVersion(str FileName) GetStringFileInfo(FileName, PRODUCT_VERSION) - -#define DeleteToFirstPeriod(str *S) \ - Local[1] = Copy(S, 1, (Local[0] = Pos(".", S)) - 1), \ - S = Copy(S, Local[0] + 1), \ - Local[1] - -#define GetVersionComponents(str FileName, *Major, *Minor, *Rev, *Build) \ - Local[1] = Local[0] = GetVersionNumbersString(FileName), \ - Local[1] == "" ? "" : ( \ - Major = Int(DeleteToFirstPeriod(Local[1])), \ - Minor = Int(DeleteToFirstPeriod(Local[1])), \ - Rev = Int(DeleteToFirstPeriod(Local[1])), \ - Build = Int(Local[1]), \ - Local[0]) - -#define GetPackedVersion(str FileName, *Version) \ - Local[0] = GetVersionComponents(FileName, Local[1], Local[2], Local[3], Local[4]), \ - Version = PackVersionComponents(Local[1], Local[2], Local[3], Local[4]), \ - Local[0] - -#define GetVersionNumbers(str FileName, *MS, *LS) \ - Local[0] = GetPackedVersion(FileName, Local[1]), \ - UnpackVersionNumbers(Local[1], MS, LS), \ - Local[0] - -#define PackVersionNumbers(int VersionMS, int VersionLS) \ - VersionMS << 32 | (VersionLS & 0xFFFFFFFF) - -#define PackVersionComponents(int Major, int Minor, int Rev, int Build) \ - Major << 48 | (Minor & 0xFFFF) << 32 | (Rev & 0xFFFF) << 16 | (Build & 0xFFFF) - -#define UnpackVersionNumbers(int Version, *VersionMS, *VersionLS) \ - VersionMS = Version >> 32, \ - VersionLS = Version & 0xFFFFFFFF, \ - void - -#define UnpackVersionComponents(int Version, *Major, *Minor, *Rev, *Build) \ - Major = Version >> 48, \ - Minor = (Version >> 32) & 0xFFFF, \ - Rev = (Version >> 16) & 0xFFFF, \ - Build = Version & 0xFFFF, \ - void - -#define VersionToStr(int Version) \ - Str(Version >> 48 & 0xFFFF) + "." + Str(Version >> 32 & 0xFFFF) + "." + \ - Str(Version >> 16 & 0xFFFF) + "." + Str(Version & 0xFFFF) - -#define EncodeVer(int Major, int Minor, int Revision = 0, int Build = -1) \ - (Major & 0xFF) << 24 | (Minor & 0xFF) << 16 | (Revision & 0xFF) << 8 | (Build >= 0 ? Build & 0xFF : 0) - -#define DecodeVer(int Version, int Digits = 3) \ - Str(Version >> 24 & 0xFF) + (Digits > 1 ? "." : "") + \ - (Digits > 1 ? \ - Str(Version >> 16 & 0xFF) + (Digits > 2 ? "." : "") : "") + \ - (Digits > 2 ? \ - Str(Version >> 8 & 0xFF) + (Digits > 3 && (Local = Version & 0xFF) ? "." : "") : "") + \ - (Digits > 3 && Local ? \ - Str(Version & 0xFF) : "") - -#define FindSection(str Section = "Files") \ - Find(0, "[" + Section + "]", FIND_MATCH | FIND_TRIM) + 1 - -#if VER >= 0x03000000 -# define FindNextSection(int Line) \ - Find(Line, "[", FIND_BEGINS | FIND_TRIM, "]", FIND_ENDS | FIND_AND) -# define FindSectionEnd(str Section = "Files") \ - FindNextSection(FindSection(Section)) -#else -# define FindSectionEnd(str Section = "Files") \ - FindSection(Section) + EntryCount(Section) -#endif - -#define FindCode() \ - Local[1] = FindSection("Code"), \ - Local[0] = Find(Local[1] - 1, "program", FIND_BEGINS, ";", FIND_ENDS | FIND_AND), \ - (Local[0] < 0 ? Local[1] : Local[0] + 1) - -#define ExtractFilePath(str PathName) \ - (Local[0] = \ - !(Local[1] = RPos("\", PathName)) ? \ - "" : \ - Copy(PathName, 1, Local[1] - 1)), \ - Local[0] + \ - ((Local[2] = Len(Local[0])) == 2 && Copy(Local[0], Local[2]) == ":" ? \ - "\" : \ - "") - -#define ExtractFileDir(str PathName) \ - RemoveBackslash(ExtractFilePath(PathName)) - -#define ExtractFileExt(str PathName) \ - Local[0] = RPos(".", PathName), \ - Copy(PathName, Local[0] + 1) - -#define ExtractFileName(str PathName) \ - !(Local[0] = RPos("\", PathName)) ? \ - PathName : \ - Copy(PathName, Local[0] + 1) - -#define ChangeFileExt(str FileName, str NewExt) \ - !(Local[0] = RPos(".", FileName)) ? \ - FileName + "." + NewExt : \ - Copy(FileName, 1, Local[0]) + NewExt - -#define RemoveFileExt(str FileName) \ - !(Local[0] = RPos(".", FileName)) ? \ - FileName : \ - Copy(FileName, 1, Local[0] - 1) - -#define AddBackslash(str S) \ - Copy(S, Len(S)) == "\" ? S : S + "\" - -#define RemoveBackslash(str S) \ - Local[0] = Len(S), \ - Local[0] > 0 ? \ - Copy(S, Local[0]) == "\" ? \ - (Local[0] == 3 && Copy(S, 2, 1) == ":" ? \ - S : \ - Copy(S, 1, Local[0] - 1)) : \ - S : \ - "" - -#define Delete(str *S, int Index, int Count = MaxInt) \ - S = Copy(S, 1, Index - 1) + Copy(S, Index + Count) - -#define Insert(str *S, int Index, str Substr) \ - Index > Len(S) + 1 ? \ - S : \ - S = Copy(S, 1, Index - 1) + SubStr + Copy(S, Index) - -#define YesNo(str S) \ - (S = LowerCase(S)) == "yes" || S == "true" || S == "1" - -#define IsDirSet(str SetupDirective) \ - YesNo(SetupSetting(SetupDirective)) - -#define Power(int X, int P = 2) \ - !P ? 1 : X * Power(X, P - 1) - -#define Min(int A, int B, int C = MaxInt) \ - A < B ? A < C ? Int(A) : Int(C) : Int(B) - -#define Max(int A, int B, int C = MinInt) \ - A > B ? A > C ? Int(A) : Int(C) : Int(B) - -#define SameText(str S1, str S2) \ - LowerCase(S1) == LowerCase(S2) - -#define SameStr(str S1, str S2) \ - S1 == S2 - -#define WarnRenamedVersion(str OldName, str NewName) \ - Warning("Function """ + OldName + """ has been renamed. Use """ + NewName + """ instead.") - -#define ParseVersion(str FileName, *Major, *Minor, *Rev, *Build) \ - WarnRenamedVersion("ParseVersion", "GetVersionComponents"), \ - GetVersionComponents(FileName, Major, Minor, Rev, Build) - -#define GetFileVersion(str FileName) \ - WarnRenamedVersion("GetFileVersion", "GetVersionNumbersString"), \ - GetVersionNumbersString(FileName) - -#ifdef DisablePOptP -# pragma parseroption -p- -#endif - -#ifdef EnableOptE -# pragma option -e+ -#endif -#endif \ No newline at end of file diff --git a/Dependencies/Inno/ISetup.chm b/Dependencies/Inno/ISetup.chm deleted file mode 100644 index bcab87e4..00000000 Binary files a/Dependencies/Inno/ISetup.chm and /dev/null differ diff --git a/Dependencies/Inno/Languages/Armenian.isl b/Dependencies/Inno/Languages/Armenian.isl deleted file mode 100644 index 148db955..00000000 --- a/Dependencies/Inno/Languages/Armenian.isl +++ /dev/null @@ -1,376 +0,0 @@ -; *** Inno Setup version 6.1.0+ Armenian messages *** -; -; Armenian translation by Hrant Ohanyan -; E-mail: h.ohanyan@haysoft.org -; Translation home page: http://www.haysoft.org -; Last modification date: 2020-10-06 -; -[LangOptions] -LanguageName=Հայերեն -LanguageID=$042B -LanguageCodePage=0 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Տեղադրում -SetupWindowTitle=%1-ի տեղադրում -UninstallAppTitle=Ապատեղադրում -UninstallAppFullTitle=%1-ի ապատեղադրում - -; *** Misc. common -InformationTitle=Տեղեկություն -ConfirmTitle=Հաստատել -ErrorTitle=Սխալ - -; *** SetupLdr messages -SetupLdrStartupMessage=Այս ծրագիրը կտեղադրի %1-ը Ձեր համակարգչում։ Շարունակե՞լ։ -LdrCannotCreateTemp=Հնարավոր չէ ստեղծել ժամանակավոր ֆայլ։ Տեղադրումը կասեցված է -LdrCannotExecTemp=Հնարավոր չէ կատարել ֆայլը ժամանակավոր պանակից։ Տեղադրումը կասեցված է - -; *** Startup error messages -LastErrorMessage=%1.%n%nՍխալ %2: %3 -SetupFileMissing=%1 ֆայլը բացակայում է տեղադրման պանակից։ Ուղղեք խնդիրը կամ ստացեք ծրագրի նոր տարբերակը։ -SetupFileCorrupt=Տեղադրվող ֆայլերը վնասված են։ -SetupFileCorruptOrWrongVer=Տեղադրվող ֆայլերը վնասված են կամ անհամատեղելի են տեղակայիչի այս տարբերակի հետ։ Ուղղեք խնդիրը կամ ստացեք ծրագրի նոր տարբերակը։ -InvalidParameter=Հրամանատողում նշված է սխալ հրաման.%n%n%1 -SetupAlreadyRunning=Տեղակայիչը արդեն աշխատեցված է։ -WindowsVersionNotSupported=Ծրագիրը չի աջակցում այս համակարգչում աշխատող Windows-ի տարբերակը։ -WindowsServicePackRequired=Ծրագիրը պահանջում է %1-ի Service Pack %2 կամ ավելի նոր։ -NotOnThisPlatform=Այս ծրագիրը չի աշխատի %1-ում։ -OnlyOnThisPlatform=Այս ծրագիրը հնարավոր է բացել միայն %1-ում։ -OnlyOnTheseArchitectures=Այս ծրագրի տեղադրումը հնարավոր է միայն Windows-ի մշակիչի հետևյալ կառուցվածքներում՝ %n%n%1 -WinVersionTooLowError=Այս ծրագիրը պահանջում է %1-ի տարբերակ %2 կամ ավելի նորը։ -WinVersionTooHighError=Ծրագիրը չի կարող տեղադրվել %1-ի տարբերակ %2 կամ ավելի նորում -AdminPrivilegesRequired=Ծրագիրը տեղադրելու համար պահանջվում են Վարիչի իրավունքներ։ -PowerUserPrivilegesRequired=Ծրագիրը տեղադրելու համար պետք է մուտք գործել համակարգ որպես Վարիչ կամ «Փորձառու օգտագործող» (Power Users): -SetupAppRunningError=Տեղակայիչը հայտնաբերել է, որ %1-ը աշխատում է։%n%nՓակեք այն և սեղմեք «Լավ»՝ շարունակելու համար կամ «Չեղարկել»՝ փակելու համար։ -UninstallAppRunningError=Ապատեղադրող ծրագիրը հայտնաբերել է, որ %1-ը աշխատում է։%n%nՓակեք այն և սեղմեք «Լավ»՝ շարունակելու համար կամ «Չեղարկել»՝ փակելու համար։ - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Ընտրեք տեղակայիչի տեղադրման կերպը -PrivilegesRequiredOverrideInstruction=Ընտրեք տեղադրման կերպը -PrivilegesRequiredOverrideText1=%1-ը կարող է տեղադրվել բոլոր օգտվողների համար (պահանջում է վարիչի արտոնություններ) կամ միայն ձեզ համար: -PrivilegesRequiredOverrideText2=%1-ը կարող է տեղադրվել միայն ձեզ համար կամ բոլոր օգտվողների համար (պահանջում է վարիչի արտոնություններ): -PrivilegesRequiredOverrideAllUsers=Տեղադրել &բոլոր օգտվողների համար -PrivilegesRequiredOverrideAllUsersRecommended=Տեղադրել &բոլոր օգտվողների համար (հանձնարարելի) -PrivilegesRequiredOverrideCurrentUser=Տեղադրել միայն &ինձ համար -PrivilegesRequiredOverrideCurrentUserRecommended=Տեղադրել միայն &ինձ համար (հանձնարարելի) - -; *** Misc. errors -ErrorCreatingDir=Հնարավոր չէ ստեղծել "%1" պանակը -ErrorTooManyFilesInDir=Հնարավոր չէ ստեղծել ֆայլ "%1" պանակում, որովհետև նրանում կան չափից ավելի շատ ֆայլեր - -; *** Setup common messages -ExitSetupTitle=Տեղակայման ընդհատում -ExitSetupMessage=Տեղակայումը չի ավարատվել։ Եթե ընդհատեք, ապա ծրագիրը չի տեղադրվի։%n%nԱվարտե՞լ։ -AboutSetupMenuItem=&Ծրագրի մասին... -AboutSetupTitle=Ծրագրի մասին -AboutSetupMessage=%1, տարբերակ՝ %2%n%3%n%nՎեբ կայք՝ %1:%n%4 -AboutSetupNote= -TranslatorNote=Armenian translation by Hrant Ohanyan »»» http://www.haysoft.org - -; *** Buttons -ButtonBack=« &Նախորդ -ButtonNext=&Հաջորդ » -ButtonInstall=&Տեղադրել -ButtonOK=Լավ -ButtonCancel=Չեղարկել -ButtonYes=&Այո -ButtonYesToAll=Այո բոլորի &համար -ButtonNo=&Ոչ -ButtonNoToAll=Ո&չ բոլորի համար -ButtonFinish=&Ավարտել -ButtonBrowse=&Ընտրել... -ButtonWizardBrowse=&Ընտրել... -ButtonNewFolder=&Ստեղծել պանակ - -; *** "Select Language" dialog messages -SelectLanguageTitle=Ընտրել տեղակայիչի լեզուն -SelectLanguageLabel=Ընտրեք այն լեզուն, որը օգտագործվելու է տեղադրման ընթացքում: - -; *** Common wizard text -ClickNext=Սեղմեք «Հաջորդ»՝ շարունակելու համար կամ «Չեղարկել»՝ տեղակայիչը փակելու համար։ -BeveledLabel= -BrowseDialogTitle=Ընտրել պանակ -BrowseDialogLabel=Ընտրեք պանակը ցանկից և սեղմեք «Լավ»։ -NewFolderName=Նոր պանակ - -; *** "Welcome" wizard page -WelcomeLabel1=Ձեզ ողջունում է [name]-ի տեղակայման օգնականը -WelcomeLabel2=Ծրագիրը կտեղադրի [name/ver]-ը Ձեր համակարգչում։%n%nՇարունակելուց առաջ խորհուրդ ենք տալիս փակել բոլոր աշխատող ծրագրերը։ - -; *** "Password" wizard page -WizardPassword=Գաղտնաբառ -PasswordLabel1=Ծրագիրը պաշտպանված է գաղտնաբառով։ -PasswordLabel3=Մուտքագրեք գաղտնաբառը և սեղմեք «Հաջորդ»։ -PasswordEditLabel=&Գաղտնաբառ. -IncorrectPassword=Մուտքագրված գաղտնաբառը սխալ է, կրկին փորձեք։ - -; *** "License Agreement" wizard page -WizardLicense=Արտոնագրային համաձայնագիր -LicenseLabel=Խնդրում ենք շարունակելուց առաջ կարդալ հետևյալ տեղեկությունը։ -LicenseLabel3=Կարդացեք արտոնագրային համաձայնագիրը։ Շարունակելուց առաջ պետք է ընդունեք նշված պայմանները։ -LicenseAccepted=&Ընդունում եմ արտոնագրային համաձայնագիրը -LicenseNotAccepted=&Չեմ ընդունում արտոնագրային համաձայնագիրը - -; *** "Information" wizard pages -WizardInfoBefore=Տեղեկություն -InfoBeforeLabel=Շարունակելուց առաջ կարդացեք այս տեղեկությունը։ -InfoBeforeClickLabel=Եթե պատրաստ եք սեղմեք «Հաջորդը»։ -WizardInfoAfter=Տեղեկություն -InfoAfterLabel=Շարունակելուց առաջ կարդացեք այս տեղեկությունը։ -InfoAfterClickLabel=Երբ պատրաստ լինեք շարունակելու՝ սեղմեք «Հաջորդ»։ - -; *** "User Information" wizard page -WizardUserInfo=Տեղեկություն օգտվողի մասին -UserInfoDesc=Գրեք տվյալներ Ձեր մասին -UserInfoName=&Օգտվողի անուն և ազգանուն. -UserInfoOrg=&Կազմակերպություն. -UserInfoSerial=&Հերթական համար. -UserInfoNameRequired=Պետք է գրեք Ձեր անունը։ - -; *** "Select Destination Location" wizard page -WizardSelectDir=Ընտրել տեղակադրման պանակը -SelectDirDesc=Ո՞ր պանակում տեղադրել [name]-ը։ -SelectDirLabel3=Ծրագիրը կտեղադրի [name]-ը հետևյալ պանակում։ -SelectDirBrowseLabel=Սեղմեք «Հաջորդ»՝ շարունակելու համար։ Եթե ցանկանում եք ընտրել այլ պանակ՝ սեղմեք «Ընտրել»։ -DiskSpaceGBLabel=Առնվազն [gb] ԳԲ ազատ տեղ է պահանջվում: -DiskSpaceMBLabel=Առնվազն [mb] ՄԲ ազատ տեղ է պահանջվում: -CannotInstallToNetworkDrive=Հնարավոր չէ տեղադրել Ցանցային հիշասարքում։ -CannotInstallToUNCPath=Հնարավոր չէ տեղադրել UNC ուղիում։ -InvalidPath=Պետք է նշեք ամբողջական ուղին՝ հիշասարքի տառով, օրինակ՝%n%nC:\APP%n%nկամ UNC ուղի՝ %n%n\\սպասարկիչի_անունը\ռեսուրսի_անունը -InvalidDrive=Ընտրված հիշասարքը կամ ցանցային ուղին գոյություն չունեն կամ անհասանելի են։ Ընտրեք այլ ուղի։ -DiskSpaceWarningTitle=Չկա պահանջվող չափով ազատ տեղ -DiskSpaceWarning=Առնվազն %1 ԿԲ ազատ տեղ է պահանջվում, մինչդեռ հասանելի է ընդամենը %2 ԿԲ։%n%nԱյնուհանդերձ, շարունակե՞լ։ -DirNameTooLong=Պանակի անունը կամ ուղին երկար են: -InvalidDirName=Պանակի նշված անունը անընդունելի է։ -BadDirName32=Անվան մեջ չպետք է լինեն հետևյալ գրանշանները՝ %n%n%1 -DirExistsTitle=Թղթապանակը գոյություն ունի -DirExists=%n%n%1%n%n պանակը արդեն գոյություն ունի։ Այնուհանդերձ, տեղադրե՞լ այստեղ։ -DirDoesntExistTitle=Պանակ գոյություն չունի -DirDoesntExist=%n%n%1%n%n պանակը գոյություն չունի։ Ստեղծե՞լ այն։ - -; *** "Select Components" wizard page -WizardSelectComponents=Ընտրել բաղադրիչներ -SelectComponentsDesc=Ո՞ր ֆայլերը պետք է տեղադրվեն։ -SelectComponentsLabel2=Նշեք այն ֆայլերը, որոնք պետք է տեղադրվեն, ապանշեք նրանք, որոնք չպետք է տեղադրվեն։ Սեղմեք «Հաջորդ»՝ շարունակելու համար։ -FullInstallation=Լրիվ տեղադրում -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Սեղմված տեղադրում -CustomInstallation=Ընտրովի տեղադրում -NoUninstallWarningTitle=Տեղակայվող ֆայլերը -NoUninstallWarning=Տեղակայիչ ծրագիրը հայտնաբերել է, որ հետևյալ բաղադրիչները արդեն տեղադրված են Ձեր համակարգչում։ %n%n%1%n%nԱյս բաղադրիչների ընտրության վերակայումը չի ջնջի դրանք։%n%nՇարունակե՞լ։ -ComponentSize1=%1 ԿԲ -ComponentSize2=%1 ՄԲ -ComponentsDiskSpaceGBLabel=Ընթացիկ ընտրումը պահանջում է առնվազն [gb] ԳԲ տեղ հիշասարքում: -ComponentsDiskSpaceMBLabel=Տվյալ ընտրությունը պահանջում է ամենաքիչը [mb] ՄԲ տեղ հիշասարքում: - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Լրացուցիչ առաջադրանքներ -SelectTasksDesc=Ի՞նչ լրացուցիչ առաջադրանքներ պետք է կատարվեն։ -SelectTasksLabel2=Ընտրեք լրացուցիչ առաջադրանքներ, որոնք պետք է կատարվեն [name]-ի տեղադրման ընթացքում, ապա սեղմեք «Հաջորդ». - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Ընտրել «Մեկնարկ» ցանկի պանակը -SelectStartMenuFolderDesc=Որտե՞ղ ստեղծել դյուրանցումներ. -SelectStartMenuFolderLabel3=Ծրագիրը կստեղծի դյուրանցումներ «Մեկնարկ» ցանկի հետևյալ պանակում։ -SelectStartMenuFolderBrowseLabel=Սեղմեք «Հաջորդ»՝ շարունակելու համար։ Եթե ցանկանում եք ընտրեք այլ պանակ՝ սեղմեք «Ընտրել»։ -MustEnterGroupName=Պետք է գրել պանակի անունը։ -GroupNameTooLong=Պանակի անունը կամ ուղին շատ երկար են։ -InvalidGroupName=Նշված անունը անընդունելի է։ -BadGroupName=Անվան մեջ չպետք է լինեն հետևյալ գրանշանները՝ %n%n%1 -NoProgramGroupCheck2=&Չստեղծել պանակ «Մեկնարկ» ցանկում - -; *** "Ready to Install" wizard page -WizardReady=Պատրաստ է -ReadyLabel1=Տեղակայիչը պատրաստ է սկսել [name]-ի տեղադրումը։ -ReadyLabel2a=Սեղմեք «Տեղադրել»՝ շարունակելու համար կամ «Նախորդ»՝ եթե ցանկանում եք դիտել կամ փոփոխել տեղադրելու կարգավորումները։ -ReadyLabel2b=Սեղմեք «Տեղադրել»՝ շարունակելու համար։ -ReadyMemoUserInfo=Տեղեկություն օգտվողի մասին. -ReadyMemoDir=Տեղադրելու պանակ. -ReadyMemoType=Տեղադրման ձև. -ReadyMemoComponents=Ընտրված բաղադրիչներ. -ReadyMemoGroup=Թղթապանակ «Մեկնարկ» ցանկում. -ReadyMemoTasks=Լրացուցիչ առաջադրանքներ. -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Լրացուցիչ ֆայլերի ներբեռնում... -ButtonStopDownload=&Կանգնեցնել ներբեռնումը -StopDownload=Համոզվա՞ծ եք, որ պետք է կանգնեցնել ներբեռնումը: -ErrorDownloadAborted=Ներբեռնումը կասեցված է -ErrorDownloadFailed=Ներբեռնումը ձախողվեց. %1 %2 -ErrorDownloadSizeFailed=Չափի ստացումը ձախողվեց. %1 %2 -ErrorFileHash1=Ֆահլի հաշվեգումարը ձախողվեց. %1 -ErrorFileHash2=Ֆայլի անվավեր հաշվեգումար. ակընկալվում էր %1, գտնվել է %2 -ErrorProgress=Անվավեր ընթացք. %1-ը %2-ից -ErrorFileSize=Ֆայլի անվավեր աչփ. ակընկալվում էր %1, գտնվել է %2 -; *** "Preparing to Install" wizard page -WizardPreparing=Նախատրաստում է տեղադրումը -PreparingDesc=Տեղակայիչը պատրաստվում է տեղադրել [name]-ը ձեր համակարգչում։ -PreviousInstallNotCompleted=Այլ ծրագրի տեղադրումը կամ ապատեղադրումը չի ավարտվել։ Այն ավարտելու համար պետք է վերամեկնարկեք համակարգիչը։%n%nՎերամեկնարկելուց հետո կրկին բացեք տեղակայման փաթեթը՝ [name]-ի տեղադրումը ավարտելու համար։ -CannotContinue=Հնարավոր չէ շարունակել։ Սեղմեք «Չեղարկել»՝ ծրագիրը փակելու համար։ -ApplicationsFound=Հետևյալ ծրագրերը օգտագործում են ֆայլեր, որոնք պետք է թարմացվեն տեղակայիչի կողմից։ Թույլատրեք տեղակայիչին ինքնաբար փակելու այդ ծրագրերը։ -ApplicationsFound2=Հետևյալ ծրագրերը օգտագործում են ֆայլեր, որոնք պետք է թարմացվեն տեղակայիչի կողմից։ Թույլատրեք տեղակայիչին ինքնաբար փակելու այդ ծրագրերը։ Տեղադրումը ավարտելուց հետո տեղակայիչը կփորձի վերամեկնարկել այդ ծրագրերը։ -CloseApplications=&Ինքնաբար փակել ծրագրերը -DontCloseApplications=&Չփակել ծրագրերը -ErrorCloseApplications=Տեղակայիչը չկարողացավ ինքնաբար փակել բոլոր ծրագրերը: Խորհուրդ ենք տալիս փակել այն բոլոր ծրագրերը, որոնք պետք է թարմացվեն տեղակայիչի կողմից: -PrepareToInstallNeedsRestart=Տեղակայիչը պետք է վերամեկնարկի ձեր համակարգիչը: Դրանից հետո կրկին աշխատեցրեք այն՝ ավարտելու համար [name]-ի տեղադրումը:%n%nՑանկանո՞ւմ եք վերամեկնարկել հիմա: - -; *** "Installing" wizard page -WizardInstalling=Տեղադրում -InstallingLabel=Խնդրում ենք սպասել մինչ [name]-ը կտեղադրվի Ձեր համակարգչում։ - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=[name]-ի տեղադրման ավարտ -FinishedLabelNoIcons=[name] ծրագիրը տեղադրվել է Ձեր համակարգչում։ -FinishedLabel=[name] ծրագիրը տեղադրվել է Ձեր համակարգչում։ -ClickFinish=Սեղմեք «Ավարտել»՝ տեղակայիչը փակելու համար։ -FinishedRestartLabel=[name]-ի տեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։ վերամեկնարկե՞լ հիմա։ -FinishedRestartMessage=[name]-ի տեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։ %n%վերամեկնարկե՞լ հիմա։ -ShowReadmeCheck=Նայել README ֆայլը։ -YesRadio=&Այո, վերամեկնարկել -NoRadio=&Ոչ, ես հետո վերամեկնարկեմ -; used for example as 'Run MyProg.exe' -RunEntryExec=Աշխատեցնել %1-ը -; used for example as 'View Readme.txt' -RunEntryShellExec=Նայել %1-ը - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Տեղակայիչը պահանջում է հաջորդ սկավառակը -SelectDiskLabel2=Զետեղեք %1 սկավառակը և սեղմեք «Լավ»։ %n%nԵթե ֆայլերի պանակը գտնվում է այլ տեղ, ապա ընտրեք ճիշտ ուղին կամ սեղմեք «Ընտրել»։ -PathLabel=&Ուղին. -FileNotInDir2="%1" ֆայլը չի գտնվել "%2"-ում։ Զետեղեք ճիշտ սկավառակ կամ ընտրեք այլ պանակ։ -SelectDirectoryLabel=Խնդրում ենք նշել հաջորդ սկավառակի տեղադրությունը։ - -; *** Installation phase messages -SetupAborted=Տեղակայումը չի ավարտվել։ %n%nՈւղղեք խնդիրը և կրկին փորձեք։ -AbortRetryIgnoreSelectAction=Ընտրեք գործողություն -AbortRetryIgnoreRetry=&Կրկին փորձել -AbortRetryIgnoreIgnore=&Անտեսել սխալը և շարունակել -AbortRetryIgnoreCancel=Չեղարկել տեղադրումը - -; *** Installation status messages -StatusClosingApplications=Փակում է ծրագրերը... -StatusCreateDirs=Պանակների ստեղծում... -StatusExtractFiles=Ֆայլերի դուրս բերում... -StatusCreateIcons=Դյուրանցումների ստեղծում... -StatusCreateIniEntries=INI ֆայլերի ստեղծում... -StatusCreateRegistryEntries=Գրանցամատյանի գրանցումների ստեղծում... -StatusRegisterFiles=Ֆայլերի գրանցում... -StatusSavingUninstall=Ապատեղադրելու տեղեկության պահում... -StatusRunProgram=Տեղադրելու ավարտ... -StatusRestartingApplications=Ծրագրերի վերամեկնարկում... -StatusRollback=Փոփոխությունների հետ բերում... - -; *** Misc. errors -ErrorInternal2=Ներքին սխալ %1 -ErrorFunctionFailedNoCode=%1. վթար -ErrorFunctionFailed=%1. վթար, կոդը՝ %2 -ErrorFunctionFailedWithMessage=%1. վթար, կոդը՝ %2.%n%3 -ErrorExecutingProgram=Հնարավոր չէ կատարել %n%1 ֆայլը - -; *** Registry errors -ErrorRegOpenKey=Գրանցամատյանի բանալին բացելու սխալ՝ %n%1\%2 -ErrorRegCreateKey=Գրանցամատյանի բանալին ստեղծելու սխալ՝ %n%1\%2 -ErrorRegWriteKey=Գրանցամատյանի բանալիում գրանցում կատարելու սխալ՝ %n%1\%2 - -; *** INI errors -ErrorIniEntry=Սխալ՝ "%1" INI ֆայլում գրառում կատարելիս։ - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=Բաց թողնել այս ֆայլը (խորհուրդ չի տրվում) -FileAbortRetryIgnoreIgnoreNotRecommended=Անտեսել սխալը և շարունակել (խորհուրդ չի տրվում) -SourceIsCorrupted=Սկզբնական ֆայլը վնասված է։ -SourceDoesntExist=Սկզբնական "%1" ֆայլը գոյություն չունի -ExistingFileReadOnly2=Առկա ֆայլը չի կարող փոխարինվել, քանի որ այն նշված է որպես միայն կարդալու: -ExistingFileReadOnlyRetry=&Հեռացրեք միայն կարդալ հատկանիշը և կրկին փորձեք -ExistingFileReadOnlyKeepExisting=&Պահել առկա ֆայլը -ErrorReadingExistingDest=Սխալ՝ ֆայլը կարդալիս. -FileExistsSelectAction=Ընտրեք գործողություն -FileExists2=Ֆայլը գոյություն չունի -FileExistsOverwriteExisting=&Վրագրել առկա ֆայլը -FileExistsKeepExisting=&Պահել առկա ֆայլը -FileExistsOverwriteOrKeepAll=&Անել սա հաջորդ բախման ժամանակ -ExistingFileNewerSelectAction=Ընտրեք գործողություն -ExistingFileNewer2=Առկա ֆայլը ավելի նոր է, քան այն, որ տեղակայիչը փորձում է տեղադրել: -ExistingFileNewerOverwriteExisting=&Վրագրել առկա ֆայլը -ExistingFileNewerKeepExisting=&Պահել առկա ֆայլը (հանձնարարելի) -ExistingFileNewerOverwriteOrKeepAll=&Անել սա հաջորդ բախման ժամանակ -ErrorChangingAttr=Սխալ՝ ընթացիկ ֆայլի հատկանիշները փոխելիս. -ErrorCreatingTemp=Սխալ՝ նշված պանակում ֆայլ ստեղծելիս. -ErrorReadingSource=Սխալ՝ ֆայլը կարդալիս. -ErrorCopying=Սխալ՝ ֆայլը պատճենելիս. -ErrorReplacingExistingFile=Սխալ՝ գոյություն ունեցող ֆայլը փոխարինելիս. -ErrorRestartReplace=RestartReplace ձախողում. -ErrorRenamingTemp=Սխալ՝ նպատակակետ պանակում՝ ֆայլը վերանվանելիս. -ErrorRegisterServer=Հնարավոր չէ գրանցել DLL/OCX-ը. %1 -ErrorRegSvr32Failed=RegSvr32-ի ձախողում, կոդ՝ %1 -ErrorRegisterTypeLib=Հնարավոր չէ գրանցել դարանները՝ %1 -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32 բիթային -UninstallDisplayNameMark64Bit=64 բիթային -UninstallDisplayNameMarkAllUsers=Բոլոր օգտվողները -UninstallDisplayNameMarkCurrentUser=Ընթացիկ օգտվողը - -; *** Post-installation errors -ErrorOpeningReadme=Սխալ՝ README ֆայլը բացելիս։ -ErrorRestartingComputer=Հնարավոր չեղավ վերամեկնարկել համակարգիչը։ Ինքներդ փորձեք։ - -; *** Uninstaller messages -UninstallNotFound="%1" ֆայլը գոյություն չունի։ Հնարավոր չէ ապատեղադրել։ -UninstallOpenError="%1" ֆայլը հնարավոր չէ բացել: Հնարավոր չէ ապատեղադրել -UninstallUnsupportedVer=Ապատեղադրելու "%1" մատյանի ֆայլը անճանաչելի է ապատեղադրող ծրագրի այս տարբերակի համար։ Հնարավոր չէ ապատեղադրել -UninstallUnknownEntry=Անհայտ գրառում է (%1)՝ հայնաբերվել ապատեղադրելու մատյանում -ConfirmUninstall=Ապատեղադրե՞լ %1-ը և նրա բոլոր բաղադրիչները։ -UninstallOnlyOnWin64=Հնարավոր է ապատեղադրել միայն 64 բիթանոց Windows-ում։ -OnlyAdminCanUninstall=Հնարավոր է ապատեղադրել միայն Ադմինի իրավունքներով։ -UninstallStatusLabel=Խնդրում ենք սպասել, մինչև %1-ը ապատեղադրվում է Ձեր համակարգչից։ -UninstalledAll=%1 ծրագիրը ապատեղադրվել է համակարգչից։ -UninstalledMost=%1-ը ապատեղադրվեց Ձեր համակարգչից։%n%nՈրոշ ֆայլեր հնարավոր չեղավ հեռացնել։ Ինքներդ հեռացրեք դրանք։ -UninstalledAndNeedsRestart=%1-ի ապատեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։%n%nՎերամեկնարկե՞լ։ -UninstallDataCorrupted="%1" ֆայլը վնասված է։ Հնարավոր չէ ապատեղադրել - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Հեռացնե՞լ համատեղ օգտագործվող ֆայլը։ -ConfirmDeleteSharedFile2=Համակարգը նշում է, որ հետևյալ համատեղ օգտագործվող ֆայլը այլևս չի օգտագործվում այլ ծրագրի կողմից։ Ապատեղադրե՞լ այն։ %n%nԵթե համոզված չեք սեղմեք «Ոչ»։ -SharedFileNameLabel=Ֆայլի անուն. -SharedFileLocationLabel=Տեղադրություն. -WizardUninstalling=Ապատեղադրելու վիճակ -StatusUninstalling=%1-ի ապատեղադրում... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=%1-ի տեղադրում։ -ShutdownBlockReasonUninstallingApp=%1-ի ապատեղադրում։ - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 տարբերակ՝ %2 -AdditionalIcons=Լրացուցիչ դյուրանցումներ -CreateDesktopIcon=Ստեղծել դյուրանցում &Աշխատասեղանին -CreateQuickLaunchIcon=Ստեղծել դյուրանցում &Արագ թողարկման գոտում -ProgramOnTheWeb=%1-ի վեբ կայքը -UninstallProgram=%1-ի ապատեղադրում -LaunchProgram=Բացել %1-ը -AssocFileExtension=Հա&մակցել %1-ը %2 ֆայլերի հետ։ -AssocingFileExtension=%1-ը համակցվում է %2 ընդլայնումով ֆայլերի հետ... -AutoStartProgramGroupDescription=Ինքնամեկնարկ. -AutoStartProgram=Ինքնաբար մեկնարկել %1-ը -AddonHostProgramNotFound=%1 չի կարող տեղադրվել Ձեր ընտրած պանակում։%n%nՇարունակե՞լ։ - diff --git a/Dependencies/Inno/Languages/BrazilianPortuguese.isl b/Dependencies/Inno/Languages/BrazilianPortuguese.isl deleted file mode 100644 index 69edb37f..00000000 --- a/Dependencies/Inno/Languages/BrazilianPortuguese.isl +++ /dev/null @@ -1,384 +0,0 @@ -; *** Inno Setup version 6.1.0+ Brazilian Portuguese messages made by Cesar82 cesar.zanetti.82@gmail.com *** -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=Portugus Brasileiro -LanguageID=$0416 -LanguageCodePage=1252 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Instalador -SetupWindowTitle=%1 - Instalador -UninstallAppTitle=Desinstalar -UninstallAppFullTitle=Desinstalar %1 - -; *** Misc. common -InformationTitle=Informao -ConfirmTitle=Confirmar -ErrorTitle=Erro - -; *** SetupLdr messages -SetupLdrStartupMessage=Isto instalar o %1. Voc deseja continuar? -LdrCannotCreateTemp=Incapaz de criar um arquivo temporrio. Instalao abortada -LdrCannotExecTemp=Incapaz de executar o arquivo no diretrio temporrio. Instalao abortada -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nErro %2: %3 -SetupFileMissing=Est faltando o arquivo %1 do diretrio de instalao. Por favor corrija o problema ou obtenha uma nova cpia do programa. -SetupFileCorrupt=Os arquivos de instalao esto corrompidos. Por favor obtenha uma nova cpia do programa. -SetupFileCorruptOrWrongVer=Os arquivos de instalao esto corrompidos ou so incompatveis com esta verso do instalador. Por favor corrija o problema ou obtenha uma nova cpia do programa. -InvalidParameter=Um parmetro invlido foi passado na linha de comando:%n%n%1 -SetupAlreadyRunning=O instalador j est em execuo. -WindowsVersionNotSupported=Este programa no suporta a verso do Windows que seu computador est executando. -WindowsServicePackRequired=Este programa requer o %1 Service Pack %2 ou superior. -NotOnThisPlatform=Este programa no executar no %1. -OnlyOnThisPlatform=Este programa deve ser executado no %1. -OnlyOnTheseArchitectures=Este programa s pode ser instalado em verses do Windows projetadas para as seguintes arquiteturas de processadores:%n%n% 1 -WinVersionTooLowError=Este programa requer a %1 verso %2 ou superior. -WinVersionTooHighError=Este programa no pode ser instalado na %1 verso %2 ou superior. -AdminPrivilegesRequired=Voc deve estar logado como administrador quando instalar este programa. -PowerUserPrivilegesRequired=Voc deve estar logado como administrador ou como um membro do grupo de Usurios Power quando instalar este programa. -SetupAppRunningError=O instalador detectou que o %1 est atualmente em execuo.%n%nPor favor feche todas as instncias dele agora, ento clique em OK pra continuar ou em Cancelar pra sair. -UninstallAppRunningError=O Desinstalador detectou que o %1 est atualmente em execuo.%n%nPor favor feche todas as instncias dele agora, ento clique em OK pra continuar ou em Cancelar pra sair. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Selecione o Modo de Instalao do Instalador -PrivilegesRequiredOverrideInstruction=Selecione o modo de instalao -PrivilegesRequiredOverrideText1=O %1 pode ser instalado pra todos os usurios (requer privilgios administrativos) ou s pra voc. -PrivilegesRequiredOverrideText2=O %1 pode ser instalado s pra voc ou pra todos os usurios (requer privilgios administrativos). -PrivilegesRequiredOverrideAllUsers=Instalar pra &todos os usurios -PrivilegesRequiredOverrideAllUsersRecommended=Instalar pra &todos os usurios (recomendado) -PrivilegesRequiredOverrideCurrentUser=Instalar s &pra mim -PrivilegesRequiredOverrideCurrentUserRecommended=Instalar s &pra mim (recomendado) - -; *** Misc. errors -ErrorCreatingDir=O instalador foi incapaz de criar o diretrio "%1" -ErrorTooManyFilesInDir=Incapaz de criar um arquivo no diretrio "%1" porque ele contm arquivos demais - -; *** Setup common messages -ExitSetupTitle=Sair do Instalador -ExitSetupMessage=A Instalao no est completa. Se voc sair agora o programa no ser instalado.%n%nVoc pode executar o instalador de novo outra hora pra completar a instalao.%n%nSair do instalador? -AboutSetupMenuItem=&Sobre o Instalador... -AboutSetupTitle=Sobre o Instalador -AboutSetupMessage=%1 verso %2%n%3%n%n%1 home page:%n%4 -AboutSetupNote= -TranslatorNote= - -; *** Buttons -ButtonBack=< &Voltar -ButtonNext=&Avanar > -ButtonInstall=&Instalar -ButtonOK=OK -ButtonCancel=Cancelar -ButtonYes=&Sim -ButtonYesToAll=Sim pra &Todos -ButtonNo=&No -ButtonNoToAll=N&o pra Todos -ButtonFinish=&Concluir -ButtonBrowse=&Procurar... -ButtonWizardBrowse=P&rocurar... -ButtonNewFolder=&Criar Nova Pasta - -; *** "Select Language" dialog messages -SelectLanguageTitle=Selecione o Idioma do Instalador -SelectLanguageLabel=Selecione o idioma pra usar durante a instalao: - -; *** Common wizard text -ClickNext=Clique em Avanar pra continuar ou em Cancelar pra sair do instalador. -BeveledLabel= -BrowseDialogTitle=Procurar Pasta -BrowseDialogLabel=Selecione uma pasta na lista abaixo, ento clique em OK. -NewFolderName=Nova Pasta - -; *** "Welcome" wizard page -WelcomeLabel1=Bem-vindo ao Assistente do Instalador do [name] -WelcomeLabel2=Isto instalar o [name/ver] no seu computador.%n%n recomendado que voc feche todos os outros aplicativos antes de continuar. - -; *** "Password" wizard page -WizardPassword=Senha -PasswordLabel1=Esta instalao est protegida por senha. -PasswordLabel3=Por favor fornea a senha, ento clique em Avanar pra continuar. As senhas so caso-sensitivo. -PasswordEditLabel=&Senha: -IncorrectPassword=A senha que voc inseriu no est correta. Por favor tente de novo. - -; *** "License Agreement" wizard page -WizardLicense=Acordo de Licena -LicenseLabel=Por favor leia as seguintes informaes importantes antes de continuar. -LicenseLabel3=Por favor leia o seguinte Acordo de Licena. Voc deve aceitar os termos deste acordo antes de continuar com a instalao. -LicenseAccepted=Eu &aceito o acordo -LicenseNotAccepted=Eu &no aceito o acordo - -; *** "Information" wizard pages -WizardInfoBefore=Informao -InfoBeforeLabel=Por favor leia as seguintes informaes importantes antes de continuar. -InfoBeforeClickLabel=Quando voc estiver pronto pra continuar com o instalador, clique em Avanar. -WizardInfoAfter=Informao -InfoAfterLabel=Por favor leia as seguintes informaes importantes antes de continuar. -InfoAfterClickLabel=Quando voc estiver pronto pra continuar com o instalador, clique em Avanar. - -; *** "User Information" wizard page -WizardUserInfo=Informao do Usurio -UserInfoDesc=Por favor insira suas informaes. -UserInfoName=&Nome do Usurio: -UserInfoOrg=&Organizao: -UserInfoSerial=&Nmero de Srie: -UserInfoNameRequired=Voc deve inserir um nome. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Selecione o Local de Destino -SelectDirDesc=Aonde o [name] deve ser instalado? -SelectDirLabel3=O instalador instalar o [name] na seguinte pasta. -SelectDirBrowseLabel=Pra continuar clique em Avanar. Se voc gostaria de selecionar uma pasta diferente, clique em Procurar. -DiskSpaceGBLabel=Pelo menos [gb] MBs de espao livre em disco so requeridos. -DiskSpaceMBLabel=Pelo menos [mb] MBs de espao livre em disco so requeridos. -CannotInstallToNetworkDrive=O instalador no pode instalar em um drive de rede. -CannotInstallToUNCPath=O instalador no pode instalar em um caminho UNC. -InvalidPath=Voc deve inserir um caminho completo com a letra do drive; por exemplo:%n%nC:\APP%n%no um caminho UNC no formulrio:%n%n\\server\share -InvalidDrive=O drive ou compartilhamento UNC que voc selecionou no existe ou no est acessvel. Por favor selecione outro. -DiskSpaceWarningTitle=Sem Espao em Disco o Bastante -DiskSpaceWarning=O instalador requer pelo menos %1 KBs de espao livre pra instalar mas o drive selecionado s tem %2 KBs disponveis.%n%nVoc quer continuar de qualquer maneira? -DirNameTooLong=O nome ou caminho da pasta muito longo. -InvalidDirName=O nome da pasta no vlido. -BadDirName32=Os nomes das pastas no pode incluir quaisquer dos seguintes caracteres:%n%n%1 -DirExistsTitle=A Pasta Existe -DirExists=A pasta:%n%n%1%n%nj existe. Voc gostaria de instalar nesta pasta de qualquer maneira? -DirDoesntExistTitle=A Pasta No Existe -DirDoesntExist=A pasta:%n%n%1%n%nno existe. Voc gostaria quer a pasta fosse criada? - -; *** "Select Components" wizard page -WizardSelectComponents=Selecionar Componentes -SelectComponentsDesc=Quais componentes devem ser instalados? -SelectComponentsLabel2=Selecione os componentes que voc quer instalar; desmarque os componentes que voc no quer instalar. Clique em Avanar quando voc estiver pronto pra continuar. -FullInstallation=Instalao completa -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Instalao compacta -CustomInstallation=Instalao personalizada -NoUninstallWarningTitle=O Componente Existe -NoUninstallWarning=O instalador detectou que os seguintes componentes j esto instalados no seu computador:%n%n%1%n%nNo selecionar estes componentes no desinstalar eles.%n%nVoc gostaria de continuar de qualquer maneira? -ComponentSize1=%1 KBs -ComponentSize2=%1 MBs -ComponentsDiskSpaceGBLabel=A seleo atual requer pelo menos [gb] MBs de espao em disco. -ComponentsDiskSpaceMBLabel=A seleo atual requer pelo menos [mb] MBs de espao em disco. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Selecionar Tarefas Adicionais -SelectTasksDesc=Quais tarefas adicionais devem ser executadas? -SelectTasksLabel2=Selecione as tarefas adicionais que voc gostaria que o instalador executasse enquanto instala o [name], ento clique em Avanar. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Selecionar a Pasta do Menu Iniciar -SelectStartMenuFolderDesc=Aonde o instalador deve colocar os atalhos do programa? -SelectStartMenuFolderLabel3=O instalador criar os atalhos do programa na seguinte pasta do Menu Iniciar. -SelectStartMenuFolderBrowseLabel=Pra continuar clique em Avanar. Se voc gostaria de selecionar uma pasta diferente, clique em Procurar. -MustEnterGroupName=Voc deve inserir um nome de pasta. -GroupNameTooLong=O nome ou caminho da pasta muito longo. -InvalidGroupName=O nome da pasta no vlido. -BadGroupName=O nome da pasta no pode incluir quaisquer dos seguintes caracteres:%n%n%1 -NoProgramGroupCheck2=&No criar uma pasta no Menu Iniciar - -; *** "Ready to Install" wizard page -WizardReady=Pronto pra Instalar -ReadyLabel1=O instalador est agora pronto pra comear a instalar o [name] no seu computador. -ReadyLabel2a=Clique em Instalar pra continuar com a instalao ou clique em Voltar se voc quer revisar ou mudar quaisquer configuraes. -ReadyLabel2b=Clique em Instalar pra continuar com a instalao. -ReadyMemoUserInfo=Informao do usurio: -ReadyMemoDir=Local de destino: -ReadyMemoType=Tipo de instalao: -ReadyMemoComponents=Componentes selecionados: -ReadyMemoGroup=Pasta do Menu Iniciar: -ReadyMemoTasks=Tarefas adicionais: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Baixando arquivos adicionais... -ButtonStopDownload=&Parar download -StopDownload=Tem certeza que deseja parar o download? -ErrorDownloadAborted=Download abortado -ErrorDownloadFailed=Download falhou: %1 %2 -ErrorDownloadSizeFailed=Falha ao obter o tamanho: %1 %2 -ErrorFileHash1=Falha no hash do arquivo: %1 -ErrorFileHash2=Hash de arquivo invlido: esperado %1, encontrado %2 -ErrorProgress=Progresso invlido: %1 de %2 -ErrorFileSize=Tamanho de arquivo invlido: esperado %1, encontrado %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Preparando pra Instalar -PreparingDesc=O instalador est se preparando pra instalar o [name] no seu computador. -PreviousInstallNotCompleted=A instalao/remoo de um programa anterior no foi completada. Voc precisar reiniciar o computador pra completar essa instalao.%n%nAps reiniciar seu computador execute o instalador de novo pra completar a instalao do [name]. -CannotContinue=O instalador no pode continuar. Por favor clique em Cancelar pra sair. -ApplicationsFound=Os aplicativos a seguir esto usando arquivos que precisam ser atualizados pelo instalador. recomendados que voc permita ao instalador fechar automaticamente estes aplicativos. -ApplicationsFound2=Os aplicativos a seguir esto usando arquivos que precisam ser atualizados pelo instalador. recomendados que voc permita ao instalador fechar automaticamente estes aplicativos. Aps a instalao ter completado, o instalador tentar reiniciar os aplicativos. -CloseApplications=&Fechar os aplicativos automaticamente -DontCloseApplications=&No fechar os aplicativos -ErrorCloseApplications=O instalador foi incapaz de fechar automaticamente todos os aplicativos. recomendado que voc feche todos os aplicativos usando os arquivos que precisam ser atualizados pelo instalador antes de continuar. -PrepareToInstallNeedsRestart=A instalao deve reiniciar seu computador. Depois de reiniciar o computador, execute a Instalao novamente para concluir a instalao de [name].%n%nDeseja reiniciar agora? - -; *** "Installing" wizard page -WizardInstalling=Instalando -InstallingLabel=Por favor espere enquanto o instalador instala o [name] no seu computador. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Completando o Assistente do Instalador do [name] -FinishedLabelNoIcons=O instalador terminou de instalar o [name] no seu computador. -FinishedLabel=O instalador terminou de instalar o [name] no seu computador. O aplicativo pode ser iniciado selecionando os atalhos instalados. -ClickFinish=Clique em Concluir pra sair do Instalador. -FinishedRestartLabel=Pra completar a instalao do [name], o instalador deve reiniciar seu computador. Voc gostaria de reiniciar agora? -FinishedRestartMessage=Pra completar a instalao do [name], o instalador deve reiniciar seu computador.%n%nVoc gostaria de reiniciar agora? -ShowReadmeCheck=Sim, eu gostaria de visualizar o arquivo README -YesRadio=&Sim, reiniciar o computador agora -NoRadio=&No, eu reiniciarei o computador depois -; used for example as 'Run MyProg.exe' -RunEntryExec=Executar %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Visualizar %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=O Instalador Precisa do Prximo Disco -SelectDiskLabel2=Por favor insira o Disco %1 e clique em OK.%n%nSe os arquivos neste disco podem ser achados numa pasta diferente do que a exibida abaixo, insira o caminho correto ou clique em Procurar. -PathLabel=&Caminho: -FileNotInDir2=O arquivo "%1" no pde ser localizado em "%2". Por favor insira o disco correto ou selecione outra pasta. -SelectDirectoryLabel=Por favor especifique o local do prximo disco. - -; *** Installation phase messages -SetupAborted=A instalao no foi completada.%n%nPor favor corrija o problema e execute o instalador de novo. -AbortRetryIgnoreSelectAction=Selecionar ao -AbortRetryIgnoreRetry=&Tentar de novo -AbortRetryIgnoreIgnore=&Ignorar o erro e continuar -AbortRetryIgnoreCancel=Cancelar instalao - -; *** Installation status messages -StatusClosingApplications=Fechando aplicativos... -StatusCreateDirs=Criando diretrios... -StatusExtractFiles=Extraindo arquivos... -StatusCreateIcons=Criando atalhos... -StatusCreateIniEntries=Criando entradas INI... -StatusCreateRegistryEntries=Criando entradas do registro... -StatusRegisterFiles=Registrando arquivos... -StatusSavingUninstall=Salvando informaes de desinstalao... -StatusRunProgram=Concluindo a instalao... -StatusRestartingApplications=Reiniciando os aplicativos... -StatusRollback=Desfazendo as mudanas... - -; *** Misc. errors -ErrorInternal2=Erro interno: %1 -ErrorFunctionFailedNoCode=%1 falhou -ErrorFunctionFailed=%1 falhou; cdigo %2 -ErrorFunctionFailedWithMessage=%1 falhou; cdigo %2.%n%3 -ErrorExecutingProgram=Incapaz de executar o arquivo:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Erro ao abrir a chave do registro:%n%1\%2 -ErrorRegCreateKey=Erro ao criar a chave do registro:%n%1\%2 -ErrorRegWriteKey=Erro ao gravar a chave do registro:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Erro ao criar a entrada INI no arquivo "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Ignorar este arquivo (no recomendado) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar o erro e continuar (no recomendado) -SourceIsCorrupted=O arquivo de origem est corrompido -SourceDoesntExist=O arquivo de origem "%1" no existe -ExistingFileReadOnly2=O arquivo existente no pde ser substitudo porque est marcado como somente-leitura. -ExistingFileReadOnlyRetry=&Remover o atributo somente-leitura e tentar de novo -ExistingFileReadOnlyKeepExisting=&Manter o arquivo existente -ErrorReadingExistingDest=Um erro ocorreu enquanto tentava ler o arquivo existente: -FileExistsSelectAction=Selecione a ao -FileExists2=O arquivo j existe. -FileExistsOverwriteExisting=&Sobrescrever o arquivo existente -FileExistsKeepExisting=&Mantenha o arquivo existente -FileExistsOverwriteOrKeepAll=&Faa isso para os prximos conflitos -ExistingFileNewerSelectAction=Selecione a ao -ExistingFileNewer2=O arquivo existente mais recente do que aquele que o Setup est tentando instalar. -ExistingFileNewerOverwriteExisting=&Sobrescrever o arquivo existente -ExistingFileNewerKeepExisting=&Mantenha o arquivo existente (recomendado) -ExistingFileNewerOverwriteOrKeepAll=&Faa isso para os prximos conflitos -ErrorChangingAttr=Um erro ocorreu enquanto tentava mudar os atributos do arquivo existente: -ErrorCreatingTemp=Um erro ocorreu enquanto tentava criar um arquivo no diretrio destino: -ErrorReadingSource=Um erro ocorreu enquanto tentava ler o arquivo de origem: -ErrorCopying=Um erro ocorreu enquanto tentava copiar um arquivo: -ErrorReplacingExistingFile=Um erro ocorreu enquanto tentava substituir o arquivo existente: -ErrorRestartReplace=ReiniciarSubstituir falhou: -ErrorRenamingTemp=Um erro ocorreu enquanto tentava renomear um arquivo no diretrio destino: -ErrorRegisterServer=Incapaz de registrar a DLL/OCX: %1 -ErrorRegSvr32Failed=O RegSvr32 falhou com o cdigo de sada %1 -ErrorRegisterTypeLib=Incapaz de registrar a biblioteca de tipos: %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32 bits -UninstallDisplayNameMark64Bit=64 bits -UninstallDisplayNameMarkAllUsers=Todos os usurios -UninstallDisplayNameMarkCurrentUser=Usurio atual - -; *** Post-installation errors -ErrorOpeningReadme=Um erro ocorreu enquanto tentava abrir o arquivo README. -ErrorRestartingComputer=O instalador foi incapaz de reiniciar o computador. Por favor faa isto manualmente. - -; *** Uninstaller messages -UninstallNotFound=O arquivo "%1" no existe. No consegue desinstalar. -UninstallOpenError=O arquivo "%1" no pde ser aberto. No consegue desinstalar -UninstallUnsupportedVer=O arquivo do log da desinstalao "%1" est num formato no reconhecido por esta verso do desinstalador. No consegue desinstalar -UninstallUnknownEntry=Uma entrada desconhecida (%1) foi encontrada no log da desinstalao -ConfirmUninstall=Voc tem certeza que voc quer remover completamente o %1 e todos os seus componentes? -UninstallOnlyOnWin64=Esta instalao s pode ser desinstalada em Windows 64 bits. -OnlyAdminCanUninstall=Esta instalao s pode ser desinstalada por um usurio com privilgios administrativos. -UninstallStatusLabel=Por favor espere enquanto o %1 removido do seu computador. -UninstalledAll=O %1 foi removido com sucesso do seu computador. -UninstalledMost=Desinstalao do %1 completa.%n%nAlguns elementos no puderam ser removidos. Estes podem ser removidos manualmente. -UninstalledAndNeedsRestart=Pra completar a desinstalao do %1, seu computador deve ser reiniciado.%n%nVoc gostaria de reiniciar agora? -UninstallDataCorrupted=O arquivo "%1" est corrompido. No consegue desinstalar - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Remover Arquivo Compartilhado? -ConfirmDeleteSharedFile2=O sistema indica que o seguinte arquivo compartilhado no est mais em uso por quaisquer programas. Voc gostaria que a Desinstalao removesse este arquivo compartilhado?%n%nSe quaisquer programas ainda esto usando este arquivo e ele removido, esses programas podem no funcionar apropriadamente. Se voc no tiver certeza escolha No. Deixar o arquivo no seu sistema no causar qualquer dano. -SharedFileNameLabel=Nome do arquivo: -SharedFileLocationLabel=Local: -WizardUninstalling=Status da Desinstalao -StatusUninstalling=Desinstalando o %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Instalando o %1. -ShutdownBlockReasonUninstallingApp=Desinstalando o %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 verso %2 -AdditionalIcons=Atalhos adicionais: -CreateDesktopIcon=Criar um atalho &na rea de trabalho -CreateQuickLaunchIcon=Criar um atalho na &barra de inicializao rpida -ProgramOnTheWeb=%1 na Web -UninstallProgram=Desinstalar o %1 -LaunchProgram=Iniciar o %1 -AssocFileExtension=&Associar o %1 com a extenso do arquivo %2 -AssocingFileExtension=Associando o %1 com a extenso do arquivo %2... -AutoStartProgramGroupDescription=Inicializao: -AutoStartProgram=Iniciar o %1 automaticamente -AddonHostProgramNotFound=O %1 no pde ser localizado na pasta que voc selecionou.%n%nVoc quer continuar de qualquer maneira? diff --git a/Dependencies/Inno/Languages/Catalan.isl b/Dependencies/Inno/Languages/Catalan.isl deleted file mode 100644 index 5fc86822..00000000 --- a/Dependencies/Inno/Languages/Catalan.isl +++ /dev/null @@ -1,371 +0,0 @@ -; *** Inno Setup version 6.1.0+ Catalan messages *** -; -; Translated by Carles Millan (email: carles@carlesmillan.cat) -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno - -[LangOptions] - -LanguageName=Catal<00E0> -LanguageID=$0403 -LanguageCodePage=1252 - -[Messages] - -; *** Application titles -SetupAppTitle=Installaci -SetupWindowTitle=Installaci - %1 -UninstallAppTitle=Desinstallaci -UninstallAppFullTitle=Desinstalla %1 - -; *** Misc. common -InformationTitle=Informaci -ConfirmTitle=Confirmaci -ErrorTitle=Error - -; *** SetupLdr messages -SetupLdrStartupMessage=Aquest programa installar %1. Voleu continuar? -LdrCannotCreateTemp=No s'ha pogut crear un fitxer temporal. Installaci cancellada -LdrCannotExecTemp=No s'ha pogut executar el fitxer a la carpeta temporal. Installaci cancellada -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nError %2: %3 -SetupFileMissing=El fitxer %1 no es troba a la carpeta d'installaci. Resoleu el problema o obteniu una nova cpia del programa. -SetupFileCorrupt=Els fitxers d'installaci estan corromputs. Obteniu una nova cpia del programa. -SetupFileCorruptOrWrongVer=Els fitxers d'installaci estan espatllats, o sn incompatibles amb aquesta versi del programa. Resoleu el problema o obteniu una nova cpia del programa. -InvalidParameter=Un parmetre invlid ha estat passat a la lnia de comanda:%n%n%1 -SetupAlreadyRunning=La installaci ja est en curs. -WindowsVersionNotSupported=Aquest programa no suporta la versi de Windows installada al vostre ordinador. -WindowsServicePackRequired=Aquest programa necessita %1 Service Pack %2 o posterior. -NotOnThisPlatform=Aquest programa no funcionar sota %1. -OnlyOnThisPlatform=Aquest programa noms pot ser executat sota %1. -OnlyOnTheseArchitectures=Aquest programa noms pot ser installat en versions de Windows dissenyades per a les segents arquitectures de processador:%n%n%1 -WinVersionTooLowError=Aquest programa requereix %1 versi %2 o posterior. -WinVersionTooHighError=Aquest programa no pot ser installat sota %1 versi %2 o posterior. -AdminPrivilegesRequired=Cal que tingueu privilegis d'administrador per poder installar aquest programa. -PowerUserPrivilegesRequired=Cal que accediu com a administrador o com a membre del grup Power Users en installar aquest programa. -SetupAppRunningError=El programa d'installaci ha detectat que %1 s'est executant actualment.%n%nTanqueu el programa i premeu Accepta per a continuar o Cancella per a sortir. -UninstallAppRunningError=El programa de desinstallaci ha detectat que %1 s'est executant en aquest moment.%n%nTanqueu el programa i premeu Accepta per a continuar o Cancella per a sortir. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Selecci del Mode d'Installaci -PrivilegesRequiredOverrideInstruction=Trieu mode d'installaci -PrivilegesRequiredOverrideText1=%1 pot ser installat per a tots els usuaris (cal tenir privilegis d'administrador), o noms per a vs. -PrivilegesRequiredOverrideText2=%1 pot ser installat noms per a vs, o per a tots els usuaris (cal tenir privilegis d'administrador). -PrivilegesRequiredOverrideAllUsers=Installaci per a &tots els usuaris -PrivilegesRequiredOverrideAllUsersRecommended=Installaci per a &tots els usuaris (recomanat) -PrivilegesRequiredOverrideCurrentUser=Installaci noms per a &mi -PrivilegesRequiredOverrideCurrentUserRecommended=Installaci noms per a &mi (recomanat) - -; *** Misc. errors -ErrorCreatingDir=El programa d'installaci no ha pogut crear la carpeta "%1" -ErrorTooManyFilesInDir=No s'ha pogut crear un fitxer a la carpeta "%1" perqu cont massa fitxers - -; *** Setup common messages -ExitSetupTitle=Surt -ExitSetupMessage=La installaci no s'ha completat. Si sortiu ara, el programa no ser installat.%n%nPer a completar-la podreu tornar a executar el programa d'installaci quan vulgueu.%n%nVoleu sortir-ne? -AboutSetupMenuItem=&Sobre la installaci... -AboutSetupTitle=Sobre la installaci -AboutSetupMessage=%1 versi %2%n%3%n%nPgina web de %1:%n%4 -AboutSetupNote= -TranslatorNote=Catalan translation by Carles Millan (carles at carlesmillan.cat) - -; *** Buttons -ButtonBack=< &Enrere -ButtonNext=&Segent > -ButtonInstall=&Installa -ButtonOK=Accepta -ButtonCancel=Cancella -ButtonYes=&S -ButtonYesToAll=S a &tot -ButtonNo=&No -ButtonNoToAll=N&o a tot -ButtonFinish=&Finalitza -ButtonBrowse=&Explora... -ButtonWizardBrowse=&Cerca... -ButtonNewFolder=Crea &nova carpeta - -; *** "Select Language" dialog messages -SelectLanguageTitle=Trieu idioma -SelectLanguageLabel=Trieu idioma a emprar durant la installaci. - -; *** Common wizard text -ClickNext=Premeu Segent per a continuar o Cancella per a abandonar la installaci. -BeveledLabel= -BrowseDialogTitle=Trieu una carpeta -BrowseDialogLabel=Trieu la carpeta de destinaci i premeu Accepta. -NewFolderName=Nova carpeta - -; *** "Welcome" wizard page -WelcomeLabel1=Benvingut a l'assistent d'installaci de [name] -WelcomeLabel2=Aquest programa installar [name/ver] al vostre ordinador.%n%ns molt recomanable que abans de continuar tanqueu tots els altres programes oberts, per tal d'evitar conflictes durant el procs d'installaci. - -; *** "Password" wizard page -WizardPassword=Contrasenya -PasswordLabel1=Aquesta installaci est protegida amb una contrasenya. -PasswordLabel3=Indiqueu la contrasenya i premeu Segent per a continuar. Aquesta contrasenya distingeix entre majscules i minscules. -PasswordEditLabel=&Contrasenya: -IncorrectPassword=La contrasenya introduda no s correcta. Torneu-ho a intentar. - -; *** "License Agreement" wizard page -WizardLicense=Acord de Llicncia -LicenseLabel=Cal que llegiu aquesta informaci abans de continuar. -LicenseLabel3=Cal que llegiu l'Acord de Llicncia segent. Cal que n'accepteu els termes abans de continuar amb la installaci. -LicenseAccepted=&Accepto l'acord -LicenseNotAccepted=&No accepto l'acord - -; *** "Information" wizard pages -WizardInfoBefore=Informaci -InfoBeforeLabel=Llegiu la informaci segent abans de continuar. -InfoBeforeClickLabel=Quan estigueu preparat per a continuar, premeu Segent. -WizardInfoAfter=Informaci -InfoAfterLabel=Llegiu la informaci segent abans de continuar. -InfoAfterClickLabel=Quan estigueu preparat per a continuar, premeu Segent - -; *** "User Information" wizard page -WizardUserInfo=Informaci sobre l'usuari -UserInfoDesc=Introduu la vostra informaci. -UserInfoName=&Nom de l'usuari: -UserInfoOrg=&Organitzaci -UserInfoSerial=&Nmero de srie: -UserInfoNameRequired=Cal que hi introduu un nom - -; *** "Select Destination Location" wizard page -WizardSelectDir=Trieu Carpeta de Destinaci -SelectDirDesc=On s'ha d'installar [name]? -SelectDirLabel3=El programa d'installaci installar [name] a la carpeta segent. -SelectDirBrowseLabel=Per a continuar, premeu Segent. Si desitgeu triar una altra capeta, premeu Cerca. -DiskSpaceGBLabel=Aquest programa necessita un mnim de [gb] GB d'espai a disc. -DiskSpaceMBLabel=Aquest programa necessita un mnim de [mb] MB d'espai a disc. -CannotInstallToNetworkDrive=La installaci no es pot fer en un disc de xarxa. -CannotInstallToUNCPath=La installaci no es pot fer a una ruta UNC. -InvalidPath=Cal donar una ruta completa amb lletra d'unitat, per exemple:%n%nC:\Aplicaci%n%no b una ruta UNC en la forma:%n%n\\servidor\compartit -InvalidDrive=El disc o ruta de xarxa seleccionat no existeix, trieu-ne un altre. -DiskSpaceWarningTitle=No hi ha prou espai al disc -DiskSpaceWarning=El programa d'installaci necessita com a mnim %1 KB d'espai lliure, per el disc seleccionat noms t %2 KB disponibles.%n%nTot i amb aix, desitgeu continuar? -DirNameTooLong=El nom de la carpeta o de la ruta s massa llarg. -InvalidDirName=El nom de la carpeta no s vlid. -BadDirName32=Un nom de carpeta no pot contenir cap dels carcters segents:%n%n%1 -DirExistsTitle=La carpeta existeix -DirExists=La carpeta:%n%n%1%n%nja existeix. Voleu installar igualment el programa en aquesta carpeta? -DirDoesntExistTitle=La Carpeta No Existeix -DirDoesntExist=La carpeta:%n%n%1%n%nno existeix. Voleu que sigui creada? - -; *** "Select Program Group" wizard page -WizardSelectComponents=Trieu Components -SelectComponentsDesc=Quins components cal installar? -SelectComponentsLabel2=Trieu els components que voleu installar; elimineu els components que no voleu installar. Premeu Segent per a continuar. -FullInstallation=Installaci completa -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Installaci compacta -CustomInstallation=Installaci personalitzada -NoUninstallWarningTitle=Els components Existeixen -NoUninstallWarning=El programa d'installaci ha detectat que els components segents ja es troben al vostre ordinador:%n%n%1%n%nSi no estan seleccionats no seran desinstallats.%n%nVoleu continuar igualment? -ComponentSize1=%1 Kb -ComponentSize2=%1 Mb -ComponentsDiskSpaceGBLabel=Aquesta selecci requereix un mnim de [gb] GB d'espai al disc. -ComponentsDiskSpaceMBLabel=Aquesta selecci requereix un mnim de [mb] Mb d'espai al disc. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Trieu tasques addicionals -SelectTasksDesc=Quines tasques addicionals cal executar? -SelectTasksLabel2=Trieu les tasques addicionals que voleu que siguin executades mentre s'installa [name], i desprs premeu Segent. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Trieu la carpeta del Men Inici -SelectStartMenuFolderDesc=On cal situar els enllaos del programa? -SelectStartMenuFolderLabel3=El programa d'installaci crear l'accs directe al programa a la segent carpeta del men d'Inici. -SelectStartMenuFolderBrowseLabel=Per a continuar, premeu Segent. Si desitgeu triar una altra carpeta, premeu Cerca. -MustEnterGroupName=Cal que hi introduu un nom de carpeta. -GroupNameTooLong=El nom de la carpeta o de la ruta s massa llarg. -InvalidGroupName=El nom de la carpeta no s vlid. -BadGroupName=El nom del grup no pot contenir cap dels carcters segents:%n%n%1 -NoProgramGroupCheck2=&No cres una carpeta al Men Inici - -; *** "Ready to Install" wizard page -WizardReady=Preparat per a installar -ReadyLabel1=El programa d'installaci est preparat per a iniciar la installaci de [name] al vostre ordinador. -ReadyLabel2a=Premeu Installa per a continuar amb la installaci, o Enrere si voleu revisar o modificar les opcions d'installaci. -ReadyLabel2b=Premeu Installa per a continuar amb la installaci. -ReadyMemoUserInfo=Informaci de l'usuari: -ReadyMemoDir=Carpeta de destinaci: -ReadyMemoType=Tipus d'installaci: -ReadyMemoComponents=Components seleccionats: -ReadyMemoGroup=Carpeta del Men Inici: -ReadyMemoTasks=Tasques addicionals: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Descarregant els fitxers addicionals... -ButtonStopDownload=&Atura la descrrega -StopDownload=Esteu segur que voleu aturar la descrrega? -ErrorDownloadAborted=Descrrega cancellada -ErrorDownloadFailed=La descrrega ha fallat: %1 %2 -ErrorDownloadSizeFailed=La mesura de la descrrega ha fallat: %1 %2 -ErrorFileHash1=El hash del fitxer ha fallat: %1 -ErrorFileHash2=El hash del fitxer s invlid: s'esperava %1, s'ha trobat %2 -ErrorProgress=Progrs invlid: %1 de %2 -ErrorFileSize=Mida del fitxer invlida: s'esperava %1, s'ha trobat %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Preparant la installaci -PreparingDesc=Preparant la installaci de [name] al vostre ordinador. -PreviousInstallNotCompleted=La installaci o desinstallaci anterior no s'ha dut a terme. Caldr que reinicieu l'ordinador per a finalitzar aquesta installaci.%n%nDesprs de reiniciar l'ordinador, executeu aquest programa de nou per completar la installaci de [name]. -CannotContinue=La installaci no pot continuar. Premeu Cancella per a sortir. -ApplicationsFound=Les segents aplicacions estan fent servir fitxers que necessiten ser actualitzats per la installaci. Es recomana que permeteu a la installaci tancar automticament aquestes aplicacions. -ApplicationsFound2=Les segents aplicacions estan fent servir fitxers que necessiten ser actualitzats per la installaci. Es recomana que permeteu a la installaci tancar automticament aquestes aplicacions. Desprs de completar la installaci s'intentar reiniciar les aplicacions. -CloseApplications=&Tanca automticament les aplicacions -DontCloseApplications=&No tanquis les aplicacions -ErrorCloseApplications=El programa d'installaci no ha pogut tancar automticament totes les aplicacions. Es recomana que abans de continuar tanqueu totes les aplicacions que estan usant fitxers que han de ser actualitzats pel programa d'installaci. -PrepareToInstallNeedsRestart=El programa d'installaci ha de reiniciar l'ordinador. Desprs del reinici, executeu de nou l'installador per tal de completar la installaci de [name].%n%nVoleu reiniciar-lo ara? - -; *** "Installing" wizard page -WizardInstalling=Installant -InstallingLabel=Espereu mentre s'installa [name] al vostre ordinador. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Completant l'assistent d'installaci de [name] -FinishedLabelNoIcons=El programa ha finalitzat la installaci de [name] al vostre ordinador. -FinishedLabel=El programa ha finalitzat la installaci de [name] al vostre ordinador. L'aplicaci pot ser iniciada seleccionant les icones installades. -ClickFinish=Premeu Finalitza per a sortir de la installaci. -FinishedRestartLabel=Per a completar la installaci de [name] cal reiniciar l'ordinador. Voleu fer-ho ara? -FinishedRestartMessage=Per a completar la installaci de [name] cal reiniciar l'ordinador. Voleu fer-ho ara? -ShowReadmeCheck=S, vull visualitzar el fitxer LLEGIUME.TXT -YesRadio=&S, reiniciar l'ordinador ara -NoRadio=&No, reiniciar l'ordinador ms tard -; used for example as 'Run MyProg.exe' -RunEntryExec=Executa %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Visualitza %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=El programa d'installaci necessita el disc segent -SelectDiskLabel2=Introduiu el disc %1 i premeu Continua.%n%nSi els fitxers d'aquest disc es poden trobar en una carpeta diferent de la indicada tot seguit, introduu-ne la ruta correcta o b premeu Explora. -PathLabel=&Ruta: -FileNotInDir2=El fitxer "%1" no s'ha pogut trobar a "%2". Introduu el disc correcte o trieu una altra carpeta. -SelectDirectoryLabel=Indiqueu on es troba el disc segent. - -; *** Installation phase messages -SetupAborted=La installaci no s'ha completat.%n%n%Resoleu el problema i executeu de nou el programa d'installaci. -AbortRetryIgnoreSelectAction=Trieu acci -AbortRetryIgnoreRetry=&Torna-ho a intentar -AbortRetryIgnoreIgnore=&Ignora l'error i continua -AbortRetryIgnoreCancel=Cancella la installaci - -; *** Installation status messages -StatusClosingApplications=Tancant aplicacions... -StatusCreateDirs=Creant carpetes... -StatusExtractFiles=Extraient fitxers... -StatusCreateIcons=Creant enllaos del programa... -StatusCreateIniEntries=Creant entrades al fitxer INI... -StatusCreateRegistryEntries=Creant entrades de registre... -StatusRegisterFiles=Registrant fitxers... -StatusSavingUninstall=Desant informaci de desinstallaci... -StatusRunProgram=Finalitzant la installaci... -StatusRestartingApplications=Reiniciant aplicacions... -StatusRollback=Desfent els canvis... - -; *** Misc. errors -ErrorInternal2=Error intern: %1 -ErrorFunctionFailedNoCode=%1 ha fallat -ErrorFunctionFailed=%1 ha fallat; codi %2 -ErrorFunctionFailedWithMessage=%1 ha fallat; codi %2.%n%3 -ErrorExecutingProgram=No es pot executar el fitxer:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Error en obrir la clau de registre:%n%1\%2 -ErrorRegCreateKey=Error en crear la clau de registre:%n%1\%2 -ErrorRegWriteKey=Error en escriure a la clau de registre:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Error en crear l'entrada INI al fitxer "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Salta't aquest fitxer (no recomanat) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignora l'error i continua (no recomanat) -SourceIsCorrupted=El fitxer d'origen est corromput -SourceDoesntExist=El fitxer d'origen "%1" no existeix -ExistingFileReadOnly2=El fitxer existent no ha pogut ser substitut perqu est marcat com a noms lectura. -ExistingFileReadOnlyRetry=&Lleveu-li l'atribut de noms lectura i torneu-ho a intentar -ExistingFileReadOnlyKeepExisting=&Mant el fitxer existent -ErrorReadingExistingDest=S'ha produt un error en llegir el fitxer: -FileExistsSelectAction=Trieu acci -FileExists2=El fitxer ja existeix. -FileExistsOverwriteExisting=&Sobreescriu el fitxer existent -FileExistsKeepExisting=&Mant el fitxer existent -FileExistsOverwriteOrKeepAll=&Fes-ho tamb per als propers conflictes -ExistingFileNewerSelectAction=Trieu acci -ExistingFileNewer2=El fitxer existent s ms nou que el que s'intenta installar. -ExistingFileNewerOverwriteExisting=&Sobreescriu el fitxer existent -ExistingFileNewerKeepExisting=&Mant el fitxer existent (recomanat) -ExistingFileNewerOverwriteOrKeepAll=&Fes-ho tamb per als propers conflictes -ErrorChangingAttr=Hi ha hagut un error en canviar els atributs del fitxer: -ErrorCreatingTemp=Hi ha hagut un error en crear un fitxer a la carpeta de destinaci: -ErrorReadingSource=Hi ha hagut un error en llegir el fitxer d'origen: -ErrorCopying=Hi ha hagut un error en copiar un fitxer: -ErrorReplacingExistingFile=Hi ha hagut un error en reemplaar el fitxer existent: -ErrorRestartReplace=Ha fallat reemplaar: -ErrorRenamingTemp=Hi ha hagut un error en reanomenar un fitxer a la carpeta de destinaci: -ErrorRegisterServer=No s'ha pogut registrar el DLL/OCX: %1 -ErrorRegSvr32Failed=Ha fallat RegSvr32 amb el codi de sortida %1 -ErrorRegisterTypeLib=No s'ha pogut registrar la biblioteca de tipus: %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Tots els usuaris -UninstallDisplayNameMarkCurrentUser=Usuari actual - -; *** Post-installation errors -ErrorOpeningReadme=Hi ha hagut un error en obrir el fitxer LLEGIUME.TXT. -ErrorRestartingComputer=El programa d'installaci no ha pogut reiniciar l'ordinador. Cal que ho feu manualment. - -; *** Uninstaller messages -UninstallNotFound=El fitxer "%1" no existeix. No es pot desinstallar. -UninstallOpenError=El fitxer "%1" no pot ser obert. No es pot desinstallar -UninstallUnsupportedVer=El fitxer de desinstallaci "%1" est en un format no reconegut per aquesta versi del desinstallador. No es pot desinstallar -UninstallUnknownEntry=S'ha trobat una entrada desconeguda (%1) al fitxer de desinstallaci. -ConfirmUninstall=Esteu segur de voler eliminar completament %1 i tots els seus components? -UninstallOnlyOnWin64=Aquest programa noms pot ser desinstallat en Windows de 64 bits. -OnlyAdminCanUninstall=Aquest programa noms pot ser desinstallat per un usuari amb privilegis d'administrador. -UninstallStatusLabel=Espereu mentre s'elimina %1 del vostre ordinador. -UninstalledAll=%1 ha estat desinstallat correctament del vostre ordinador. -UninstalledMost=Desinstallaci de %1 completada.%n%nAlguns elements no s'han pogut eliminar. Poden ser eliminats manualment. -UninstalledAndNeedsRestart=Per completar la installaci de %1, cal reiniciar el vostre ordinador.%n%nVoleu fer-ho ara? -UninstallDataCorrupted=El fitxer "%1" est corromput. No es pot desinstallar. - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Eliminar fitxer compartit? -ConfirmDeleteSharedFile2=El sistema indica que el fitxer compartit segent ja no s emprat per cap altre programa. Voleu que la desinstallaci elimini aquest fitxer?%n%nSi algun programa encara el fa servir i s eliminat, podria no funcionar correctament. Si no n'esteu segur, trieu No. Deixar el fitxer al sistema no far cap mal. -SharedFileNameLabel=Nom del fitxer: -SharedFileLocationLabel=Localitzaci: -WizardUninstalling=Estat de la desinstallaci -StatusUninstalling=Desinstallant %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installant %1. -ShutdownBlockReasonUninstallingApp=Desinstallant %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 versi %2 -AdditionalIcons=Icones addicionals: -CreateDesktopIcon=Crea una icona a l'&Escriptori -CreateQuickLaunchIcon=Crea una icona a la &Barra de tasques -ProgramOnTheWeb=%1 a Internet -UninstallProgram=Desinstalla %1 -LaunchProgram=Obre %1 -AssocFileExtension=&Associa %1 amb l'extensi de fitxer %2 -AssocingFileExtension=Associant %1 amb l'extensi de fitxer %2... -AutoStartProgramGroupDescription=Inici: -AutoStartProgram=Inicia automticament %1 -AddonHostProgramNotFound=%1 no ha pogut ser trobat a la carpeta seleccionada.%n%nVoleu continuar igualment? diff --git a/Dependencies/Inno/Languages/Corsican.isl b/Dependencies/Inno/Languages/Corsican.isl deleted file mode 100644 index 6f03bcaf..00000000 --- a/Dependencies/Inno/Languages/Corsican.isl +++ /dev/null @@ -1,399 +0,0 @@ -; *** Inno Setup version 6.1.0+ Corsican messages *** -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). - -; Created and maintained by Patriccollu di Santa Maria è Sichè -; Schedariu di traduzzione in lingua corsa da Patriccollu -; E-mail: Patrick.Santa-Maria[at]LaPoste.Net -; -; Changes: -; November 14th, 2020 - Changes to current version 6.1.0+ -; July 25th, 2020 - Update to version 6.1.0+ -; July 1st, 2020 - Update to version 6.0.6+ -; October 6th, 2019 - Update to version 6.0.3+ -; January 20th, 2019 - Update to version 6.0.0+ -; April 9th, 2016 - Changes to current version 5.5.3+ -; January 3rd, 2013 - Update to version 5.5.3+ -; August 8th, 2012 - Update to version 5.5.0+ -; September 17th, 2011 - Creation for version 5.1.11 - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=Corsu -LanguageID=$0483 -LanguageCodePage=1252 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Assistente d’installazione -SetupWindowTitle=Assistente d’installazione - %1 -UninstallAppTitle=Disinstallà -UninstallAppFullTitle=Disinstallazione di %1 - -; *** Misc. common -InformationTitle=Infurmazione -ConfirmTitle=Cunfirmà -ErrorTitle=Sbagliu - -; *** SetupLdr messages -SetupLdrStartupMessage=St’assistente hà da installà %1. Vulete cuntinuà ? -LdrCannotCreateTemp=Impussibule di creà un cartulare timpurariu. Assistente d’installazione interrottu -LdrCannotExecTemp=Impussibule d’eseguisce u schedariu in u cartulare timpurariu. Assistente d’installazione interrottu -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nSbagliu %2 : %3 -SetupFileMissing=U schedariu %1 manca in u cartulare d’installazione. Ci vole à currege u penseru o ottene una nova copia di u prugramma. -SetupFileCorrupt=I schedarii d’installazione sò alterati. Ci vole à ottene una nova copia di u prugramma. -SetupFileCorruptOrWrongVer=I schedarii d’installazione sò alterati, o sò incumpatibule cù sta versione di l’assistente. Ci vole à currege u penseru o ottene una nova copia di u prugramma. -InvalidParameter=Un parametru micca accettevule hè statu passatu in a linea di cumanda :%n%n%1 -SetupAlreadyRunning=L’assistente d’installazione hè dighjà in corsu. -WindowsVersionNotSupported=Stu prugramma ùn pò micca funziunà cù a versione di Windows installata nant’à st’urdinatore. -WindowsServicePackRequired=Stu prugramma richiede %1 Service Pack %2 o più recente. -NotOnThisPlatform=Stu prugramma ùn funzionerà micca cù %1. -OnlyOnThisPlatform=Stu prugramma deve funzionà cù %1. -OnlyOnTheseArchitectures=Stu prugramma pò solu esse installatu nant’à e versioni di Windows fatte apposta per st’architetture di prucessore :%n%n%1 -WinVersionTooLowError=Stu prugramma richiede %1 versione %2 o più recente. -WinVersionTooHighError=Stu prugramma ùn pò micca esse installatu nant’à %1 version %2 o più recente. -AdminPrivilegesRequired=Ci vole à esse cunnettu cum’è un amministratore quandu voi installate stu prugramma. -PowerUserPrivilegesRequired=Ci vole à esse cunnettu cum’è un amministratore o fà parte di u gruppu « Utilizatori cù putere » quandu voi installate stu prugramma. -SetupAppRunningError=L’assistente hà vistu chì %1 era dighjà in corsu.%n%nCi vole à chjode tutte e so finestre avà, eppò sceglie Vai per cuntinuà, o Abbandunà per compie. -UninstallAppRunningError=A disinstallazione hà vistu chì %1 era dighjà in corsu.%n%nCi vole à chjode tutte e so finestre avà, eppò sceglie Vai per cuntinuà, o Abbandunà per compie. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Selezziunà u modu d’installazione di l’assistente -PrivilegesRequiredOverrideInstruction=Selezziunà u modu d’installazione -PrivilegesRequiredOverrideText1=%1 pò esse installatu per tutti l’utilizatore (richiede i diritti d’amministratore), o solu per voi. -PrivilegesRequiredOverrideText2=%1 pò esse installatu solu per voi, o per tutti l’utilizatore (richiede i diritti d’amministratore). -PrivilegesRequiredOverrideAllUsers=Installazione per &tutti l’utilizatori -PrivilegesRequiredOverrideAllUsersRecommended=Installazione per &tutti l’utilizatori (ricumandatu) -PrivilegesRequiredOverrideCurrentUser=Installazione solu per &mè -PrivilegesRequiredOverrideCurrentUserRecommended=Installazione solu per &mè (ricumandatu) - -; *** Misc. errors -ErrorCreatingDir=L’assistente ùn hà micca pussutu creà u cartulare « %1 » -ErrorTooManyFilesInDir=Impussibule di creà un schedariu in u cartulare « %1 » perchè ellu ne cuntene troppu - -; *** Setup common messages -ExitSetupTitle=Compie l’assistente -ExitSetupMessage=L’assistente ùn hè micca compiu bè. S’è voi escite avà, u prugramma ùn serà micca installatu.%n%nPudete impiegà l’assistente torna un altra volta per compie l’installazione.%n%nCompie l’assistente ? -AboutSetupMenuItem=&Apprupositu di l’assistente… -AboutSetupTitle=Apprupositu di l’assistente -AboutSetupMessage=%1 versione %2%n%3%n%n%1 pagina d’accolta :%n%4 -AboutSetupNote= -TranslatorNote=Traduzzione in lingua corsa da Patriccollu di Santa Maria è Sichè - -; *** Buttons -ButtonBack=< &Precedente -ButtonNext=&Seguente > -ButtonInstall=&Installà -ButtonOK=Vai -ButtonCancel=Abbandunà -ButtonYes=&Iè -ButtonYesToAll=Iè per &tutti -ButtonNo=I&nnò -ButtonNoToAll=Innò per t&utti -ButtonFinish=&Piantà -ButtonBrowse=&Sfuglià… -ButtonWizardBrowse=&Sfuglià… -ButtonNewFolder=&Creà un novu cartulare - -; *** "Select Language" dialog messages -SelectLanguageTitle=Definisce a lingua di l’assistente -SelectLanguageLabel=Selezziunà a lingua à impiegà per l’installazione. - -; *** Common wizard text -ClickNext=Sceglie Seguente per cuntinuà, o Abbandunà per compie l’assistente. -BeveledLabel= -BrowseDialogTitle=Sfuglià u cartulare -BrowseDialogLabel=Selezziunà un cartulare in a lista inghjò, eppò sceglie Vai. -NewFolderName=Novu cartulare - -; *** "Welcome" wizard page -WelcomeLabel1=Benvenuta in l’assistente d’installazione di [name] -WelcomeLabel2=Quessu installerà [name/ver] nant’à l’urdinatore.%n%nHè ricumandatu di chjode tutte l’altre appiecazioni nanzu di cuntinuà. - -; *** "Password" wizard page -WizardPassword=Parolla d’entrata -PasswordLabel1=L’installazione hè prutetta da una parolla d’entrata. -PasswordLabel3=Ci vole à pruvede a parolla d’entrata, eppò sceglie Seguente per cuntinuà. E parolle d’entrata ponu cuntene maiuscule è minuscule. -PasswordEditLabel=&Parolla d’entrata : -IncorrectPassword=A parolla d’entrata pruvista ùn hè micca curretta. Ci vole à pruvà torna. - -; *** "License Agreement" wizard page -WizardLicense=Cuntrattu di licenza -LicenseLabel=Ci vole à leghje l’infurmazione impurtante chì seguiteghja nanzu di cuntinuà. -LicenseLabel3=Ci vole à leghje u cuntrattu di licenza chì seguiteghja. Duvete accettà i termini di stu cuntrattu nanzu di cuntinuà l’installazione. -LicenseAccepted=Sò d’&accunsentu cù u cuntrattu -LicenseNotAccepted=Ùn sò &micca d’accunsentu cù u cuntrattu - -; *** "Information" wizard pages -WizardInfoBefore=Infurmazione -InfoBeforeLabel=Ci vole à leghje l’infurmazione impurtante chì seguiteghja nanzu di cuntinuà. -InfoBeforeClickLabel=Quandu site prontu à cuntinuà cù l’assistente, sciglite Seguente. -WizardInfoAfter=Infurmazione -InfoAfterLabel=Ci vole à leghje l’infurmazione impurtante chì seguiteghja nanzu di cuntinuà. -InfoAfterClickLabel=Quandu site prontu à cuntinuà cù l’assistente, sciglite Seguente. - -; *** "User Information" wizard page -WizardUserInfo=Infurmazioni di l’utilizatore -UserInfoDesc=Ci vole à scrive e vostre infurmazioni. -UserInfoName=&Nome d’utilizatore : -UserInfoOrg=&Urganismu : -UserInfoSerial=&Numeru di Seria : -UserInfoNameRequired=Ci vole à scrive un nome. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Selezziunà u locu di destinazione -SelectDirDesc=Induve [name] deve esse installatu ? -SelectDirLabel3=L’assistente installerà [name] in stu cartulare. -SelectDirBrowseLabel=Per cuntinuà, sceglie Seguente. S’è voi preferisce selezziunà un altru cartulare, sciglite Sfuglià. -DiskSpaceGBLabel=Hè richiestu omancu [gb] Go di spaziu liberu di discu. -DiskSpaceMBLabel=Hè richiestu omancu [mb] Mo di spaziu liberu di discu. -CannotInstallToNetworkDrive=L’assistente ùn pò micca installà nant’à un discu di a reta. -CannotInstallToUNCPath=L’assistente ùn pò micca installà in un chjassu UNC. -InvalidPath=Ci vole à scrive un chjassu cumplettu cù a lettera di u lettore ; per indettu :%n%nC:\APP%n%no un chjassu UNC in a forma :%n%n\\servitore\spartu -InvalidDrive=U lettore o u chjassu UNC spartu ùn esiste micca o ùn hè micca accessibule. Ci vole à selezziunane un altru. -DiskSpaceWarningTitle=Ùn basta u spaziu discu -DiskSpaceWarning=L’assistente richiede omancu %1 Ko di spaziu liberu per installà, ma u lettore selezziunatu hà solu %2 Ko dispunibule.%n%nVulete cuntinuà quantunque ? -DirNameTooLong=U nome di cartulare o u chjassu hè troppu longu. -InvalidDirName=U nome di cartulare ùn hè micca accettevule. -BadDirName32=I nomi di cartulare ùn ponu micca cuntene sti caratteri :%n%n%1 -DirExistsTitle=Cartulare esistente -DirExists=U cartulare :%n%n%1%n%nesiste dighjà. Vulete installà in stu cartulare quantunque ? -DirDoesntExistTitle=Cartulare inesistente -DirDoesntExist=U cartulare :%n%n%1%n%nùn esiste micca. Vulete chì stu cartulare sia creatu ? - -; *** "Select Components" wizard page -WizardSelectComponents=Selezzione di cumpunenti -SelectComponentsDesc=Chì cumpunenti devenu esse installati ? -SelectComponentsLabel2=Selezziunà i cumpunenti à installà ; deselezziunà quelli ch’ùn devenu micca esse installati. Sceglie Seguente quandu site prontu à cuntinuà. -FullInstallation=Installazione sana -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Installazione cumpatta -CustomInstallation=Installazione persunalizata -NoUninstallWarningTitle=Cumpunenti esistenti -NoUninstallWarning=L’assistente hà vistu chì sti cumpunenti sò dighjà installati nant’à l’urdinatore :%n%n%1%n%nDeselezziunà sti cumpunenti ùn i disinstallerà micca.%n%nVulete cuntinuà quantunque ? -ComponentSize1=%1 Ko -ComponentSize2=%1 Mo -ComponentsDiskSpaceGBLabel=A selezzione attuale richiede omancu [gb] Go di spaziu liberu nant’à u discu. -ComponentsDiskSpaceMBLabel=A selezzione attuale richiede omancu [mb] Mo di spaziu liberu nant’à u discu. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Selezziunà trattamenti addizziunali -SelectTasksDesc=Chì trattamenti addizziunali vulete fà ? -SelectTasksLabel2=Selezziunà i trattamenti addizziunali chì l’assistente deve fà durante l’installazione di [name], eppò sceglie Seguente. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Selezzione di u cartulare di u listinu « Démarrer » -SelectStartMenuFolderDesc=Induve l’assistente deve piazzà l’accurtatoghji di u prugramma ? -SelectStartMenuFolderLabel3=L’assistente piazzerà l’accurtatoghji di u prugramma in stu cartulare di u listinu « Démarrer ». -SelectStartMenuFolderBrowseLabel=Per cuntinuà, sceglie Seguente. S’è voi preferisce selezziunà un altru cartulare, sciglite Sfuglià. -MustEnterGroupName=Ci vole à scrive un nome di cartulare. -GroupNameTooLong=U nome di cartulare o u chjassu hè troppu longu. -InvalidGroupName=U nome di cartulare ùn hè micca accettevule. -BadGroupName=U nome di u cartulare ùn pò micca cuntene alcunu di sti caratteri :%n%n%1 -NoProgramGroupCheck2=Ùn creà &micca di cartulare in u listinu « Démarrer » - -; *** "Ready to Install" wizard page -WizardReady=Prontu à Installà -ReadyLabel1=Avà l’assistente hè prontu à principià l’installazione di [name] nant’à l’urdinatore. -ReadyLabel2a=Sceglie Installà per cuntinuà l’installazione, o nant’à Precedente per rivede o cambià qualchì preferenza. -ReadyLabel2b=Sceglie Installà per cuntinuà l’installazione. -ReadyMemoUserInfo=Infurmazioni di l’utilizatore : -ReadyMemoDir=Cartulare d’installazione : -ReadyMemoType=Tipu d’installazione : -ReadyMemoComponents=Cumpunenti selezziunati : -ReadyMemoGroup=Cartulare di u listinu « Démarrer » : -ReadyMemoTasks=Trattamenti addizziunali : - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Scaricamentu di i schedarii addiziunali… -ButtonStopDownload=&Piantà u scaricamentu -StopDownload=Site sicuru di vulè piantà u scaricamentu ? -ErrorDownloadAborted=Scaricamentu interrottu -ErrorDownloadFailed=Scaricamentu fiascu : %1 %2 -ErrorDownloadSizeFailed=Fiascu per ottene a dimensione : %1 %2 -ErrorFileHash1=Fiascu di u tazzeghju di u schedariu : %1 -ErrorFileHash2=Tazzeghju di u schedariu inaccettevule : aspettatu %1, trovu %2 -ErrorProgress=Prugressione inaccettevule : %1 di %2 -ErrorFileSize=Dimensione di u schedariu inaccettevule : aspettatu %1, trovu %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Preparazione di l’installazione -PreparingDesc=L’assistente appronta l’installazione di [name] nant’à l’urdinatore. -PreviousInstallNotCompleted=L’installazione o a cacciatura di un prugramma precedente ùn s’hè micca compia bè. Ci vulerà à ridimarrà l’urdinatore per compie st’installazione.%n%nDopu, ci vulerà à rilancià l’assistente per compie l’installazione di [name]. -CannotContinue=L’assistente ùn pò micca cuntinuà. Sceglie Abbandunà per esce. -ApplicationsFound=St’appiecazioni impieganu schedarii chì devenu esse mudificati da l’assistente. Hè ricumandatu di permette à l’assistente di chjode autumaticamente st’appiecazioni. -ApplicationsFound2=St’appiecazioni impieganu schedarii chì devenu esse mudificati da l’assistente. Hè ricumandatu di permette à l’assistente di chjode autumaticamente st’appiecazioni. S’è l’installazione si compie bè, l’assistente pruverà di rilancià l’appiecazioni. -CloseApplications=Chjode &autumaticamente l’appiecazioni -DontCloseApplications=Ùn chjode &micca l’appiecazioni -ErrorCloseApplications=L’assistente ùn hà micca pussutu chjode autumaticamente tutti l’appiecazioni. Nanzu di cuntinuà, hè ricumandatu di chjode tutti l’appiecazioni chì impieganu schedarii chì devenu esse mudificati da l’assistente durante l’installazione. -PrepareToInstallNeedsRestart=L’assistente deve ridimarrà l’urdinatore. Dopu, ci vulerà à rilancià l’assistente per compie l’installazione di [name].%n%nVulete ridimarrà l’urdinatore subitu ? - -; *** "Installing" wizard page -WizardInstalling=Installazione in corsu -InstallingLabel=Ci vole à aspettà durante l’installazione di [name] nant’à l’urdinatore. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Fine di l’installazione di [name] -FinishedLabelNoIcons=L’assistente hà compiu l’installazione di [name] nant’à l’urdinatore. -FinishedLabel=L’assistente hà compiu l’installazione di [name] nant’à l’urdinatore. L’appiecazione pò esse lanciata selezziunendu l’accurtatoghji installati. -ClickFinish=Sceglie Piantà per compie l’assistente. -FinishedRestartLabel=Per compie l’installazione di [name], l’assistente deve ridimarrà l’urdinatore. Vulete ridimarrà l’urdinatore subitu ? -FinishedRestartMessage=Per compie l’installazione di [name], l’assistente deve ridimarrà l’urdinatore.%n%nVulete ridimarrà l’urdinatore subitu ? -ShowReadmeCheck=Iè, vogliu leghje u schedariu LISEZMOI o README -YesRadio=&Iè, ridimarrà l’urdinatore subitu -NoRadio=I&nnò, preferiscu ridimarrà l’urdinatore dopu -; used for example as 'Run MyProg.exe' -RunEntryExec=Eseguisce %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Fighjà %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=L’assistente hà bisogniu di u discu seguente -SelectDiskLabel2=Mette u discu %1 è sceglie Vai.%n%nS’è i schedarii di stu discu si trovanu in un’altru cartulare chì quellu indicatu inghjò, scrive u chjassu currettu o sceglie Sfuglià. -PathLabel=&Chjassu : -FileNotInDir2=U schedariu « %1 » ùn si truva micca in « %2 ». Mette u discu curretu o sceglie un’altru cartulare. -SelectDirectoryLabel=Ci vole à specificà induve si trova u discu seguente. - -; *** Installation phase messages -SetupAborted=L’installazione ùn s’hè micca compia bè.%n%nCi vole à currege u penseru è eseguisce l’assistente torna. -AbortRetryIgnoreSelectAction=Selezziunate un’azzione -AbortRetryIgnoreRetry=&Pruvà torna -AbortRetryIgnoreIgnore=&Ignurà u sbagliu è cuntinuà -AbortRetryIgnoreCancel=Abbandunà l’installazione - -; *** Installation status messages -StatusClosingApplications=Chjusura di l’appiecazioni… -StatusCreateDirs=Creazione di i cartulari… -StatusExtractFiles=Estrazzione di i schedarii… -StatusCreateIcons=Creazione di l’accurtatoghji… -StatusCreateIniEntries=Creazione di l’elementi INI… -StatusCreateRegistryEntries=Creazione di l’elementi di u registru… -StatusRegisterFiles=Arregistramentu di i schedarii… -StatusSavingUninstall=Cunservazione di l’informazioni di disinstallazione… -StatusRunProgram=Cumpiera di l’installazione… -StatusRestartingApplications=Relanciu di l’appiecazioni… -StatusRollback=Annulazione di i mudificazioni… - -; *** Misc. errors -ErrorInternal2=Sbagliu internu : %1 -ErrorFunctionFailedNoCode=Fiascu di %1 -ErrorFunctionFailed=Fiascu di %1 ; codice %2 -ErrorFunctionFailedWithMessage=Fiascu di %1 ; codice %2.%n%3 -ErrorExecutingProgram=Impussibule d’eseguisce u schedariu :%n%1 - -; *** Registry errors -ErrorRegOpenKey=Sbagliu durante l’apertura di a chjave di registru :%n%1\%2 -ErrorRegCreateKey=Sbagliu durante a creazione di a chjave di registru :%n%1\%2 -ErrorRegWriteKey=Sbagliu durante a scrittura di a chjave di registru :%n%1\%2 - -; *** INI errors -ErrorIniEntry=Sbagliu durante a creazione di l’elementu INI in u schedariu « %1 ». - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=Ignurà stu &schedariu (micca ricumandatu) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignurà u sbagliu è cuntinuà (micca ricumandatu) -SourceIsCorrupted=U schedariu d’urigine hè alteratu -SourceDoesntExist=U schedariu d’urigine « %1 » ùn esiste micca -ExistingFileReadOnly2=U schedariu esistente hà un attributu di lettura-sola è ùn pò micca esse rimpiazzatu. -ExistingFileReadOnlyRetry=&Caccià l’attributu di lettura-sola è pruvà torna -ExistingFileReadOnlyKeepExisting=Cunservà u schedariu &esistente -ErrorReadingExistingDest=Un sbagliu hè accadutu pruvendu di leghje u schedariu esistente : -FileExistsSelectAction=Selezziunate un’azzione -FileExists2=U schedariu esiste dighjà. -FileExistsOverwriteExisting=&Rimpiazzà u schedariu chì esiste -FileExistsKeepExisting=Cunservà u schedariu &esistente -FileExistsOverwriteOrKeepAll=&Fà què per l’altri cunflitti -ExistingFileNewerSelectAction=Selezziunate un’azzione -ExistingFileNewer2=U schedariu esistente hè più recente chì quellu chì l’assistente prova d’installà. -ExistingFileNewerOverwriteExisting=&Rimpiazzà u schedariu chì esiste -ExistingFileNewerKeepExisting=Cunservà u schedariu &esistente (ricumandatu) -ExistingFileNewerOverwriteOrKeepAll=&Fà què per l’altri cunflitti -ErrorChangingAttr=Un sbagliu hè accadutu pruvendu di cambià l’attributi di u schedariu esistente : -ErrorCreatingTemp=Un sbagliu hè accadutu pruvendu di creà un schedariu in u cartulare di destinazione : -ErrorReadingSource=Un sbagliu hè accadutu pruvendu di leghje u schedariu d’urigine : -ErrorCopying=Un sbagliu hè accadutu pruvendu di cupià un schedariu : -ErrorReplacingExistingFile=Un sbagliu hè accadutu pruvendu di rimpiazzà u schedariu esistente : -ErrorRestartReplace=Fiascu di Rimpiazzamentu di schedariu à u riavviu di l’urdinatore : -ErrorRenamingTemp=Un sbagliu hè accadutu pruvendu di rinuminà un schedariu in u cartulare di destinazione : -ErrorRegisterServer=Impussibule d’arregistrà a bibliuteca DLL/OCX : %1 -ErrorRegSvr32Failed=Fiascu di RegSvr32 cù codice d’esciuta %1 -ErrorRegisterTypeLib=Impussibule d’arregistrà a bibliuteca di tipu : %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Tutti l’utilizatori -UninstallDisplayNameMarkCurrentUser=L’utilizatore attuale - -; *** Post-installation errors -ErrorOpeningReadme=Un sbagliu hè accadutu pruvendu d’apre u schedariu LISEZMOI o README. -ErrorRestartingComputer=L’assistente ùn hà micca pussutu ridimarrà l’urdinatore. Ci vole à fallu manualmente. - -; *** Uninstaller messages -UninstallNotFound=U schedariu « %1 » ùn esiste micca. Impussibule di disinstallà. -UninstallOpenError=U schedariu« %1 » ùn pò micca esse apertu. Impussibule di disinstallà -UninstallUnsupportedVer=U ghjurnale di disinstallazione « %1 » hè in una forma scunnisciuta da sta versione di l’assistente di disinstallazione. Impussibule di disinstallà -UninstallUnknownEntry=Un elementu scunisciutu (%1) hè statu trovu in u ghjurnale di disinstallazione -ConfirmUninstall=Site sicuru di vulè caccià cumpletamente %1 è tutti i so cumpunenti ? -UninstallOnlyOnWin64=St’appiecazione pò esse disinstallata solu cù una versione 64-bit di Windows. -OnlyAdminCanUninstall=St’appiecazione pò esse disinstallata solu da un utilizatore di u gruppu d’amministratori. -UninstallStatusLabel=Ci vole à aspettà chì %1 sia cacciatu di l’urdinatore. -UninstalledAll=%1 hè statu cacciatu bè da l’urdinatore. -UninstalledMost=A disinstallazione di %1 hè compia.%n%nQualchì elementu ùn pò micca esse cacciatu. Ci vole à cacciallu manualmente. -UninstalledAndNeedsRestart=Per compie a disinstallazione di %1, l’urdinatore deve esse ridimarratu.%n%nVulete ridimarrà l’urdinatore subitu ? -UninstallDataCorrupted=U schedariu « %1 » hè alteratu. Impussibule di disinstallà - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Caccià i schedarii sparti ? -ConfirmDeleteSharedFile2=U sistema indicheghja chì u schedariu spartu ùn hè più impiegatu da nisunu prugramma. Vulete chì a disinstallazione cacci stu schedariu spartu ?%n%nS’è qualchì prugramma impiegheghja sempre stu schedariu è ch’ellu hè cacciatu, quellu prugramma ùn puderà funziunà currettamente. S’è ùn site micca sicuru, sceglie Innò. Lascià stu schedariu nant’à u sistema ùn pò micca pruduce danni. -SharedFileNameLabel=Nome di schedariu : -SharedFileLocationLabel=Lucalizazione : -WizardUninstalling=Statu di disinstallazione -StatusUninstalling=Disinstallazione di %1… - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installazione di %1. -ShutdownBlockReasonUninstallingApp=Disinstallazione di %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 versione %2 -AdditionalIcons=Accurtatoghji addizziunali : -CreateDesktopIcon=Creà un accurtatoghju nant’à u &scagnu -CreateQuickLaunchIcon=Creà un accurtatoghju nant’à a barra di &lanciu prontu -ProgramOnTheWeb=%1 nant’à u Web -UninstallProgram=Disinstallà %1 -LaunchProgram=Lancià %1 -AssocFileExtension=&Assucià %1 cù l’estensione di schedariu %2 -AssocingFileExtension=Associu di %1 cù l’estensione di schedariu %2… -AutoStartProgramGroupDescription=Lanciu autumaticu : -AutoStartProgram=Lanciu autumaticu di %1 -AddonHostProgramNotFound=Impussibule di truvà %1 in u cartulare selezziunatu.%n%nVulete cuntinuà l’installazione quantunque ? diff --git a/Dependencies/Inno/Languages/Czech.isl b/Dependencies/Inno/Languages/Czech.isl deleted file mode 100644 index 45c7955a..00000000 --- a/Dependencies/Inno/Languages/Czech.isl +++ /dev/null @@ -1,377 +0,0 @@ -; ******************************************************* -; *** *** -; *** Inno Setup version 6.1.0+ Czech messages *** -; *** *** -; *** Original Author: *** -; *** *** -; *** Ivo Bauer (bauer@ozm.cz) *** -; *** *** -; *** Contributors: *** -; *** *** -; *** Lubos Stanek (lubek@users.sourceforge.net) *** -; *** Vitezslav Svejdar (vitezslav.svejdar@cuni.cz) *** -; *** *** -; ******************************************************* - -[LangOptions] -LanguageName=<010C>e<0161>tina -LanguageID=$0405 -LanguageCodePage=1250 - -[Messages] - -; *** Application titles -SetupAppTitle=Prvodce instalac -SetupWindowTitle=Prvodce instalac - %1 -UninstallAppTitle=Prvodce odinstalac -UninstallAppFullTitle=Prvodce odinstalac - %1 - -; *** Misc. common -InformationTitle=Informace -ConfirmTitle=Potvrzen -ErrorTitle=Chyba - -; *** SetupLdr messages -SetupLdrStartupMessage=Vt Vs prvodce instalac produktu %1. Chcete pokraovat? -LdrCannotCreateTemp=Nelze vytvoit doasn soubor. Prvodce instalac bude ukonen -LdrCannotExecTemp=Nelze spustit soubor v doasn sloce. Prvodce instalac bude ukonen -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nChyba %2: %3 -SetupFileMissing=Instalan sloka neobsahuje soubor %1. Opravte prosm tuto chybu nebo si opatete novou kopii tohoto produktu. -SetupFileCorrupt=Soubory prvodce instalac jsou pokozeny. Opatete si prosm novou kopii tohoto produktu. -SetupFileCorruptOrWrongVer=Soubory prvodce instalac jsou pokozeny nebo se nesluuj s touto verz prvodce instalac. Opravte prosm tuto chybu nebo si opatete novou kopii tohoto produktu. -InvalidParameter=Pkazov dka obsahuje neplatn parametr:%n%n%1 -SetupAlreadyRunning=Prvodce instalac je ji sputn. -WindowsVersionNotSupported=Tento produkt nepodporuje verzi MS Windows, kter b na Vaem potai. -WindowsServicePackRequired=Tento produkt vyaduje %1 Service Pack %2 nebo vy. -NotOnThisPlatform=Tento produkt nelze spustit ve %1. -OnlyOnThisPlatform=Tento produkt mus bt sputn ve %1. -OnlyOnTheseArchitectures=Tento produkt lze nainstalovat pouze ve verzch MS Windows s podporou architektury procesor:%n%n%1 -WinVersionTooLowError=Tento produkt vyaduje %1 verzi %2 nebo vy. -WinVersionTooHighError=Tento produkt nelze nainstalovat ve %1 verzi %2 nebo vy. -AdminPrivilegesRequired=K instalaci tohoto produktu muste bt pihleni s prvy administrtora. -PowerUserPrivilegesRequired=K instalaci tohoto produktu muste bt pihleni s prvy administrtora nebo lena skupiny Power Users. -SetupAppRunningError=Prvodce instalac zjistil, e produkt %1 je nyn sputn.%n%nZavete prosm vechny instance tohoto produktu a pak pokraujte klepnutm na tlatko OK, nebo ukonete instalaci tlatkem Storno. -UninstallAppRunningError=Prvodce odinstalac zjistil, e produkt %1 je nyn sputn.%n%nZavete prosm vechny instance tohoto produktu a pak pokraujte klepnutm na tlatko OK, nebo ukonete odinstalaci tlatkem Storno. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Vbr reimu prvodce instalac -PrivilegesRequiredOverrideInstruction=Zvolte reim instalace -PrivilegesRequiredOverrideText1=Produkt %1 lze nainstalovat pro vechny uivatele (muste bt pihleni s prvy administrtora), nebo pouze pro Vs. -PrivilegesRequiredOverrideText2=Produkt %1 lze nainstalovat pouze pro Vs, nebo pro vechny uivatele (muste bt pihleni s prvy administrtora). -PrivilegesRequiredOverrideAllUsers=Nainstalovat pro &vechny uivatele -PrivilegesRequiredOverrideAllUsersRecommended=Nainstalovat pro &vechny uivatele (doporuuje se) -PrivilegesRequiredOverrideCurrentUser=Nainstalovat pouze pro &m -PrivilegesRequiredOverrideCurrentUserRecommended=Nainstalovat pouze pro &m (doporuuje se) - -; *** Misc. errors -ErrorCreatingDir=Prvodci instalac se nepodailo vytvoit sloku "%1" -ErrorTooManyFilesInDir=Nelze vytvoit soubor ve sloce "%1", protoe tato sloka ji obsahuje pli mnoho soubor - -; *** Setup common messages -ExitSetupTitle=Ukonit prvodce instalac -ExitSetupMessage=Instalace nebyla zcela dokonena. Jestlie nyn prvodce instalac ukonte, produkt nebude nainstalovn.%n%nPrvodce instalac mete znovu spustit kdykoliv jindy a instalaci dokonit.%n%nChcete prvodce instalac ukonit? -AboutSetupMenuItem=&O prvodci instalac... -AboutSetupTitle=O prvodci instalac -AboutSetupMessage=%1 verze %2%n%3%n%n%1 domovsk strnka:%n%4 -AboutSetupNote= -TranslatorNote=Czech translation maintained by Ivo Bauer (bauer@ozm.cz), Lubos Stanek (lubek@users.sourceforge.net) and Vitezslav Svejdar (vitezslav.svejdar@cuni.cz) - -; *** Buttons -ButtonBack=< &Zpt -ButtonNext=&Dal > -ButtonInstall=&Instalovat -ButtonOK=OK -ButtonCancel=Storno -ButtonYes=&Ano -ButtonYesToAll=Ano &vem -ButtonNo=&Ne -ButtonNoToAll=N&e vem -ButtonFinish=&Dokonit -ButtonBrowse=&Prochzet... -ButtonWizardBrowse=&Prochzet... -ButtonNewFolder=&Vytvoit novou sloku - -; *** "Select Language" dialog messages -SelectLanguageTitle=Vbr jazyka prvodce instalac -SelectLanguageLabel=Zvolte jazyk, kter se m pout bhem instalace. - -; *** Common wizard text -ClickNext=Pokraujte klepnutm na tlatko Dal, nebo ukonete prvodce instalac tlatkem Storno. -BeveledLabel= -BrowseDialogTitle=Vyhledat sloku -BrowseDialogLabel=Z ne uvedenho seznamu vyberte sloku a klepnte na tlatko OK. -NewFolderName=Nov sloka - -; *** "Welcome" wizard page -WelcomeLabel1=Vt Vs prvodce instalac produktu [name]. -WelcomeLabel2=Produkt [name/ver] bude nainstalovn na V pota.%n%nDve ne budete pokraovat, doporuuje se zavt veker sputn aplikace. - -; *** "Password" wizard page -WizardPassword=Heslo -PasswordLabel1=Tato instalace je chrnna heslem. -PasswordLabel3=Zadejte prosm heslo a pokraujte klepnutm na tlatko Dal. Pi zadvn hesla rozliujte mal a velk psmena. -PasswordEditLabel=&Heslo: -IncorrectPassword=Zadan heslo nen sprvn. Zkuste to prosm znovu. - -; *** "License Agreement" wizard page -WizardLicense=Licenn smlouva -LicenseLabel=Dve ne budete pokraovat, pette si prosm pozorn nsledujc dleit informace. -LicenseLabel3=Pette si prosm tuto licenn smlouvu. Muste souhlasit s podmnkami tto smlouvy, aby instalace mohla pokraovat. -LicenseAccepted=&Souhlasm s podmnkami licenn smlouvy -LicenseNotAccepted=&Nesouhlasm s podmnkami licenn smlouvy - -; *** "Information" wizard pages -WizardInfoBefore=Informace -InfoBeforeLabel=Dve ne budete pokraovat, pette si prosm pozorn nsledujc dleit informace. -InfoBeforeClickLabel=Pokraujte v instalaci klepnutm na tlatko Dal. -WizardInfoAfter=Informace -InfoAfterLabel=Dve ne budete pokraovat, pette si prosm pozorn nsledujc dleit informace. -InfoAfterClickLabel=Pokraujte v instalaci klepnutm na tlatko Dal. - -; *** "User Information" wizard page -WizardUserInfo=Informace o uivateli -UserInfoDesc=Zadejte prosm poadovan daje. -UserInfoName=&Uivatelsk jmno: -UserInfoOrg=&Spolenost: -UserInfoSerial=S&riov slo: -UserInfoNameRequired=Muste zadat uivatelsk jmno. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Zvolte clov umstn -SelectDirDesc=Kam m bt produkt [name] nainstalovn? -SelectDirLabel3=Prvodce nainstaluje produkt [name] do nsledujc sloky. -SelectDirBrowseLabel=Pokraujte klepnutm na tlatko Dal. Chcete-li zvolit jinou sloku, klepnte na tlatko Prochzet. -DiskSpaceGBLabel=Instalace vyaduje nejmn [gb] MB volnho msta na disku. -DiskSpaceMBLabel=Instalace vyaduje nejmn [mb] MB volnho msta na disku. -CannotInstallToNetworkDrive=Prvodce instalac neme instalovat do sov jednotky. -CannotInstallToUNCPath=Prvodce instalac neme instalovat do cesty UNC. -InvalidPath=Muste zadat plnou cestu vetn psmene jednotky; napklad:%n%nC:\Aplikace%n%nnebo cestu UNC ve tvaru:%n%n\\server\sdlen sloka -InvalidDrive=Vmi zvolen jednotka nebo cesta UNC neexistuje nebo nen dostupn. Zvolte prosm jin umstn. -DiskSpaceWarningTitle=Nedostatek msta na disku -DiskSpaceWarning=Prvodce instalac vyaduje nejmn %1 KB volnho msta pro instalaci produktu, ale na zvolen jednotce je dostupnch pouze %2 KB.%n%nChcete pesto pokraovat? -DirNameTooLong=Nzev sloky nebo cesta jsou pli dlouh. -InvalidDirName=Nzev sloky nen platn. -BadDirName32=Nzev sloky neme obsahovat dn z nsledujcch znak:%n%n%1 -DirExistsTitle=Sloka existuje -DirExists=Sloka:%n%n%1%n%nji existuje. M se pesto instalovat do tto sloky? -DirDoesntExistTitle=Sloka neexistuje -DirDoesntExist=Sloka:%n%n%1%n%nneexistuje. M bt tato sloka vytvoena? - -; *** "Select Components" wizard page -WizardSelectComponents=Zvolte sousti -SelectComponentsDesc=Jak sousti maj bt nainstalovny? -SelectComponentsLabel2=Zakrtnte sousti, kter maj bt nainstalovny; sousti, kter se nemaj instalovat, ponechte nezakrtnut. Pokraujte klepnutm na tlatko Dal. -FullInstallation=pln instalace -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Kompaktn instalace -CustomInstallation=Voliteln instalace -NoUninstallWarningTitle=Sousti existuj -NoUninstallWarning=Prvodce instalac zjistil, e nsledujc sousti jsou ji na Vaem potai nainstalovny:%n%n%1%n%nNezahrnete-li tyto sousti do vbru, nebudou nyn odinstalovny.%n%nChcete pesto pokraovat? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Vybran sousti vyaduj nejmn [gb] MB msta na disku. -ComponentsDiskSpaceMBLabel=Vybran sousti vyaduj nejmn [mb] MB msta na disku. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Zvolte dal lohy -SelectTasksDesc=Kter dal lohy maj bt provedeny? -SelectTasksLabel2=Zvolte dal lohy, kter maj bt provedeny v prbhu instalace produktu [name], a pak pokraujte klepnutm na tlatko Dal. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Vyberte sloku v nabdce Start -SelectStartMenuFolderDesc=Kam m prvodce instalac umstit zstupce aplikace? -SelectStartMenuFolderLabel3=Prvodce instalac vytvo zstupce aplikace v nsledujc sloce nabdky Start. -SelectStartMenuFolderBrowseLabel=Pokraujte klepnutm na tlatko Dal. Chcete-li zvolit jinou sloku, klepnte na tlatko Prochzet. -MustEnterGroupName=Muste zadat nzev sloky. -GroupNameTooLong=Nzev sloky nebo cesta jsou pli dlouh. -InvalidGroupName=Nzev sloky nen platn. -BadGroupName=Nzev sloky neme obsahovat dn z nsledujcch znak:%n%n%1 -NoProgramGroupCheck2=&Nevytvet sloku v nabdce Start - -; *** "Ready to Install" wizard page -WizardReady=Instalace je pipravena -ReadyLabel1=Prvodce instalac je nyn pipraven nainstalovat produkt [name] na V pota. -ReadyLabel2a=Pokraujte v instalaci klepnutm na tlatko Instalovat. Pejete-li si zmnit nkter nastaven instalace, klepnte na tlatko Zpt. -ReadyLabel2b=Pokraujte v instalaci klepnutm na tlatko Instalovat. -ReadyMemoUserInfo=Informace o uivateli: -ReadyMemoDir=Clov umstn: -ReadyMemoType=Typ instalace: -ReadyMemoComponents=Vybran sousti: -ReadyMemoGroup=Sloka v nabdce Start: -ReadyMemoTasks=Dal lohy: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Stahuj se dal soubory... -ButtonStopDownload=&Zastavit stahovn -StopDownload=Urit chcete stahovn zastavit? -ErrorDownloadAborted=Stahovn perueno -ErrorDownloadFailed=Stahovn selhalo: %1 %2 -ErrorDownloadSizeFailed=Nepodailo se zjistit velikost: %1 %2 -ErrorFileHash1=Nepodailo se urit kontroln souet souboru: %1 -ErrorFileHash2=Neplatn kontroln souet souboru: oekvno %1, nalezeno %2 -ErrorProgress=Neplatn prbh: %1 of %2 -ErrorFileSize=Neplatn velikost souboru: oekvno %1, nalezeno %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Pprava k instalaci -PreparingDesc=Prvodce instalac pipravuje instalaci produktu [name] na V pota. -PreviousInstallNotCompleted=Instalace/odinstalace pedchozho produktu nebyla zcela dokonena. Aby mohla bt dokonena, muste restartovat V pota.%n%nPo restartovn Vaeho potae spuste znovu prvodce instalac, aby bylo mon dokonit instalaci produktu [name]. -CannotContinue=Prvodce instalac neme pokraovat. Ukonete prosm prvodce instalac klepnutm na tlatko Storno. -ApplicationsFound=Nsledujc aplikace pistupuj k souborm, kter je teba bhem instalace aktualizovat. Doporuuje se povolit prvodci instalac, aby tyto aplikace automaticky zavel. -ApplicationsFound2=Nsledujc aplikace pistupuj k souborm, kter je teba bhem instalace aktualizovat. Doporuuje se povolit prvodci instalac, aby tyto aplikace automaticky zavel. Po dokonen instalace se prvodce instalac pokus aplikace restartovat. -CloseApplications=&Zavt aplikace automaticky -DontCloseApplications=&Nezavrat aplikace -ErrorCloseApplications=Prvodci instalac se nepodailo automaticky zavt vechny aplikace. Dve ne budete pokraovat, doporuuje se zavt veker aplikace pistupujc k souborm, kter je teba bhem instalace aktualizovat. -PrepareToInstallNeedsRestart=Prvodce instalac mus restartovat V pota. Po restartovn Vaeho potae spuste prvodce instalac znovu, aby bylo mon dokonit instalaci produktu [name].%n%nChcete jej restartovat nyn? - -; *** "Installing" wizard page -WizardInstalling=Instalovn -InstallingLabel=ekejte prosm, dokud prvodce instalac nedokon instalaci produktu [name] na V pota. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Dokonuje se instalace produktu [name] -FinishedLabelNoIcons=Prvodce instalac dokonil instalaci produktu [name] na V pota. -FinishedLabel=Prvodce instalac dokonil instalaci produktu [name] na V pota. Produkt lze spustit pomoc nainstalovanch zstupc. -ClickFinish=Ukonete prvodce instalac klepnutm na tlatko Dokonit. -FinishedRestartLabel=K dokonen instalace produktu [name] je nezbytn, aby prvodce instalac restartoval V pota. Chcete jej restartovat nyn? -FinishedRestartMessage=K dokonen instalace produktu [name] je nezbytn, aby prvodce instalac restartoval V pota.%n%nChcete jej restartovat nyn? -ShowReadmeCheck=Ano, chci zobrazit dokument "TIMNE" -YesRadio=&Ano, chci nyn restartovat pota -NoRadio=&Ne, pota restartuji pozdji -; used for example as 'Run MyProg.exe' -RunEntryExec=Spustit %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Zobrazit %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Prvodce instalac vyaduje dal disk -SelectDiskLabel2=Vlote prosm disk %1 a klepnte na tlatko OK.%n%nPokud se soubory na tomto disku nachzej v jin sloce ne v t, kter je zobrazena ne, pak zadejte sprvnou cestu nebo ji zvolte klepnutm na tlatko Prochzet. -PathLabel=&Cesta: -FileNotInDir2=Soubor "%1" nelze najt v "%2". Vlote prosm sprvn disk nebo zvolte jinou sloku. -SelectDirectoryLabel=Specifikujte prosm umstn dalho disku. - -; *** Installation phase messages -SetupAborted=Instalace nebyla zcela dokonena.%n%nOpravte prosm chybu a spuste prvodce instalac znovu. -AbortRetryIgnoreSelectAction=Zvolte akci -AbortRetryIgnoreRetry=&Zopakovat akci -AbortRetryIgnoreIgnore=&Ignorovat chybu a pokraovat -AbortRetryIgnoreCancel=Zruit instalaci - -; *** Installation status messages -StatusClosingApplications=Zavraj se aplikace... -StatusCreateDirs=Vytvej se sloky... -StatusExtractFiles=Extrahuj se soubory... -StatusCreateIcons=Vytvej se zstupci... -StatusCreateIniEntries=Vytvej se zznamy v inicializanch souborech... -StatusCreateRegistryEntries=Vytvej se zznamy v systmovm registru... -StatusRegisterFiles=Registruj se soubory... -StatusSavingUninstall=Ukldaj se informace pro odinstalaci produktu... -StatusRunProgram=Dokonuje se instalace... -StatusRestartingApplications=Restartuj se aplikace... -StatusRollback=Proveden zmny se vracej zpt... - -; *** Misc. errors -ErrorInternal2=Intern chyba: %1 -ErrorFunctionFailedNoCode=%1 selhala -ErrorFunctionFailed=%1 selhala; kd %2 -ErrorFunctionFailedWithMessage=%1 selhala; kd %2.%n%3 -ErrorExecutingProgram=Nelze spustit soubor:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Dolo k chyb pi otevrn kle systmovho registru:%n%1\%2 -ErrorRegCreateKey=Dolo k chyb pi vytven kle systmovho registru:%n%1\%2 -ErrorRegWriteKey=Dolo k chyb pi zpisu do kle systmovho registru:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Dolo k chyb pi vytven zznamu v inicializanm souboru "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Peskoit tento soubor (nedoporuuje se) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorovat chybu a pokraovat (nedoporuuje se) -SourceIsCorrupted=Zdrojov soubor je pokozen -SourceDoesntExist=Zdrojov soubor "%1" neexistuje -ExistingFileReadOnly2=Nelze nahradit existujc soubor, protoe je uren pouze pro ten. -ExistingFileReadOnlyRetry=&Odstranit atribut "pouze pro ten" a zopakovat akci -ExistingFileReadOnlyKeepExisting=&Ponechat existujc soubor -ErrorReadingExistingDest=Dolo k chyb pi pokusu o ten existujcho souboru: -FileExistsSelectAction=Zvolte akci -FileExists2=Soubor ji existuje. -FileExistsOverwriteExisting=&Nahradit existujc soubor -FileExistsKeepExisting=&Ponechat existujc soubor -FileExistsOverwriteOrKeepAll=&Zachovat se stejn u dalch konflikt -ExistingFileNewerSelectAction=Zvolte akci -ExistingFileNewer2=Existujc soubor je novj ne ten, kter se prvodce instalac pokou instalovat. -ExistingFileNewerOverwriteExisting=&Nahradit existujc soubor -ExistingFileNewerKeepExisting=&Ponechat existujc soubor (doporuuje se) -ExistingFileNewerOverwriteOrKeepAll=&Zachovat se stejn u dalch konflikt -ErrorChangingAttr=Dolo k chyb pi pokusu o zmnu atribut existujcho souboru: -ErrorCreatingTemp=Dolo k chyb pi pokusu o vytvoen souboru v clov sloce: -ErrorReadingSource=Dolo k chyb pi pokusu o ten zdrojovho souboru: -ErrorCopying=Dolo k chyb pi pokusu o zkoprovn souboru: -ErrorReplacingExistingFile=Dolo k chyb pi pokusu o nahrazen existujcho souboru: -ErrorRestartReplace=Funkce "RestartReplace" prvodce instalac selhala: -ErrorRenamingTemp=Dolo k chyb pi pokusu o pejmenovn souboru v clov sloce: -ErrorRegisterServer=Nelze zaregistrovat DLL/OCX: %1 -ErrorRegSvr32Failed=Voln RegSvr32 selhalo s nvratovm kdem %1 -ErrorRegisterTypeLib=Nelze zaregistrovat typovou knihovnu: %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32bitov -UninstallDisplayNameMark64Bit=64bitov -UninstallDisplayNameMarkAllUsers=Vichni uivatel -UninstallDisplayNameMarkCurrentUser=Aktuln uivatel - -; *** Post-installation errors -ErrorOpeningReadme=Dolo k chyb pi pokusu o oteven dokumentu "TIMNE". -ErrorRestartingComputer=Prvodci instalac se nepodailo restartovat V pota. Restartujte jej prosm run. - -; *** Uninstaller messages -UninstallNotFound=Soubor "%1" neexistuje. Produkt nelze odinstalovat. -UninstallOpenError=Soubor "%1" nelze otevt. Produkt nelze odinstalovat. -UninstallUnsupportedVer=Formt souboru se zznamy k odinstalaci produktu "%1" nebyl touto verz prvodce odinstalac rozpoznn. Produkt nelze odinstalovat -UninstallUnknownEntry=V souboru obsahujcm informace k odinstalaci produktu byla zjitna neznm poloka (%1) -ConfirmUninstall=Urit chcete produkt %1 a vechny jeho sousti odinstalovat? -UninstallOnlyOnWin64=Tento produkt lze odinstalovat pouze v 64-bitovch verzch MS Windows. -OnlyAdminCanUninstall=K odinstalaci tohoto produktu muste bt pihleni s prvy administrtora. -UninstallStatusLabel=ekejte prosm, dokud produkt %1 nebude odinstalovn z Vaeho potae. -UninstalledAll=Produkt %1 byl z Vaeho potae spn odinstalovn. -UninstalledMost=Produkt %1 byl odinstalovn.%n%nNkter jeho sousti se odinstalovat nepodailo. Mete je vak odstranit run. -UninstalledAndNeedsRestart=K dokonen odinstalace produktu %1 je nezbytn, aby prvodce odinstalac restartoval V pota.%n%nChcete jej restartovat nyn? -UninstallDataCorrupted=Soubor "%1" je pokozen. Produkt nelze odinstalovat - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Odebrat sdlen soubor? -ConfirmDeleteSharedFile2=Systm indikuje, e nsledujc sdlen soubor nen pouvn dnmi jinmi aplikacemi. M bt tento sdlen soubor prvodcem odinstalac odstrann?%n%nPokud nkter aplikace tento soubor pouvaj, pak po jeho odstrann nemusej pracovat sprvn. Pokud si nejste jisti, zvolte Ne. Ponechn tohoto souboru ve Vaem systmu nezpsob dnou kodu. -SharedFileNameLabel=Nzev souboru: -SharedFileLocationLabel=Umstn: -WizardUninstalling=Stav odinstalace -StatusUninstalling=Probh odinstalace produktu %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Probh instalace produktu %1. -ShutdownBlockReasonUninstallingApp=Probh odinstalace produktu %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 verze %2 -AdditionalIcons=Dal zstupci: -CreateDesktopIcon=Vytvoit zstupce na &ploe -CreateQuickLaunchIcon=Vytvoit zstupce na panelu &Snadn sputn -ProgramOnTheWeb=Aplikace %1 na internetu -UninstallProgram=Odinstalovat aplikaci %1 -LaunchProgram=Spustit aplikaci %1 -AssocFileExtension=Vytvoit &asociaci mezi soubory typu %2 a aplikac %1 -AssocingFileExtension=Vytv se asociace mezi soubory typu %2 a aplikac %1... -AutoStartProgramGroupDescription=Po sputn: -AutoStartProgram=Spoutt aplikaci %1 automaticky -AddonHostProgramNotFound=Aplikace %1 nebyla ve Vmi zvolen sloce nalezena.%n%nChcete pesto pokraovat? diff --git a/Dependencies/Inno/Languages/Danish.isl b/Dependencies/Inno/Languages/Danish.isl deleted file mode 100644 index 3939de26..00000000 --- a/Dependencies/Inno/Languages/Danish.isl +++ /dev/null @@ -1,379 +0,0 @@ -; *** Inno Setup version 6.1.0+ Danish messages *** -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). -; -; ID: Danish.isl,v 6.0.3+ 2020/07/26 Thomas Vedel, thomas@veco.dk -; Parts by scootergrisen, 2015 - -[LangOptions] -LanguageName=Dansk -LanguageID=$0406 -LanguageCodePage=1252 - -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] -; *** Application titles -SetupAppTitle=Installationsguide -SetupWindowTitle=Installationsguide - %1 -UninstallAppTitle=Afinstallr -UninstallAppFullTitle=Afinstallerer %1 - -; *** Misc. common -InformationTitle=Information -ConfirmTitle=Bekrft -ErrorTitle=Fejl - -; *** SetupLdr messages -SetupLdrStartupMessage=Denne guide installerer %1. Vil du fortstte? -LdrCannotCreateTemp=Kan ikke oprette en midlertidig fil. Installationen afbrydes -LdrCannotExecTemp=Kan ikke kre et program i den midlertidige mappe. Installationen afbrydes -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nFejl %2: %3 -SetupFileMissing=Filen %1 mangler i installationsmappen. Ret venligst problemet eller f en ny kopi af programmet. -SetupFileCorrupt=Installationsfilerne er beskadiget. F venligst en ny kopi af installationsprogrammet. -SetupFileCorruptOrWrongVer=Installationsfilerne er beskadiget, eller ogs er de ikke kompatible med denne version af installationsprogrammet. Ret venligst problemet eller f en ny kopi af installationsprogrammet. -InvalidParameter=En ugyldig parameter blev angivet p kommandolinjen:%n%n%1 -SetupAlreadyRunning=Installationsprogrammet krer allerede. -WindowsVersionNotSupported=Programmet understtter ikke den version af Windows, som denne computer krer. -WindowsServicePackRequired=Programmet krver %1 med Service Pack %2 eller senere. -NotOnThisPlatform=Programmet kan ikke anvendes p %1. -OnlyOnThisPlatform=Programmet kan kun anvendes p %1. -OnlyOnTheseArchitectures=Programmet kan kun installeres p versioner af Windows der anvender disse processor-arkitekturer:%n%n%1 -WinVersionTooLowError=Programmet krver %1 version %2 eller senere. -WinVersionTooHighError=Programmet kan ikke installeres p %1 version %2 eller senere. -AdminPrivilegesRequired=Du skal vre logget p som administrator imens programmet installeres. -PowerUserPrivilegesRequired=Du skal vre logget p som administrator eller vre medlem af gruppen Superbrugere imens programmet installeres. -SetupAppRunningError=Installationsprogrammet har registreret at %1 krer.%n%nLuk venligst alle forekomster af programmet, og klik s OK for at fortstte, eller Annuller for at afbryde. -UninstallAppRunningError=Afinstallationsprogrammet har registreret at %1 krer.%n%nLuk venligst alle forekomster af programmet, og klik s OK for at fortstte, eller Annuller for at afbryde. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Vlg guidens installationsmde -PrivilegesRequiredOverrideInstruction=Vlg installationsmde -PrivilegesRequiredOverrideText1=%1 kan installeres for alle brugere (krver administrator-rettigheder), eller for dig alene. -PrivilegesRequiredOverrideText2=%1 kan installeres for dig alene, eller for alle brugere p computeren (sidstnvnte krver administrator-rettigheder). -PrivilegesRequiredOverrideAllUsers=Installer for &alle brugere -PrivilegesRequiredOverrideAllUsersRecommended=Installer for &alle brugere (anbefales) -PrivilegesRequiredOverrideCurrentUser=Installer for &mig alene -PrivilegesRequiredOverrideCurrentUserRecommended=Installer for &mig alene (anbefales) - -; *** Misc. errors -ErrorCreatingDir=Installationsprogrammet kan ikke oprette mappen "%1" -ErrorTooManyFilesInDir=Kan ikke oprette en fil i mappen "%1". Mappen indeholder for mange filer - -; *** Setup common messages -ExitSetupTitle=Afbryd installationen -ExitSetupMessage=Installationen er ikke fuldfrt. Programmet installeres ikke, hvis du afbryder nu.%n%nDu kan kre installationsprogrammet igen p et andet tidspunkt for at udfre installationen.%n%nSkal installationen afbrydes? -AboutSetupMenuItem=&Om installationsprogrammet... -AboutSetupTitle=Om installationsprogrammet -AboutSetupMessage=%1 version %2%n%3%n%n%1 hjemmeside:%n%4 -AboutSetupNote= -TranslatorNote=Danish translation maintained by Thomas Vedel (thomas@veco.dk). Parts by scootergrisen. - -; *** Buttons -ButtonBack=< &Tilbage -ButtonNext=N&ste > -ButtonInstall=&Installer -ButtonOK=&OK -ButtonCancel=&Annuller -ButtonYes=&Ja -ButtonYesToAll=Ja til a&lle -ButtonNo=&Nej -ButtonNoToAll=Nej t&il alle -ButtonFinish=&Frdig -ButtonBrowse=&Gennemse... -ButtonWizardBrowse=G&ennemse... -ButtonNewFolder=&Opret ny mappe - -; *** "Select Language" dialog messages -SelectLanguageTitle=Vlg installationssprog -SelectLanguageLabel=Vlg det sprog der skal vises under installationen. - -; *** Common wizard text -ClickNext=Klik p Nste for at fortstte, eller Annuller for at afbryde installationen. -BeveledLabel= -BrowseDialogTitle=Vlg mappe -BrowseDialogLabel=Vlg en mappe fra nedenstende liste og klik p OK. -NewFolderName=Ny mappe - -; *** "Welcome" wizard page -WelcomeLabel1=Velkommen til installationsguiden for [name] -WelcomeLabel2=Guiden installerer [name/ver] p computeren.%n%nDet anbefales at lukke alle andre programmer inden du fortstter. - -; *** "Password" wizard page -WizardPassword=Adgangskode -PasswordLabel1=Installationen er beskyttet med adgangskode. -PasswordLabel3=Indtast venligst adgangskoden og klik p Nste for at fortstte. Der skelnes mellem store og sm bogstaver. -PasswordEditLabel=&Adgangskode: -IncorrectPassword=Den indtastede kode er forkert. Prv venligst igen. - -; *** "License Agreement" wizard page -WizardLicense=Licensaftale -LicenseLabel=Ls venligst flgende vigtige oplysninger inden du fortstter. -LicenseLabel3=Ls venligst licensaftalen. Du skal acceptere betingelserne i aftalen for at fortstte installationen. -LicenseAccepted=Jeg &accepterer aftalen -LicenseNotAccepted=Jeg accepterer &ikke aftalen - -; *** "Information" wizard pages -WizardInfoBefore=Information -InfoBeforeLabel=Ls venligst flgende information inden du fortstter. -InfoBeforeClickLabel=Klik p Nste, nr du er klar til at fortstte installationen. -WizardInfoAfter=Information -InfoAfterLabel=Ls venligst flgende information inden du fortstter. -InfoAfterClickLabel=Klik p Nste, nr du er klar til at fortstte installationen. - -; *** "User Information" wizard page -WizardUserInfo=Brugerinformation -UserInfoDesc=Indtast venligst dine oplysninger. -UserInfoName=&Brugernavn: -UserInfoOrg=&Organisation: -UserInfoSerial=&Serienummer: -UserInfoNameRequired=Du skal indtaste et navn. - -; *** "Select Destination Directory" wizard page -WizardSelectDir=Vlg installationsmappe -SelectDirDesc=Hvor skal [name] installeres? -SelectDirLabel3=Installationsprogrammet installerer [name] i flgende mappe. -SelectDirBrowseLabel=Klik p Nste for at fortstte. Klik p Gennemse, hvis du vil vlge en anden mappe. -DiskSpaceGBLabel=Der skal vre mindst [gb] GB fri diskplads. -DiskSpaceMBLabel=Der skal vre mindst [mb] MB fri diskplads. -CannotInstallToNetworkDrive=Guiden kan ikke installere programmet p et netvrksdrev. -CannotInstallToUNCPath=Guiden kan ikke installere programmet til en UNC-sti. -InvalidPath=Du skal indtaste en komplet sti med drevbogstav, f.eks.:%n%nC:\Program%n%neller et UNC-stinavn i formatet:%n%n\\server\share -InvalidDrive=Drevet eller UNC-stien du valgte findes ikke, eller der er ikke adgang til det lige nu. Vlg venligst en anden placering. -DiskSpaceWarningTitle=Ikke nok ledig diskplads. -DiskSpaceWarning=Guiden krver mindst %1 KB ledig diskplads for at kunne installere programmet, men det valgte drev har kun %2 KB ledig diskplads.%n%nVil du alligevel fortstte installationen? -DirNameTooLong=Navnet p mappen eller stien er for langt. -InvalidDirName=Navnet p mappen er ikke tilladt. -BadDirName32=Mappenavne m ikke indeholde flgende tegn:%n%n%1 -DirExistsTitle=Mappen findes -DirExists=Mappen:%n%n%1%n%nfindes allerede. Vil du alligevel installere i denne mappe? -DirDoesntExistTitle=Mappen findes ikke. -DirDoesntExist=Mappen:%n%n%1%n%nfindes ikke. Vil du oprette mappen? - -; *** "Select Components" wizard page -WizardSelectComponents=Vlg Komponenter -SelectComponentsDesc=Hvilke komponenter skal installeres? -SelectComponentsLabel2=Vlg de komponenter der skal installeres, og fjern markering fra dem der ikke skal installeres. Klik s p Nste for at fortstte. -FullInstallation=Fuld installation -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Kompakt installation -CustomInstallation=Tilpasset installation -NoUninstallWarningTitle=Komponenterne er installeret -NoUninstallWarning=Installationsprogrammet har registreret at flgende komponenter allerede er installeret p computeren:%n%n%1%n%nKomponenterne bliver ikke afinstalleret hvis de fravlges.%n%nFortst alligevel? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=De nuvrende valg krver mindst [gb] GB ledig diskplads. -ComponentsDiskSpaceMBLabel=De nuvrende valg krver mindst [mb] MB ledig diskplads. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Vlg supplerende opgaver -SelectTasksDesc=Hvilke supplerende opgaver skal udfres? -SelectTasksLabel2=Vlg de supplerende opgaver du vil have guiden til at udfre under installationen af [name] og klik p Nste. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Vlg mappe i menuen Start -SelectStartMenuFolderDesc=Hvor skal installationsprogrammet oprette genveje til programmet? -SelectStartMenuFolderLabel3=Installationsprogrammet opretter genveje til programmet i flgende mappe i menuen Start. -SelectStartMenuFolderBrowseLabel=Klik p Nste for at fortstte. Klik p Gennemse, hvis du vil vlge en anden mappe. -MustEnterGroupName=Du skal indtaste et mappenavn. -GroupNameTooLong=Mappens eller stiens navn er for langt. -InvalidGroupName=Mappenavnet er ugyldigt. -BadGroupName=Navnet p en programgruppe m ikke indeholde flgende tegn: %1. Angiv andet navn. -NoProgramGroupCheck2=Opret &ingen programgruppe i menuen Start - -; *** "Ready to Install" wizard page -WizardReady=Klar til at installere -ReadyLabel1=Installationsprogrammet er nu klar til at installere [name] p computeren. -ReadyLabel2a=Klik p Installer for at fortstte med installationen, eller klik p Tilbage hvis du vil se eller ndre indstillingerne. -ReadyLabel2b=Klik p Installer for at fortstte med installationen. -ReadyMemoUserInfo=Brugerinformation: -ReadyMemoDir=Installationsmappe: -ReadyMemoType=Installationstype: -ReadyMemoComponents=Valgte komponenter: -ReadyMemoGroup=Mappe i menuen Start: -ReadyMemoTasks=Valgte supplerende opgaver: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Downloader yderligere filer... -ButtonStopDownload=&Stop download -StopDownload=Er du sikker p at du nsker at afbryde download? -ErrorDownloadAborted=Download afbrudt -ErrorDownloadFailed=Fejl under download: %1 %2 -ErrorDownloadSizeFailed=Fejl ved lsning af filstrrelse: %1 %2 -ErrorFileHash1=Fejl i hash: %1 -ErrorFileHash2=Fejl i fil hash vrdi: forventet %1, fundet %2 -ErrorProgress=Fejl i trin: %1 af %2 -ErrorFileSize=Fejl i filstrrelse: forventet %1, fundet %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Klargring af installationen -PreparingDesc=Installationsprogrammet gr klar til at installere [name] p din computer. -PreviousInstallNotCompleted=Installation eller afinstallation af et program er ikke afsluttet. Du skal genstarte computeren for at afslutte den foregende installation.%n%nNr computeren er genstartet skal du kre installationsprogrammet til [name] igen. -CannotContinue=Installationsprogrammet kan ikke fortstte. Klik venligst p Fortryd for at afslutte. -ApplicationsFound=Flgende programmer bruger filer som skal opdateres. Det anbefales at du giver installationsprogrammet tilladelse til automatisk at lukke programmerne. -ApplicationsFound2=Flgende programmer bruger filer som skal opdateres. Det anbefales at du giver installationsprogrammet tilladelse til automatisk at lukke programmerne. Installationsguiden vil forsge at genstarte programmerne nr installationen er fuldfrt. -CloseApplications=&Luk programmerne automatisk -DontCloseApplications=Luk &ikke programmerne -ErrorCloseApplications=Installationsprogrammet kunne ikke lukke alle programmerne automatisk. Det anbefales at du lukker alle programmer som bruger filer der skal opdateres, inden installationsprogrammet fortstter. -PrepareToInstallNeedsRestart=Installationsprogrammet er ndt til at genstarte computeren. Efter genstarten skal du kre installationsprogrammet igen for at frdiggre installation af [name].%n%nVil du at genstarte nu? - -; *** "Installing" wizard page -WizardInstalling=Installerer -InstallingLabel=Vent venligst mens installationsprogrammet installerer [name] p computeren. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Fuldfrer installation af [name] -FinishedLabelNoIcons=Installationsguiden har fuldfrt installation af [name] p computeren. -FinishedLabel=Installationsguiden har fuldfrt installation af [name] p computeren. Programmet kan startes ved at vlge de oprettede ikoner. -ClickFinish=Klik p Frdig for at afslutte installationsprogrammet. -FinishedRestartLabel=Computeren skal genstartes for at fuldfre installation af [name]. Vil du genstarte computeren nu? -FinishedRestartMessage=Computeren skal genstartes for at fuldfre installation af [name].%n%nVil du genstarte computeren nu? -ShowReadmeCheck=Ja, jeg vil gerne se README-filen -YesRadio=&Ja, genstart computeren nu -NoRadio=&Nej, jeg genstarter computeren senere -; used for example as 'Run MyProg.exe' -RunEntryExec=Kr %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Vis %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Installationsprogrammet skal bruge den nste disk -SelectDiskLabel2=Indst disk %1 og klik p OK.%n%nHvis filerne findes i en anden mappe end den viste, s indtast stien eller klik Gennemse. -PathLabel=&Sti: -FileNotInDir2=Filen "%1" blev ikke fundet i "%2". Indst venligst den korrekte disk, eller vlg en anden mappe. -SelectDirectoryLabel=Angiv venligst placeringen af den nste disk. - -; *** Installation phase messages -SetupAborted=Installationen blev ikke fuldfrt.%n%nRet venligst de fundne problemer og kr installationsprogrammet igen. -AbortRetryIgnoreSelectAction=Vlg nsket handling -AbortRetryIgnoreRetry=&Forsg igen -AbortRetryIgnoreIgnore=&Ignorer fejlen og fortst -AbortRetryIgnoreCancel=Afbryd installationen - -; *** Installation status messages -StatusClosingApplications=Lukker programmer... -StatusCreateDirs=Opretter mapper... -StatusExtractFiles=Udpakker filer... -StatusCreateIcons=Opretter genveje... -StatusCreateIniEntries=Opretter poster i INI-filer... -StatusCreateRegistryEntries=Opretter poster i registreringsdatabasen... -StatusRegisterFiles=Registrerer filer... -StatusSavingUninstall=Gemmer information om afinstallation... -StatusRunProgram=Fuldfrer installation... -StatusRestartingApplications=Genstarter programmer... -StatusRollback=Fjerner ndringer... - -; *** Misc. errors -ErrorInternal2=Intern fejl: %1 -ErrorFunctionFailedNoCode=%1 fejlede -ErrorFunctionFailed=%1 fejlede; kode %2 -ErrorFunctionFailedWithMessage=%1 fejlede; kode %2.%n%3 -ErrorExecutingProgram=Kan ikke kre programfilen:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Fejl ved bning af ngle i registreringsdatabase:%n%1\%2 -ErrorRegCreateKey=Fejl ved oprettelse af ngle i registreringsdatabase:%n%1\%2 -ErrorRegWriteKey=Fejl ved skrivning til ngle i registreringsdatabase:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Fejl ved oprettelse af post i INI-filen "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Spring over denne fil (anbefales ikke) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorer fejlen og fortst (anbefales ikke) -SourceIsCorrupted=Kildefilen er beskadiget -SourceDoesntExist=Kildefilen "%1" findes ikke -ExistingFileReadOnly2=Den eksisterende fil er skrivebeskyttet og kan derfor ikke overskrives. -ExistingFileReadOnlyRetry=&Fjern skrivebeskyttelsen og forsg igen -ExistingFileReadOnlyKeepExisting=&Behold den eksisterende fil -ErrorReadingExistingDest=Der opstod en fejl ved lsning af den eksisterende fil: -FileExistsSelectAction=Vlg handling -FileExists2=Filen findes allerede. -FileExistsOverwriteExisting=&Overskriv den eksisterende fil -FileExistsKeepExisting=&Behold den eksiterende fil -FileExistsOverwriteOrKeepAll=&Gentag handlingen for de nste konflikter -ExistingFileNewerSelectAction=Vlg handling -ExistingFileNewer2=Den eksisterende fil er nyere end den som forsges installeret. -ExistingFileNewerOverwriteExisting=&Overskriv den eksisterende fil -ExistingFileNewerKeepExisting=&Behold den eksisterende fil (anbefales) -ExistingFileNewerOverwriteOrKeepAll=&Gentag handlingen for de nste konflikter -ErrorChangingAttr=Der opstod en fejl ved ndring af attributter for den eksisterende fil: -ErrorCreatingTemp=Der opstod en fejl ved oprettelse af en fil i mappen: -ErrorReadingSource=Der opstod en fejl ved lsning af kildefilen: -ErrorCopying=Der opstod en fejl ved kopiering af en fil: -ErrorReplacingExistingFile=Der opstod en fejl ved forsg p at erstatte den eksisterende fil: -ErrorRestartReplace=Erstatning af fil ved genstart mislykkedes: -ErrorRenamingTemp=Der opstod en fejl ved forsg p at omdbe en fil i installationsmappen: -ErrorRegisterServer=Kan ikke registrere DLL/OCX: %1 -ErrorRegSvr32Failed=RegSvr32 fejlede med exit kode %1 -ErrorRegisterTypeLib=Kan ikke registrere typebiblioteket: %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Alle brugere -UninstallDisplayNameMarkCurrentUser=Nuvrende bruger - -; *** Post-installation errors -ErrorOpeningReadme=Der opstod en fejl ved forsg p at bne README-filen. -ErrorRestartingComputer=Installationsprogrammet kunne ikke genstarte computeren. Genstart venligst computeren manuelt. - -; *** Uninstaller messages -UninstallNotFound=Filen "%1" findes ikke. Kan ikke afinstalleres. -UninstallOpenError=Filen "%1" kunne ikke bnes. Kan ikke afinstalleres -UninstallUnsupportedVer=Afinstallations-logfilen "%1" er i et format der ikke genkendes af denne version af afinstallations-guiden. Afinstallationen afbrydes -UninstallUnknownEntry=Der er en ukendt post (%1) i afinstallerings-logfilen. -ConfirmUninstall=Er du sikker p at du vil fjerne %1 og alle tilhrende komponenter? -UninstallOnlyOnWin64=Denne installation kan kun afinstalleres p 64-bit Windows-versioner -OnlyAdminCanUninstall=Programmet kan kun afinstalleres af en bruger med administratorrettigheder. -UninstallStatusLabel=Vent venligst imens %1 afinstalleres fra computeren. -UninstalledAll=%1 er nu fjernet fra computeren. -UninstalledMost=%1 afinstallation er fuldfrt.%n%nNogle elementer kunne ikke fjernes. De kan fjernes manuelt. -UninstalledAndNeedsRestart=Computeren skal genstartes for at fuldfre afinstallation af %1.%n%nVil du genstarte nu? -UninstallDataCorrupted=Filen "%1" er beskadiget. Kan ikke afinstallere - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Fjern delt fil? -ConfirmDeleteSharedFile2=Systemet indikerer at flgende delte fil ikke lngere er i brug. Skal den/de delte fil(er) fjernes af guiden?%n%nHvis du er usikker s vlg Nej. Beholdes filen p maskinen, vil den ikke gre nogen skade, men hvis filen fjernes, selv om den stadig anvendes, bliver de programmer, der anvender filen, ustabile -SharedFileNameLabel=Filnavn: -SharedFileLocationLabel=Placering: -WizardUninstalling=Status for afinstallation -StatusUninstalling=Afinstallerer %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installerer %1. -ShutdownBlockReasonUninstallingApp=Afinstallerer %1. - -[CustomMessages] -NameAndVersion=%1 version %2 -AdditionalIcons=Supplerende ikoner: -CreateDesktopIcon=Opret ikon p skrive&bordet -CreateQuickLaunchIcon=Opret &hurtigstart-ikon -ProgramOnTheWeb=%1 p internettet -UninstallProgram=Afinstaller (fjern) %1 -LaunchProgram=&Start %1 -AssocFileExtension=Sammen&kd %1 med filtypen %2 -AssocingFileExtension=Sammenkder %1 med filtypen %2... -AutoStartProgramGroupDescription=Start: -AutoStartProgram=Start automatisk %1 -AddonHostProgramNotFound=%1 blev ikke fundet i den valgte mappe.%n%nVil du alligevel fortstte? diff --git a/Dependencies/Inno/Languages/Dutch.isl b/Dependencies/Inno/Languages/Dutch.isl deleted file mode 100644 index 761528b2..00000000 --- a/Dependencies/Inno/Languages/Dutch.isl +++ /dev/null @@ -1,359 +0,0 @@ -; *** Inno Setup version 6.1.0+ Dutch messages *** -; -; This file is based on user-contributed translations by various authors -; -; Maintained by Martijn Laan (mlaan@jrsoftware.org) - -[LangOptions] -LanguageName=Nederlands -LanguageID=$0413 -LanguageCodePage=1252 - -[Messages] - -; *** Application titles -SetupAppTitle=Setup -SetupWindowTitle=Setup - %1 -UninstallAppTitle=Verwijderen -UninstallAppFullTitle=%1 verwijderen - -; *** Misc. common -InformationTitle=Informatie -ConfirmTitle=Bevestigen -ErrorTitle=Fout - -; *** SetupLdr messages -SetupLdrStartupMessage=Hiermee wordt %1 geïnstalleerd. Wilt u doorgaan? -LdrCannotCreateTemp=Kan geen tijdelijk bestand maken. Setup wordt afgesloten -LdrCannotExecTemp=Kan een bestand in de tijdelijke map niet uitvoeren. Setup wordt afgesloten - -; *** Startup error messages -LastErrorMessage=%1.%n%nFout %2: %3 -SetupFileMissing=Het bestand %1 ontbreekt in de installatiemap. Corrigeer dit probleem of gebruik een andere kopie van het programma. -SetupFileCorrupt=De installatiebestanden zijn beschadigd. Gebruik een andere kopie van het programma. -SetupFileCorruptOrWrongVer=De installatiebestanden zijn beschadigd, of zijn niet compatibel met deze versie van Setup. Corrigeer dit probleem of gebruik een andere kopie van het programma. -InvalidParameter=Er werd een ongeldige schakeloptie opgegeven op de opdrachtregel:%n%n%1 -SetupAlreadyRunning=Setup is al gestart. -WindowsVersionNotSupported=Dit programma ondersteunt de versie van Windows die u gebruikt niet. -WindowsServicePackRequired=Dit programma vereist %1 Service Pack %2 of hoger. -NotOnThisPlatform=Dit programma kan niet worden uitgevoerd onder %1. -OnlyOnThisPlatform=Dit programma moet worden uitgevoerd onder %1. -OnlyOnTheseArchitectures=Dit programma kan alleen geïnstalleerd worden onder versies van Windows ontworpen voor de volgende processor architecturen:%n%n%1 -WinVersionTooLowError=Dit programma vereist %1 versie %2 of hoger. -WinVersionTooHighError=Dit programma kan niet worden geïnstalleerd onder %1 versie %2 of hoger. -AdminPrivilegesRequired=U moet aangemeld zijn als een systeembeheerder om dit programma te kunnen installeren. -PowerUserPrivilegesRequired=U moet ingelogd zijn als systeembeheerder of als gebruiker met systeembeheerders rechten om dit programma te kunnen installeren. -SetupAppRunningError=Setup heeft vastgesteld dat %1 op dit moment actief is.%n%nSluit alle vensters hiervan, en klik daarna op OK om verder te gaan, of op Annuleren om Setup af te sluiten. -UninstallAppRunningError=Het verwijderprogramma heeft vastgesteld dat %1 op dit moment actief is.%n%nSluit alle vensters hiervan, en klik daarna op OK om verder te gaan, of op Annuleren om het verwijderen af te breken. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Selecteer installatie modus voor Setup -PrivilegesRequiredOverrideInstruction=Selecteer installatie modus -PrivilegesRequiredOverrideText1=%1 kan geïnstalleerd worden voor alle gebruikers (vereist aanmelding als een systeembeheerder), of voor u alleen. -PrivilegesRequiredOverrideText2=%1 kan geïnstalleerd worden voor u alleen, of voor alle gebruikers (vereist aanmelding als een systeembeheerder). -PrivilegesRequiredOverrideAllUsers=Installeer voor &alle gebruikers -PrivilegesRequiredOverrideAllUsersRecommended=Installeer voor &alle gebruikers (aanbevolen) -PrivilegesRequiredOverrideCurrentUser=Installeer voor &mij alleen -PrivilegesRequiredOverrideCurrentUserRecommended=Installeer voor &mij alleen (aanbevolen) - -; *** Misc. errors -ErrorCreatingDir=Setup kan de map "%1" niet maken -ErrorTooManyFilesInDir=Kan geen bestand maken in de map "%1" omdat deze te veel bestanden bevat - -; *** Setup common messages -ExitSetupTitle=Setup afsluiten -ExitSetupMessage=Setup is niet voltooid. Als u nu afsluit, wordt het programma niet geïnstalleerd.%n%nU kunt Setup later opnieuw uitvoeren om de installatie te voltooien.%n%nSetup afsluiten? -AboutSetupMenuItem=&Over Setup... -AboutSetupTitle=Over Setup -AboutSetupMessage=%1 versie %2%n%3%n%n%1-homepage:%n%4 -AboutSetupNote= -TranslatorNote=Dutch translation maintained by Martijn Laan (mlaan@jrsoftware.org) - -; *** Buttons -ButtonBack=< Vo&rige -ButtonNext=&Volgende > -ButtonInstall=&Installeren -ButtonOK=OK -ButtonCancel=Annuleren -ButtonYes=&Ja -ButtonYesToAll=Ja op &alles -ButtonNo=&Nee -ButtonNoToAll=N&ee op alles -ButtonFinish=&Voltooien -ButtonBrowse=&Bladeren... -ButtonWizardBrowse=B&laderen... -ButtonNewFolder=&Nieuwe map maken - -; *** "Select Language" dialog messages -SelectLanguageTitle=Selecteer taal voor Setup -SelectLanguageLabel=Selecteer de taal die Setup gebruikt tijdens de installatie. - -; *** Common wizard text -ClickNext=Klik op Volgende om verder te gaan of op Annuleren om Setup af te sluiten. -BeveledLabel= -BrowseDialogTitle=Map Selecteren -BrowseDialogLabel=Selecteer een map in onderstaande lijst en klik daarna op OK. -NewFolderName=Nieuwe map - -; *** "Welcome" wizard page -WelcomeLabel1=Welkom bij het installatieprogramma van [name]. -WelcomeLabel2=Hiermee wordt [name/ver] geïnstalleerd op deze computer.%n%nU wordt aanbevolen alle actieve programma's af te sluiten voordat u verder gaat. - -; *** "Password" wizard page -WizardPassword=Wachtwoord -PasswordLabel1=Deze installatie is beveiligd met een wachtwoord. -PasswordLabel3=Voer het wachtwoord in en klik op Volgende om verder te gaan. Wachtwoorden zijn hoofdlettergevoelig. -PasswordEditLabel=&Wachtwoord: -IncorrectPassword=Het ingevoerde wachtwoord is niet correct. Probeer het opnieuw. - -; *** "License Agreement" wizard page -WizardLicense=Licentieovereenkomst -LicenseLabel=Lees de volgende belangrijke informatie voordat u verder gaat. -LicenseLabel3=Lees de volgende licentieovereenkomst. Gebruik de schuifbalk of druk op de knop Page Down om de rest van de overeenkomst te zien. -LicenseAccepted=Ik &accepteer de licentieovereenkomst -LicenseNotAccepted=Ik accepteer de licentieovereenkomst &niet - -; *** "Information" wizard pages -WizardInfoBefore=Informatie -InfoBeforeLabel=Lees de volgende belangrijke informatie voordat u verder gaat. -InfoBeforeClickLabel=Klik op Volgende als u gereed bent om verder te gaan met Setup. -WizardInfoAfter=Informatie -InfoAfterLabel=Lees de volgende belangrijke informatie voordat u verder gaat. -InfoAfterClickLabel=Klik op Volgende als u gereed bent om verder te gaan met Setup. - -; *** "User Information" wizard page -WizardUserInfo=Gebruikersinformatie -UserInfoDesc=Vul hier uw informatie in. -UserInfoName=&Gebruikersnaam: -UserInfoOrg=&Organisatie: -UserInfoSerial=&Serienummer: -UserInfoNameRequired=U moet een naam invullen. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Kies de doelmap -SelectDirDesc=Waar moet [name] geïnstalleerd worden? -SelectDirLabel3=Setup zal [name] in de volgende map installeren. -SelectDirBrowseLabel=Klik op Volgende om door te gaan. Klik op Bladeren om een andere map te kiezen. -DiskSpaceGBLabel=Er is ten minste [gb] GB vrije schijfruimte vereist. -DiskSpaceMBLabel=Er is ten minste [mb] MB vrije schijfruimte vereist. -CannotInstallToNetworkDrive=Setup kan niet installeren naar een netwerkstation. -CannotInstallToUNCPath=Setup kan niet installeren naar een UNC-pad. -InvalidPath=U moet een volledig pad met stationsletter invoeren; bijvoorbeeld:%nC:\APP%n%nof een UNC-pad zoals:%n%n\\server\share -InvalidDrive=Het geselecteerde station bestaat niet. Kies een ander station. -DiskSpaceWarningTitle=Onvoldoende schijfruimte -DiskSpaceWarning=Setup vereist ten minste %1 kB vrije schijfruimte voor het installeren, maar het geselecteerde station heeft slechts %2 kB beschikbaar.%n%nWilt u toch doorgaan? -DirNameTooLong=De mapnaam of het pad is te lang. -InvalidDirName=De mapnaam is ongeldig. -BadDirName32=Mapnamen mogen geen van de volgende tekens bevatten:%n%n%1 -DirExistsTitle=Map bestaat al -DirExists=De map:%n%n%1%n%nbestaat al. Wilt u toch naar die map installeren? -DirDoesntExistTitle=Map bestaat niet -DirDoesntExist=De map:%n%n%1%n%nbestaat niet. Wilt u de map aanmaken? - -; *** "Select Components" wizard page -WizardSelectComponents=Selecteer componenten -SelectComponentsDesc=Welke componenten moeten geïnstalleerd worden? -SelectComponentsLabel2=Selecteer de componenten die u wilt installeren. Klik op Volgende als u klaar bent om verder te gaan. -FullInstallation=Volledige installatie -CompactInstallation=Compacte installatie -CustomInstallation=Aangepaste installatie -NoUninstallWarningTitle=Component bestaat -NoUninstallWarning=Setup heeft gedetecteerd dat de volgende componenten al geïnstalleerd zijn op uw computer:%n%n%1%n%nAls u de selectie van deze componenten ongedaan maakt, worden ze niet verwijderd.%n%nWilt u toch doorgaan? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=De huidige selectie vereist ten minste [gb] GB vrije schijfruimte. -ComponentsDiskSpaceMBLabel=De huidige selectie vereist ten minste [mb] MB vrije schijfruimte. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Selecteer extra taken -SelectTasksDesc=Welke extra taken moeten uitgevoerd worden? -SelectTasksLabel2=Selecteer de extra taken die u door Setup wilt laten uitvoeren bij het installeren van [name], en klik vervolgens op Volgende. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Selecteer menu Start map -SelectStartMenuFolderDesc=Waar moeten de snelkoppelingen van het programma geplaatst worden? -SelectStartMenuFolderLabel3=Setup plaatst de snelkoppelingen van het programma in de volgende menu Start map. -SelectStartMenuFolderBrowseLabel=Klik op Volgende om door te gaan. Klik op Bladeren om een andere map te kiezen. -MustEnterGroupName=U moet een mapnaam invoeren. -GroupNameTooLong=De mapnaam of het pad is te lang. -InvalidGroupName=De mapnaam is ongeldig. -BadGroupName=De mapnaam mag geen van de volgende tekens bevatten:%n%n%1 -NoProgramGroupCheck2=&Geen menu Start map maken - -; *** "Ready to Install" wizard page -WizardReady=Het voorbereiden van de installatie is gereed -ReadyLabel1=Setup is nu gereed om te beginnen met het installeren van [name] op deze computer. -ReadyLabel2a=Klik op Installeren om verder te gaan met installeren, of klik op Vorige als u instellingen wilt terugzien of veranderen. -ReadyLabel2b=Klik op Installeren om verder te gaan met installeren. -ReadyMemoUserInfo=Gebruikersinformatie: -ReadyMemoDir=Doelmap: -ReadyMemoType=Installatietype: -ReadyMemoComponents=Geselecteerde componenten: -ReadyMemoGroup=Menu Start map: -ReadyMemoTasks=Extra taken: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Bezig met het downloaden van extra bestanden... -ButtonStopDownload=&Stop download -StopDownload=Weet u zeker dat u de download wilt stoppen? -ErrorDownloadAborted=Download afgebroken -ErrorDownloadFailed=Download mislukt: %1 %2 -ErrorDownloadSizeFailed=Ophalen grootte mislukt: %1 %2 -ErrorFileHash1=Bestand hashing mislukt: %1 -ErrorFileHash2=Ongeldige bestandshash: %1 verwacht, %2 gevonden -ErrorProgress=Ongeldige voortgang: %1 van %2 -ErrorFileSize=Ongeldige bestandsgrootte: %1 verwacht, %2 gevonden - -; *** "Preparing to Install" wizard page -WizardPreparing=Bezig met het voorbereiden van de installatie -PreparingDesc=Setup is bezig met het voorbereiden van de installatie van [name]. -PreviousInstallNotCompleted=De installatie/verwijdering van een vorig programma is niet voltooid. U moet uw computer opnieuw opstarten om die installatie te voltooien.%n%nStart Setup nogmaals nadat uw computer opnieuw is opgestart om de installatie van [name] te voltooien. -CannotContinue=Setup kan niet doorgaan. Klik op annuleren om af te sluiten. -ApplicationsFound=De volgende programma's gebruiken bestanden die moeten worden bijgewerkt door Setup. U wordt aanbevolen Setup toe te staan om automatisch deze programma's af te sluiten. -ApplicationsFound2=De volgende programma's gebruiken bestanden die moeten worden bijgewerkt door Setup. U wordt aanbevolen Setup toe te staan om automatisch deze programma's af te sluiten. Nadat de installatie is voltooid zal Setup proberen de applicaties opnieuw op te starten. -CloseApplications=&Programma's automatisch afsluiten -DontCloseApplications=Programma's &niet afsluiten -ErrorCloseApplications=Setup kon niet alle programma's automatisch afsluiten. U wordt aanbevolen alle programma's die bestanden gebruiken die moeten worden bijgewerkt door Setup af te sluiten voordat u verder gaat. -PrepareToInstallNeedsRestart=Setup moet uw computer opnieuw opstarten. Start Setup nogmaals nadat uw computer opnieuw is opgestart om de installatie van [name] te voltooien.%n%nWilt u nu opnieuw opstarten? - -; *** "Installing" wizard page -WizardInstalling=Bezig met installeren -InstallingLabel=Setup installeert [name] op uw computer. Een ogenblik geduld... - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Setup heeft het installeren van [name] op deze computer voltooid. -FinishedLabelNoIcons=Setup heeft het installeren van [name] op deze computer voltooid. -FinishedLabel=Setup heeft het installeren van [name] op deze computer voltooid. U kunt het programma uitvoeren met de geïnstalleerde snelkoppelingen. -ClickFinish=Klik op Voltooien om Setup te beëindigen. -FinishedRestartLabel=Setup moet de computer opnieuw opstarten om de installatie van [name] te voltooien. Wilt u nu opnieuw opstarten? -FinishedRestartMessage=Setup moet uw computer opnieuw opstarten om de installatie van [name] te voltooien.%n%nWilt u nu opnieuw opstarten? -ShowReadmeCheck=Ja, ik wil het bestand Leesmij zien -YesRadio=&Ja, start de computer nu opnieuw op -NoRadio=&Nee, ik start de computer later opnieuw op -RunEntryExec=Start %1 -RunEntryShellExec=Bekijk %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Setup heeft de volgende diskette nodig -SelectDiskLabel2=Voer diskette %1 in en klik op OK.%n%nAls de bestanden op deze diskette in een andere map gevonden kunnen worden dan die hieronder wordt getoond, voer dan het juiste pad in of klik op Bladeren. -PathLabel=&Pad: -FileNotInDir2=Kan het bestand "%1" niet vinden in "%2". Voer de juiste diskette in of kies een andere map. -SelectDirectoryLabel=Geef de locatie van de volgende diskette. - -; *** Installation phase messages -SetupAborted=Setup is niet voltooid.%n%nCorrigeer het probleem en voer Setup opnieuw uit. -AbortRetryIgnoreSelectAction=Selecteer actie -AbortRetryIgnoreRetry=&Probeer opnieuw -AbortRetryIgnoreIgnore=&Negeer de fout en ga door -AbortRetryIgnoreCancel=Breek installatie af - -; *** Installation status messages -StatusClosingApplications=Programma's afsluiten... -StatusCreateDirs=Mappen maken... -StatusExtractFiles=Bestanden uitpakken... -StatusCreateIcons=Snelkoppelingen maken... -StatusCreateIniEntries=INI-gegevens instellen... -StatusCreateRegistryEntries=Registergegevens instellen... -StatusRegisterFiles=Bestanden registreren... -StatusSavingUninstall=Verwijderingsinformatie opslaan... -StatusRunProgram=Installatie voltooien... -StatusRestartingApplications=Programma's opnieuw starten... -StatusRollback=Veranderingen ongedaan maken... - -; *** Misc. errors -ErrorInternal2=Interne fout: %1 -ErrorFunctionFailedNoCode=%1 mislukt -ErrorFunctionFailed=%1 mislukt; code %2 -ErrorFunctionFailedWithMessage=%1 mislukt; code %2.%n%3 -ErrorExecutingProgram=Kan bestand niet uitvoeren:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Fout bij het openen van registersleutel:%n%1\%2 -ErrorRegCreateKey=Fout bij het maken van registersleutel:%n%1\%2 -ErrorRegWriteKey=Fout bij het schrijven naar registersleutel:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Fout bij het maken van een INI-instelling in bestand "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Sla dit bestand over (niet aanbevolen) -FileAbortRetryIgnoreIgnoreNotRecommended=&Negeer de fout en ga door (niet aanbevolen) -SourceIsCorrupted=Het bronbestand is beschadigd -SourceDoesntExist=Het bronbestand "%1" bestaat niet -ExistingFileReadOnly2=Het bestaande bestand kon niet vervangen worden omdat het een alleen-lezen markering heeft. -ExistingFileReadOnlyRetry=&Verwijder de alleen-lezen markering en probeer het opnieuw -ExistingFileReadOnlyKeepExisting=&Behoud het bestaande bestand -ErrorReadingExistingDest=Er is een fout opgetreden bij het lezen van het bestaande bestand: -FileExistsSelectAction=Selecteer actie -FileExists2=Het bestand bestaat al. -FileExistsOverwriteExisting=&Overschrijf het bestaande bestand -FileExistsKeepExisting=&Behoud het bestaande bestand -FileExistsOverwriteOrKeepAll=&Dit voor de volgende conflicten uitvoeren -ExistingFileNewerSelectAction=Selecteer actie -ExistingFileNewer2=Het bestaande bestand is nieuwer dan het bestand dat Setup probeert te installeren. -ExistingFileNewerOverwriteExisting=&Overschrijf het bestaande bestand -ExistingFileNewerKeepExisting=&Behoud het bestaande bestand (aanbevolen) -ExistingFileNewerOverwriteOrKeepAll=&Dit voor de volgende conflicten uitvoeren -ErrorChangingAttr=Er is een fout opgetreden bij het wijzigen van de kenmerken van het bestaande bestand: -ErrorCreatingTemp=Er is een fout opgetreden bij het maken van een bestand in de doelmap: -ErrorReadingSource=Er is een fout opgetreden bij het lezen van het bronbestand: -ErrorCopying=Er is een fout opgetreden bij het kopiëren van een bestand: -ErrorReplacingExistingFile=Er is een fout opgetreden bij het vervangen van het bestaande bestand: -ErrorRestartReplace=Vervangen na opnieuw starten is mislukt: -ErrorRenamingTemp=Er is een fout opgetreden bij het hernoemen van een bestand in de doelmap: -ErrorRegisterServer=Kan de DLL/OCX niet registreren: %1 -ErrorRegSvr32Failed=RegSvr32 mislukt met afsluitcode %1 -ErrorRegisterTypeLib=Kan de type library niet registreren: %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Alle gebruikers -UninstallDisplayNameMarkCurrentUser=Huidige gebruiker - -; *** Post-installation errors -ErrorOpeningReadme=Er is een fout opgetreden bij het openen van het Leesmij-bestand. -ErrorRestartingComputer=Setup kan de computer niet opnieuw opstarten. Doe dit handmatig. - -; *** Uninstaller messages -UninstallNotFound=Bestand "%1" bestaat niet. Kan het programma niet verwijderen. -UninstallUnsupportedVer=Het installatie-logbestand "%1" heeft een formaat dat niet herkend wordt door deze versie van het verwijderprogramma. Kan het programma niet verwijderen -UninstallUnknownEntry=Er is een onbekend gegeven (%1) aangetroffen in het installatie-logbestand -ConfirmUninstall=Weet u zeker dat u %1 en alle bijbehorende componenten wilt verwijderen? -UninstallOnlyOnWin64=Deze installatie kan alleen worden verwijderd onder 64-bit Windows. -OnlyAdminCanUninstall=Deze installatie kan alleen worden verwijderd door een gebruiker met administratieve rechten. -UninstallStatusLabel=%1 wordt verwijderd van uw computer. Een ogenblik geduld. -UninstallOpenError=Bestand "%1" kon niet worden geopend. Kan het verwijderen niet voltooien. -UninstalledAll=%1 is met succes van deze computer verwijderd. -UninstalledMost=Het verwijderen van %1 is voltooid.%n%nEnkele elementen konden niet verwijderd worden. Deze kunnen handmatig verwijderd worden. -UninstalledAndNeedsRestart=Om het verwijderen van %1 te voltooien, moet uw computer opnieuw worden opgestart.%n%nWilt u nu opnieuw opstarten? -UninstallDataCorrupted="%1" bestand is beschadigd. Kan verwijderen niet voltooien - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Gedeeld bestand verwijderen? -ConfirmDeleteSharedFile2=Het systeem geeft aan dat het volgende gedeelde bestand niet langer gebruikt wordt door enig programma. Wilt u dat dit gedeelde bestand verwijderd wordt?%n%nAls dit bestand toch nog gebruikt wordt door een programma en het verwijderd wordt, werkt dat programma misschien niet meer correct. Als u het niet zeker weet, kies dan Nee. Bewaren van het bestand op dit systeem is niet schadelijk. -SharedFileNameLabel=Bestandsnaam: -SharedFileLocationLabel=Locatie: -WizardUninstalling=Verwijderingsstatus -StatusUninstalling=Verwijderen van %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installeren van %1. -ShutdownBlockReasonUninstallingApp=Verwijderen van %1. - -[CustomMessages] - -NameAndVersion=%1 versie %2 -AdditionalIcons=Extra snelkoppelingen: -CreateDesktopIcon=Maak een snelkoppeling op het &bureaublad -CreateQuickLaunchIcon=Maak een snelkoppeling op de &Snel starten werkbalk -ProgramOnTheWeb=%1 op het Web -UninstallProgram=Verwijder %1 -LaunchProgram=&Start %1 -AssocFileExtension=&Koppel %1 aan de %2 bestandsextensie -AssocingFileExtension=Bezig met koppelen van %1 aan de %2 bestandsextensie... -AutoStartProgramGroupDescription=Opstarten: -AutoStartProgram=%1 automatisch starten -AddonHostProgramNotFound=%1 kon niet worden gevonden in de geselecteerde map.%n%nWilt u toch doorgaan? diff --git a/Dependencies/Inno/Languages/Finnish.isl b/Dependencies/Inno/Languages/Finnish.isl deleted file mode 100644 index 17a5f258..00000000 --- a/Dependencies/Inno/Languages/Finnish.isl +++ /dev/null @@ -1,359 +0,0 @@ -; *** Inno Setup version 6.1.0+ Finnish messages *** -; -; Finnish translation by Antti Karttunen -; E-mail: antti.j.karttunen@iki.fi -; Last modification date: 2020-08-02 - -[LangOptions] -LanguageName=Suomi -LanguageID=$040B -LanguageCodePage=1252 - -[Messages] - -; *** Application titles -SetupAppTitle=Asennus -SetupWindowTitle=%1 - Asennus -UninstallAppTitle=Asennuksen poisto -UninstallAppFullTitle=%1 - Asennuksen poisto - -; *** Misc. common -InformationTitle=Ilmoitus -ConfirmTitle=Varmistus -ErrorTitle=Virhe - -; *** SetupLdr messages -SetupLdrStartupMessage=Tll asennusohjelmalla asennetaan %1. Haluatko jatkaa? -LdrCannotCreateTemp=Vliaikaistiedostoa ei voitu luoda. Asennus keskeytettiin -LdrCannotExecTemp=Vliaikaisessa hakemistossa olevaa tiedostoa ei voitu suorittaa. Asennus keskeytettiin - -; *** Startup error messages -LastErrorMessage=%1.%n%nVirhe %2: %3 -SetupFileMissing=Tiedostoa %1 ei lydy asennushakemistosta. Korjaa ongelma tai hanki uusi kopio ohjelmasta. -SetupFileCorrupt=Asennustiedostot ovat vaurioituneet. Hanki uusi kopio ohjelmasta. -SetupFileCorruptOrWrongVer=Asennustiedostot ovat vaurioituneet tai ovat epyhteensopivia tmn Asennuksen version kanssa. Korjaa ongelma tai hanki uusi kopio ohjelmasta. -InvalidParameter=Virheellinen komentoriviparametri:%n%n%1 -SetupAlreadyRunning=Asennus on jo kynniss. -WindowsVersionNotSupported=Tm ohjelma ei tue kytss olevaa Windowsin versiota. -WindowsServicePackRequired=Tm ohjelma vaatii %1 Service Pack %2 -pivityksen tai myhemmn. -NotOnThisPlatform=Tm ohjelma ei toimi %1-kyttjrjestelmss. -OnlyOnThisPlatform=Tm ohjelma toimii vain %1-kyttjrjestelmss. -OnlyOnTheseArchitectures=Tm ohjelma voidaan asentaa vain niihin Windowsin versioihin, jotka on suunniteltu seuraaville prosessorityypeille:%n%n%1 -WinVersionTooLowError=Tm ohjelma vaatii version %2 tai myhemmn %1-kyttjrjestelmst. -WinVersionTooHighError=Tt ohjelmaa ei voi asentaa %1-kyttjrjestelmn versioon %2 tai myhempn. -AdminPrivilegesRequired=Sinun tytyy kirjautua sisn jrjestelmnvalvojana asentaaksesi tmn ohjelman. -PowerUserPrivilegesRequired=Sinun tytyy kirjautua sisn jrjestelmnvalvojana tai tehokyttjn asentaaksesi tmn ohjelman. -SetupAppRunningError=Asennus lysi kynniss olevan kopion ohjelmasta %1.%n%nSulje kaikki kynniss olevat kopiot ohjelmasta ja valitse OK jatkaaksesi, tai valitse Peruuta poistuaksesi. -UninstallAppRunningError=Asennuksen poisto lysi kynniss olevan kopion ohjelmasta %1.%n%nSulje kaikki kynniss olevat kopiot ohjelmasta ja valitse OK jatkaaksesi, tai valitse Peruuta poistuaksesi. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Valitse asennustapa -PrivilegesRequiredOverrideInstruction=Valitse, kenen kyttn ohjelma asennetaan -PrivilegesRequiredOverrideText1=%1 voidaan asentaa kaikille kyttjille (vaatii jrjestelmnvalvojan oikeudet) tai vain sinun kyttsi. -PrivilegesRequiredOverrideText2=%1 voidaan asentaa vain sinun kyttsi tai kaikille kyttjille (vaatii jrjestelmnvalvojan oikeudet). -PrivilegesRequiredOverrideAllUsers=Asenna &kaikille kyttjille -PrivilegesRequiredOverrideAllUsersRecommended=Asenna &kaikille kyttjille (suositus) -PrivilegesRequiredOverrideCurrentUser=Asenna vain &minun kyttni -PrivilegesRequiredOverrideCurrentUserRecommended=Asenna vain &minun kyttni (suositus) - -; *** Misc. errors -ErrorCreatingDir=Asennus ei voinut luoda hakemistoa "%1" -ErrorTooManyFilesInDir=Tiedoston luominen hakemistoon "%1" eponnistui, koska se sislt liian monta tiedostoa - -; *** Setup common messages -ExitSetupTitle=Poistu Asennuksesta -ExitSetupMessage=Asennus ei ole valmis. Jos lopetat nyt, ohjelmaa ei asenneta.%n%nVoit ajaa Asennuksen toiste asentaaksesi ohjelman.%n%nLopetetaanko Asennus? -AboutSetupMenuItem=&Tietoja Asennuksesta... -AboutSetupTitle=Tietoja Asennuksesta -AboutSetupMessage=%1 versio %2%n%3%n%n%1 -ohjelman kotisivu:%n%4 -AboutSetupNote= -TranslatorNote=Suomenkielinen knns: Antti Karttunen (antti.j.karttunen@iki.fi) - -; *** Buttons -ButtonBack=< &Takaisin -ButtonNext=&Seuraava > -ButtonInstall=&Asenna -ButtonOK=OK -ButtonCancel=Peruuta -ButtonYes=&Kyll -ButtonYesToAll=Kyll k&aikkiin -ButtonNo=&Ei -ButtonNoToAll=E&i kaikkiin -ButtonFinish=&Lopeta -ButtonBrowse=S&elaa... -ButtonWizardBrowse=S&elaa... -ButtonNewFolder=&Luo uusi kansio - -; *** "Select Language" dialog messages -SelectLanguageTitle=Valitse Asennuksen kieli -SelectLanguageLabel=Valitse asentamisen aikana kytettv kieli. - -; *** Common wizard text -ClickNext=Valitse Seuraava jatkaaksesi tai Peruuta poistuaksesi. -BeveledLabel= -BrowseDialogTitle=Selaa kansioita -BrowseDialogLabel=Valitse kansio allaolevasta listasta ja valitse sitten OK jatkaaksesi. -NewFolderName=Uusi kansio - -; *** "Welcome" wizard page -WelcomeLabel1=Tervetuloa [name] -asennusohjelmaan. -WelcomeLabel2=Tll asennusohjelmalla koneellesi asennetaan [name/ver]. %n%nOn suositeltavaa, ett suljet kaikki muut kynniss olevat sovellukset ennen jatkamista. Tm auttaa vlttmn ristiriitatilanteita asennuksen aikana. - -; *** "Password" wizard page -WizardPassword=Salasana -PasswordLabel1=Tm asennusohjelma on suojattu salasanalla. -PasswordLabel3=Anna salasana ja valitse sitten Seuraava jatkaaksesi.%n%nIsot ja pienet kirjaimet ovat eriarvoisia. -PasswordEditLabel=&Salasana: -IncorrectPassword=Antamasi salasana oli virheellinen. Anna salasana uudelleen. - -; *** "License Agreement" wizard page -WizardLicense=Kyttoikeussopimus -LicenseLabel=Lue seuraava trke tiedotus ennen kuin jatkat. -LicenseLabel3=Lue seuraava kyttoikeussopimus tarkasti. Sinun tytyy hyvksy sopimus, jos haluat jatkaa asentamista. -LicenseAccepted=&Hyvksyn sopimuksen -LicenseNotAccepted=&En hyvksy sopimusta - -; *** "Information" wizard pages -WizardInfoBefore=Tiedotus -InfoBeforeLabel=Lue seuraava trke tiedotus ennen kuin jatkat. -InfoBeforeClickLabel=Kun olet valmis jatkamaan asentamista, valitse Seuraava. -WizardInfoAfter=Tiedotus -InfoAfterLabel=Lue seuraava trke tiedotus ennen kuin jatkat. -InfoAfterClickLabel=Kun olet valmis jatkamaan asentamista, valitse Seuraava. - -; *** "Select Destination Directory" wizard page -WizardUserInfo=Kyttjtiedot -UserInfoDesc=Anna pyydetyt tiedot. -UserInfoName=Kyttjn &nimi: -UserInfoOrg=&Yritys: -UserInfoSerial=&Tunnuskoodi: -UserInfoNameRequired=Sinun tytyy antaa nimi. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Valitse kohdekansio -SelectDirDesc=Mihin [name] asennetaan? -SelectDirLabel3=[name] asennetaan thn kansioon. -SelectDirBrowseLabel=Valitse Seuraava jatkaaksesi. Jos haluat vaihtaa kansiota, valitse Selaa. -DiskSpaceGBLabel=Vapaata levytilaa tarvitaan vhintn [gb] Gt. -DiskSpaceMBLabel=Vapaata levytilaa tarvitaan vhintn [mb] Mt. -CannotInstallToNetworkDrive=Asennus ei voi asentaa ohjelmaa verkkoasemalle. -CannotInstallToUNCPath=Asennus ei voi asentaa ohjelmaa UNC-polun alle. -InvalidPath=Anna tydellinen polku levyaseman kirjaimen kanssa. Esimerkiksi %nC:\OHJELMA%n%ntai UNC-polku muodossa %n%n\\palvelin\resurssi -InvalidDrive=Valitsemaasi asemaa tai UNC-polkua ei ole olemassa tai sit ei voi kytt. Valitse toinen asema tai UNC-polku. -DiskSpaceWarningTitle=Ei tarpeeksi vapaata levytilaa -DiskSpaceWarning=Asennus vaatii vhintn %1 kt vapaata levytilaa, mutta valitulla levyasemalla on vain %2 kt vapaata levytilaa.%n%nHaluatko jatkaa tst huolimatta? -DirNameTooLong=Kansion nimi tai polku on liian pitk. -InvalidDirName=Virheellinen kansion nimi. -BadDirName32=Kansion nimess ei saa olla seuraavia merkkej:%n%n%1 -DirExistsTitle=Kansio on olemassa -DirExists=Kansio:%n%n%1%n%non jo olemassa. Haluatko kuitenkin suorittaa asennuksen thn kansioon? -DirDoesntExistTitle=Kansiota ei ole olemassa -DirDoesntExist=Kansiota%n%n%1%n%nei ole olemassa. Luodaanko kansio? - -; *** "Select Components" wizard page -WizardSelectComponents=Valitse asennettavat osat -SelectComponentsDesc=Mitk osat asennetaan? -SelectComponentsLabel2=Valitse ne osat, jotka haluat asentaa, ja poista niiden osien valinta, joita et halua asentaa. Valitse Seuraava, kun olet valmis. -FullInstallation=Normaali asennus -CompactInstallation=Suppea asennus -CustomInstallation=Mukautettu asennus -NoUninstallWarningTitle=Asennettuja osia lydettiin -NoUninstallWarning=Seuraavat osat on jo asennettu koneelle:%n%n%1%n%nNiden osien valinnan poistaminen ei poista niit koneelta.%n%nHaluatko jatkaa tst huolimatta? -ComponentSize1=%1 kt -ComponentSize2=%1 Mt -ComponentsDiskSpaceGBLabel=Nykyiset valinnat vaativat vhintn [gb] Gt levytilaa. -ComponentsDiskSpaceMBLabel=Nykyiset valinnat vaativat vhintn [mb] Mt levytilaa. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Valitse muut toiminnot -SelectTasksDesc=Mit muita toimintoja suoritetaan? -SelectTasksLabel2=Valitse muut toiminnot, jotka haluat Asennuksen suorittavan samalla kun [name] asennetaan. Valitse Seuraava, kun olet valmis. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Valitse Kynnist-valikon kansio -SelectStartMenuFolderDesc=Mihin ohjelman pikakuvakkeet sijoitetaan? -SelectStartMenuFolderLabel3=Ohjelman pikakuvakkeet luodaan thn Kynnist-valikon kansioon. -SelectStartMenuFolderBrowseLabel=Valitse Seuraava jatkaaksesi. Jos haluat vaihtaa kansiota, valitse Selaa. -MustEnterGroupName=Kansiolle pit antaa nimi. -GroupNameTooLong=Kansion nimi tai polku on liian pitk. -InvalidGroupName=Virheellinen kansion nimi. -BadGroupName=Kansion nimess ei saa olla seuraavia merkkej:%n%n%1 -NoProgramGroupCheck2=l luo k&ansiota Kynnist-valikkoon - -; *** "Ready to Install" wizard page -WizardReady=Valmiina asennukseen -ReadyLabel1=[name] on nyt valmis asennettavaksi. -ReadyLabel2a=Valitse Asenna jatkaaksesi asentamista tai valitse Takaisin, jos haluat tarkastella tekemisi asetuksia tai muuttaa niit. -ReadyLabel2b=Valitse Asenna jatkaaksesi asentamista. -ReadyMemoUserInfo=Kyttjtiedot: -ReadyMemoDir=Kohdekansio: -ReadyMemoType=Asennustyyppi: -ReadyMemoComponents=Asennettavaksi valitut osat: -ReadyMemoGroup=Kynnist-valikon kansio: -ReadyMemoTasks=Muut toiminnot: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Ladataan tarvittavia tiedostoja... -ButtonStopDownload=&Pysyt lataus -StopDownload=Oletko varma, ett haluat pysytt tiedostojen latauksen? -ErrorDownloadAborted=Tiedostojen lataaminen keskeytettiin -ErrorDownloadFailed=Tiedoston lataaminen eponnistui: %1 %2 -ErrorDownloadSizeFailed=Latauksen koon noutaminen eponnistui: %1 %2 -ErrorFileHash1=Tiedoston tiivisteen luominen eponnistui: %1 -ErrorFileHash2=Tiedoston tiiviste on virheellinen: odotettu %1, lydetty %2 -ErrorProgress=Virheellinen edistyminen: %1 / %2 -ErrorFileSize=Virheellinen tiedoston koko: odotettu %1, lydetty %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Valmistellaan asennusta -PreparingDesc=Valmistaudutaan asentamaan [name] koneellesi. -PreviousInstallNotCompleted=Edellisen ohjelman asennus tai asennuksen poisto ei ole valmis. Sinun tytyy kynnist kone uudelleen viimeistellksesi edellisen asennuksen.%n%nAja [name] -asennusohjelma uudestaan, kun olet kynnistnyt koneen uudelleen. -CannotContinue=Asennusta ei voida jatkaa. Valitse Peruuta poistuaksesi. -ApplicationsFound=Seuraavat sovellukset kyttvt tiedostoja, joita Asennuksen pit pivitt. On suositeltavaa, ett annat Asennuksen sulkea nm sovellukset automaattisesti. -ApplicationsFound2=Seuraavat sovellukset kyttvt tiedostoja, joita Asennuksen pit pivitt. On suositeltavaa, ett annat Asennuksen sulkea nm sovellukset automaattisesti. Valmistumisen jlkeen Asennus yritt uudelleenkynnist sovellukset. -CloseApplications=&Sulje sovellukset automaattisesti -DontCloseApplications=&l sulje sovelluksia -ErrorCloseApplications=Asennus ei pystynyt sulkemaan tarvittavia sovelluksia automaattisesti. On suositeltavaa, ett ennen jatkamista suljet sovellukset, jotka kyttvt asennuksen aikana pivitettvi tiedostoja. -PrepareToInstallNeedsRestart=Asennuksen tytyy kynnist tietokone uudelleen. Aja Asennus uudelleenkynnistyksen jlkeen, jotta [name] voidaan asentaa.%n%nHaluatko kynnist tietokoneen uudelleen nyt? - -; *** "Installing" wizard page -WizardInstalling=Asennus kynniss -InstallingLabel=Odota, kun [name] asennetaan koneellesi. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=[name] - Asennuksen viimeistely -FinishedLabelNoIcons=[name] on nyt asennettu koneellesi. -FinishedLabel=[name] on nyt asennettu. Sovellus voidaan kynnist valitsemalla jokin asennetuista kuvakkeista. -ClickFinish=Valitse Lopeta poistuaksesi Asennuksesta. -FinishedRestartLabel=Jotta [name] saataisiin asennettua loppuun, pit kone kynnist uudelleen. Haluatko kynnist koneen uudelleen nyt? -FinishedRestartMessage=Jotta [name] saataisiin asennettua loppuun, pit kone kynnist uudelleen.%n%nHaluatko kynnist koneen uudelleen nyt? -ShowReadmeCheck=Kyll, haluan nhd LUEMINUT-tiedoston -YesRadio=&Kyll, kynnist kone uudelleen -NoRadio=&Ei, kynnistn koneen uudelleen myhemmin -RunEntryExec=Kynnist %1 -RunEntryShellExec=Nyt %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Asennus tarvitsee seuraavan levykkeen -SelectDiskLabel2=Aseta levyke %1 asemaan ja valitse OK. %n%nJos joku toinen kansio sislt levykkeen tiedostot, anna oikea polku tai valitse Selaa. -PathLabel=&Polku: -FileNotInDir2=Tiedostoa "%1" ei lytynyt lhteest "%2". Aseta oikea levyke asemaan tai valitse toinen kansio. -SelectDirectoryLabel=Mrit seuraavan levykkeen sislln sijainti. - -; *** Installation phase messages -SetupAborted=Asennusta ei suoritettu loppuun.%n%nKorjaa ongelma ja suorita Asennus uudelleen. -AbortRetryIgnoreSelectAction=Valitse toiminto -AbortRetryIgnoreRetry=&Yrit uudelleen -AbortRetryIgnoreIgnore=&Jatka virheest huolimatta -AbortRetryIgnoreCancel=Peruuta asennus - -; *** Installation status messages -StatusClosingApplications=Suljetaan sovellukset... -StatusCreateDirs=Luodaan hakemistoja... -StatusExtractFiles=Puretaan tiedostoja... -StatusCreateIcons=Luodaan pikakuvakkeita... -StatusCreateIniEntries=Luodaan INI-merkintj... -StatusCreateRegistryEntries=Luodaan rekisterimerkintj... -StatusRegisterFiles=Rekisteridn tiedostoja... -StatusSavingUninstall=Tallennetaan Asennuksen poiston tietoja... -StatusRunProgram=Viimeistelln asennusta... -StatusRestartingApplications=Uudelleenkynnistetn sovellukset... -StatusRollback=Peruutetaan tehdyt muutokset... - -; *** Misc. errors -ErrorInternal2=Sisinen virhe: %1 -ErrorFunctionFailedNoCode=%1 eponnistui -ErrorFunctionFailed=%1 eponnistui; virhekoodi %2 -ErrorFunctionFailedWithMessage=%1 eponnistui; virhekoodi %2.%n%3 -ErrorExecutingProgram=Virhe suoritettaessa tiedostoa%n%1 - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Asennetaan %1. -ShutdownBlockReasonUninstallingApp=Poistetaan %1. - -; *** Registry errors -ErrorRegOpenKey=Virhe avattaessa rekisteriavainta%n%1\%2 -ErrorRegCreateKey=Virhe luotaessa rekisteriavainta%n%1\%2 -ErrorRegWriteKey=Virhe kirjoitettaessa rekisteriavaimeen%n%1\%2 - -; *** INI errors -ErrorIniEntry=Virhe luotaessa INI-merkint tiedostoon "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Ohita tm tiedosto (ei suositeltavaa) -FileAbortRetryIgnoreIgnoreNotRecommended=&Jatka virheest huolimatta (ei suositeltavaa) -SourceIsCorrupted=Lhdetiedosto on vaurioitunut -SourceDoesntExist=Lhdetiedostoa "%1" ei ole olemassa -ExistingFileReadOnly2=Nykyist tiedostoa ei voitu korvata, koska se on Vain luku -tiedosto. -ExistingFileReadOnlyRetry=&Poista Vain luku -asetus ja yrit uudelleen -ExistingFileReadOnlyKeepExisting=&Silyt nykyinen tiedosto -ErrorReadingExistingDest=Virhe luettaessa nykyist tiedostoa: -FileExistsSelectAction=Valitse toiminto -FileExists2=Tiedosto on jo olemassa. -FileExistsOverwriteExisting=Korvaa &olemassa oleva tiedosto -FileExistsKeepExisting=&Silyt olemassa oleva tiedosto -FileExistsOverwriteOrKeepAll=&Hoida muut vastaavat tilanteet samalla tavalla -ExistingFileNewerSelectAction=Valitse toiminto -ExistingFileNewer2=Olemassa oleva tiedosto on uudempi kuin Asennuksen sisltm tiedosto. -ExistingFileNewerOverwriteExisting=Korvaa &olemassa oleva tiedosto -ExistingFileNewerKeepExisting=&Silyt olemassa oleva tiedosto (suositeltavaa) -ExistingFileNewerOverwriteOrKeepAll=&Hoida muut vastaavat tilanteet samalla tavalla -ErrorChangingAttr=Virhe vaihdettaessa nykyisen tiedoston mritteit: -ErrorCreatingTemp=Virhe luotaessa tiedostoa kohdehakemistoon: -ErrorReadingSource=Virhe luettaessa lhdetiedostoa: -ErrorCopying=Virhe kopioitaessa tiedostoa: -ErrorReplacingExistingFile=Virhe korvattaessa nykyist tiedostoa: -ErrorRestartReplace=RestartReplace-komento eponnistui: -ErrorRenamingTemp=Virhe uudelleennimettess tiedostoa kohdehakemistossa: -ErrorRegisterServer=DLL/OCX -laajennuksen rekisterinti eponnistui: %1 -ErrorRegSvr32Failed=RegSvr32-toiminto eponnistui. Virhekoodi: %1 -ErrorRegisterTypeLib=Tyyppikirjaston rekisteriminen eponnistui: %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bittinen -UninstallDisplayNameMark64Bit=64-bittinen -UninstallDisplayNameMarkAllUsers=Kaikki kyttjt -UninstallDisplayNameMarkCurrentUser=Tmnhetkinen kyttj - -; *** Post-installation errors -ErrorOpeningReadme=Virhe avattaessa LUEMINUT-tiedostoa. -ErrorRestartingComputer=Koneen uudelleenkynnistminen ei onnistunut. Suorita uudelleenkynnistys itse. - -; *** Uninstaller messages -UninstallNotFound=Tiedostoa "%1" ei lytynyt. Asennuksen poisto ei onnistu. -UninstallOpenError=Tiedostoa "%1" ei voitu avata. Asennuksen poisto ei onnistu. -UninstallUnsupportedVer=Tm versio Asennuksen poisto-ohjelmasta ei pysty lukemaan lokitiedostoa "%1". Asennuksen poisto ei onnistu -UninstallUnknownEntry=Asennuksen poisto-ohjelman lokitiedostosta lytyi tuntematon merkint (%1) -ConfirmUninstall=Poistetaanko %1 ja kaikki sen osat? -UninstallOnlyOnWin64=Tm ohjelma voidaan poistaa vain 64-bittisest Windowsista ksin. -OnlyAdminCanUninstall=Tmn asennuksen poistaminen vaatii jrjestelmnvalvojan oikeudet. -UninstallStatusLabel=Odota, kun %1 poistetaan koneeltasi. -UninstalledAll=%1 poistettiin onnistuneesti. -UninstalledMost=%1 poistettiin koneelta.%n%nJoitakin osia ei voitu poistaa. Voit poistaa osat itse. -UninstalledAndNeedsRestart=Kone tytyy kynnist uudelleen, jotta %1 voidaan poistaa kokonaan.%n%nHaluatko kynnist koneen uudeelleen nyt? -UninstallDataCorrupted=Tiedosto "%1" on vaurioitunut. Asennuksen poisto ei onnistu. - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Poistetaanko jaettu tiedosto? -ConfirmDeleteSharedFile2=Jrjestelmn mukaan seuraava jaettu tiedosto ei ole en minkn muun sovelluksen kytss. Poistetaanko tiedosto?%n%nJos jotkut sovellukset kyttvt viel tt tiedostoa ja se poistetaan, ne eivt vlttmtt toimi en kunnolla. Jos olet epvarma, valitse Ei. Tiedoston jttminen koneelle ei aiheuta ongelmia. -SharedFileNameLabel=Tiedoston nimi: -SharedFileLocationLabel=Sijainti: -WizardUninstalling=Asennuksen poiston tila -StatusUninstalling=Poistetaan %1... - -[CustomMessages] - -NameAndVersion=%1 versio %2 -AdditionalIcons=Liskuvakkeet: -CreateDesktopIcon=Lu&o kuvake typydlle -CreateQuickLaunchIcon=Luo kuvake &pikakynnistyspalkkiin -ProgramOnTheWeb=%1 Internetiss -UninstallProgram=Poista %1 -LaunchProgram=&Kynnist %1 -AssocFileExtension=&Yhdist %1 tiedostoptteeseen %2 -AssocingFileExtension=Yhdistetn %1 tiedostoptteeseen %2 ... -AutoStartProgramGroupDescription=Kynnistys: -AutoStartProgram=Kynnist %1 automaattisesti -AddonHostProgramNotFound=%1 ei ole valitsemassasi kansiossa.%n%nHaluatko jatkaa tst huolimatta? diff --git a/Dependencies/Inno/Languages/French.isl b/Dependencies/Inno/Languages/French.isl deleted file mode 100644 index 7c8db923..00000000 --- a/Dependencies/Inno/Languages/French.isl +++ /dev/null @@ -1,404 +0,0 @@ -; *** Inno Setup version 6.1.0+ French messages *** -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). -; -; Maintained by Pierre Yager (pierre@levosgien.net) -; -; Contributors : Frédéric Bonduelle, Francis Pallini, Lumina, Pascal Peyrot -; -; Changes : -; + Accents on uppercase letters -; http://www.academie-francaise.fr/langue/questions.html#accentuation (lumina) -; + Typography quotes [see ISBN: 978-2-7433-0482-9] -; http://fr.wikipedia.org/wiki/Guillemet (lumina) -; + Binary units (Kio, Mio) [IEC 80000-13:2008] -; http://fr.wikipedia.org/wiki/Octet (lumina) -; + Reverted to standard units (Ko, Mo) to follow Windows Explorer Standard -; http://blogs.msdn.com/b/oldnewthing/archive/2009/06/11/9725386.aspx -; + Use more standard verbs for click and retry -; "click": "Clicker" instead of "Appuyer" -; "retry": "Recommencer" au lieu de "Réessayer" -; + Added new 6.0.0 messages -; + Added new 6.1.0 messages - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=Français -LanguageID=$040C -LanguageCodePage=1252 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Installation -SetupWindowTitle=Installation - %1 -UninstallAppTitle=Désinstallation -UninstallAppFullTitle=Désinstallation - %1 - -; *** Misc. common -InformationTitle=Information -ConfirmTitle=Confirmation -ErrorTitle=Erreur - -; *** SetupLdr messages -SetupLdrStartupMessage=Cet assistant va installer %1. Voulez-vous continuer ? -LdrCannotCreateTemp=Impossible de créer un fichier temporaire. Abandon de l'installation -LdrCannotExecTemp=Impossible d'exécuter un fichier depuis le dossier temporaire. Abandon de l'installation -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nErreur %2 : %3 -SetupFileMissing=Le fichier %1 est absent du dossier d'installation. Veuillez corriger le problème ou vous procurer une nouvelle copie du programme. -SetupFileCorrupt=Les fichiers d'installation sont altérés. Veuillez vous procurer une nouvelle copie du programme. -SetupFileCorruptOrWrongVer=Les fichiers d'installation sont altérés ou ne sont pas compatibles avec cette version de l'assistant d'installation. Veuillez corriger le problème ou vous procurer une nouvelle copie du programme. -InvalidParameter=Un paramètre non valide a été passé à la ligne de commande :%n%n%1 -SetupAlreadyRunning=L'assistant d'installation est déjà en cours d'exécution. -WindowsVersionNotSupported=Ce programme n'est pas prévu pour fonctionner avec la version de Windows utilisée sur votre ordinateur. -WindowsServicePackRequired=Ce programme a besoin de %1 Service Pack %2 ou d'une version plus récente. -NotOnThisPlatform=Ce programme ne fonctionne pas sous %1. -OnlyOnThisPlatform=Ce programme ne peut fonctionner que sous %1. -OnlyOnTheseArchitectures=Ce programme ne peut être installé que sur des versions de Windows qui supportent ces architectures : %n%n%1 -WinVersionTooLowError=Ce programme requiert la version %2 ou supérieure de %1. -WinVersionTooHighError=Ce programme ne peut pas être installé sous %1 version %2 ou supérieure. -AdminPrivilegesRequired=Vous devez disposer des droits d'administration de cet ordinateur pour installer ce programme. -PowerUserPrivilegesRequired=Vous devez disposer des droits d'administration ou faire partie du groupe « Utilisateurs avec pouvoir » de cet ordinateur pour installer ce programme. -SetupAppRunningError=L'assistant d'installation a détecté que %1 est actuellement en cours d'exécution.%n%nVeuillez fermer toutes les instances de cette application puis cliquer sur OK pour continuer, ou bien cliquer sur Annuler pour abandonner l'installation. -UninstallAppRunningError=La procédure de désinstallation a détecté que %1 est actuellement en cours d'exécution.%n%nVeuillez fermer toutes les instances de cette application puis cliquer sur OK pour continuer, ou bien cliquer sur Annuler pour abandonner la désinstallation. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Choix du Mode d'Installation -PrivilegesRequiredOverrideInstruction=Choisissez le mode d'installation -PrivilegesRequiredOverrideText1=%1 peut être installé pour tous les utilisateurs (nécessite des privilèges administrateur), ou seulement pour vous. -PrivilegesRequiredOverrideText2=%1 peut-être installé seulement pour vous, ou pour tous les utilisateurs (nécessite des privilèges administrateur). -PrivilegesRequiredOverrideAllUsers=Installer pour &tous les utilisateurs -PrivilegesRequiredOverrideAllUsersRecommended=Installer pour &tous les utilisateurs (recommandé) -PrivilegesRequiredOverrideCurrentUser=Installer seulement pour &moi -PrivilegesRequiredOverrideCurrentUserRecommended=Installer seulement pour &moi (recommandé) - -; *** Misc. errors -ErrorCreatingDir=L'assistant d'installation n'a pas pu créer le dossier "%1" -ErrorTooManyFilesInDir=L'assistant d'installation n'a pas pu créer un fichier dans le dossier "%1" car celui-ci contient trop de fichiers - -; *** Setup common messages -ExitSetupTitle=Quitter l'installation -ExitSetupMessage=L'installation n'est pas terminée. Si vous abandonnez maintenant, le programme ne sera pas installé.%n%nVous devrez relancer cet assistant pour finir l'installation.%n%nVoulez-vous quand même quitter l'assistant d'installation ? -AboutSetupMenuItem=À &propos... -AboutSetupTitle=À Propos de l'assistant d'installation -AboutSetupMessage=%1 version %2%n%3%n%nPage d'accueil de %1 :%n%4 -AboutSetupNote= -TranslatorNote=Traduction française maintenue par Pierre Yager (pierre@levosgien.net) - -; *** Buttons -ButtonBack=< &Précédent -ButtonNext=&Suivant > -ButtonInstall=&Installer -ButtonOK=OK -ButtonCancel=Annuler -ButtonYes=&Oui -ButtonYesToAll=Oui pour &tout -ButtonNo=&Non -ButtonNoToAll=N&on pour tout -ButtonFinish=&Terminer -ButtonBrowse=Pa&rcourir... -ButtonWizardBrowse=Pa&rcourir... -ButtonNewFolder=Nouveau &dossier - -; *** "Select Language" dialog messages -SelectLanguageTitle=Langue de l'assistant d'installation -SelectLanguageLabel=Veuillez sélectionner la langue qui sera utilisée par l'assistant d'installation. - -; *** Common wizard text -ClickNext=Cliquez sur Suivant pour continuer ou sur Annuler pour abandonner l'installation. -BeveledLabel= -BrowseDialogTitle=Parcourir les dossiers -BrowseDialogLabel=Veuillez choisir un dossier de destination, puis cliquez sur OK. -NewFolderName=Nouveau dossier - -; *** "Welcome" wizard page -WelcomeLabel1=Bienvenue dans l'assistant d'installation de [name] -WelcomeLabel2=Cet assistant va vous guider dans l'installation de [name/ver] sur votre ordinateur.%n%nIl est recommandé de fermer toutes les applications actives avant de continuer. - -; *** "Password" wizard page -WizardPassword=Mot de passe -PasswordLabel1=Cette installation est protégée par un mot de passe. -PasswordLabel3=Veuillez saisir le mot de passe (attention à la distinction entre majuscules et minuscules) puis cliquez sur Suivant pour continuer. -PasswordEditLabel=&Mot de passe : -IncorrectPassword=Le mot de passe saisi n'est pas valide. Veuillez essayer à nouveau. - -; *** "License Agreement" wizard page -WizardLicense=Accord de licence -LicenseLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. -LicenseLabel3=Veuillez lire le contrat de licence suivant. Vous devez en accepter tous les termes avant de continuer l'installation. -LicenseAccepted=Je comprends et j'&accepte les termes du contrat de licence -LicenseNotAccepted=Je &refuse les termes du contrat de licence - -; *** "Information" wizard pages -WizardInfoBefore=Information -InfoBeforeLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. -InfoBeforeClickLabel=Lorsque vous êtes prêt à continuer, cliquez sur Suivant. -WizardInfoAfter=Information -InfoAfterLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. -InfoAfterClickLabel=Lorsque vous êtes prêt à continuer, cliquez sur Suivant. - -; *** "User Information" wizard page -WizardUserInfo=Informations sur l'Utilisateur -UserInfoDesc=Veuillez saisir les informations qui vous concernent. -UserInfoName=&Nom d'utilisateur : -UserInfoOrg=&Organisation : -UserInfoSerial=Numéro de &série : -UserInfoNameRequired=Vous devez au moins saisir un nom. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Dossier de destination -SelectDirDesc=Où [name] doit-il être installé ? -SelectDirLabel3=L'assistant va installer [name] dans le dossier suivant. -SelectDirBrowseLabel=Pour continuer, cliquez sur Suivant. Si vous souhaitez choisir un dossier différent, cliquez sur Parcourir. -DiskSpaceGBLabel=Le programme requiert au moins [gb] Go d'espace disque disponible. -DiskSpaceMBLabel=Le programme requiert au moins [mb] Mo d'espace disque disponible. -CannotInstallToNetworkDrive=L'assistant ne peut pas installer sur un disque réseau. -CannotInstallToUNCPath=L'assistant ne peut pas installer sur un chemin UNC. -InvalidPath=Vous devez saisir un chemin complet avec sa lettre de lecteur ; par exemple :%n%nC:\APP%n%nou un chemin réseau de la forme :%n%n\\serveur\partage -InvalidDrive=L'unité ou l'emplacement réseau que vous avez sélectionné n'existe pas ou n'est pas accessible. Veuillez choisir une autre destination. -DiskSpaceWarningTitle=Espace disponible insuffisant -DiskSpaceWarning=L'assistant a besoin d'au moins %1 Ko d'espace disponible pour effectuer l'installation, mais l'unité que vous avez sélectionnée ne dispose que de %2 Ko d'espace disponible.%n%nSouhaitez-vous continuer malgré tout ? -DirNameTooLong=Le nom ou le chemin du dossier est trop long. -InvalidDirName=Le nom du dossier est invalide. -BadDirName32=Le nom du dossier ne doit contenir aucun des caractères suivants :%n%n%1 -DirExistsTitle=Dossier existant -DirExists=Le dossier :%n%n%1%n%nexiste déjà. Souhaitez-vous installer dans ce dossier malgré tout ? -DirDoesntExistTitle=Le dossier n'existe pas -DirDoesntExist=Le dossier %n%n%1%n%nn'existe pas. Souhaitez-vous que ce dossier soit créé ? - -; *** "Select Components" wizard page -WizardSelectComponents=Composants à installer -SelectComponentsDesc=Quels composants de l'application souhaitez-vous installer ? -SelectComponentsLabel2=Sélectionnez les composants que vous désirez installer ; décochez les composants que vous ne désirez pas installer. Cliquez ensuite sur Suivant pour continuer l'installation. -FullInstallation=Installation complète -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Installation compacte -CustomInstallation=Installation personnalisée -NoUninstallWarningTitle=Composants existants -NoUninstallWarning=L'assistant d'installation a détecté que les composants suivants sont déjà installés sur votre système :%n%n%1%n%nDésélectionner ces composants ne les désinstallera pas pour autant.%n%nVoulez-vous continuer malgré tout ? -ComponentSize1=%1 Ko -ComponentSize2=%1 Mo -ComponentsDiskSpaceGBLabel=Les composants sélectionnés nécessitent au moins [gb] Go d'espace disponible. -ComponentsDiskSpaceMBLabel=Les composants sélectionnés nécessitent au moins [mb] Mo d'espace disponible. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Tâches supplémentaires -SelectTasksDesc=Quelles sont les tâches supplémentaires qui doivent être effectuées ? -SelectTasksLabel2=Sélectionnez les tâches supplémentaires que l'assistant d'installation doit effectuer pendant l'installation de [name], puis cliquez sur Suivant. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Sélection du dossier du menu Démarrer -SelectStartMenuFolderDesc=Où l'assistant d'installation doit-il placer les raccourcis du programme ? -SelectStartMenuFolderLabel3=L'assistant va créer les raccourcis du programme dans le dossier du menu Démarrer indiqué ci-dessous. -SelectStartMenuFolderBrowseLabel=Cliquez sur Suivant pour continuer. Cliquez sur Parcourir si vous souhaitez sélectionner un autre dossier du menu Démarrer. -MustEnterGroupName=Vous devez saisir un nom de dossier du menu Démarrer. -GroupNameTooLong=Le nom ou le chemin du dossier est trop long. -InvalidGroupName=Le nom du dossier n'est pas valide. -BadGroupName=Le nom du dossier ne doit contenir aucun des caractères suivants :%n%n%1 -NoProgramGroupCheck2=Ne pas créer de &dossier dans le menu Démarrer - -; *** "Ready to Install" wizard page -WizardReady=Prêt à installer -ReadyLabel1=L'assistant dispose à présent de toutes les informations pour installer [name] sur votre ordinateur. -ReadyLabel2a=Cliquez sur Installer pour procéder à l'installation ou sur Précédent pour revoir ou modifier une option d'installation. -ReadyLabel2b=Cliquez sur Installer pour procéder à l'installation. -ReadyMemoUserInfo=Informations sur l'utilisateur : -ReadyMemoDir=Dossier de destination : -ReadyMemoType=Type d'installation : -ReadyMemoComponents=Composants sélectionnés : -ReadyMemoGroup=Dossier du menu Démarrer : -ReadyMemoTasks=Tâches supplémentaires : - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Téléchargement de fichiers supplémentaires... -ButtonStopDownload=&Arrêter le téléchargement -StopDownload=Êtes-vous sûr de vouloir arrêter le téléchargement ? -ErrorDownloadAborted=Téléchargement annulé -ErrorDownloadFailed=Le téléchargement a échoué : %1 %2 -ErrorDownloadSizeFailed=La récupération de la taille du fichier a échouée : %1 %2 -ErrorFileHash1=Le calcul de l'empreinte du fichier a échoué : %1 -ErrorFileHash2=Empreinte du fichier invalide : attendue %1, trouvée %2 -ErrorProgress=Progression invalide : %1 sur %2 -ErrorFileSize=Taille du fichier invalide : attendue %1, trouvée %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Préparation de l'installation -PreparingDesc=L'assistant d'installation prépare l'installation de [name] sur votre ordinateur. -PreviousInstallNotCompleted=L'installation ou la suppression d'un programme précédent n'est pas totalement achevée. Veuillez redémarrer votre ordinateur pour achever cette installation ou suppression.%n%nUne fois votre ordinateur redémarré, veuillez relancer cet assistant pour reprendre l'installation de [name]. -CannotContinue=L'assistant ne peut pas continuer. Veuillez cliquer sur Annuler pour abandonner l'installation. -ApplicationsFound=Les applications suivantes utilisent des fichiers qui doivent être mis à jour par l'assistant. Il est recommandé d'autoriser l'assistant à fermer ces applications automatiquement. -ApplicationsFound2=Les applications suivantes utilisent des fichiers qui doivent être mis à jour par l'assistant. Il est recommandé d'autoriser l'assistant à fermer ces applications automatiquement. Une fois l'installation terminée, l'assistant essaiera de relancer ces applications. -CloseApplications=&Arrêter les applications automatiquement -DontCloseApplications=&Ne pas arrêter les applications -ErrorCloseApplications=L'assistant d'installation n'a pas pu arrêter toutes les applications automatiquement. Nous vous recommandons de fermer toutes les applications qui utilisent des fichiers devant être mis à jour par l'assistant d'installation avant de continuer. -PrepareToInstallNeedsRestart=L'assistant d'installation doit redémarrer votre ordinateur. Une fois votre ordinateur redémarré, veuillez relancer cet assistant d'installation pour terminer l'installation de [name].%n%nVoulez-vous redémarrer votre ordinateur maintenant ? - -; *** "Installing" wizard page -WizardInstalling=Installation en cours -InstallingLabel=Veuillez patienter pendant que l'assistant installe [name] sur votre ordinateur. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Fin de l'installation de [name] -FinishedLabelNoIcons=L'assistant a terminé l'installation de [name] sur votre ordinateur. -FinishedLabel=L'assistant a terminé l'installation de [name] sur votre ordinateur. L'application peut être lancée à l'aide des icônes créées sur le Bureau par l'installation. -ClickFinish=Veuillez cliquer sur Terminer pour quitter l'assistant d'installation. -FinishedRestartLabel=L'assistant doit redémarrer votre ordinateur pour terminer l'installation de [name].%n%nVoulez-vous redémarrer maintenant ? -FinishedRestartMessage=L'assistant doit redémarrer votre ordinateur pour terminer l'installation de [name].%n%nVoulez-vous redémarrer maintenant ? -ShowReadmeCheck=Oui, je souhaite lire le fichier LISEZMOI -YesRadio=&Oui, redémarrer mon ordinateur maintenant -NoRadio=&Non, je préfère redémarrer mon ordinateur plus tard -; used for example as 'Run MyProg.exe' -RunEntryExec=Exécuter %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Voir %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=L'assistant a besoin du disque suivant -SelectDiskLabel2=Veuillez insérer le disque %1 et cliquer sur OK.%n%nSi les fichiers de ce disque se trouvent à un emplacement différent de celui indiqué ci-dessous, veuillez saisir le chemin correspondant ou cliquez sur Parcourir. -PathLabel=&Chemin : -FileNotInDir2=Le fichier "%1" ne peut pas être trouvé dans "%2". Veuillez insérer le bon disque ou sélectionner un autre dossier. -SelectDirectoryLabel=Veuillez indiquer l'emplacement du disque suivant. - -; *** Installation phase messages -SetupAborted=L'installation n'est pas terminée.%n%nVeuillez corriger le problème et relancer l'installation. -AbortRetryIgnoreSelectAction=Choisissez une action -AbortRetryIgnoreRetry=&Recommencer -AbortRetryIgnoreIgnore=&Ignorer l'erreur et continuer -AbortRetryIgnoreCancel=Annuler l'installation - -; *** Installation status messages -StatusClosingApplications=Ferme les applications... -StatusCreateDirs=Création des dossiers... -StatusExtractFiles=Extraction des fichiers... -StatusCreateIcons=Création des raccourcis... -StatusCreateIniEntries=Création des entrées du fichier INI... -StatusCreateRegistryEntries=Création des entrées de registre... -StatusRegisterFiles=Enregistrement des fichiers... -StatusSavingUninstall=Sauvegarde des informations de désinstallation... -StatusRunProgram=Finalisation de l'installation... -StatusRestartingApplications=Relance les applications... -StatusRollback=Annulation des modifications... - -; *** Misc. errors -ErrorInternal2=Erreur interne : %1 -ErrorFunctionFailedNoCode=%1 a échoué -ErrorFunctionFailed=%1 a échoué ; code %2 -ErrorFunctionFailedWithMessage=%1 a échoué ; code %2.%n%3 -ErrorExecutingProgram=Impossible d'exécuter le fichier :%n%1 - -; *** Registry errors -ErrorRegOpenKey=Erreur lors de l'ouverture de la clé de registre :%n%1\%2 -ErrorRegCreateKey=Erreur lors de la création de la clé de registre :%n%1\%2 -ErrorRegWriteKey=Erreur lors de l'écriture de la clé de registre :%n%1\%2 - -; *** INI errors -ErrorIniEntry=Erreur d'écriture d'une entrée dans le fichier INI "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Ignorer ce fichier (non recommandé) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorer l'erreur et continuer (non recommandé) -SourceIsCorrupted=Le fichier source est altéré -SourceDoesntExist=Le fichier source "%1" n'existe pas -ExistingFileReadOnly2=Le fichier existant ne peut pas être remplacé parce qu'il est protégé par l'attribut lecture seule. -ExistingFileReadOnlyRetry=&Supprimer l'attribut lecture seule et réessayer -ExistingFileReadOnlyKeepExisting=&Conserver le fichier existant -ErrorReadingExistingDest=Une erreur s'est produite lors de la tentative de lecture du fichier existant : -FileExistsSelectAction=Choisissez une action -FileExists2=Le fichier existe déjà. -FileExistsOverwriteExisting=&Ecraser le fichier existant -FileExistsKeepExisting=&Conserver le fichier existant -FileExistsOverwriteOrKeepAll=&Faire ceci pour les conflits à venir -ExistingFileNewerSelectAction=Choisissez une action -ExistingFileNewer2=Le fichier existant est plus récent que celui que l'assistant d'installation est en train d'installer. -ExistingFileNewerOverwriteExisting=&Ecraser le fichier existant -ExistingFileNewerKeepExisting=&Conserver le fichier existant (recommandé) -ExistingFileNewerOverwriteOrKeepAll=&Faire ceci pour les conflits à venir -ErrorChangingAttr=Une erreur est survenue en essayant de modifier les attributs du fichier existant : -ErrorCreatingTemp=Une erreur est survenue en essayant de créer un fichier dans le dossier de destination : -ErrorReadingSource=Une erreur est survenue lors de la lecture du fichier source : -ErrorCopying=Une erreur est survenue lors de la copie d'un fichier : -ErrorReplacingExistingFile=Une erreur est survenue lors du remplacement d'un fichier existant : -ErrorRestartReplace=Le marquage d'un fichier pour remplacement au redémarrage de l'ordinateur a échoué : -ErrorRenamingTemp=Une erreur est survenue en essayant de renommer un fichier dans le dossier de destination : -ErrorRegisterServer=Impossible d'enregistrer la bibliothèque DLL/OCX : %1 -ErrorRegSvr32Failed=RegSvr32 a échoué et a retourné le code d'erreur %1 -ErrorRegisterTypeLib=Impossible d'enregistrer la bibliothèque de type : %1 - -; *** Nom d'affichage pour la désinstallaton -; par exemple 'Mon Programme (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; ou par exemple 'Mon Programme (32-bit, Tous les utilisateurs)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Tous les utilisateurs -UninstallDisplayNameMarkCurrentUser=Utilisateur courant - -; *** Post-installation errors -ErrorOpeningReadme=Une erreur est survenue à l'ouverture du fichier LISEZMOI. -ErrorRestartingComputer=L'installation n'a pas pu redémarrer l'ordinateur. Merci de bien vouloir le faire vous-même. - -; *** Uninstaller messages -UninstallNotFound=Le fichier "%1" n'existe pas. Impossible de désinstaller. -UninstallOpenError=Le fichier "%1" n'a pas pu être ouvert. Impossible de désinstaller -UninstallUnsupportedVer=Le format du fichier journal de désinstallation "%1" n'est pas reconnu par cette version de la procédure de désinstallation. Impossible de désinstaller -UninstallUnknownEntry=Une entrée inconnue (%1) a été rencontrée dans le fichier journal de désinstallation -ConfirmUninstall=Voulez-vous vraiment désinstaller complètement %1 ainsi que tous ses composants ? -UninstallOnlyOnWin64=La désinstallation de ce programme ne fonctionne qu'avec une version 64 bits de Windows. -OnlyAdminCanUninstall=Ce programme ne peut être désinstallé que par un utilisateur disposant des droits d'administration. -UninstallStatusLabel=Veuillez patienter pendant que %1 est retiré de votre ordinateur. -UninstalledAll=%1 a été correctement désinstallé de cet ordinateur. -UninstalledMost=La désinstallation de %1 est terminée.%n%nCertains éléments n'ont pas pu être supprimés automatiquement. Vous pouvez les supprimer manuellement. -UninstalledAndNeedsRestart=Vous devez redémarrer l'ordinateur pour terminer la désinstallation de %1.%n%nVoulez-vous redémarrer maintenant ? -UninstallDataCorrupted=Le ficher "%1" est altéré. Impossible de désinstaller - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Supprimer les fichiers partagés ? -ConfirmDeleteSharedFile2=Le système indique que le fichier partagé suivant n'est plus utilisé par aucun programme. Souhaitez-vous que la désinstallation supprime ce fichier partagé ?%n%nSi des programmes utilisent encore ce fichier et qu'il est supprimé, ces programmes ne pourront plus fonctionner correctement. Si vous n'êtes pas sûr, choisissez Non. Laisser ce fichier dans votre système ne posera pas de problème. -SharedFileNameLabel=Nom du fichier : -SharedFileLocationLabel=Emplacement : -WizardUninstalling=État de la désinstallation -StatusUninstalling=Désinstallation de %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installe %1. -ShutdownBlockReasonUninstallingApp=Désinstalle %1. - -; Les messages personnalisés suivants ne sont pas utilisé par l'installation -; elle-même, mais si vous les utilisez dans vos scripts, vous devez les -; traduire - -[CustomMessages] - -NameAndVersion=%1 version %2 -AdditionalIcons=Icônes supplémentaires : -CreateDesktopIcon=Créer une icône sur le &Bureau -CreateQuickLaunchIcon=Créer une icône dans la barre de &Lancement rapide -ProgramOnTheWeb=Page d'accueil de %1 -UninstallProgram=Désinstaller %1 -LaunchProgram=Exécuter %1 -AssocFileExtension=&Associer %1 avec l'extension de fichier %2 -AssocingFileExtension=Associe %1 avec l'extension de fichier %2... -AutoStartProgramGroupDescription=Démarrage : -AutoStartProgram=Démarrer automatiquement %1 -AddonHostProgramNotFound=%1 n'a pas été trouvé dans le dossier que vous avez choisi.%n%nVoulez-vous continuer malgré tout ? diff --git a/Dependencies/Inno/Languages/German.isl b/Dependencies/Inno/Languages/German.isl deleted file mode 100644 index 9877b2b9..00000000 --- a/Dependencies/Inno/Languages/German.isl +++ /dev/null @@ -1,406 +0,0 @@ -; ****************************************************** -; *** *** -; *** Inno Setup version 6.1.0+ German messages *** -; *** *** -; *** Changes 6.0.0+ Author: *** -; *** *** -; *** Jens Brand (jens.brand@wolf-software.de) *** -; *** *** -; *** Original Authors: *** -; *** *** -; *** Peter Stadler (Peter.Stadler@univie.ac.at) *** -; *** Michael Reitz (innosetup@assimilate.de) *** -; *** *** -; *** Contributors: *** -; *** *** -; *** Roland Ruder (info@rr4u.de) *** -; *** Hans Sperber (Hans.Sperber@de.bosch.com) *** -; *** LaughingMan (puma.d@web.de) *** -; *** *** -; ****************************************************** -; -; Diese Übersetzung hält sich an die neue deutsche Rechtschreibung. - -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ - -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=Deutsch -LanguageID=$0407 -LanguageCodePage=1252 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Setup -SetupWindowTitle=Setup - %1 -UninstallAppTitle=Entfernen -UninstallAppFullTitle=%1 entfernen - -; *** Misc. common -InformationTitle=Information -ConfirmTitle=Bestätigen -ErrorTitle=Fehler - -; *** SetupLdr messages -SetupLdrStartupMessage=%1 wird jetzt installiert. Möchten Sie fortfahren? -LdrCannotCreateTemp=Es konnte keine temporäre Datei erstellt werden. Das Setup wurde abgebrochen -LdrCannotExecTemp=Die Datei konnte nicht im temporären Ordner ausgeführt werden. Das Setup wurde abgebrochen -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nFehler %2: %3 -SetupFileMissing=Die Datei %1 fehlt im Installationsordner. Bitte beheben Sie das Problem oder besorgen Sie sich eine neue Kopie des Programms. -SetupFileCorrupt=Die Setup-Dateien sind beschädigt. Besorgen Sie sich bitte eine neue Kopie des Programms. -SetupFileCorruptOrWrongVer=Die Setup-Dateien sind beschädigt oder inkompatibel zu dieser Version des Setups. Bitte beheben Sie das Problem oder besorgen Sie sich eine neue Kopie des Programms. -InvalidParameter=Ein ungültiger Parameter wurde auf der Kommandozeile übergeben:%n%n%1 -SetupAlreadyRunning=Setup läuft bereits. -WindowsVersionNotSupported=Dieses Programm unterstützt die auf Ihrem Computer installierte Windows-Version nicht. -WindowsServicePackRequired=Dieses Programm benötigt %1 Service Pack %2 oder höher. -NotOnThisPlatform=Dieses Programm kann nicht unter %1 ausgeführt werden. -OnlyOnThisPlatform=Dieses Programm muss unter %1 ausgeführt werden. -OnlyOnTheseArchitectures=Dieses Programm kann nur auf Windows-Versionen installiert werden, die folgende Prozessor-Architekturen unterstützen:%n%n%1 -WinVersionTooLowError=Dieses Programm benötigt %1 Version %2 oder höher. -WinVersionTooHighError=Dieses Programm kann nicht unter %1 Version %2 oder höher installiert werden. -AdminPrivilegesRequired=Sie müssen als Administrator angemeldet sein, um dieses Programm installieren zu können. -PowerUserPrivilegesRequired=Sie müssen als Administrator oder als Mitglied der Hauptbenutzer-Gruppe angemeldet sein, um dieses Programm installieren zu können. -SetupAppRunningError=Das Setup hat entdeckt, dass %1 zurzeit ausgeführt wird.%n%nBitte schließen Sie jetzt alle laufenden Instanzen und klicken Sie auf "OK", um fortzufahren, oder auf "Abbrechen", um zu beenden. -UninstallAppRunningError=Die Deinstallation hat entdeckt, dass %1 zurzeit ausgeführt wird.%n%nBitte schließen Sie jetzt alle laufenden Instanzen und klicken Sie auf "OK", um fortzufahren, oder auf "Abbrechen", um zu beenden. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Installationsmodus auswählen -PrivilegesRequiredOverrideInstruction=Bitte wählen Sie den Installationsmodus -PrivilegesRequiredOverrideText1=%1 kann für alle Benutzer (erfordert Administrationsrechte) oder nur für Sie installiert werden. -PrivilegesRequiredOverrideText2=%1 kann nur für Sie oder für alle Benutzer (erfordert Administrationsrechte) installiert werden. -PrivilegesRequiredOverrideAllUsers=Installation für &alle Benutzer -PrivilegesRequiredOverrideAllUsersRecommended=Installation für &alle Benutzer (empfohlen) -PrivilegesRequiredOverrideCurrentUser=Installation nur für &Sie -PrivilegesRequiredOverrideCurrentUserRecommended=Installation nur für &Sie (empfohlen) - -; *** Misc. errors -ErrorCreatingDir=Das Setup konnte den Ordner "%1" nicht erstellen. -ErrorTooManyFilesInDir=Das Setup konnte eine Datei im Ordner "%1" nicht erstellen, weil er zu viele Dateien enthält. - -; *** Setup common messages -ExitSetupTitle=Setup verlassen -ExitSetupMessage=Das Setup ist noch nicht abgeschlossen. Wenn Sie jetzt beenden, wird das Programm nicht installiert.%n%nSie können das Setup zu einem späteren Zeitpunkt nochmals ausführen, um die Installation zu vervollständigen.%n%nSetup verlassen? -AboutSetupMenuItem=&Über das Setup ... -AboutSetupTitle=Über das Setup -AboutSetupMessage=%1 Version %2%n%3%n%n%1 Webseite:%n%4 -AboutSetupNote= -TranslatorNote=German translation maintained by Jens Brand (jens.brand@wolf-software.de) - -; *** Buttons -ButtonBack=< &Zurück -ButtonNext=&Weiter > -ButtonInstall=&Installieren -ButtonOK=OK -ButtonCancel=Abbrechen -ButtonYes=&Ja -ButtonYesToAll=J&a für Alle -ButtonNo=&Nein -ButtonNoToAll=N&ein für Alle -ButtonFinish=&Fertigstellen -ButtonBrowse=&Durchsuchen ... -ButtonWizardBrowse=Du&rchsuchen ... -ButtonNewFolder=&Neuen Ordner erstellen - -; *** "Select Language" dialog messages -SelectLanguageTitle=Setup-Sprache auswählen -SelectLanguageLabel=Wählen Sie die Sprache aus, die während der Installation benutzt werden soll: - -; *** Common wizard text -ClickNext="Weiter" zum Fortfahren, "Abbrechen" zum Verlassen. -BeveledLabel= -BrowseDialogTitle=Ordner suchen -BrowseDialogLabel=Wählen Sie einen Ordner aus und klicken Sie danach auf "OK". -NewFolderName=Neuer Ordner - -; *** "Welcome" wizard page -WelcomeLabel1=Willkommen zum [name] Setup-Assistenten -WelcomeLabel2=Dieser Assistent wird jetzt [name/ver] auf Ihrem Computer installieren.%n%nSie sollten alle anderen Anwendungen beenden, bevor Sie mit dem Setup fortfahren. - -; *** "Password" wizard page -WizardPassword=Passwort -PasswordLabel1=Diese Installation wird durch ein Passwort geschützt. -PasswordLabel3=Bitte geben Sie das Passwort ein und klicken Sie danach auf "Weiter". Achten Sie auf korrekte Groß-/Kleinschreibung. -PasswordEditLabel=&Passwort: -IncorrectPassword=Das eingegebene Passwort ist nicht korrekt. Bitte versuchen Sie es noch einmal. - -; *** "License Agreement" wizard page -WizardLicense=Lizenzvereinbarung -LicenseLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren. -LicenseLabel3=Lesen Sie bitte die folgenden Lizenzvereinbarungen. Benutzen Sie bei Bedarf die Bildlaufleiste oder drücken Sie die "Bild Ab"-Taste. -LicenseAccepted=Ich &akzeptiere die Vereinbarung -LicenseNotAccepted=Ich &lehne die Vereinbarung ab - -; *** "Information" wizard pages -WizardInfoBefore=Information -InfoBeforeLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren. -InfoBeforeClickLabel=Klicken Sie auf "Weiter", sobald Sie bereit sind, mit dem Setup fortzufahren. -WizardInfoAfter=Information -InfoAfterLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren. -InfoAfterClickLabel=Klicken Sie auf "Weiter", sobald Sie bereit sind, mit dem Setup fortzufahren. - -; *** "User Information" wizard page -WizardUserInfo=Benutzerinformationen -UserInfoDesc=Bitte tragen Sie Ihre Daten ein. -UserInfoName=&Name: -UserInfoOrg=&Organisation: -UserInfoSerial=&Seriennummer: -UserInfoNameRequired=Sie müssen einen Namen eintragen. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Ziel-Ordner wählen -SelectDirDesc=Wohin soll [name] installiert werden? -SelectDirLabel3=Das Setup wird [name] in den folgenden Ordner installieren. -SelectDirBrowseLabel=Klicken Sie auf "Weiter", um fortzufahren. Klicken Sie auf "Durchsuchen", falls Sie einen anderen Ordner auswählen möchten. -DiskSpaceGBLabel=Mindestens [gb] GB freier Speicherplatz ist erforderlich. -DiskSpaceMBLabel=Mindestens [mb] MB freier Speicherplatz ist erforderlich. -CannotInstallToNetworkDrive=Das Setup kann nicht in einen Netzwerk-Pfad installieren. -CannotInstallToUNCPath=Das Setup kann nicht in einen UNC-Pfad installieren. Wenn Sie auf ein Netzlaufwerk installieren möchten, müssen Sie dem Netzwerkpfad einen Laufwerksbuchstaben zuordnen. -InvalidPath=Sie müssen einen vollständigen Pfad mit einem Laufwerksbuchstaben angeben, z. B.:%n%nC:\Beispiel%n%noder einen UNC-Pfad in der Form:%n%n\\Server\Freigabe -InvalidDrive=Das angegebene Laufwerk bzw. der UNC-Pfad existiert nicht oder es kann nicht darauf zugegriffen werden. Wählen Sie bitte einen anderen Ordner. -DiskSpaceWarningTitle=Nicht genug freier Speicherplatz -DiskSpaceWarning=Das Setup benötigt mindestens %1 KB freien Speicherplatz zum Installieren, aber auf dem ausgewählten Laufwerk sind nur %2 KB verfügbar.%n%nMöchten Sie trotzdem fortfahren? -DirNameTooLong=Der Ordnername/Pfad ist zu lang. -InvalidDirName=Der Ordnername ist nicht gültig. -BadDirName32=Ordnernamen dürfen keine der folgenden Zeichen enthalten:%n%n%1 -DirExistsTitle=Ordner existiert bereits -DirExists=Der Ordner:%n%n%1%n%n existiert bereits. Möchten Sie trotzdem in diesen Ordner installieren? -DirDoesntExistTitle=Ordner ist nicht vorhanden -DirDoesntExist=Der Ordner:%n%n%1%n%nist nicht vorhanden. Soll der Ordner erstellt werden? - -; *** "Select Components" wizard page -WizardSelectComponents=Komponenten auswählen -SelectComponentsDesc=Welche Komponenten sollen installiert werden? -SelectComponentsLabel2=Wählen Sie die Komponenten aus, die Sie installieren möchten. Klicken Sie auf "Weiter", wenn Sie bereit sind, fortzufahren. -FullInstallation=Vollständige Installation -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Kompakte Installation -CustomInstallation=Benutzerdefinierte Installation -NoUninstallWarningTitle=Komponenten vorhanden -NoUninstallWarning=Das Setup hat festgestellt, dass die folgenden Komponenten bereits auf Ihrem Computer installiert sind:%n%n%1%n%nDiese nicht mehr ausgewählten Komponenten werden nicht vom Computer entfernt.%n%nMöchten Sie trotzdem fortfahren? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Die aktuelle Auswahl erfordert mindestens [gb] GB Speicherplatz. -ComponentsDiskSpaceMBLabel=Die aktuelle Auswahl erfordert mindestens [mb] MB Speicherplatz. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Zusätzliche Aufgaben auswählen -SelectTasksDesc=Welche zusätzlichen Aufgaben sollen ausgeführt werden? -SelectTasksLabel2=Wählen Sie die zusätzlichen Aufgaben aus, die das Setup während der Installation von [name] ausführen soll, und klicken Sie danach auf "Weiter". - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Startmenü-Ordner auswählen -SelectStartMenuFolderDesc=Wo soll das Setup die Programm-Verknüpfungen erstellen? -SelectStartMenuFolderLabel3=Das Setup wird die Programm-Verknüpfungen im folgenden Startmenü-Ordner erstellen. -SelectStartMenuFolderBrowseLabel=Klicken Sie auf "Weiter", um fortzufahren. Klicken Sie auf "Durchsuchen", falls Sie einen anderen Ordner auswählen möchten. -MustEnterGroupName=Sie müssen einen Ordnernamen eingeben. -GroupNameTooLong=Der Ordnername/Pfad ist zu lang. -InvalidGroupName=Der Ordnername ist nicht gültig. -BadGroupName=Der Ordnername darf keine der folgenden Zeichen enthalten:%n%n%1 -NoProgramGroupCheck2=&Keinen Ordner im Startmenü erstellen - -; *** "Ready to Install" wizard page -WizardReady=Bereit zur Installation. -ReadyLabel1=Das Setup ist jetzt bereit, [name] auf Ihrem Computer zu installieren. -ReadyLabel2a=Klicken Sie auf "Installieren", um mit der Installation zu beginnen, oder auf "Zurück", um Ihre Einstellungen zu überprüfen oder zu ändern. -ReadyLabel2b=Klicken Sie auf "Installieren", um mit der Installation zu beginnen. -ReadyMemoUserInfo=Benutzerinformationen: -ReadyMemoDir=Ziel-Ordner: -ReadyMemoType=Setup-Typ: -ReadyMemoComponents=Ausgewählte Komponenten: -ReadyMemoGroup=Startmenü-Ordner: -ReadyMemoTasks=Zusätzliche Aufgaben: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Lade zusätzliche Dateien herunter... -ButtonStopDownload=Download &abbrechen -StopDownload=Sind Sie sicher, dass Sie den Download abbrechen wollen? -ErrorDownloadAborted=Download abgebrochen -ErrorDownloadFailed=Download fehlgeschlagen: %1 %2 -ErrorDownloadSizeFailed=Fehler beim Ermitteln der Größe: %1 %2 -ErrorFileHash1=Fehler beim Ermitteln der Datei-Prüfsumme: %1 -ErrorFileHash2=Ungültige Datei-Prüfsumme: erwartet %1, gefunden %2 -ErrorProgress=Ungültiger Fortschritt: %1 von %2 -ErrorFileSize=Ungültige Dateigröße: erwartet %1, gefunden %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Vorbereitung der Installation -PreparingDesc=Das Setup bereitet die Installation von [name] auf diesem Computer vor. -PreviousInstallNotCompleted=Eine vorherige Installation/Deinstallation eines Programms wurde nicht abgeschlossen. Der Computer muss neu gestartet werden, um die Installation/Deinstallation zu beenden.%n%nStarten Sie das Setup nach dem Neustart Ihres Computers erneut, um die Installation von [name] durchzuführen. -CannotContinue=Das Setup kann nicht fortfahren. Bitte klicken Sie auf "Abbrechen" zum Verlassen. -ApplicationsFound=Die folgenden Anwendungen benutzen Dateien, die aktualisiert werden müssen. Es wird empfohlen, Setup zu erlauben, diese Anwendungen zu schließen. -ApplicationsFound2=Die folgenden Anwendungen benutzen Dateien, die aktualisiert werden müssen. Es wird empfohlen, Setup zu erlauben, diese Anwendungen zu schließen. Nachdem die Installation fertiggestellt wurde, versucht Setup, diese Anwendungen wieder zu starten. -CloseApplications=&Schließe die Anwendungen automatisch -DontCloseApplications=Schließe die A&nwendungen nicht -ErrorCloseApplications=Das Setup konnte nicht alle Anwendungen automatisch schließen. Es wird empfohlen, alle Anwendungen zu schließen, die Dateien benutzen, die vom Setup vor einer Fortsetzung aktualisiert werden müssen. -PrepareToInstallNeedsRestart=Das Setup muss Ihren Computer neu starten. Führen Sie nach dem Neustart Setup erneut aus, um die Installation von [name] abzuschließen.%n%nWollen Sie jetzt neu starten? - -; *** "Installing" wizard page -WizardInstalling=Installiere ... -InstallingLabel=Warten Sie bitte, während [name] auf Ihrem Computer installiert wird. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Beenden des [name] Setup-Assistenten -FinishedLabelNoIcons=Das Setup hat die Installation von [name] auf Ihrem Computer abgeschlossen. -FinishedLabel=Das Setup hat die Installation von [name] auf Ihrem Computer abgeschlossen. Die Anwendung kann über die installierten Programm-Verknüpfungen gestartet werden. -ClickFinish=Klicken Sie auf "Fertigstellen", um das Setup zu beenden. -FinishedRestartLabel=Um die Installation von [name] abzuschließen, muss das Setup Ihren Computer neu starten. Möchten Sie jetzt neu starten? -FinishedRestartMessage=Um die Installation von [name] abzuschließen, muss das Setup Ihren Computer neu starten.%n%nMöchten Sie jetzt neu starten? -ShowReadmeCheck=Ja, ich möchte die LIESMICH-Datei sehen -YesRadio=&Ja, Computer jetzt neu starten -NoRadio=&Nein, ich werde den Computer später neu starten -; used for example as 'Run MyProg.exe' -RunEntryExec=%1 starten -; used for example as 'View Readme.txt' -RunEntryShellExec=%1 anzeigen - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Nächsten Datenträger einlegen -SelectDiskLabel2=Legen Sie bitte Datenträger %1 ein und klicken Sie auf "OK".%n%nWenn sich die Dateien von diesem Datenträger in einem anderen als dem angezeigten Ordner befinden, dann geben Sie bitte den korrekten Pfad ein oder klicken auf "Durchsuchen". -PathLabel=&Pfad: -FileNotInDir2=Die Datei "%1" befindet sich nicht in "%2". Bitte Ordner ändern oder richtigen Datenträger einlegen. -SelectDirectoryLabel=Geben Sie bitte an, wo der nächste Datenträger eingelegt wird. - -; *** Installation phase messages -SetupAborted=Das Setup konnte nicht abgeschlossen werden.%n%nBeheben Sie bitte das Problem und starten Sie das Setup erneut. -AbortRetryIgnoreSelectAction=Bitte auswählen -AbortRetryIgnoreRetry=&Nochmals versuchen -AbortRetryIgnoreIgnore=&Den Fehler ignorieren und fortfahren -AbortRetryIgnoreCancel=Installation abbrechen - -; *** Installation status messages -StatusClosingApplications=Anwendungen werden geschlossen ... -StatusCreateDirs=Ordner werden erstellt ... -StatusExtractFiles=Dateien werden entpackt ... -StatusCreateIcons=Verknüpfungen werden erstellt ... -StatusCreateIniEntries=INI-Einträge werden erstellt ... -StatusCreateRegistryEntries=Registry-Einträge werden erstellt ... -StatusRegisterFiles=Dateien werden registriert ... -StatusSavingUninstall=Deinstallationsinformationen werden gespeichert ... -StatusRunProgram=Installation wird beendet ... -StatusRestartingApplications=Neustart der Anwendungen ... -StatusRollback=Änderungen werden rückgängig gemacht ... - -; *** Misc. errors -ErrorInternal2=Interner Fehler: %1 -ErrorFunctionFailedNoCode=%1 schlug fehl -ErrorFunctionFailed=%1 schlug fehl; Code %2 -ErrorFunctionFailedWithMessage=%1 schlug fehl; Code %2.%n%3 -ErrorExecutingProgram=Datei kann nicht ausgeführt werden:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Registry-Schlüssel konnte nicht geöffnet werden:%n%1\%2 -ErrorRegCreateKey=Registry-Schlüssel konnte nicht erstellt werden:%n%1\%2 -ErrorRegWriteKey=Fehler beim Schreiben des Registry-Schlüssels:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Fehler beim Erstellen eines INI-Eintrages in der Datei "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=Diese Datei &überspringen (nicht empfohlen) -FileAbortRetryIgnoreIgnoreNotRecommended=Den Fehler &ignorieren und fortfahren (nicht empfohlen) -SourceIsCorrupted=Die Quelldatei ist beschädigt -SourceDoesntExist=Die Quelldatei "%1" existiert nicht -ExistingFileReadOnly2=Die vorhandene Datei kann nicht ersetzt werden, da sie schreibgeschützt ist. -ExistingFileReadOnlyRetry=&Den Schreibschutz entfernen und noch einmal versuchen -ExistingFileReadOnlyKeepExisting=Die &vorhandene Datei behalten -ErrorReadingExistingDest=Lesefehler in Datei: -FileExistsSelectAction=Aktion auswählen -FileExists2=Die Datei ist bereits vorhanden. -FileExistsOverwriteExisting=Vorhandene Datei &überschreiben -FileExistsKeepExisting=Vorhandene Datei &behalten -FileExistsOverwriteOrKeepAll=&Dies auch für die nächsten Konflikte ausführen -ExistingFileNewerSelectAction=Aktion auswählen -ExistingFileNewer2=Die vorhandene Datei ist neuer als die Datei, die installiert werden soll. -ExistingFileNewerOverwriteExisting=Vorhandene Datei &überschreiben -ExistingFileNewerKeepExisting=Vorhandene Datei &behalten (empfohlen) -ExistingFileNewerOverwriteOrKeepAll=&Dies auch für die nächsten Konflikte ausführen -ErrorChangingAttr=Fehler beim Ändern der Datei-Attribute: -ErrorCreatingTemp=Fehler beim Erstellen einer Datei im Ziel-Ordner: -ErrorReadingSource=Fehler beim Lesen der Quelldatei: -ErrorCopying=Fehler beim Kopieren einer Datei: -ErrorReplacingExistingFile=Fehler beim Ersetzen einer vorhandenen Datei: -ErrorRestartReplace="Ersetzen nach Neustart" fehlgeschlagen: -ErrorRenamingTemp=Fehler beim Umbenennen einer Datei im Ziel-Ordner: -ErrorRegisterServer=DLL/OCX konnte nicht registriert werden: %1 -ErrorRegSvr32Failed=RegSvr32-Aufruf scheiterte mit Exit-Code %1 -ErrorRegisterTypeLib=Typen-Bibliothek konnte nicht registriert werden: %1 - -; *** Uninstall display name markings -; used for example as 'Mein Programm (32 Bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'Mein Programm (32 Bit, Alle Benutzer)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32 Bit -UninstallDisplayNameMark64Bit=64 Bit -UninstallDisplayNameMarkAllUsers=Alle Benutzer -UninstallDisplayNameMarkCurrentUser=Aktueller Benutzer - -; *** Post-installation errors -ErrorOpeningReadme=Fehler beim Öffnen der LIESMICH-Datei. -ErrorRestartingComputer=Das Setup konnte den Computer nicht neu starten. Bitte führen Sie den Neustart manuell durch. - -; *** Uninstaller messages -UninstallNotFound=Die Datei "%1" existiert nicht. Entfernen der Anwendung fehlgeschlagen. -UninstallOpenError=Die Datei "%1" konnte nicht geöffnet werden. Entfernen der Anwendung fehlgeschlagen. -UninstallUnsupportedVer=Das Format der Deinstallationsdatei "%1" konnte nicht erkannt werden. Entfernen der Anwendung fehlgeschlagen. -UninstallUnknownEntry=In der Deinstallationsdatei wurde ein unbekannter Eintrag (%1) gefunden. -ConfirmUninstall=Sind Sie sicher, dass Sie %1 und alle zugehörigen Komponenten entfernen möchten? -UninstallOnlyOnWin64=Diese Installation kann nur unter 64-Bit-Windows-Versionen entfernt werden. -OnlyAdminCanUninstall=Diese Installation kann nur von einem Benutzer mit Administrator-Rechten entfernt werden. -UninstallStatusLabel=Warten Sie bitte, während %1 von Ihrem Computer entfernt wird. -UninstalledAll=%1 wurde erfolgreich von Ihrem Computer entfernt. -UninstalledMost=Entfernen von %1 beendet.%n%nEinige Komponenten konnten nicht entfernt werden. Diese können von Ihnen manuell gelöscht werden. -UninstalledAndNeedsRestart=Um die Deinstallation von %1 abzuschließen, muss Ihr Computer neu gestartet werden.%n%nMöchten Sie jetzt neu starten? -UninstallDataCorrupted="%1"-Datei ist beschädigt. Entfernen der Anwendung fehlgeschlagen. - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Gemeinsame Datei entfernen? -ConfirmDeleteSharedFile2=Das System zeigt an, dass die folgende gemeinsame Datei von keinem anderen Programm mehr benutzt wird. Möchten Sie diese Datei entfernen lassen?%nSollte es doch noch Programme geben, die diese Datei benutzen und sie wird entfernt, funktionieren diese Programme vielleicht nicht mehr richtig. Wenn Sie unsicher sind, wählen Sie "Nein", um die Datei im System zu belassen. Es schadet Ihrem System nicht, wenn Sie die Datei behalten. -SharedFileNameLabel=Dateiname: -SharedFileLocationLabel=Ordner: -WizardUninstalling=Entfernen (Status) -StatusUninstalling=Entferne %1 ... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installation von %1. -ShutdownBlockReasonUninstallingApp=Deinstallation von %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 Version %2 -AdditionalIcons=Zusätzliche Symbole: -CreateDesktopIcon=&Desktop-Symbol erstellen -CreateQuickLaunchIcon=Symbol in der Schnellstartleiste erstellen -ProgramOnTheWeb=%1 im Internet -UninstallProgram=%1 entfernen -LaunchProgram=%1 starten -AssocFileExtension=&Registriere %1 mit der %2-Dateierweiterung -AssocingFileExtension=%1 wird mit der %2-Dateierweiterung registriert... -AutoStartProgramGroupDescription=Beginn des Setups: -AutoStartProgram=Starte automatisch%1 -AddonHostProgramNotFound=%1 konnte im ausgewählten Ordner nicht gefunden werden.%n%nMöchten Sie dennoch fortfahren? - diff --git a/Dependencies/Inno/Languages/Hebrew.isl b/Dependencies/Inno/Languages/Hebrew.isl deleted file mode 100644 index 98d9b498..00000000 --- a/Dependencies/Inno/Languages/Hebrew.isl +++ /dev/null @@ -1,377 +0,0 @@ -; *** Inno Setup version 6.1.0+ Hebrew messages (s_h(at)enativ.com) *** -; -; https://jrsoftware.org/files/istrans/ -; Translated by s_h (s_h@enativ.com) (c) 2020 -; - - -[LangOptions] -LanguageName=<05E2><05D1><05E8><05D9><05EA> -LanguageID=$040D -LanguageCodePage=1255 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Tahoma -;WelcomeFontSize=11 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 -RightToLeft=yes - -[Messages] - -; *** Application titles -SetupAppTitle= -SetupWindowTitle= - %1 -UninstallAppTitle= -UninstallAppFullTitle= %1 - -; *** Misc. common -InformationTitle= -ConfirmTitle= -ErrorTitle= - -; *** SetupLdr messages -SetupLdrStartupMessage= %1 . ? -LdrCannotCreateTemp= . -LdrCannotExecTemp= . - -; *** Startup error messages -LastErrorMessage=%1.%n%n %2: %3 -SetupFileMissing= %1 . . -SetupFileCorrupt= . . -SetupFileCorruptOrWrongVer= , . . -InvalidParameter= :%n%n%1 -SetupAlreadyRunning= . -WindowsVersionNotSupported= . -WindowsServicePackRequired= %1 %2 . -NotOnThisPlatform= %1. -OnlyOnThisPlatform= %1. -OnlyOnTheseArchitectures= '' :%n%n%1 -WinVersionTooLowError= %1 %2. -WinVersionTooHighError= %1 %2 -AdminPrivilegesRequired= . -PowerUserPrivilegesRequired= , ' ' . -SetupAppRunningError= %1 .%n%n , '' , '' . -UninstallAppRunningError= %1 .%n%n , '' , '' . - -; *** Startup questions -PrivilegesRequiredOverrideTitle= -PrivilegesRequiredOverrideInstruction= -PrivilegesRequiredOverrideText1=%1 ( ), . -PrivilegesRequiredOverrideText2=%1 , ( ). -PrivilegesRequiredOverrideAllUsers= & -PrivilegesRequiredOverrideAllUsersRecommended= & () -PrivilegesRequiredOverrideCurrentUser= & -PrivilegesRequiredOverrideCurrentUserRecommended= & () - -; *** Misc. errors -ErrorCreatingDir= "%1" -ErrorTooManyFilesInDir= "%1" - -; *** Setup common messages -ExitSetupTitle= -ExitSetupMessage= . , .%n%n .%n%n ? -AboutSetupMenuItem=& ... -AboutSetupTitle= -AboutSetupMessage=%1 %2%n%3%n%n%1 :%n%4 -AboutSetupNote= -TranslatorNote= - -; *** Buttons -ButtonBack=< & -ButtonNext=& > -ButtonInstall=& -ButtonOK= -ButtonCancel= -ButtonYes=& -ButtonYesToAll= & -ButtonNo=& -ButtonNoToAll=& -ButtonFinish=& -ButtonBrowse=&... -ButtonWizardBrowse=... -ButtonNewFolder=& - -; *** "Select Language" dialog messages -SelectLanguageTitle= -SelectLanguageLabel= . - -; *** Common wizard text -ClickNext= '' , '' . -BeveledLabel= -BrowseDialogTitle= -BrowseDialogLabel= '' -NewFolderName= - -; *** "Welcome" wizard page -WelcomeLabel1= [name] -WelcomeLabel2= [name/ver] .%n%n . - -; *** "Password" wizard page -WizardPassword= -PasswordLabel1= . -PasswordLabel3= , '' . , . -PasswordEditLabel=&: -IncorrectPassword= . . - -; *** "License Agreement" wizard page -WizardLicense= -LicenseLabel= . -LicenseLabel3= . . -LicenseAccepted= & -LicenseNotAccepted= & - -; *** "Information" wizard pages -WizardInfoBefore= -InfoBeforeLabel= . -InfoBeforeClickLabel= , ''. -WizardInfoAfter= -InfoAfterLabel= -InfoAfterClickLabel= , ''. - -; *** "User Information" wizard page -WizardUserInfo= -UserInfoDesc= . -UserInfoName=& : -UserInfoOrg=&: -UserInfoSerial=& : -UserInfoNameRequired= . - -; *** "Select Destination Location" wizard page -WizardSelectDir= -SelectDirDesc= [name]? -SelectDirLabel3= [name] . -SelectDirBrowseLabel=, ''. , ''. -DiskSpaceGBLabel= [gb] GB . -DiskSpaceMBLabel= [mb] MB . -CannotInstallToNetworkDrive= . -CannotInstallToUNCPath= UNC. -InvalidPath= ; :%n%nC:\APP%n%n UNC :%n%n\\server\share -InvalidDrive= -UNC . . -DiskSpaceWarningTitle= -DiskSpaceWarning= %1KB , %2KB . ? -DirNameTooLong= -InvalidDirName= . -BadDirName32= :%n%n%1 -DirExistsTitle= -DirExists=:%n%n%1%n%n . ? -DirDoesntExistTitle= -DirDoesntExist=:%n%n%1%n%n . ? - -; *** "Select Components" wizard page -WizardSelectComponents= -SelectComponentsDesc= ? -SelectComponentsLabel2= ; . '' . -FullInstallation= -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation= -CustomInstallation= -NoUninstallWarningTitle= -NoUninstallWarning= :%n%n%1%n .%n%n ? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel= [gb] GB . -ComponentsDiskSpaceMBLabel= [mb] MB . - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks= -SelectTasksDesc= ? -SelectTasksLabel2= [name], ''. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup= '' -SelectStartMenuFolderDesc= ? -SelectStartMenuFolderLabel3= ''. -SelectStartMenuFolderBrowseLabel=, ''. , ''. -MustEnterGroupName= . -GroupNameTooLong= -InvalidGroupName= -. -BadGroupName= :%n%n%1 -NoProgramGroupCheck2=& '' - -; *** "Ready to Install" wizard page -WizardReady= -ReadyLabel1= [name] . -ReadyLabel2a= '' , '' . -ReadyLabel2b= '' -ReadyMemoUserInfo= : -ReadyMemoDir= : -ReadyMemoType= : -ReadyMemoComponents= : -ReadyMemoGroup= '': -ReadyMemoTasks= : - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel= ... -ButtonStopDownload=& -StopDownload= ? -ErrorDownloadAborted= -ErrorDownloadFailed= : %1 %2 -ErrorDownloadSizeFailed= : %1 %2 -ErrorFileHash1= : %2 -ErrorFileHash2= : %2, %2 -ErrorProgress= : %1 %1 -ErrorFileSize= : %1, %1 - -; *** "Preparing to Install" wizard page -WizardPreparing= -PreparingDesc= [name] . -PreviousInstallNotCompleted=/ . .%n%n , [name]. -CannotContinue= . '' . -ApplicationsFound= . . -ApplicationsFound2= . . , . -CloseApplications=& -DontCloseApplications=& -ErrorCloseApplications= . . -PrepareToInstallNeedsRestart= . , [name].%n%n ? - -; *** "Installing" wizard page -WizardInstalling= -InstallingLabel= [name] . - -; *** "Setup Completed" wizard page -FinishedHeadingLabel= [name] -FinishedLabelNoIcons= [name] . -FinishedLabel= [name] . . -ClickFinish= '' . -FinishedRestartLabel= [name], . ? -FinishedRestartMessage= [name], .%n%n ? -ShowReadmeCheck=, -' ' -YesRadio=&, -NoRadio=&, -; used for example as 'Run MyProg.exe' -RunEntryExec= %1 -; used for example as 'View Readme.txt' -RunEntryShellExec= %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle= -SelectDiskLabel2= ' %1 ''.%n%n , ''. -PathLabel=&: -FileNotInDir2= "%1" "%2". . -SelectDirectoryLabel= . - -; *** Installation phase messages -SetupAborted= .%n%n . -AbortRetryIgnoreSelectAction= -AbortRetryIgnoreRetry=& -AbortRetryIgnoreIgnore=& -AbortRetryIgnoreCancel= - -; *** Installation status messages -StatusClosingApplications= ... -StatusCreateDirs= ... -StatusExtractFiles= ... -StatusCreateIcons= ... -StatusCreateIniEntries= INI... -StatusCreateRegistryEntries= ... -StatusRegisterFiles= ... -StatusSavingUninstall= ... -StatusRunProgram= ... -StatusRestartingApplications= ... -StatusRollback= ... - -; *** Misc. errors -ErrorInternal2= : %1 -ErrorFunctionFailedNoCode=%1 -ErrorFunctionFailed=%1 ; %2 -ErrorFunctionFailedWithMessage=%1 ; %2.%n%3 -ErrorExecutingProgram= :%n%1 - -; *** Registry errors -ErrorRegOpenKey= :%n%1\%2 -ErrorRegCreateKey= :%n%1\%2 -ErrorRegWriteKey= :%n%1\%2 - -; *** INI errors -ErrorIniEntry= INI "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=& ( ) -FileAbortRetryIgnoreIgnoreNotRecommended=& ( ) -SourceIsCorrupted= -SourceDoesntExist= "%1" -ExistingFileReadOnly2= . -ExistingFileReadOnlyRetry=& -ExistingFileReadOnlyKeepExisting=& -ErrorReadingExistingDest= : -FileExistsSelectAction= -FileExists2= . -FileExistsOverwriteExisting=& -FileExistsKeepExisting=& -FileExistsOverwriteOrKeepAll=& -ExistingFileNewerSelectAction= -ExistingFileNewer2= -ExistingFileNewerOverwriteExisting=& -ExistingFileNewerKeepExisting=& () -ExistingFileNewerOverwriteOrKeepAll=& -ErrorChangingAttr= : -ErrorCreatingTemp= : -ErrorReadingSource= : -ErrorCopying= : -ErrorReplacingExistingFile= : -ErrorRestartReplace= -RestartReplace: -ErrorRenamingTemp= : -ErrorRegisterServer= DLL/OCX: %1 -ErrorRegSvr32Failed=RegSvr32 %1 -ErrorRegisterTypeLib= : %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers= -UninstallDisplayNameMarkCurrentUser= - -; *** Post-installation errors -ErrorOpeningReadme= ' '. -ErrorRestartingComputer= . . - -; *** Uninstaller messages -UninstallNotFound= "%1" . . -UninstallOpenError= "%1". . -UninstallUnsupportedVer= "%1" " . -UninstallUnknownEntry= (%1) . -ConfirmUninstall= %1 ? -UninstallOnlyOnWin64= '' 64-. -OnlyAdminCanUninstall= . -UninstallStatusLabel= %1 . -UninstalledAll=%1 . -UninstalledMost= %1 .%n%n " , . -UninstalledAndNeedsRestart= %1, .%n%n ? -UninstallDataCorrupted= "%1" . - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle= ? -ConfirmDeleteSharedFile2= . ?%n%n , . , ''. . -SharedFileNameLabel= : -SharedFileLocationLabel=: -WizardUninstalling= -StatusUninstalling= %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp= %1. -ShutdownBlockReasonUninstallingApp= %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 %2 -AdditionalIcons= : -CreateDesktopIcon= & -CreateQuickLaunchIcon= -ProgramOnTheWeb=%1 -UninstallProgram= %1 -LaunchProgram= %1 -AssocFileExtension=& %1 %2 -AssocingFileExtension= %1 %2 -AutoStartProgramGroupDescription= : -AutoStartProgram= %1 -AddonHostProgramNotFound=%1 .%n%n ? \ No newline at end of file diff --git a/Dependencies/Inno/Languages/Icelandic.isl b/Dependencies/Inno/Languages/Icelandic.isl deleted file mode 100644 index 395a7576..00000000 --- a/Dependencies/Inno/Languages/Icelandic.isl +++ /dev/null @@ -1,361 +0,0 @@ -; *** Inno Setup version 6.1.0+ Icelandic messages *** -; -; Translator: Stefán Örvar Sigmundsson, eMedia Intellect -; Contact: emi@emi.is -; Date: 2020-07-25 - -[LangOptions] - -LanguageName=<00CD>slenska -LanguageID=$040F -LanguageCodePage=1252 - -[Messages] - -; *** Application titles -SetupAppTitle=Uppsetning -SetupWindowTitle=Uppsetning - %1 -UninstallAppTitle=Niðurtaka -UninstallAppFullTitle=%1-niðurtaka - -; *** Misc. common -InformationTitle=Upplýsingar -ConfirmTitle=Staðfesta -ErrorTitle=Villa - -; *** SetupLdr messages -SetupLdrStartupMessage=Þetta mun uppsetja %1. Vilt þú halda áfram? -LdrCannotCreateTemp=Ófært um að skapa tímabundna skrá. Uppsetningu hætt -LdrCannotExecTemp=Ófært um að keyra skrá í tímabundna skráasafninu. Uppsetningu hætt -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nVilla %2: %3 -SetupFileMissing=Skrána %1 vantar úr uppsetningarskráasafninu. Vinsamlega leiðréttu vandamálið eða fáðu nýtt afrita af forritinu. -SetupFileCorrupt=Uppsetningarskrárnar eru spilltar. Vinsamlega fáðu nýtt afrita af forritinu. -SetupFileCorruptOrWrongVer=Uppsetningarskrárnar eru spilltar eða eru ósamrýmanlegar við þessa útgáfu af Uppsetningu. Vinsamlega leiðréttu vandamálið eða fáðu nýtt afrit af forritinu. -InvalidParameter=Ógild færibreyta var afhend á skipanalínunni:%n%n%1 -SetupAlreadyRunning=Uppsetning er nú þegar keyrandi. -WindowsVersionNotSupported=Þetta forrit styður ekki útgáfuna af Windows sem tölvan þín er keyrandi. -WindowsServicePackRequired=Þetta forrit krefst Þjónustupakka %2 eða síðari. -NotOnThisPlatform=Þetta forrit mun ekki keyra á %1. -OnlyOnThisPlatform=Þetta forrit verður að keyra á %1. -OnlyOnTheseArchitectures=Þetta forrit er einungis hægt að uppsetja á útgáfur af Windows hannaðar fyrir eftirfarandi gjörvahannanir:%n%n%1 -WinVersionTooLowError=Þetta forrit krefst %1-útgáfu %2 eða síðari. -WinVersionTooHighError=Þetta forrit er ekki hægt að uppsetja á %1-útgáfu %2 eða síðari. -AdminPrivilegesRequired=Þú verður að vera innskráð(ur) sem stjórnandi meðan þú uppsetur þetta forrit. -PowerUserPrivilegesRequired=Þú verður að vera innskráð(ur) sem stjórnandi eða sem meðlimur Power Users-hópsins meðan þú uppsetur þetta forrit. -SetupAppRunningError=Uppsetning hefur greint að %1 er eins og er keyrandi.%n%nVinsamlega lokaðu öllum tilvikum þess núna, smelltu síðan á Í lagi til að halda áfram eða Hætta við til að hætta. -UninstallAppRunningError=Niðurtaka hefur greint að %1 er eins og er keyrandi.%n%nVinsamlega lokaðu öllum tilvikum þess núna, smelltu síðan á Í lagi til að halda áfram eða Hætta við til að hætta. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Veldu uppsetningarham -PrivilegesRequiredOverrideInstruction=Veldu uppsetningarham -PrivilegesRequiredOverrideText1=%1 er hægt að setja upp fyrir alla notendur (krefst stjórnandaréttinda) eða fyrir þig einungis. -PrivilegesRequiredOverrideText2=%1 er hægt að setja upp fyrir þig einungis eða fyrir alla notendur (krefst stjórnandaréttinda). -PrivilegesRequiredOverrideAllUsers=Uppsetja fyrir &alla notendur -PrivilegesRequiredOverrideAllUsersRecommended=Uppsetja fyrir &alla notendur (ráðlagt) -PrivilegesRequiredOverrideCurrentUser=Uppsetja fyrir &mig einungis -PrivilegesRequiredOverrideCurrentUserRecommended=Uppsetja fyrir &mig einungis (ráðlagt) - -; *** Misc. errors -ErrorCreatingDir=Uppsetningunni var ófært um að skapa skráasafnið „%1“ -ErrorTooManyFilesInDir=Ófært um að skapa skrá í skráasafninu „%1“ vegna þess það inniheldur of margar skrár - -; *** Setup common messages -ExitSetupTitle=Hætta í Uppsetningu -ExitSetupMessage=Uppsetningu er ekki lokið. Ef þú hættir núna mun forritið ekki vera uppsett.%n%nÞú getur keyrt Uppsetningu aftur síðar til að ljúka uppsetningunni.%n%nHætta í Uppsetningu? -AboutSetupMenuItem=&Um Uppsetningu… -AboutSetupTitle=Um Uppsetningu -AboutSetupMessage=%1 útgáfa %2%n%3%n%n%1 heimasíðu:%n%4 -AboutSetupNote= -TranslatorNote=Stefán Örvar Sigmundsson, eMedia Intellect - -; *** Buttons -ButtonBack=< &Fyrri -ButtonNext=&Næst > -ButtonInstall=&Uppsetja -ButtonOK=Í lagi -ButtonCancel=Hætta við -ButtonYes=&Já -ButtonYesToAll=Já við &öllu -ButtonNo=&Nei -ButtonNoToAll=&Nei við öllu -ButtonFinish=&Ljúka -ButtonBrowse=&Vafra… -ButtonWizardBrowse=&Vafra… -ButtonNewFolder=&Skapa nýja möppu - -; *** "Select Language" dialog messages -SelectLanguageTitle=Veldu tungumál Uppsetningar -SelectLanguageLabel=Veldu tungumálið sem nota á við uppsetninguna. - -; *** Common wizard text -ClickNext=Smelltu á Næst til að halda áfram eða Hætta við til að hætta Uppsetningu. -BeveledLabel= -BrowseDialogTitle=Vafra eftir möppu -BrowseDialogLabel=Veldu möppu í listanum fyrir neðan, smelltu síðan á Í lagi. -NewFolderName=Ný mappa - -; *** "Welcome" wizard page -WelcomeLabel1=Velkomin(n) í [name]-uppsetningaraðstoðarann -WelcomeLabel2=Þetta mun uppsetja [name/ver] á þína tölvu.%n%nÞað er ráðlagt að þú lokir öllum öðrum hugbúnaði áður en haldið er áfram. - -; *** "Password" wizard page -WizardPassword=Aðgangsorð -PasswordLabel1=Þessi uppsetning er aðgangsorðsvarin. -PasswordLabel3=Vinsamlega veitu aðgangsorðið, smelltu síðan á Næst til að halda áfram. Aðgangsorð eru hástafanæm. -PasswordEditLabel=&Aðgangsorð: -IncorrectPassword=Aðgangsorðið sem þú innslóst er ekki rétt. Vinsamlega reyndu aftur. - -; *** "License Agreement" wizard page -WizardLicense=Leyfissamningur -LicenseLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. -LicenseLabel3=Vinsamlega lestu eftirfarandi leyfissamning. Þú verður að samþykkja skilmála samningsins áður en haldið er áfram með uppsetninguna. -LicenseAccepted=Ég &samþykki samninginn -LicenseNotAccepted=Ég samþykki &ekki samninginn - -; *** "Information" wizard pages -WizardInfoBefore=Upplýsingar -InfoBeforeLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. -InfoBeforeClickLabel=Þegar þú ert tilbúin(n) til að halda áfram með Uppsetninguna, smelltu á Næst. -WizardInfoAfter=Upplýsingar -InfoAfterLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. -InfoAfterClickLabel=Þegar þú ert tilbúin(n) til að halda áfram með Uppsetninguna, smelltu á Næst. - -; *** "User Information" wizard page -WizardUserInfo=Notandaupplýsingar -UserInfoDesc=Vinsamlega innsláðu upplýsingarnar þínar. -UserInfoName=&Notandanafn: -UserInfoOrg=&Stofnun: -UserInfoSerial=&Raðnúmer: -UserInfoNameRequired=Þú verður að innslá nafn. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Velja staðsetningu -SelectDirDesc=Hvar ætti [name] að vera uppsettur? -SelectDirLabel3=Uppsetning mun uppsetja [name] í hina eftirfarandi möppu. -SelectDirBrowseLabel=Til að halda áfram, smelltu á Næst. Ef þú vilt velja aðra möppu, smelltu á Vafra. -DiskSpaceGBLabel=Að minnsta kosti [gb] GB af lausu diskplássi er krafist. -DiskSpaceMBLabel=Að minnsta kosti [mb] MB af lausu diskplássi er krafist. -CannotInstallToNetworkDrive=Uppsetning getur ekki uppsett á netdrif. -CannotInstallToUNCPath=Uppsetning getur ekki uppsett á UNC-slóð. -InvalidPath=Þú verður að innslá fulla slóð með drifstaf; til dæmis:%n%nC:\APP%n%neða UNC-slóð samkvæmt sniðinu:%n%n\\server\share -InvalidDrive=Drifið eða UNC-deilingin sem þú valdir er ekki til eða er ekki aðgengileg. Vinsamlega veldu annað. -DiskSpaceWarningTitle=Ekki nóg diskpláss -DiskSpaceWarning=Uppsetning krefst að minnsta kosti %1 KB af lausu plássi til að uppsetja, en hið valda drif hefur einungis %2 KB tiltæk.%n%nVilt þú halda áfram hvort sem er? -DirNameTooLong=Möppunafnið eða slóðin er of löng. -InvalidDirName=Möppunafnið er ekki gilt. -BadDirName32=Möppunöfn geta ekki innihaldið nein af hinum eftirfarandi rittáknum:%n%n%1 -DirExistsTitle=Mappa er til -DirExists=Mappan:%n%n%1%n%ner nú þegar til. Vilt þú uppsetja í þá möppu hvort sem er? -DirDoesntExistTitle=Mappa er ekki til -DirDoesntExist=Mappan:%n%n%1%n%ner ekki til. Vilt þú að mappan sé sköpuð? - -; *** "Select Components" wizard page -WizardSelectComponents=Velja atriði -SelectComponentsDesc=Hvaða atriði ætti að uppsetja? -SelectComponentsLabel2=Veldu atriðin sem þú vilt uppsetja; hreinsaðu atriðin sem þú vilt ekki uppsetja. Smelltu á Næst þegar þú ert tilbúin(n) til að halda áfram. -FullInstallation=Full uppsetning -CompactInstallation=Samanþjöppuð uppsetning -CustomInstallation=Sérsnídd uppsetning -NoUninstallWarningTitle=Atriði eru til -NoUninstallWarning=Uppsetning hefur greint það að eftirfarandi atriði eru nú þegar uppsett á tölvunni þinni:%n%n%1%n%nAð afvelja þessi atriði mun ekki niðurtaka þau.%n%nVilt þú halda áfram hvort sem er? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Núverandi val krefst að minnsta kosti [gb] GB af diskplássi. -ComponentsDiskSpaceMBLabel=Núverandi val krefst að minnsta kosti [mb] MB af diskplássi. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Veldu aukaleg verk -SelectTasksDesc=Hvaða aukalegu verk ættu að vera framkvæmd? -SelectTasksLabel2=Veldu hin aukalegu verk sem þú vilt að Uppsetning framkvæmi meðan [name] er uppsettur, ýttu síðan á Næst. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Veldu Upphafsvalmyndarmöppu -SelectStartMenuFolderDesc=Hvert ætti Uppsetning að setja skyndivísa forritsins? -SelectStartMenuFolderLabel3=Uppsetning mun skapa skyndivísa forritsins í hina eftirfarandi Upphafsvalmyndarmöppu. -SelectStartMenuFolderBrowseLabel=Til að halda áfram, smelltu á Næst. Ef þú vilt velja aðra möppu, smelltu á Vafra. -MustEnterGroupName=Þú verður að innslá möppunafn. -GroupNameTooLong=Möppunafnið eða slóðin er of löng. -InvalidGroupName=Möppunafnið er ekki gilt. -BadGroupName=Möppunafnið getur ekki innihaldið neitt af hinum eftirfarandi rittáknum:%n%n%1 -NoProgramGroupCheck2=&Ekki skapa Upphafsvalmyndarmöppu - -; *** "Ready to Install" wizard page -WizardReady=Tilbúin til að uppsetja -ReadyLabel1=Uppsetning er núna tilbúin til að hefja uppsetningu [name] á tölvuna þína. -ReadyLabel2a=Smelltu á Uppsetja til að halda áfram uppsetningunni eða smelltu á Til baka ef þú vilt endurskoða eða breyta einhverjum stillingum. -ReadyLabel2b=Smelltu á Uppsetja til að halda áfram uppsetningunni. -ReadyMemoUserInfo=Notandaupplýsingar: -ReadyMemoDir=Staðsetning: -ReadyMemoType=Uppsetningartegund: -ReadyMemoComponents=Valin atriði: -ReadyMemoGroup=Upphafsvalmyndarmappa: -ReadyMemoTasks=Aukaleg verk: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Niðurhlaðandi aukalegum skrám… -ButtonStopDownload=&Stöðva niðurhleðslu -StopDownload=Ert þú viss um að þú viljir stöðva niðurhleðsluna? -ErrorDownloadAborted=Niðurhleðslu hætt -ErrorDownloadFailed=Niðurhleðsla mistókst: %1 %2 -ErrorDownloadSizeFailed=Mistókst að sækja stærð: %1 %2 -ErrorFileHash1=Skráarhakk mistókst: %1 -ErrorFileHash2=Ógilt skráarhakk: bjóst við %1, fékk %2 -ErrorProgress=Ógild framvinda: %1 of %2 -ErrorFileSize=Ógild skráarstærð: bjóst við %1, fékk %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Undirbúandi uppsetningu -PreparingDesc=Uppsetning er undirbúandi uppsetningu [name] á tölvuna þína. -PreviousInstallNotCompleted=Uppsetningu/Fjarlægingu eftirfarandi forrits var ekki lokið. Þú þarft að endurræsa tölvuna þína til að ljúka þeirri uppsetningu.%n%nEftir endurræsingu tölvunnar þinnar, keyrðu Uppsetningu aftur til að ljúka uppsetningu [name]. -CannotContinue=Uppsetning getur ekki haldið áfram. Vinsamlega smelltu á Hætta við til að hætta. -ApplicationsFound=Eftirfarandi hugbúnaður er notandi skrár sem þurfa að vera uppfærðar af Uppsetningu. Það er ráðlagt að þú leyfir Uppsetningu sjálfvirkt að loka þessum hugbúnaði. -ApplicationsFound2=Eftirfarandi hugbúnaður er notandi skrár sem þurfa að vera uppfærðar af Uppsetningu. Það er ráðlagt að þú leyfir Uppsetningu sjálfvirkt að loka þessum hugbúnaði. Eftir að uppsetningunni lýkur mun Uppsetning reyna að endurræsa hugbúnaðinn. -CloseApplications=&Sjálfvirkt loka hugbúnaðinum -DontCloseApplications=&Ekki loka hugbúnaðinum -ErrorCloseApplications=Uppsetningu var ófært um að sjálfvirkt loka öllum hugbúnaði. Það er ráðlagt að þú lokir öllum hugbúnaði notandi skrár sem þurfa að vera uppfærðar af Uppsetningu áður en haldið er áfram. -PrepareToInstallNeedsRestart=Þú verður að endurræsa tölvuna þína. Eftir að hafa endurræst tölvuna þína, keyrðu Uppsetningu aftur til að ljúka uppsetningu [name].%n%nVilt þú endurræsa núna? - -; *** "Installing" wizard page -WizardInstalling=Uppsetjandi -InstallingLabel=Vinsamlega bíddu meðan Uppsetning uppsetur [name] á tölvuna þína. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Ljúkandi [name]-uppsetningaraðstoðaranum -FinishedLabelNoIcons=Uppsetning hefur lokið uppsetningu [name] á tölvuna þína. -FinishedLabel=Uppsetning hefur lokið uppsetningu [name] á þinni tölvu. Hugbúnaðurinn getur verið ræstur með því að velja hina uppsettu skyndivísa. -ClickFinish=Smelltu á Ljúka til að hætta í Uppsetningu. -FinishedRestartLabel=Til að ljúka uppsetningu [name] þarft Uppsetning að endurræsa tölvuna þína. Vilt þú endurræsa núna? -FinishedRestartMessage=Til að ljúka uppsetningu [name] þarf Uppsetning að endurræsa tölvuna þína.%n%nVilt þú endurræsa núna? -ShowReadmeCheck=Já, ég vil skoða README-skrána -YesRadio=&Já, endurræsa tölvuna núna -NoRadio=&Nei, ég mun endurræsa tölvuna síðar -RunEntryExec=Keyra %1 -RunEntryShellExec=Skoða %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Uppsetning þarfnast næsta disks -SelectDiskLabel2=Vinsamlega settu inn disk %1 og smelltu á Í lagi.%n%nEf skrárnar á þessum disk er hægt að finna í annarri möppu en þeirri sem birt er fyrir neðan, innsláðu réttu slóðina og smelltu á Vafra. -PathLabel=&Slóð: -FileNotInDir2=Skrána „%1“ var ekki hægt að staðsetja í „%2“. Vinsamlega settu inn rétta diskinn eða veldu aðra möppu. -SelectDirectoryLabel=Vinsamlega tilgreindu staðsetningu næsta disks. - -; *** Installation phase messages -SetupAborted=Uppsetningu var ekki lokið.%n%nVinsamlega leiðréttu vandamálið og keyrðu Uppsetningu aftur. -AbortRetryIgnoreSelectAction=Velja aðgerð -AbortRetryIgnoreRetry=&Reyna aftur -AbortRetryIgnoreIgnore=&Hunsa villuna og halda áfram -AbortRetryIgnoreCancel=Hætta við uppsetningu - -; *** Installation status messages -StatusClosingApplications=Lokandi hugbúnaði… -StatusCreateDirs=Skapandi skráasöfn… -StatusExtractFiles=Útdragandi skrár… -StatusCreateIcons=Skapandi skyndivísa… -StatusCreateIniEntries=Skapandi INI-færslur… -StatusCreateRegistryEntries=Skapandi Windows Registry-færslur… -StatusRegisterFiles=Skrásetjandi skrár… -StatusSavingUninstall=Vistandi niðurtekningarupplýsingar… -StatusRunProgram=Ljúkandi uppsetningu… -StatusRestartingApplications=Endurræsandi hugbúnað… -StatusRollback=Rúllandi aftur breytingum… - -; *** Misc. errors -ErrorInternal2=Innri villa: %1 -ErrorFunctionFailedNoCode=%1 mistókst -ErrorFunctionFailed=%1 mistókst; kóði %2 -ErrorFunctionFailedWithMessage=%1 mistókst; kóði %2.%n%3 -ErrorExecutingProgram=Ófært um að keyra skrá:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Villa við opnun Windows Registry-lykils:%n%1\%2 -ErrorRegCreateKey=Villa við sköpun Windows Registry-lykils:%n%1\%2 -ErrorRegWriteKey=Villa við ritun í Windows Registry-lykil:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Villa við sköpun INI-færslu í skrána „%1“. - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Sleppa þessari skrá (ekki ráðlagt) -FileAbortRetryIgnoreIgnoreNotRecommended=&Hunsa villuna og halda áfram (ekki ráðlagt) -SourceIsCorrupted=Upprunaskráin er spillt -SourceDoesntExist=Upprunaskráin „%1“ er ekki til -ExistingFileReadOnly2=Hina gildandi skrá var ekki hægt að yfirrita því hún er merkt sem lesa-einungis. -ExistingFileReadOnlyRetry=&Fjarlægja lesa-einungis eigindi og reyna aftur -ExistingFileReadOnlyKeepExisting=&Halda gildandi skrá -ErrorReadingExistingDest=Villa kom upp meðan reynt var að lesa gildandi skrána: -FileExistsSelectAction=Velja aðgerð -FileExists2=Skráin er nú þegar til. -FileExistsOverwriteExisting=&Yfirrita hina gildandi skrá -FileExistsKeepExisting=&Halda hinni gildandi skrá -FileExistsOverwriteOrKeepAll=&Gera þetta við næstu ósamstæður -ExistingFileNewerSelectAction=Velja aðgerð -ExistingFileNewer2=Hin gildandi skrá er nýrri en sú sem Uppsetning er að reyna að uppsetja. -ExistingFileNewerOverwriteExisting=&Yfirrita hina gildandi skrá -ExistingFileNewerKeepExisting=&Halda hinni gildandi skrá (ráðlagt) -ExistingFileNewerOverwriteOrKeepAll=&Gera þetta við næstu ósamstæður -ErrorChangingAttr=Villa kom upp meðan reynt var að breyta eigindum gildandi skráarinnar: -ErrorCreatingTemp=Villa kom upp meðan reynt var að skapa skrá í staðsetningarskráasafninu: -ErrorReadingSource=Villa kom upp meðan reynt var að lesa upprunaskrána: -ErrorCopying=Villa kom upp meðan reynt var að afrita skrána: -ErrorReplacingExistingFile=Villa kom upp meðan reynt var að yfirrita gildandi skrána: -ErrorRestartReplace=RestartReplace mistókst: -ErrorRenamingTemp=Villa kom upp meðan reynt var að endurnefna skrá í staðsetningarskráasafninu: -ErrorRegisterServer=Ófært um að skrá DLL/OCX: %1 -ErrorRegSvr32Failed=RegSvr32 mistókst með skilakóðann %1 -ErrorRegisterTypeLib=Ófært um að skrá tegundasafnið: $1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bita -UninstallDisplayNameMark64Bit=64-bita -UninstallDisplayNameMarkAllUsers=Allir notendur -UninstallDisplayNameMarkCurrentUser=Núverandi notandi - -; *** Post-installation errors -ErrorOpeningReadme=Villa kom upp meðan reynt var að opna README-skrána. -ErrorRestartingComputer=Uppsetningu tókst ekki að endurræsa tölvuna. Vinsamlega gerðu þetta handvirkt. - -; *** Uninstaller messages -UninstallNotFound=Skráin „%1“ er ekki til. Getur ekki niðurtekið. -UninstallOpenError=Skrána „%1“ var ekki hægt að opna. Getur ekki niðurtekið -UninstallUnsupportedVer=Niðurtökuatburðaskráin „%1“ er á sniði sem er ekki þekkt af þessari útgáfu af niðurtakaranum. Getur ekki niðurtekið -UninstallUnknownEntry=Óþekkt færsla (%1) var fundin í niðurtökuatburðaskránni -ConfirmUninstall=Ert þú viss um að þú viljir algjörlega fjarlægja %1 og öll atriði þess? -UninstallOnlyOnWin64=Þessa uppsetningu er einungis hægt að niðurtaka á 64-bita Windows. -OnlyAdminCanUninstall=Þessi uppsetning getur einungis verið niðurtekin af notanda með stjórnandaréttindi. -UninstallStatusLabel=Vinsamlega bíddu meðan %1 er fjarlægt úr tölvunni þinni. -UninstalledAll=%1 var færsællega fjarlægt af tölvunni þinni. -UninstalledMost=%1-niðurtöku lokið.%n%nSuma liði var ekki hægt að fjarlægja. Þá er hægt að fjarlægja handvirkt. -UninstalledAndNeedsRestart=Til að ljúka niðurtöku %1 þarf að endurræsa tölvuna þína.%n%nVilt þú endurræsa núna? -UninstallDataCorrupted=„%1“-skráin er spillt. Getur ekki niðurtekið - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Fjarlægja deilda skrá? -ConfirmDeleteSharedFile2=Kerfið gefur til kynna að hin eftirfarandi deilda skrá er ekki lengur í notkun hjá neinu forriti. Vilt þú að Niðurtakari fjarlægi þessa deildu skrá?%n%nEf einhver forrit eru enn notandi þessa skrá og hún er fjarlægð, kann að vera að þau forrit munu ekki virka almennilega. Ef þú ert óviss, veldu Nei. Að skilja skrána eftir á kerfinu þínu mun ekki valda skaða. -SharedFileNameLabel=Skráarnafn: -SharedFileLocationLabel=Staðsetning: -WizardUninstalling=Niðurtökustaða -StatusUninstalling=Niðurtakandi %1… - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Uppsetjandi %1. -ShutdownBlockReasonUninstallingApp=Niðurtakandi %1. - -[CustomMessages] - -NameAndVersion=%1 útgáfa %2 -AdditionalIcons=Aukalegir skyndivísir: -CreateDesktopIcon=Skapa &skjáborðsskyndivísi -CreateQuickLaunchIcon=Skapa &Skyndiræsitáknmynd -ProgramOnTheWeb=%1 á Vefnum -UninstallProgram=Niðurtaka %1 -LaunchProgram=Ræsa %1 -AssocFileExtension=&Tengja %1 við %2-skráarframlenginguna -AssocingFileExtension=&Tengjandi %1 við %2-skráarframlenginguna… -AutoStartProgramGroupDescription=Ræsing: -AutoStartProgram=Sjálfvikt ræsa %1 -AddonHostProgramNotFound=%1 gat ekki staðsett möppuna sem þú valdir.%n%nVilt þú halda áfram hvort sem er? \ No newline at end of file diff --git a/Dependencies/Inno/Languages/Italian.isl b/Dependencies/Inno/Languages/Italian.isl deleted file mode 100644 index cfdf8b5c..00000000 --- a/Dependencies/Inno/Languages/Italian.isl +++ /dev/null @@ -1,390 +0,0 @@ -; bovirus@gmail.com -; *** Inno Setup version 6.1.0+ Italian messages *** -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). -; -; Italian.isl - Last Update: 25.07.2020 by bovirus (bovirus@gmail.com) -; -; Translator name: bovirus -; Translator e-mail: bovirus@gmail.com -; Based on previous translations of Rinaldo M. aka Whiteshark (based on ale5000 5.1.11+ translation) -; -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=Italiano -LanguageID=$0410 -LanguageCodePage=1252 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Installazione -SetupWindowTitle=Installazione di %1 -UninstallAppTitle=Disinstallazione -UninstallAppFullTitle=Disinstallazione di %1 - -; *** Misc. common -InformationTitle=Informazioni -ConfirmTitle=Conferma -ErrorTitle=Errore - -; *** SetupLdr messages -SetupLdrStartupMessage=Questa è l'installazione di %1.%n%nVuoi continuare? -LdrCannotCreateTemp=Impossibile creare un file temporaneo.%n%nInstallazione annullata. -LdrCannotExecTemp=Impossibile eseguire un file nella cartella temporanea.%n%nInstallazione annullata. - -; *** Startup error messages -LastErrorMessage=%1.%n%nErrore %2: %3 -SetupFileMissing=File %1 non trovato nella cartella di installazione.%n%nCorreggi il problema o richiedi una nuova copia del programma. -SetupFileCorrupt=I file di installazione sono danneggiati.%n%nRichiedi una nuova copia del programma. -SetupFileCorruptOrWrongVer=I file di installazione sono danneggiati, o sono incompatibili con questa versione del programma di installazione.%n%nCorreggi il problema o richiedi una nuova copia del programma. -InvalidParameter=È stato inserito nella riga di comando un parametro non valido:%n%n%1 -SetupAlreadyRunning=Il processo di installazione è già in funzione. -WindowsVersionNotSupported=Questo programma non supporta la versione di Windows installata nel computer. -WindowsServicePackRequired=Questo programma richiede %1 Service Pack %2 o successivo. -NotOnThisPlatform=Questo programma non è compatibile con %1. -OnlyOnThisPlatform=Questo programma richiede %1. -OnlyOnTheseArchitectures=Questo programma può essere installato solo su versioni di Windows progettate per le seguenti architetture della CPU:%n%n%1 -WinVersionTooLowError=Questo programma richiede %1 versione %2 o successiva. -WinVersionTooHighError=Questo programma non può essere installato su %1 versione %2 o successiva. -AdminPrivilegesRequired=Per installare questo programma sono richiesti privilegi di amministratore. -PowerUserPrivilegesRequired=Per poter installare questo programma sono richiesti i privilegi di amministratore o di Power Users. -SetupAppRunningError=%1 è attualmente in esecuzione.%n%nChiudi adesso tutte le istanze del programma e poi seleziona "OK", o seleziona "Annulla" per uscire. -UninstallAppRunningError=%1 è attualmente in esecuzione.%n%nChiudi adesso tutte le istanze del programma e poi seleziona "OK", o seleziona "Annulla" per uscire. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Seleziona modo installazione -PrivilegesRequiredOverrideInstruction=Seleziona modo installazione -PrivilegesRequiredOverrideText1=%1 può essere installato per tutti gli utenti (richiede privilegi di amministratore), o solo per l'utente attuale. -PrivilegesRequiredOverrideText2=%1 può essere installato solo per l'utente attuale, o per tutti gli utenti (richiede privilegi di amministratore). -PrivilegesRequiredOverrideAllUsers=Inst&alla per tutti gli utenti -PrivilegesRequiredOverrideAllUsersRecommended=Inst&alla per tutti gli utenti (suggerito) -PrivilegesRequiredOverrideCurrentUser=Installa solo per l'&utente attuale -PrivilegesRequiredOverrideCurrentUserRecommended=Installa solo per l'&utente attuale (suggerito) - -; *** Misc. errors -ErrorCreatingDir=Impossibile creare la cartella "%1" -ErrorTooManyFilesInDir=Impossibile creare i file nella cartella "%1" perché contiene troppi file. - -; *** Setup common messages -ExitSetupTitle=Uscita dall'installazione -ExitSetupMessage=L'installazione non è completa.%n%nUscendo dall'installazione in questo momento, il programma non sarà installato.%n%nÈ possibile eseguire l'installazione in un secondo tempo.%n%nVuoi uscire dall'installazione? -AboutSetupMenuItem=&Informazioni sull'installazione... -AboutSetupTitle=Informazioni sull'installazione -AboutSetupMessage=%1 versione %2%n%3%n%n%1 sito web:%n%4 -AboutSetupNote= -TranslatorNote=Traduzione italiana a cura di Rinaldo M. aka Whiteshark e bovirus (v. 11.09.2018) - -; *** Buttons -ButtonBack=< &Indietro -ButtonNext=&Avanti > -ButtonInstall=Inst&alla -ButtonOK=OK -ButtonCancel=Annulla -ButtonYes=&Si -ButtonYesToAll=Sì a &tutto -ButtonNo=&No -ButtonNoToAll=N&o a tutto -ButtonFinish=&Fine -ButtonBrowse=&Sfoglia... -ButtonWizardBrowse=S&foglia... -ButtonNewFolder=&Crea nuova cartella - -; *** "Select Language" dialog messages -SelectLanguageTitle=Seleziona la lingua dell'installazione -SelectLanguageLabel=Seleziona la lingua da usare durante l'installazione. - -; *** Common wizard text -ClickNext=Seleziona "Avanti" per continuare, o "Annulla" per uscire. -BeveledLabel= -BrowseDialogTitle=Sfoglia cartelle -BrowseDialogLabel=Seleziona una cartella nell'elenco, e quindi seleziona "OK". -NewFolderName=Nuova cartella - -; *** "Welcome" wizard page -WelcomeLabel1=Installazione di [name] -WelcomeLabel2=[name/ver] sarà installato sul computer.%n%nPrima di procedere chiudi tutte le applicazioni attive. - -; *** "Password" wizard page -WizardPassword=Password -PasswordLabel1=Questa installazione è protetta da password. -PasswordLabel3=Inserisci la password, quindi per continuare seleziona "Avanti".%nLe password sono sensibili alle maiuscole/minuscole. -PasswordEditLabel=&Password: -IncorrectPassword=La password inserita non è corretta. Riprova. - -; *** "License Agreement" wizard page -WizardLicense=Contratto di licenza -LicenseLabel=Prima di procedere leggi con attenzione le informazioni che seguono. -LicenseLabel3=Leggi il seguente contratto di licenza.%nPer procedere con l'installazione è necessario accettare tutti i termini del contratto. -LicenseAccepted=Accetto i termini del &contratto di licenza -LicenseNotAccepted=&Non accetto i termini del contratto di licenza - -; *** "Information" wizard pages -WizardInfoBefore=Informazioni -InfoBeforeLabel=Prima di procedere leggi le importanti informazioni che seguono. -InfoBeforeClickLabel=Quando sei pronto per proseguire, seleziona "Avanti". -WizardInfoAfter=Informazioni -InfoAfterLabel=Prima di procedere leggi le importanti informazioni che seguono. -InfoAfterClickLabel=Quando sei pronto per proseguire, seleziona "Avanti". - -; *** "User Information" wizard page -WizardUserInfo=Informazioni utente -UserInfoDesc=Inserisci le seguenti informazioni. -UserInfoName=&Nome: -UserInfoOrg=&Società: -UserInfoSerial=&Numero di serie: -UserInfoNameRequired=È necessario inserire un nome. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Selezione cartella di installazione -SelectDirDesc=Dove vuoi installare [name]? -SelectDirLabel3=[name] sarà installato nella seguente cartella. -SelectDirBrowseLabel=Per continuare seleziona "Avanti".%nPer scegliere un'altra cartella seleziona "Sfoglia". -DiskSpaceGBLabel=Sono richiesti almeno [gb] GB di spazio libero nel disco. -DiskSpaceMBLabel=Sono richiesti almeno [mb] MB di spazio libero nel disco. -CannotInstallToNetworkDrive=Non è possibile effettuare l'installazione in un disco in rete. -CannotInstallToUNCPath=Non è possibile effettuare l'installazione in un percorso UNC. -InvalidPath=Va inserito un percorso completo di lettera di unità; per esempio:%n%nC:\APP%n%no un percorso di rete nella forma:%n%n\\server\condivisione -InvalidDrive=L'unità o il percorso di rete selezionato non esiste o non è accessibile.%n%nSelezionane un altro. -DiskSpaceWarningTitle=Spazio su disco insufficiente -DiskSpaceWarning=L'installazione richiede per eseguire l'installazione almeno %1 KB di spazio libero, ma l'unità selezionata ha solo %2 KB disponibili.%n%nVuoi continuare comunque? -DirNameTooLong=Il nome della cartella o il percorso sono troppo lunghi. -InvalidDirName=Il nome della cartella non è valido. -BadDirName32=Il nome della cartella non può includere nessuno dei seguenti caratteri:%n%n%1 -DirExistsTitle=Cartella già esistente -DirExists=La cartella%n%n %1%n%nesiste già.%n%nVuoi comunque installare l'applicazione in questa cartella? -DirDoesntExistTitle=Cartella inesistente -DirDoesntExist=La cartella%n%n %1%n%nnon esiste. Vuoi creare la cartella? - -; *** "Select Components" wizard page -WizardSelectComponents=Selezione componenti -SelectComponentsDesc=Quali componenti vuoi installare? -SelectComponentsLabel2=Seleziona i componenti da installare, deseleziona quelli che non vuoi installare.%nPer continuare seleziona "Avanti". -FullInstallation=Installazione completa -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Installazione compatta -CustomInstallation=Installazione personalizzata -NoUninstallWarningTitle=Componente esistente -NoUninstallWarning=I seguenti componenti sono già installati nel computer:%n%n%1%n%nDeselezionando questi componenti essi non verranno rimossi.%n%nVuoi continuare comunque? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=La selezione attuale richiede almeno [gb] GB di spazio nel disco. -ComponentsDiskSpaceMBLabel=La selezione attuale richiede almeno [mb] MB di spazio nel disco. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Selezione processi aggiuntivi -SelectTasksDesc=Quali processi aggiuntivi vuoi eseguire? -SelectTasksLabel2=Seleziona i processi aggiuntivi che verranno eseguiti durante l'installazione di [name], quindi seleziona "Avanti". - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Selezione della cartella nel menu Avvio/Start -SelectStartMenuFolderDesc=Dove vuoi inserire i collegamenti al programma? -SelectStartMenuFolderLabel3=Verranno creati i collegamenti al programma nella seguente cartella del menu Avvio/Start. -SelectStartMenuFolderBrowseLabel=Per continuare, seleziona "Avanti".%nPer selezionare un'altra cartella, seleziona "Sfoglia". -MustEnterGroupName=Devi inserire il nome della cartella. -GroupNameTooLong=Il nome della cartella o il percorso sono troppo lunghi. -InvalidGroupName=Il nome della cartella non è valido. -BadGroupName=Il nome della cartella non può includere nessuno dei seguenti caratteri:%n%n%1 -NoProgramGroupCheck2=&Non creare una cartella nel menu Avvio/Start - -; *** "Ready to Install" wizard page -WizardReady=Pronto per l'installazione -ReadyLabel1=Il programma è pronto per iniziare l'installazione di [name] nel computer. -ReadyLabel2a=Seleziona "Installa" per continuare con l'installazione, o "Indietro" per rivedere o modificare le impostazioni. -ReadyLabel2b=Per procedere con l'installazione seleziona "Installa". -ReadyMemoUserInfo=Informazioni utente: -ReadyMemoDir=Cartella di installazione: -ReadyMemoType=Tipo di installazione: -ReadyMemoComponents=Componenti selezionati: -ReadyMemoGroup=Cartella del menu Avvio/Start: -ReadyMemoTasks=Processi aggiuntivi: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Download file aggiuntivi... -ButtonStopDownload=&Stop download -StopDownload=Sei sicuro di voler interrompere il download? -ErrorDownloadAborted=Download annullato -ErrorDownloadFailed=Download fallito: %1 %2 -ErrorDownloadSizeFailed=Rilevamento dimensione fallito: %1 %2 -ErrorFileHash1=Errore hash file: %1 -ErrorFileHash2=Hash file non valido: atteso %1, trovato %2 -ErrorProgress=Progresso non valido: %1 di %2 -ErrorFileSize=Dimensione file non valida: attesa %1, trovata %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Preparazione all'installazione -PreparingDesc=Preparazione all'installazione di [name] nel computer. -PreviousInstallNotCompleted=L'installazione/rimozione precedente del programma non è stata completata.%n%nÈ necessario riavviare il sistema per completare l'installazione.%n%nDopo il riavvio del sistema esegui di nuovo l'installazione di [name]. -CannotContinue=L'installazione non può continuare. Seleziona "Annulla" per uscire. -ApplicationsFound=Le seguenti applicazioni stanno usando file che devono essere aggiornati dall'installazione.%n%nTi consigliamo di permettere al processo di chiudere automaticamente queste applicazioni. -ApplicationsFound2=Le seguenti applicazioni stanno usando file che devono essere aggiornati dall'installazione.%n%nTi consigliamo di permettere al processo di chiudere automaticamente queste applicazioni.%n%nAl completamento dell'installazione, il processo tenterà di riavviare le applicazioni. -CloseApplications=Chiudi &automaticamente le applicazioni -DontCloseApplications=&Non chiudere le applicazioni -ErrorCloseApplications=L'installazione non è riuscita a chiudere automaticamente tutte le applicazioni.%n%nPrima di proseguire ti raccomandiamo di chiudere tutte le applicazioni che usano file che devono essere aggiornati durante l'installazione. -PrepareToInstallNeedsRestart=Il programma di installazione deve riavviare il computer.%nDopo aver riavviato il computer esegui di nuovo il programma di installazione per completare l'installazione di [name].%n%nVuoi riavviare il computer ora? - -; *** "Installing" wizard page -WizardInstalling=Installazione in corso -InstallingLabel=Attendi il completamento dell'installazione di [name] nel computer. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Installazione di [name] completata -FinishedLabelNoIcons=Installazione di [name] completata. -FinishedLabel=Installazione di [name] completata.%n%nL'applicazione può essere eseguita selezionando le relative icone. -ClickFinish=Seleziona "Fine" per uscire dall'installazione. -FinishedRestartLabel=Per completare l'installazione di [name], è necessario riavviare il sistema.%n%nVuoi riavviare adesso? -FinishedRestartMessage=Per completare l'installazione di [name], è necessario riavviare il sistema.%n%nVuoi riavviare adesso? -ShowReadmeCheck=Si, visualizza ora il file LEGGIMI -YesRadio=&Si, riavvia il sistema adesso -NoRadio=&No, riavvia il sistema più tardi -; used for example as 'Run MyProg.exe' -RunEntryExec=Esegui %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Visualizza %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=L'installazione necessita del disco successivo -SelectDiskLabel2=Inserisci il disco %1 e seleziona "OK".%n%nSe i file di questo disco si trovano in una cartella diversa da quella visualizzata sotto, inserisci il percorso corretto o seleziona "Sfoglia". -PathLabel=&Percorso: -FileNotInDir2=Il file "%1" non è stato trovato in "%2".%n%nInserisci il disco corretto o seleziona un'altra cartella. -SelectDirectoryLabel=Specifica il percorso del prossimo disco. - -; *** Installation phase messages -SetupAborted=L'installazione non è stata completata.%n%nCorreggi il problema e riesegui nuovamente l'installazione. -AbortRetryIgnoreSelectAction=Seleziona azione -AbortRetryIgnoreRetry=&Riprova -AbortRetryIgnoreIgnore=&Ignora questo errore e continua -AbortRetryIgnoreCancel=Annulla installazione - -; *** Installation status messages -StatusClosingApplications=Chiusura applicazioni... -StatusCreateDirs=Creazione cartelle... -StatusExtractFiles=Estrazione file... -StatusCreateIcons=Creazione icone... -StatusCreateIniEntries=Creazione voci nei file INI... -StatusCreateRegistryEntries=Creazione voci di registro... -StatusRegisterFiles=Registrazione file... -StatusSavingUninstall=Salvataggio delle informazioni di disinstallazione... -StatusRunProgram=Termine dell'installazione... -StatusRestartingApplications=Riavvio applicazioni... -StatusRollback=Recupero delle modifiche... - -; *** Misc. errors -ErrorInternal2=Errore interno %1 -ErrorFunctionFailedNoCode=%1 fallito -ErrorFunctionFailed=%1 fallito; codice %2 -ErrorFunctionFailedWithMessage=%1 fallito; codice %2.%n%3 -ErrorExecutingProgram=Impossibile eseguire il file:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Errore di apertura della chiave di registro:%n%1\%2 -ErrorRegCreateKey=Errore di creazione della chiave di registro:%n%1\%2 -ErrorRegWriteKey=Errore di scrittura della chiave di registro:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Errore nella creazione delle voci INI nel file "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Salta questo file (non suggerito) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignora questo errore e continua (non suggerito) -SourceIsCorrupted=Il file sorgente è danneggiato -SourceDoesntExist=Il file sorgente "%1" non esiste -ExistingFileReadOnly2=Il file esistente non può essere sostituito in quanto segnato come in sola lettura. -ExistingFileReadOnlyRetry=&Rimuovi attributo di sola lettura e riprova -ExistingFileReadOnlyKeepExisting=&Mantieni il file esistente -ErrorReadingExistingDest=Si è verificato un errore durante la lettura del file esistente: -FileExistsSelectAction=Seleziona azione -FileExists2=Il file esiste già. -FileExistsOverwriteExisting=S&ovrascrivi il file esistente -FileExistsKeepExisting=&Mantieni il file esistente -FileExistsOverwriteOrKeepAll=&Applica questa azione per i prossimi conflitti -ExistingFileNewerSelectAction=Seleziona azione -ExistingFileNewer2=Il file esistente è più recente del file che si sta cercando di installare. -ExistingFileNewerOverwriteExisting=S&ovrascrivi il file esistente -ExistingFileNewerKeepExisting=&Mantieni il file esistente (suggerito) -ExistingFileNewerOverwriteOrKeepAll=&Applica questa azione per i prossimi conflitti -ErrorChangingAttr=Si è verificato un errore durante il tentativo di modifica dell'attributo del file esistente: -ErrorCreatingTemp=Si è verificato un errore durante la creazione di un file nella cartella di installazione: -ErrorReadingSource=Si è verificato un errore durante la lettura del file sorgente: -ErrorCopying=Si è verificato un errore durante la copia di un file: -ErrorReplacingExistingFile=Si è verificato un errore durante la sovrascrittura del file esistente: -ErrorRestartReplace=Errore durante riavvio o sostituzione: -ErrorRenamingTemp=Si è verificato un errore durante il tentativo di rinominare un file nella cartella di installazione: -ErrorRegisterServer=Impossibile registrare la DLL/OCX: %1 -ErrorRegSvr32Failed=RegSvr32 è fallito con codice di uscita %1 -ErrorRegisterTypeLib=Impossibile registrare la libreria di tipo: %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32bit -UninstallDisplayNameMark64Bit=64bit -UninstallDisplayNameMarkAllUsers=Tutti gli utenti -UninstallDisplayNameMarkCurrentUser=Utente attuale - -; *** Post-installation errors -ErrorOpeningReadme=Si è verificato un errore durante l'apertura del file LEGGIMI. -ErrorRestartingComputer=Impossibile riavviare il sistema. Riavvia il sistema manualmente. - -; *** Uninstaller messages -UninstallNotFound=Il file "%1" non esiste.%n%nImpossibile disinstallare. -UninstallOpenError=Il file "%1" non può essere aperto.%n%nImpossibile disinstallare -UninstallUnsupportedVer=Il file registro di disinstallazione "%1" è in un formato non riconosciuto da questa versione del programma di disinstallazione.%n%nImpossibile disinstallare -UninstallUnknownEntry=Trovata una voce sconosciuta (%1) nel file registro di disinstallazione -ConfirmUninstall=Vuoi rimuovere completamente %1 e tutti i suoi componenti? -UninstallOnlyOnWin64=Questa applicazione può essere disinstallata solo in Windows a 64-bit. -OnlyAdminCanUninstall=Questa applicazione può essere disinstallata solo da un utente con privilegi di amministratore. -UninstallStatusLabel=Attendi fino a che %1 è stato rimosso dal computer. -UninstalledAll=Disinstallazione di %1 completata. -UninstalledMost=Disinstallazione di %1 completata.%n%nAlcuni elementi non possono essere rimossi.%n%nDovranno essere rimossi manualmente. -UninstalledAndNeedsRestart=Per completare la disinstallazione di %1, è necessario riavviare il sistema.%n%nVuoi riavviare il sistema adesso? -UninstallDataCorrupted=Il file "%1" è danneggiato. Impossibile disinstallare - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Vuoi rimuovere il file condiviso? -ConfirmDeleteSharedFile2=Il sistema indica che il seguente file condiviso non è più usato da nessun programma.%nVuoi rimuovere questo file condiviso?%nSe qualche programma usasse questo file, potrebbe non funzionare più correttamente.%nSe non sei sicuro, seleziona "No".%nLasciare il file nel sistema non può causare danni. -SharedFileNameLabel=Nome del file: -SharedFileLocationLabel=Percorso: -WizardUninstalling=Stato disinstallazione -StatusUninstalling=Disinstallazione di %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installazione di %1. -ShutdownBlockReasonUninstallingApp=Disinstallazione di %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 versione %2 -AdditionalIcons=Icone aggiuntive: -CreateDesktopIcon=Crea un'icona sul &desktop -CreateQuickLaunchIcon=Crea un'icona nella &barra 'Avvio veloce' -ProgramOnTheWeb=Sito web di %1 -UninstallProgram=Disinstalla %1 -LaunchProgram=Avvia %1 -AssocFileExtension=&Associa i file con estensione %2 a %1 -AssocingFileExtension=Associazione dei file con estensione %2 a %1... -AutoStartProgramGroupDescription=Esecuzione automatica: -AutoStartProgram=Esegui automaticamente %1 -AddonHostProgramNotFound=Impossibile individuare %1 nella cartella selezionata.%n%nVuoi continuare ugualmente? diff --git a/Dependencies/Inno/Languages/Japanese.isl b/Dependencies/Inno/Languages/Japanese.isl deleted file mode 100644 index a1c150ae..00000000 --- a/Dependencies/Inno/Languages/Japanese.isl +++ /dev/null @@ -1,367 +0,0 @@ -; *** Inno Setup version 6.1.0+ Japanese messages *** -; -; Maintained by Koichi Shirasuka (shirasuka@eugrid.co.jp) -; -; Translation based on Ryou Minakami (ryou32jp@yahoo.co.jp) -; -; $jrsoftware: issrc/Files/Languages/Japanese.isl,v 1.6 2010/03/08 07:50:01 mlaan Exp $ - -[LangOptions] -LanguageName=<65E5><672C><8A9E> -LanguageID=$0411 -LanguageCodePage=932 - -[Messages] - -; *** Application titles -SetupAppTitle=ZbgAbv -SetupWindowTitle=%1 ZbgAbv -UninstallAppTitle=ACXg[ -UninstallAppFullTitle=%1 ACXg[ - -; *** Misc. common -InformationTitle= -ConfirmTitle=mF -ErrorTitle=G[ - -; *** SetupLdr messages -SetupLdrStartupMessage=%1 CXg[܂Bs܂H -LdrCannotCreateTemp=ꎞt@C쐬ł܂BZbgAbv𒆎~܂B -LdrCannotExecTemp=ꎞtH_[̃t@Csł܂BZbgAbv𒆎~܂B - -; *** Startup error messages -LastErrorMessage=%1.%n%nG[ %2: %3 -SetupFileMissing=t@C %1 ‚܂B邩VZbgAbvvO肵ĂB -SetupFileCorrupt=ZbgAbvt@CĂ܂BVZbgAbvvO肵ĂB -SetupFileCorruptOrWrongVer=ZbgAbvt@CĂ邩Ão[W̃ZbgAbvƌ݊܂B邩VZbgAbvvO肵ĂB -InvalidParameter=R}hCɕsȃp[^[n܂:%n%n%1 -SetupAlreadyRunning=ZbgAbv͊ɎsłB -WindowsVersionNotSupported=̃vO͂g̃o[W Windows T|[gĂ܂B -WindowsServicePackRequired=̃vO̎sɂ %1 Service Pack %2 ȍ~KvłB -NotOnThisPlatform=̃vO %1 ł͓삵܂B -OnlyOnThisPlatform=̃vO̎sɂ %1 KvłB -OnlyOnTheseArchitectures=̃vO%n%n%1vZbT[ Windows ɂCXg[ł܂B -WinVersionTooLowError=̃vO̎sɂ %1 %2 ȍ~KvłB -WinVersionTooHighError=̃vO %1 %2 ȍ~ł͓삵܂B -AdminPrivilegesRequired=̃vOCXg[邽߂ɂ͊Ǘ҂ƂăOCKv܂B -PowerUserPrivilegesRequired=̃vOCXg[邽߂ɂ͊Ǘ҂܂̓p[[U[ƂăOCKv܂B -SetupAppRunningError=ZbgAbv͎s %1 o܂B%n%nJĂAvP[Vׂĕ‚ĂuOKvNbNĂBuLZvNbNƁAZbgAbvI܂B -UninstallAppRunningError=ACXg[͎s %1 o܂B%n%nJĂAvP[Vׂĕ‚ĂuOKvNbNĂBuLZvNbNƁAZbgAbvI܂B - -; *** Startup questions -PrivilegesRequiredOverrideTitle=CXg[[h̑I -PrivilegesRequiredOverrideInstruction=CXg[[hIĂ -PrivilegesRequiredOverrideText1=%1 ׂ͂Ẵ[U[ (ǗҌKvł) ܂݂͌̃[U[pɃCXg[ł܂B -PrivilegesRequiredOverrideText2=%1 ݂͌̃[U[܂ׂ͂Ẵ[U[p (ǗҌKvł) ɃCXg[ł܂B -PrivilegesRequiredOverrideAllUsers=ׂẴ[U[pɃCXg[(&A) -PrivilegesRequiredOverrideAllUsersRecommended=ׂẴ[U[pɃCXg[(&A) () -PrivilegesRequiredOverrideCurrentUser=݂̃[U[pɃCXg[(&M) -PrivilegesRequiredOverrideCurrentUserRecommended=݂̃[U[pɃCXg[(&M) () - -; *** Misc. errors -ErrorCreatingDir=fBNg %1 쐬ɃG[܂B -ErrorTooManyFilesInDir=fBNg %1 Ƀt@C쐬ɃG[܂Bt@C̐܂B - -; *** Setup common messages -ExitSetupTitle=ZbgAbvI -ExitSetupMessage=ZbgAbvƂ͊Ă܂BŃZbgAbv𒆎~ƃvO̓CXg[܂B%n%n߂ăCXg[ꍇ́AxZbgAbvsĂB%n%nZbgAbvI܂H -AboutSetupMenuItem=ZbgAbvɂ‚(&A)... -AboutSetupTitle=ZbgAbvɂ‚ -AboutSetupMessage=%1 %2%n%3%n%n%1 z[y[W:%n%4 -AboutSetupNote= -TranslatorNote= - -; *** Buttons -ButtonBack=< ߂(&B) -ButtonNext=(&N) > -ButtonInstall=CXg[(&I) -ButtonOK=OK -ButtonCancel=LZ -ButtonYes=͂(&Y) -ButtonYesToAll=ׂĂ͂(&A) -ButtonNo=(&N) -ButtonNoToAll=ׂĂ(&O) -ButtonFinish=(&F) -ButtonBrowse=Q(&B)... -ButtonWizardBrowse=Q(&R) -ButtonNewFolder=VtH_[(&M) - -; *** "Select Language" dialog messages -SelectLanguageTitle=ZbgAbvɎgp錾̑I -SelectLanguageLabel=CXg[ɗp錾IłB - -; *** Common wizard text -ClickNext=sɂ́uցvAZbgAbvIɂ́uLZvNbNĂB -BeveledLabel= -BrowseDialogTitle=tH_[Q -BrowseDialogLabel=XgtH_[I OK ĂB -NewFolderName=VtH_[ - -; *** "Welcome" wizard page -WelcomeLabel1=[name] ZbgAbvEBU[h̊Jn -WelcomeLabel2=̃vO͂gp̃Rs[^[ [name/ver] CXg[܂B%n%nsOɑ̃AvP[VׂďIĂB - -; *** "Password" wizard page -WizardPassword=pX[h -PasswordLabel1=̃CXg[vO̓pX[hɂĕی삳Ă܂B -PasswordLabel3=pX[h͂āuցvNbNĂBpX[h͑啶Əʂ܂B -PasswordEditLabel=pX[h(&P): -IncorrectPassword=͂ꂽpX[h܂Bx͂ȂĂB - -; *** "License Agreement" wizard page -WizardLicense=gp_񏑂̓ -LicenseLabel=sOɈȉ̏dvȏǂ݂B -LicenseLabel3=ȉ̎gp_񏑂ǂ݂BCXg[𑱍sɂ͂̌_񏑂ɓӂKv܂B -LicenseAccepted=ӂ(&A) -LicenseNotAccepted=ӂȂ(&D) - -; *** "Information" wizard pages -WizardInfoBefore= -InfoBeforeLabel=sOɈȉ̏dvȏǂ݂B -InfoBeforeClickLabel=ZbgAbv𑱍sɂ́uցvNbNĂB -WizardInfoAfter= -InfoAfterLabel=sOɈȉ̏dvȏǂ݂B -InfoAfterClickLabel=ZbgAbv𑱍sɂ́uցvNbNĂB - -; *** "User Information" wizard page -WizardUserInfo=[U[ -UserInfoDesc=[U[͂ĂB -UserInfoName=[U[(&U): -UserInfoOrg=gD(&O): -UserInfoSerial=VAԍ(&S): -UserInfoNameRequired=[U[͂ĂB - -; *** "Select Destination Location" wizard page -WizardSelectDir=CXg[̎w -SelectDirDesc=[name] ̃CXg[w肵ĂB -SelectDirLabel3=[name] CXg[tH_w肵āAuցvNbNĂB -SelectDirBrowseLabel=ɂ́uցvNbNĂBʂ̃tH_[Iɂ́uQƁvNbNĂB -DiskSpaceGBLabel=̃vO͍Œ [gb] GB ̃fBXN󂫗̈KvƂ܂B -DiskSpaceMBLabel=̃vO͍Œ [mb] MB ̃fBXN󂫗̈KvƂ܂B -CannotInstallToNetworkDrive=lbg[NhCuɃCXg[邱Ƃ͂ł܂B -CannotInstallToUNCPath=UNC pXɃCXg[邱Ƃ͂ł܂B -InvalidPath=hCu܂ފSȃpX͂ĂB%n%nFC:\APP%n%n܂ UNC `̃pX͂ĂB%n%nF\\server\share -InvalidDrive=w肵hCu܂ UNC pX‚ȂANZXł܂Bʂ̃pXw肵ĂB -DiskSpaceWarningTitle=fBXN󂫗̈̕s -DiskSpaceWarning=CXg[ɂ͍Œ %1 KB ̃fBXN󂫗̈悪KvłAw肳ꂽhCuɂ %2 KB ̋󂫗̈悵܂B%n%n̂܂ܑs܂H -DirNameTooLong=hCu܂̓pX߂܂B -InvalidDirName=tH_[łB -BadDirName32=ȉ̕܂ރtH_[͎wł܂B:%n%n%1 -DirExistsTitle=̃tH_[ -DirExists=tH_[ %n%n%1%n%nɑ݂܂B̂܂܂̃tH_[փCXg[܂H -DirDoesntExistTitle=tH_[‚܂B -DirDoesntExist=tH_[ %n%n%1%n%n‚܂BVtH_[쐬܂H - -; *** "Select Components" wizard page -WizardSelectComponents=R|[lg̑I -SelectComponentsDesc=CXg[R|[lgIĂB -SelectComponentsLabel2=CXg[R|[lgIĂBCXg[Kv̂ȂR|[lg̓`FbNOĂBsɂ́uցvNbNĂB -FullInstallation=tCXg[ -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=RpNgCXg[ -CustomInstallation=JX^CXg[ -NoUninstallWarningTitle=̃R|[lg -NoUninstallWarning=ZbgAbv͈ȉ̃R|[lgɃCXg[Ă邱Ƃo܂B%n%n%1%n%ñR|[lg̑IĂACXg[͂܂B%n%n̂܂ܑs܂H -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=݂̑I͍Œ [gb] GB ̃fBXN󂫗̈KvƂ܂B -ComponentsDiskSpaceMBLabel=݂̑I͍Œ [mb] MB ̃fBXN󂫗̈KvƂ܂B - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=lj^XN̑I -SelectTasksDesc=slj^XNIĂB -SelectTasksLabel2=[name] CXg[Ɏslj^XNIāAuցvNbNĂB - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=X^[gj[tH_[̎w -SelectStartMenuFolderDesc=vÕV[gJbg쐬ꏊw肵ĂB -SelectStartMenuFolderLabel3=ZbgAbṽ͎X^[gj[tH_[ɃvÕV[gJbg쐬܂B -SelectStartMenuFolderBrowseLabel=ɂ́uցvNbNĂBႤtH_[Iɂ́uQƁvNbNĂB -MustEnterGroupName=tH_[w肵ĂB -GroupNameTooLong=tH_[܂̓pX߂܂B -InvalidGroupName=tH_[łB -BadGroupName=̕܂ރtH_[͎wł܂:%n%n%1 -NoProgramGroupCheck2=X^[gj[tH_[쐬Ȃ(&D) - -; *** "Ready to Install" wizard page -WizardReady=CXg[ -ReadyLabel1=gp̃Rs[^ [name] CXg[鏀ł܂B -ReadyLabel2a=CXg[𑱍sɂ́uCXg[vAݒ̊mFύXsɂ́u߂vNbNĂB -ReadyLabel2b=CXg[𑱍sɂ́uCXg[vNbNĂB -ReadyMemoUserInfo=[U[: -ReadyMemoDir=CXg[: -ReadyMemoType=ZbgAbv̎: -ReadyMemoComponents=IR|[lg: -ReadyMemoGroup=X^[gj[tH_[: -ReadyMemoTasks=lj^XNꗗ: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=lj̃t@C_E[hĂ܂... -ButtonStopDownload=_E[h𒆎~(&S) -StopDownload=_E[h𒆎~Ă낵łH -ErrorDownloadAborted=_E[h𒆎~܂ -ErrorDownloadFailed=_E[hɎs܂: %1 %2 -ErrorDownloadSizeFailed=TCY̎擾Ɏs܂: %1 %2 -ErrorFileHash1=t@C̃nbVɎs܂: %1 -ErrorFileHash2=ȃt@CnbV: \ꂽl %1, ۂ̒l %2 -ErrorProgress=Ȑis: %1 / %2 -ErrorFileSize=ȃt@CTCY: \ꂽl %1, ۂ̒l %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=CXg[ -PreparingDesc=gp̃Rs[^[ [name] CXg[鏀Ă܂B -PreviousInstallNotCompleted=OsAvP[ṼCXg[܂͍폜Ă܂Bɂ̓Rs[^[ċNKv܂B%n%n[name] ̃CXg[邽߂ɂ́AċNɂxZbgAbvsĂB -CannotContinue=ZbgAbv𑱍sł܂BuLZvNbNăZbgAbvIĂB -ApplicationsFound=ȉ̃AvP[VZbgAbvɕKvȃt@CgpĂ܂BZbgAbvɎIɃAvP[VI邱Ƃ𐄏܂B -ApplicationsFound2=ȉ̃AvP[VZbgAbvɕKvȃt@CgpĂ܂BZbgAbvɎIɃAvP[VI邱Ƃ𐄏܂BCXg[̊AZbgAbv̓AvP[V̍ċN݂܂B -CloseApplications=IɃAvP[VI(&A) -DontCloseApplications=AvP[VIȂ(&D) -ErrorCloseApplications=ZbgAbvׂ͂ẴAvP[VIɏI邱Ƃł܂łBZbgAbv𑱍sOɁAXV̕Kvȃt@CgpĂ邷ׂẴAvP[VI邱Ƃ𐄏܂B -PrepareToInstallNeedsRestart=ZbgAbv̓Rs[^[ċNKv܂BRs[^[ċNAZbgAbvēxs [name] ̃CXg[ĂB%n%nɍċN܂H? - -; *** "Installing" wizard page -WizardInstalling=CXg[ -InstallingLabel=gp̃Rs[^[ [name] CXg[Ă܂B΂炭҂B - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=[name] ZbgAbvEBU[h̊ -FinishedLabelNoIcons=gp̃Rs[^[ [name] ZbgAbv܂B -FinishedLabel=gp̃Rs[^[ [name] ZbgAbv܂BAvP[Vsɂ̓CXg[ꂽV[gJbgIĂB -ClickFinish=ZbgAbvIɂ́uvNbNĂB -FinishedRestartLabel=[name] ̃CXg[邽߂ɂ́ARs[^[ċNKv܂BɍċN܂H -FinishedRestartMessage=[name] ̃CXg[邽߂ɂ́ARs[^[ċNKv܂B%n%nɍċN܂H -ShowReadmeCheck=README t@C\B -YesRadio=ɍċN(&Y) -NoRadio=Ŏ蓮ōċN(&N) -; used for example as 'Run MyProg.exe' -RunEntryExec=%1 ̎s -; used for example as 'View Readme.txt' -RunEntryShellExec=%1 ̕\ - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=fBXN̑} -SelectDiskLabel2=fBXN %1 }AuOKvNbNĂB%n%ñfBXÑt@Cɕ\ĂtH_[ȊȌꏊɂꍇ́ApX͂邩uQƁv{^NbNĂB -PathLabel=pX(&P): -FileNotInDir2=t@C %1 %2 Ɍ‚܂BfBXN}邩Aʂ̃tH_[w肵ĂB -SelectDirectoryLabel=̃fBXN̂ꏊw肵ĂB - -; *** Installation phase messages -SetupAborted=ZbgAbv͊Ă܂B%n%nĂAxZbgAbvsĂB -AbortRetryIgnoreSelectAction=ANVIĂ -AbortRetryIgnoreRetry=Ďs(&T) -AbortRetryIgnoreIgnore=G[𖳎đs(&I) -AbortRetryIgnoreCancel=CXg[LZ - -; *** Installation status messages -StatusClosingApplications=AvP[VIĂ܂... -StatusCreateDirs=tH_[쐬Ă܂... -StatusExtractFiles=t@CWJĂ܂... -StatusCreateIcons=V|gJbg쐬Ă܂... -StatusCreateIniEntries=INIt@Cݒ肵Ă܂... -StatusCreateRegistryEntries=WXgݒ肵Ă܂... -StatusRegisterFiles=t@Co^Ă܂... -StatusSavingUninstall=ACXg[ۑĂ܂... -StatusRunProgram=CXg[Ă܂... -StatusRestartingApplications=AvP[VċNĂ܂... -StatusRollback=ύXɖ߂Ă܂... - -; *** Misc. errors -ErrorInternal2=G[: %1 -ErrorFunctionFailedNoCode=%1 G[ -ErrorFunctionFailed=%1 G[: R[h %2 -ErrorFunctionFailedWithMessage=%1 G[: R[h %2.%n%3 -ErrorExecutingProgram=t@CsG[:%n%1 - -; *** Registry errors -ErrorRegOpenKey=WXgL[I[vG[:%n%1\%2 -ErrorRegCreateKey=WXgL[쐬G[:%n%1\%2 -ErrorRegWriteKey=WXgL[݃G[:%n%1\%2 - -; *** INI errors -ErrorIniEntry=INIt@CGg쐬G[: t@C %1 - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=̃t@CXLbv(&S) (܂) -FileAbortRetryIgnoreIgnoreNotRecommended=G[𖳎đs(&I) (܂) -SourceIsCorrupted=Rs[̃t@CĂ܂B -SourceDoesntExist=Rs[̃t@C %1 ‚܂B -ExistingFileReadOnly2=̃t@C͓ǂݎp̂ߒuł܂B -ExistingFileReadOnlyRetry=ǂݎpĂxȂ(&R) -ExistingFileReadOnlyKeepExisting=̃t@Cc(&K) -ErrorReadingExistingDest=̃t@CǂݍݒɃG[܂: -FileExistsSelectAction=ANVIĂ -FileExists2=t@C͊ɑ݂܂B -FileExistsOverwriteExisting=̃t@C㏑(&O) -FileExistsKeepExisting=̃t@Cێ(&K) -FileExistsOverwriteOrKeepAll=ȍ~̋ɓs(&D) -ExistingFileNewerSelectAction=ANVIĂ -ExistingFileNewer2=ZbgAbvCXg[悤ƂĂ̂Vt@C܂B -ExistingFileNewerOverwriteExisting=̃t@C㏑(&O) -ExistingFileNewerKeepExisting=̃t@Cێ(&K) () -ExistingFileNewerOverwriteOrKeepAll=ȍ~̋ɓs(&D) -ErrorChangingAttr=t@C̑ύXɃG[܂: -ErrorCreatingTemp=Rs[̃tH_[Ƀt@C쐬ɃG[܂: -ErrorReadingSource=Rs[̃t@CǂݍݒɃG[܂: -ErrorCopying=t@CRs[ɃG[܂: -ErrorReplacingExistingFile=̃t@CuɃG[܂: -ErrorRestartReplace=ċNɂu̎sɎs܂: -ErrorRenamingTemp=Rs[tH_[̃t@CύXɃG[܂: -ErrorRegisterServer=DLL/OCX̓o^Ɏs܂: %1 -ErrorRegSvr32Failed=RegSvr32͏IR[h %1 ɂ莸s܂ -ErrorRegisterTypeLib=^CvCuւ̓o^Ɏs܂: %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32 rbg -UninstallDisplayNameMark64Bit=64 rbg -UninstallDisplayNameMarkAllUsers=ׂẴ[U[ -UninstallDisplayNameMarkCurrentUser=݂̃[U[ - -; *** Post-installation errors -ErrorOpeningReadme=README t@C̃I[vɎs܂B -ErrorRestartingComputer=Rs[^[̍ċNɎs܂B蓮ōċNĂB - -; *** Uninstaller messages -UninstallNotFound=t@C "%1" ‚܂BACXg[sł܂B -UninstallOpenError=t@C "%1" JƂł܂BACXg[sł܂B -UninstallUnsupportedVer=ACXg[Ot@C "%1" ́Ão[W̃ACXg[vOFłȂ`łBACXg[sł܂B -UninstallUnknownEntry=ACXg[Oɕs̃Gg (%1) ‚܂B -ConfirmUninstall=%1 Ƃ̊֘AR|[lgׂč폜܂B낵łH -UninstallOnlyOnWin64=̃vO64 rbgWindowsł̂݃ACXg[邱Ƃł܂B -OnlyAdminCanUninstall=ACXg[邽߂ɂ͊ǗҌKvłB -UninstallStatusLabel=gp̃Rs[^[ %1 폜Ă܂B΂炭҂B -UninstalledAll=%1 ͂gp̃Rs[^[琳ɍ폜܂B -UninstalledMost=%1 ̃ACXg[܂B%n%n‚̍ڂ폜ł܂łB蓮ō폜ĂB -UninstalledAndNeedsRestart=%1 ̍폜邽߂ɂ́ARs[^[ċNKv܂BɍċN܂H -UninstallDataCorrupted=t@C "%1" Ă܂BACXg[sł܂B - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Lt@C̍폜 -ConfirmDeleteSharedFile2=VXeŁA̋Lt@C͂ǂ̃vOłgpĂ܂B̋Lt@C폜܂H%n%ñvO܂̃t@CgpꍇA폜ƃvO삵ȂȂ鋰ꂪ܂B܂młȂꍇ́uvIĂBVXeɃt@CcĂNƂ͂܂B -SharedFileNameLabel=t@C: -SharedFileLocationLabel=ꏊ: -WizardUninstalling=ACXg[ -StatusUninstalling=%1 ACXg[Ă܂... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=%1 CXg[łB -ShutdownBlockReasonUninstallingApp=%1 ACXg[łB - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 o[W %2 -AdditionalIcons=ACRlj: -CreateDesktopIcon=fXNgbvɃACR쐬(&D) -CreateQuickLaunchIcon=NCbNNACR쐬(&Q) -ProgramOnTheWeb=%1 on the Web -UninstallProgram=%1 ACXg[ -LaunchProgram=%1 s -AssocFileExtension=t@Cgq %2 %1 ֘At܂B -AssocingFileExtension=t@Cgq %2 %1 ֘AtĂ܂... -AutoStartProgramGroupDescription=X^[gAbv: -AutoStartProgram=%1 IɊJn -AddonHostProgramNotFound=IꂽtH_[ %1 ‚܂łB%n%n̂܂ܑs܂H \ No newline at end of file diff --git a/Dependencies/Inno/Languages/Norwegian.isl b/Dependencies/Inno/Languages/Norwegian.isl deleted file mode 100644 index 8141d45a..00000000 --- a/Dependencies/Inno/Languages/Norwegian.isl +++ /dev/null @@ -1,378 +0,0 @@ -; *** Inno Setup version 6.1.0+ Norwegian (bokml) messages *** -; -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). -; -; Norwegian translation currently maintained by Eivind Bakkestuen -; E-mail: eivind.bakkestuen@gmail.com -; Many thanks to the following people for language improvements and comments: -; -; Harald Habberstad, Frode Weum, Morten Johnsen, -; Tore Ottinsen, Kristian Hyllestad, Thomas Kelso, Jostein Christoffer Andersen -; -; $jrsoftware: issrc/Files/Languages/Norwegian.isl,v 1.15 2007/04/23 15:03:35 josander+ Exp $ - -[LangOptions] -LanguageName=Norsk -LanguageID=$0414 -LanguageCodePage=1252 - -[Messages] - -; *** Application titles -SetupAppTitle=Installasjon -SetupWindowTitle=Installere - %1 -UninstallAppTitle=Avinstaller -UninstallAppFullTitle=%1 Avinstallere - -; *** Misc. common -InformationTitle=Informasjon -ConfirmTitle=Bekreft -ErrorTitle=Feil - -; *** SetupLdr messages -SetupLdrStartupMessage=Dette vil installere %1. Vil du fortsette? -LdrCannotCreateTemp=Kan ikke lage midlertidig fil, installasjonen er avbrutt -LdrCannotExecTemp=Kan ikke kjre fil i den midlertidige mappen, installasjonen er avbrutt - -; *** Startup error messages -LastErrorMessage=%1.%n%nFeil %2: %3 -SetupFileMissing=Filen %1 mangler i installasjonskatalogen. Vennligst korriger problemet eller skaff deg en ny kopi av programmet. -SetupFileCorrupt=Installasjonsfilene er delagte. Vennligst skaff deg en ny kopi av programmet. -SetupFileCorruptOrWrongVer=Installasjonsfilene er delagte eller ikke kompatible med dette installasjonsprogrammet. Vennligst korriger problemet eller skaff deg en ny kopi av programmet. -InvalidParameter=Kommandolinjen hadde en ugyldig parameter:%n%n%1 -SetupAlreadyRunning=Dette programmet kjrer allerede. -WindowsVersionNotSupported=Dette programmet sttter ikke Windows-versjonen p denne maskinen. -WindowsServicePackRequired=Dette programmet krever %1 Service Pack %2 eller nyere. -NotOnThisPlatform=Dette programmet kjrer ikke p %1. -OnlyOnThisPlatform=Dette programmet kjrer kun p %1. -OnlyOnTheseArchitectures=Dette programmet kan kun installeres i Windows-versjoner som er beregnet p flgende prossessorarkitekturer:%n%n%1 -WinVersionTooLowError=Dette programmet krever %1 versjon %2 eller nyere. -WinVersionTooHighError=Dette programmet kan ikke installeres p %1 versjon %2 eller nyere. -AdminPrivilegesRequired=Administrator-rettigheter kreves for installere dette programmet. -PowerUserPrivilegesRequired=Du m vre logget inn som administrator eller ha administrator-rettigheter nr du installerer dette programmet. -SetupAppRunningError=Installasjonsprogrammet har funnet ut at %1 kjrer.%n%nVennligst avslutt det n og klikk deretter OK for fortsette, eller Avbryt for avslutte. -UninstallAppRunningError=Avinstallasjonsprogrammet har funnet ut at %1 kjrer.%n%nVennligst avslutt det n og klikk deretter OK for fortsette, eller Avbryt for avslutte. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Velg Installasjon Type -PrivilegesRequiredOverrideInstruction=Installasjons Type -PrivilegesRequiredOverrideText1=%1 kan installeres for alle brukere (krever administrator-rettigheter), eller bare for deg. -PrivilegesRequiredOverrideText2=%1 kan installeres bare for deg, eller for alle brukere (krever administrator-rettigheter). -PrivilegesRequiredOverrideAllUsers=Installer for &alle brukere -PrivilegesRequiredOverrideAllUsersRecommended=Installer for &alle brukere (anbefalt) -PrivilegesRequiredOverrideCurrentUser=Installer bare for &meg -PrivilegesRequiredOverrideCurrentUserRecommended=Installer bare for &meg (anbefalt) - -; *** Misc. errors -ErrorCreatingDir=Installasjonsprogrammet kunne ikke lage mappen "%1" -ErrorTooManyFilesInDir=Kunne ikke lage en fil i mappen "%1" fordi den inneholder for mange filer - -; *** Setup common messages -ExitSetupTitle=Avslutt installasjonen -ExitSetupMessage=Installasjonen er ikke ferdig. Programmet installeres ikke hvis du avslutter n.%n%nDu kan installere programmet igjen senere hvis du vil.%n%nVil du avslutte? -AboutSetupMenuItem=&Om installasjonsprogrammet... -AboutSetupTitle=Om installasjonsprogrammet -AboutSetupMessage=%1 versjon %2%n%3%n%n%1 hjemmeside:%n%4 -AboutSetupNote= -TranslatorNote=Norwegian translation maintained by Eivind Bakkestuen (eivind.bakkestuen@gmail.com) - -; *** Buttons -ButtonBack=< &Tilbake -ButtonNext=&Neste > -ButtonInstall=&Installer -ButtonOK=OK -ButtonCancel=Avbryt -ButtonYes=&Ja -ButtonYesToAll=Ja til &alle -ButtonNo=&Nei -ButtonNoToAll=N&ei til alle -ButtonFinish=&Ferdig -ButtonBrowse=&Bla gjennom... -ButtonWizardBrowse=&Bla gjennom... -ButtonNewFolder=&Lag ny mappe - -; *** "Select Language" dialog messages -SelectLanguageTitle=Velg installasjonssprk -SelectLanguageLabel=Velg sprket som skal brukes under installasjonen. - -; *** Common wizard text -ClickNext=Klikk p Neste for fortsette, eller Avbryt for avslutte installasjonen. -BeveledLabel= -BrowseDialogTitle=Bla etter mappe -BrowseDialogLabel=Velg en mappe fra listen nedenfor, klikk deretter OK. -NewFolderName=Ny mappe - -; *** "Welcome" wizard page -WelcomeLabel1=Velkommen til installasjonsprogrammet for [name]. -WelcomeLabel2=Dette vil installere [name/ver] p din maskin.%n%nDet anbefales at du avslutter alle programmer som kjrer fr du fortsetter. - -; *** "Password" wizard page -WizardPassword=Passord -PasswordLabel1=Denne installasjonen er passordbeskyttet. -PasswordLabel3=Vennligst oppgi ditt passord og klikk p Neste for fortsette. Sm og store bokstaver behandles ulikt. -PasswordEditLabel=&Passord: -IncorrectPassword=Det angitte passordet er feil, vennligst prv igjen. - -; *** "License Agreement" wizard page -WizardLicense=Lisensbetingelser -LicenseLabel=Vennligst les flgende viktig informasjon fr du fortsetter. -LicenseLabel3=Vennligst les flgende lisensbetingelser. Du m godta innholdet i lisensbetingelsene fr du fortsetter med installasjonen. -LicenseAccepted=Jeg &aksepterer lisensbetingelsene -LicenseNotAccepted=Jeg aksepterer &ikke lisensbetingelsene - -; *** "Information" wizard pages -WizardInfoBefore=Informasjon -InfoBeforeLabel=Vennligst les flgende viktige informasjon fr du fortsetter. -InfoBeforeClickLabel=Klikk p Neste nr du er klar til fortsette. -WizardInfoAfter=Informasjon -InfoAfterLabel=Vennligst les flgende viktige informasjon fr du fortsetter. -InfoAfterClickLabel=Klikk p Neste nr du er klar til fortsette. - -; *** "User Information" wizard page -WizardUserInfo=Brukerinformasjon -UserInfoDesc=Vennligst angi informasjon. -UserInfoName=&Brukernavn: -UserInfoOrg=&Organisasjon: -UserInfoSerial=&Serienummer: -UserInfoNameRequired=Du m angi et navn. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Velg mappen hvor filene skal installeres: -SelectDirDesc=Hvor skal [name] installeres? -SelectDirLabel3=Installasjonsprogrammet vil installere [name] i flgende mappe. -SelectDirBrowseLabel=Klikk p Neste for fortsette. Klikk p Bla gjennom hvis du vil velge en annen mappe. -DiskSpaceGBLabel=Programmet krever minst [gb] GB med diskplass. -DiskSpaceMBLabel=Programmet krever minst [mb] MB med diskplass. -CannotInstallToNetworkDrive=Kan ikke installere p en nettverksstasjon. -CannotInstallToUNCPath=Kan ikke installere p en UNC-bane. Du m tilordne nettverksstasjonen hvis du vil installere i et nettverk. -InvalidPath=Du m angi en full bane med stasjonsbokstav, for eksempel:%n%nC:\APP%n%Du kan ikke bruke formen:%n%n\\server\share -InvalidDrive=Den valgte stasjonen eller UNC-delingen finnes ikke, eller er ikke tilgjengelig. Vennligst velg en annen -DiskSpaceWarningTitle=For lite diskplass -DiskSpaceWarning=Installasjonprogrammet krever minst %1 KB med ledig diskplass, men det er bare %2 KB ledig p den valgte stasjonen.%n%nvil du fortsette likevel? -DirNameTooLong=Det er for langt navn p mappen eller banen. -InvalidDirName=Navnet p mappen er ugyldig. -BadDirName32=Mappenavn m ikke inneholde noen av flgende tegn:%n%n%1 -DirExistsTitle=Eksisterende mappe -DirExists=Mappen:%n%n%1%n%nfinnes allerede. Vil du likevel installere der? -DirDoesntExistTitle=Mappen eksisterer ikke -DirDoesntExist=Mappen:%n%n%1%n%nfinnes ikke. Vil du at den skal lages? - -; *** "Select Components" wizard page -WizardSelectComponents=Velg komponenter -SelectComponentsDesc=Hvilke komponenter skal installeres? -SelectComponentsLabel2=Velg komponentene du vil installere; velg bort de komponentene du ikke vil installere. Nr du er klar, klikker du p Neste for fortsette. -FullInstallation=Full installasjon -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Kompakt installasjon -CustomInstallation=Egendefinert installasjon -NoUninstallWarningTitle=Komponenter eksisterer -NoUninstallWarning=Installasjonsprogrammet har funnet ut at flgende komponenter allerede er p din maskin:%n%n%1%n%nDisse komponentene avinstalleres ikke selv om du ikke velger dem.%n%nVil du likevel fortsette? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Valgte alternativer krever minst [gb] GB med diskplass. -ComponentsDiskSpaceMBLabel=Valgte alternativer krever minst [mb] MB med diskplass. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Velg tilleggsoppgaver -SelectTasksDesc=Hvilke tilleggsoppgaver skal utfres? -SelectTasksLabel2=Velg tilleggsoppgavene som skal utfres mens [name] installeres, klikk deretter p Neste. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Velg mappe p start-menyen -SelectStartMenuFolderDesc=Hvor skal installasjonsprogrammet plassere snarveiene? -SelectStartMenuFolderLabel3=Installasjonsprogrammet vil opprette snarveier p flgende startmeny-mappe. -SelectStartMenuFolderBrowseLabel=Klikk p Neste for fortsette. Klikk p Bla igjennom hvis du vil velge en annen mappe. -MustEnterGroupName=Du m skrive inn et mappenavn. -GroupNameTooLong=Det er for langt navn p mappen eller banen. -InvalidGroupName=Navnet p mappen er ugyldig. -BadGroupName=Mappenavnet m ikke inneholde flgende tegn:%n%n%1 -NoProgramGroupCheck2=&Ikke legg til mappe p start-menyen - -; *** "Ready to Install" wizard page -WizardReady=Klar til installere -ReadyLabel1=Installasjonsprogrammet er n klar til installere [name] p din maskin. -ReadyLabel2a=Klikk Installer for fortsette, eller Tilbake for se p eller forandre instillingene. -ReadyLabel2b=Klikk Installer for fortsette. -ReadyMemoUserInfo=Brukerinformasjon: -ReadyMemoDir=Installer i mappen: -ReadyMemoType=Installasjonstype: -ReadyMemoComponents=Valgte komponenter: -ReadyMemoGroup=Programgruppe: -ReadyMemoTasks=Tilleggsoppgaver: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Laster ned ekstra filer... -ButtonStopDownload=&Stopp nedlasting -StopDownload=Er du sikker p at du vil stoppe nedlastingen? -ErrorDownloadAborted=Nedlasting avbrutt -ErrorDownloadFailed=Nedlasting feilet: %1 %2 -ErrorDownloadSizeFailed=Kunne ikke finne filstrrelse: %1 %2 -ErrorFileHash1=Fil hash verdi feilet: %1 -ErrorFileHash2=Ugyldig fil hash verdi: forventet %1, fant %2 -ErrorProgress=Ugyldig fremdrift: %1 of %2 -ErrorFileSize=Ugyldig fil strrelse: forventet %1, fant %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Forbereder installasjonen -PreparingDesc=Installasjonsprogrammet forbereder installasjon av [name] p den maskin. -PreviousInstallNotCompleted=Installasjonen/fjerningen av et tidligere program ble ikke ferdig. Du m starte maskinen p nytt.%n%nEtter omstarten m du kjre installasjonsprogrammet p nytt for fullfre installasjonen av [name]. -CannotContinue=Installasjonsprogrammet kan ikke fortsette. Klikk p Avbryt for avslutte. -ApplicationsFound=Disse applikasjonene bruker filer som vil oppdateres av installasjonen. Det anbefales la installasjonen automatisk avslutte disse applikasjonene. -ApplicationsFound2=Disse applikasjonene bruker filer som vil oppdateres av installasjonen. Det anbefales la installasjonen automatisk avslutte disse applikasjonene. Installasjonen vil prve starte applikasjonene p nytt etter at installasjonen er avsluttet. -CloseApplications=Lukk applikasjonene &automatisk -DontCloseApplications=&Ikke lukk applikasjonene -ErrorCloseApplications=Installasjonsprogrammet kunne ikke lukke alle applikasjonene &automatisk. Det anbefales lukke alle applikasjoner som bruker filer som installasjonsprogrammet trenger oppdatere fr du fortsetter installasjonen. -PrepareToInstallNeedsRestart=Installasjonsprogrammet m gjre omstart av maskinen. Etter omstart av maskinen, kjr installasjonsprogrammet p nytt for ferdigstille installasjonen av [name].%n%nVil du gjre omstart av maskinen n? - -; *** "Installing" wizard page -WizardInstalling=Installerer -InstallingLabel=Vennligst vent mens [name] installeres p din maskin. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Fullfrer installasjonsprogrammet for [name] -FinishedLabelNoIcons=[name] er installert p din maskin. -FinishedLabel=[name] er installert p din maskin. Programmet kan kjres ved at du klikker p ett av de installerte ikonene. -ClickFinish=Klikk Ferdig for avslutte installasjonen. -FinishedRestartLabel=Maskinen m startes p nytt for at installasjonen skal fullfres. Vil du starte p nytt n? -FinishedRestartMessage=Maskinen m startes p nytt for at installasjonen skal fullfres.%n%nVil du starte p nytt n? -ShowReadmeCheck=Ja, jeg vil se p LESMEG-filen -YesRadio=&Ja, start maskinen p nytt n -NoRadio=&Nei, jeg vil starte maskinen p nytt senere -; used for example as 'Run MyProg.exe' -RunEntryExec=Kjr %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Se p %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Trenger neste diskett -SelectDiskLabel2=Vennligst sett inn diskett %1 og klikk OK.%n%nHvis filene p finnes et annet sted enn det som er angitt nedenfor, kan du skrive inn korrekt bane eller klikke p Bla Gjennom. -PathLabel=&Bane: -FileNotInDir2=Finner ikke filen "%1" i "%2". Vennligst sett inn riktig diskett eller velg en annen mappe. -SelectDirectoryLabel=Vennligst angi hvor den neste disketten er. - -; *** Installation phase messages -SetupAborted=Installasjonen ble avbrutt.%n%nVennligst korriger problemet og prv igjen. -AbortRetryIgnoreSelectAction=Velg aksjon -AbortRetryIgnoreRetry=&Prv Igjen -AbortRetryIgnoreIgnore=&Ignorer feil og fortsett -AbortRetryIgnoreCancel=Cancel installation - -; *** Installation status messages -StatusClosingApplications=Lukker applikasjoner... -StatusCreateDirs=Lager mapper... -StatusExtractFiles=Pakker ut filer... -StatusCreateIcons=Lager programikoner... -StatusCreateIniEntries=Lager INI-instillinger... -StatusCreateRegistryEntries=Lager innstillinger i registeret... -StatusRegisterFiles=Registrerer filer... -StatusSavingUninstall=Lagrer info for avinstallering... -StatusRunProgram=Gjr ferdig installasjonen... -StatusRestartingApplications=Restarter applikasjoner... -StatusRollback=Tilbakestiller forandringer... - -; *** Misc. errors -ErrorInternal2=Intern feil %1 -ErrorFunctionFailedNoCode=%1 gikk galt -ErrorFunctionFailed=%1 gikk galt; kode %2 -ErrorFunctionFailedWithMessage=%1 gikk galt; kode %2.%n%3 -ErrorExecutingProgram=Kan ikke kjre filen:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Feil under pning av registernkkel:%n%1\%2 -ErrorRegCreateKey=Feil under laging av registernkkel:%n%1\%2 -ErrorRegWriteKey=Feil under skriving til registernkkel:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Feil under laging av innstilling i filen "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Hopp over denne filen (ikke anbefalt) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorer feilen og fortsett (ikke anbefalt) -SourceIsCorrupted=Kildefilen er delagt -SourceDoesntExist=Kildefilen "%1" finnes ikke -ExistingFileReadOnly2=Den eksisterende filen er skrivebeskyttet og kan ikke erstattes. -ExistingFileReadOnlyRetry=&Fjern skrivebeskyttelse og prv igjen -ExistingFileReadOnlyKeepExisting=&Behold eksisterende fil -ErrorReadingExistingDest=En feil oppsto under lesing av den eksisterende filen: -FileExistsSelectAction=Velg aksjon -FileExists2=Filen eksisterer allerede. -FileExistsOverwriteExisting=&Overskriv den eksisterende filen -FileExistsKeepExisting=&Behold den eksisterende filen -FileExistsOverwriteOrKeepAll=&Gjr samme valg for pflgende konflikter -ExistingFileNewerSelectAction=Velg aksjon -ExistingFileNewer2=Den eksisterende filen er nyere enn filen Installasjonen prver installere. -ExistingFileNewerOverwriteExisting=&Overskriv den eksisterende filen -ExistingFileNewerKeepExisting=&Behold den eksisterende filen (anbefalt) -ExistingFileNewerOverwriteOrKeepAll=&Gjr samme valg for pflgende konflikter -ErrorChangingAttr=En feil oppsto da attributtene ble forskt forandret p den eksisterende filen: -ErrorCreatingTemp=En feil oppsto under forsket p lage en fil i ml-mappen: -ErrorReadingSource=En feil oppsto under forsket p lese kildefilen: -ErrorCopying=En feil oppsto under forsk p kopiere en fil: -ErrorReplacingExistingFile=En feil oppsto under forsket p erstatte den eksisterende filen: -ErrorRestartReplace=RestartReplace gikk galt: -ErrorRenamingTemp=En feil oppsto under omdping av fil i ml-mappen: -ErrorRegisterServer=Kan ikke registrere DLL/OCX: %1 -ErrorRegSvr32Failed=RegSvr32 gikk galt med avslutte kode %1 -ErrorRegisterTypeLib=Kan ikke registrere typebiblioteket: %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Alle brukere -UninstallDisplayNameMarkCurrentUser=Aktiv bruker - -; *** Post-installation errors -ErrorOpeningReadme=En feil oppsto under forsket p pne LESMEG-filen. -ErrorRestartingComputer=Installasjonsprogrammet kunne ikke starte maskinen p nytt. Vennligst gjr dette manuelt. - -; *** Uninstaller messages -UninstallNotFound=Filen "%1" finnes ikke. Kan ikke avinstallere. -UninstallOpenError=Filen "%1" kunne ikke pnes. Kan ikke avinstallere. -UninstallUnsupportedVer=Kan ikke avinstallere. Avinstallasjons-loggfilen "%1" har et format som ikke gjenkjennes av denne versjonen av avinstallasjons-programmet -UninstallUnknownEntry=Et ukjent parameter (%1) ble funnet i Avinstallasjons-loggfilen -ConfirmUninstall=Er du sikker p at du helt vil fjerne %1 og alle tilhrende komponenter? -UninstallOnlyOnWin64=Denne installasjonen kan bare ufres p 64-bit Windows. -OnlyAdminCanUninstall=Denne installasjonen kan bare avinstalleres av en bruker med Administrator-rettigheter. -UninstallStatusLabel=Vennligst vent mens %1 fjernes fra maskinen. -UninstalledAll=Avinstallasjonen av %1 var vellykket -UninstalledMost=Avinstallasjonen av %1 er ferdig.%n%nEnkelte elementer kunne ikke fjernes. Disse kan fjernes manuelt. -UninstalledAndNeedsRestart=Du m starte maskinen p nytt for fullfre installasjonen av %1.%n%nVil du starte p nytt n? -UninstallDataCorrupted="%1"-filen er delagt. Kan ikke avinstallere. - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Fjerne delte filer? -ConfirmDeleteSharedFile2=Systemet indikerer at den flgende filen ikke lengre brukes av andre programmer. Vil du at avinstalleringsprogrammet skal fjerne den delte filen?%n%nHvis andre programmer bruker denne filen, kan du risikere at de ikke lengre vil virke som de skal. Velg Nei hvis du er usikker. Det vil ikke gjre noen skade hvis denne filen ligger p din maskin. -SharedFileNameLabel=Filnavn: -SharedFileLocationLabel=Plassering: -WizardUninstalling=Avinstallerings-status: -StatusUninstalling=Avinstallerer %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Installerer %1. -ShutdownBlockReasonUninstallingApp=Avinstallerer %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 versjon %2 -AdditionalIcons=Ekstra-ikoner: -CreateDesktopIcon=Lag ikon p &skrivebordet -CreateQuickLaunchIcon=Lag et &Hurtigstarts-ikon -ProgramOnTheWeb=%1 p nettet -UninstallProgram=Avinstaller %1 -LaunchProgram=Kjr %1 -AssocFileExtension=&Koble %1 med filetternavnet %2 -AssocingFileExtension=Kobler %1 med filetternavnet %2... -AutoStartProgramGroupDescription=Oppstart: -AutoStartProgram=Start %1 automatisk -AddonHostProgramNotFound=%1 ble ikke funnet i katalogen du valgte.%n%nVil du fortsette likevel? \ No newline at end of file diff --git a/Dependencies/Inno/Languages/Polish.isl b/Dependencies/Inno/Languages/Polish.isl deleted file mode 100644 index b1028142..00000000 --- a/Dependencies/Inno/Languages/Polish.isl +++ /dev/null @@ -1,377 +0,0 @@ -; *** Inno Setup version 6.1.0+ Polish messages *** -; Krzysztof Cynarski -; Proofreading, corrections and 5.5.7-6.1.0+ updates: -; ukasz Abramczuk -; To download user-contributed translations of this file, go to: -; https://jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). -; last update: 2020/07/26 - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=Polski -LanguageID=$0415 -LanguageCodePage=1250 - -[Messages] - -; *** Application titles -SetupAppTitle=Instalator -SetupWindowTitle=Instalacja - %1 -UninstallAppTitle=Dezinstalator -UninstallAppFullTitle=Dezinstalacja - %1 - -; *** Misc. common -InformationTitle=Informacja -ConfirmTitle=Potwierd -ErrorTitle=Bd - -; *** SetupLdr messages -SetupLdrStartupMessage=Ten program zainstaluje aplikacj %1. Czy chcesz kontynuowa? -LdrCannotCreateTemp=Nie mona utworzy pliku tymczasowego. Instalacja przerwana -LdrCannotExecTemp=Nie mona uruchomi pliku z folderu tymczasowego. Instalacja przerwana -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nBd %2: %3 -SetupFileMissing=W folderze instalacyjnym brakuje pliku %1.%nProsz o przywrcenie brakujcych plikw lub uzyskanie nowej kopii programu instalacyjnego. -SetupFileCorrupt=Pliki instalacyjne s uszkodzone. Zaleca si uzyskanie nowej kopii programu instalacyjnego. -SetupFileCorruptOrWrongVer=Pliki instalacyjne s uszkodzone lub niezgodne z t wersj instalatora. Prosz rozwiza problem lub uzyska now kopi programu instalacyjnego. -InvalidParameter=W linii komend przekazano nieprawidowy parametr:%n%n%1 -SetupAlreadyRunning=Instalator jest ju uruchomiony. -WindowsVersionNotSupported=Ta aplikacja nie wspiera aktualnie uruchomionej wersji Windows. -WindowsServicePackRequired=Ta aplikacja wymaga systemu %1 z dodatkiem Service Pack %2 lub nowszym. -NotOnThisPlatform=Tej aplikacji nie mona uruchomi w systemie %1. -OnlyOnThisPlatform=Ta aplikacja wymaga systemu %1. -OnlyOnTheseArchitectures=Ta aplikacja moe by uruchomiona tylko w systemie Windows zaprojektowanym dla procesorw o architekturze:%n%n%1 -WinVersionTooLowError=Ta aplikacja wymaga systemu %1 w wersji %2 lub nowszej. -WinVersionTooHighError=Ta aplikacja nie moe by zainstalowana w systemie %1 w wersji %2 lub nowszej. -AdminPrivilegesRequired=Aby przeprowadzi instalacj tej aplikacji, konto uytkownika systemu musi posiada uprawnienia administratora. -PowerUserPrivilegesRequired=Aby przeprowadzi instalacj tej aplikacji, konto uytkownika systemu musi posiada uprawnienia administratora lub uytkownika zaawansowanego. -SetupAppRunningError=Instalator wykry, i aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciniciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwa instalacj. -UninstallAppRunningError=Dezinstalator wykry, i aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciniciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwa dezinstalacj. - -; *** Startup questions --- -PrivilegesRequiredOverrideTitle=Wybierz typ instalacji aplikacji -PrivilegesRequiredOverrideInstruction=Wybierz typ instalacji -PrivilegesRequiredOverrideText1=Aplikacja %1 moe zosta zainstalowana dla wszystkich uytkownikw (wymagane s uprawnienia administratora) lub tylko dla biecego uytkownika. -PrivilegesRequiredOverrideText2=Aplikacja %1 moe zosta zainstalowana dla biecego uytkownika lub wszystkich uytkownikw (wymagane s uprawnienia administratora). -PrivilegesRequiredOverrideAllUsers=Zainstaluj dla &wszystkich uytkownikw -PrivilegesRequiredOverrideAllUsersRecommended=Zainstaluj dla &wszystkich uytkownikw (zalecane) -PrivilegesRequiredOverrideCurrentUser=Zainstaluj dla &biecego uytkownika -PrivilegesRequiredOverrideCurrentUserRecommended=Zainstaluj dla &biecego uytkownika (zalecane) - -; *** Misc. errors -ErrorCreatingDir=Instalator nie mg utworzy katalogu "%1" -ErrorTooManyFilesInDir=Nie mona utworzy pliku w katalogu "%1", poniewa zawiera on zbyt wiele plikw - -; *** Setup common messages -ExitSetupTitle=Zakocz instalacj -ExitSetupMessage=Instalacja nie zostaa zakoczona. Jeeli przerwiesz j teraz, aplikacja nie zostanie zainstalowana. Mona ponowi instalacj pniej poprzez uruchamianie instalatora.%n%nCzy chcesz przerwa instalacj? -AboutSetupMenuItem=&O instalatorze... -AboutSetupTitle=O instalatorze -AboutSetupMessage=%1 wersja %2%n%3%n%n Strona domowa %1:%n%4 -AboutSetupNote= -TranslatorNote=Wersja polska: Krzysztof Cynarski%n%nOd wersji 5.5.7: ukasz Abramczuk%n - -; *** Buttons -ButtonBack=< &Wstecz -ButtonNext=&Dalej > -ButtonInstall=&Instaluj -ButtonOK=OK -ButtonCancel=Anuluj -ButtonYes=&Tak -ButtonYesToAll=Tak na &wszystkie -ButtonNo=&Nie -ButtonNoToAll=N&ie na wszystkie -ButtonFinish=&Zakocz -ButtonBrowse=&Przegldaj... -ButtonWizardBrowse=P&rzegldaj... -ButtonNewFolder=&Utwrz nowy folder - -; *** "Select Language" dialog messages -SelectLanguageTitle=Jzyk instalacji -SelectLanguageLabel=Wybierz jzyk uywany podczas instalacji: - -; *** Common wizard text -ClickNext=Kliknij przycisk Dalej, aby kontynuowa, lub Anuluj, aby zakoczy instalacj. -BeveledLabel= -BrowseDialogTitle=Wska folder -BrowseDialogLabel=Wybierz folder z poniszej listy, a nastpnie kliknij przycisk OK. -NewFolderName=Nowy folder - -; *** "Welcome" wizard page -WelcomeLabel1=Witamy w instalatorze aplikacji [name] -WelcomeLabel2=Aplikacja [name/ver] zostanie teraz zainstalowana na komputerze.%n%nZalecane jest zamknicie wszystkich innych uruchomionych programw przed rozpoczciem procesu instalacji. - -; *** "Password" wizard page -WizardPassword=Haso -PasswordLabel1=Ta instalacja jest zabezpieczona hasem. -PasswordLabel3=Podaj haso, a nastpnie kliknij przycisk Dalej, aby kontynuowa. W hasach rozrniane s wielkie i mae litery. -PasswordEditLabel=&Haso: -IncorrectPassword=Wprowadzone haso jest nieprawidowe. Sprbuj ponownie. - -; *** "License Agreement" wizard page -WizardLicense=Umowa Licencyjna -LicenseLabel=Przed kontynuacj naley zapozna si z ponisz wan informacj. -LicenseLabel3=Prosz przeczyta tekst Umowy Licencyjnej. Przed kontynuacj instalacji naley zaakceptowa warunki umowy. -LicenseAccepted=&Akceptuj warunki umowy -LicenseNotAccepted=&Nie akceptuj warunkw umowy - -; *** "Information" wizard pages -WizardInfoBefore=Informacja -InfoBeforeLabel=Przed kontynuacj naley zapozna si z ponisz informacj. -InfoBeforeClickLabel=Kiedy bdziesz gotowy do instalacji, kliknij przycisk Dalej. -WizardInfoAfter=Informacja -InfoAfterLabel=Przed kontynuacj naley zapozna si z ponisz informacj. -InfoAfterClickLabel=Gdy bdziesz gotowy do zakoczenia instalacji, kliknij przycisk Dalej. - -; *** "User Information" wizard page -WizardUserInfo=Dane uytkownika -UserInfoDesc=Prosz poda swoje dane. -UserInfoName=Nazwa &uytkownika: -UserInfoOrg=&Organizacja: -UserInfoSerial=Numer &seryjny: -UserInfoNameRequired=Nazwa uytkownika jest wymagana. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Lokalizacja docelowa -SelectDirDesc=Gdzie ma zosta zainstalowana aplikacja [name]? -SelectDirLabel3=Instalator zainstaluje aplikacj [name] do wskazanego poniej folderu. -SelectDirBrowseLabel=Kliknij przycisk Dalej, aby kontynuowa. Jeli chcesz wskaza inny folder, kliknij przycisk Przegldaj. -DiskSpaceGBLabel=Instalacja wymaga przynajmniej [gb] GB wolnego miejsca na dysku. -DiskSpaceMBLabel=Instalacja wymaga przynajmniej [mb] MB wolnego miejsca na dysku. -CannotInstallToNetworkDrive=Instalator nie moe zainstalowa aplikacji na dysku sieciowym. -CannotInstallToUNCPath=Instalator nie moe zainstalowa aplikacji w ciece UNC. -InvalidPath=Naley wprowadzi pen ciek wraz z liter dysku, np.:%n%nC:\PROGRAM%n%nlub ciek sieciow (UNC) w formacie:%n%n\\serwer\udzia -InvalidDrive=Wybrany dysk lub udostpniony folder sieciowy nie istnieje. Prosz wybra inny. -DiskSpaceWarningTitle=Niewystarczajca ilo wolnego miejsca na dysku -DiskSpaceWarning=Instalator wymaga co najmniej %1 KB wolnego miejsca na dysku. Wybrany dysk posiada tylko %2 KB dostpnego miejsca.%n%nCzy mimo to chcesz kontynuowa? -DirNameTooLong=Nazwa folderu lub cieki jest za duga. -InvalidDirName=Niepoprawna nazwa folderu. -BadDirName32=Nazwa folderu nie moe zawiera adnego z nastpujcych znakw:%n%n%1 -DirExistsTitle=Folder ju istnieje -DirExists=Poniszy folder ju istnieje:%n%n%1%n%nCzy mimo to chcesz zainstalowa aplikacj w tym folderze? -DirDoesntExistTitle=Folder nie istnieje -DirDoesntExist=Poniszy folder nie istnieje:%n%n%1%n%nCzy chcesz, aby zosta utworzony? - -; *** "Select Components" wizard page -WizardSelectComponents=Komponenty instalacji -SelectComponentsDesc=Ktre komponenty maj zosta zainstalowane? -SelectComponentsLabel2=Zaznacz komponenty, ktre chcesz zainstalowa i odznacz te, ktrych nie chcesz zainstalowa. Kliknij przycisk Dalej, aby kontynuowa. -FullInstallation=Instalacja pena -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Instalacja podstawowa -CustomInstallation=Instalacja uytkownika -NoUninstallWarningTitle=Zainstalowane komponenty -NoUninstallWarning=Instalator wykry, e na komputerze s ju zainstalowane nastpujce komponenty:%n%n%1%n%nOdznaczenie ktregokolwiek z nich nie spowoduje ich dezinstalacji.%n%nCzy pomimo tego chcesz kontynuowa? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Wybrane komponenty wymagaj co najmniej [gb] GB na dysku. -ComponentsDiskSpaceMBLabel=Wybrane komponenty wymagaj co najmniej [mb] MB na dysku. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Zadania dodatkowe -SelectTasksDesc=Ktre zadania dodatkowe maj zosta wykonane? -SelectTasksLabel2=Zaznacz dodatkowe zadania, ktre instalator ma wykona podczas instalacji aplikacji [name], a nastpnie kliknij przycisk Dalej, aby kontynuowa. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Folder Menu Start -SelectStartMenuFolderDesc=Gdzie maj zosta umieszczone skrty do aplikacji? -SelectStartMenuFolderLabel3=Instalator utworzy skrty do aplikacji we wskazanym poniej folderze Menu Start. -SelectStartMenuFolderBrowseLabel=Kliknij przycisk Dalej, aby kontynuowa. Jeli chcesz wskaza inny folder, kliknij przycisk Przegldaj. -MustEnterGroupName=Musisz wprowadzi nazw folderu. -GroupNameTooLong=Nazwa folderu lub cieki jest za duga. -InvalidGroupName=Niepoprawna nazwa folderu. -BadGroupName=Nazwa folderu nie moe zawiera adnego z nastpujcych znakw:%n%n%1 -NoProgramGroupCheck2=&Nie twrz folderu w Menu Start - -; *** "Ready to Install" wizard page -WizardReady=Gotowy do rozpoczcia instalacji -ReadyLabel1=Instalator jest ju gotowy do rozpoczcia instalacji aplikacji [name] na komputerze. -ReadyLabel2a=Kliknij przycisk Instaluj, aby rozpocz instalacj lub Wstecz, jeli chcesz przejrze lub zmieni ustawienia. -ReadyLabel2b=Kliknij przycisk Instaluj, aby kontynuowa instalacj. -ReadyMemoUserInfo=Dane uytkownika: -ReadyMemoDir=Lokalizacja docelowa: -ReadyMemoType=Rodzaj instalacji: -ReadyMemoComponents=Wybrane komponenty: -ReadyMemoGroup=Folder w Menu Start: -ReadyMemoTasks=Dodatkowe zadania: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Pobieranie dodatkowych plikw... -ButtonStopDownload=&Zatrzymaj pobieranie -StopDownload=Czy na pewno chcesz zatrzyma pobieranie? -ErrorDownloadAborted=Pobieranie przerwane -ErrorDownloadFailed=Bd pobierania: %1 %2 -ErrorDownloadSizeFailed=Pobieranie informacji o rozmiarze nie powiodo si: %1 %2 -ErrorFileHash1=Bd sumy kontrolnej pliku: %1 -ErrorFileHash2=Nieprawidowa suma kontrolna pliku: oczekiwano %1, otrzymano %2 -ErrorProgress=Nieprawidowy postp: %1 z %2 -ErrorFileSize=Nieprawidowy rozmiar pliku: oczekiwano %1, otrzymano %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Przygotowanie do instalacji -PreparingDesc=Instalator przygotowuje instalacj aplikacji [name] na komputerze. -PreviousInstallNotCompleted=Instalacja/dezinstalacja poprzedniej wersji aplikacji nie zostaa zakoczona. Aby zakoczy instalacj, naley ponownie uruchomi komputer. %n%nNastpnie ponownie uruchom instalator, aby zakoczy instalacj aplikacji [name]. -CannotContinue=Instalator nie moe kontynuowa. Kliknij przycisk Anuluj, aby przerwa instalacj. -ApplicationsFound=Ponisze aplikacje uywaj plikw, ktre musz zosta uaktualnione przez instalator. Zaleca si zezwoli na automatyczne zamknicie tych aplikacji przez program instalacyjny. -ApplicationsFound2=Ponisze aplikacje uywaj plikw, ktre musz zosta uaktualnione przez instalator. Zaleca si zezwoli na automatyczne zamknicie tych aplikacji przez program instalacyjny. Po zakoczonej instalacji instalator podejmie prb ich ponownego uruchomienia. -CloseApplications=&Automatycznie zamknij aplikacje -DontCloseApplications=&Nie zamykaj aplikacji -ErrorCloseApplications=Instalator nie by w stanie automatycznie zamkn wymaganych aplikacji. Zalecane jest zamknicie wszystkich aplikacji, ktre aktualnie uywaj uaktualnianych przez program instalacyjny plikw. -PrepareToInstallNeedsRestart=Instalator wymaga ponownego uruchomienia komputera. Po restarcie komputera uruchom instalator ponownie, by dokoczy proces instalacji aplikacji [name].%n%nCzy chcesz teraz uruchomi komputer ponownie? - -; *** "Installing" wizard page -WizardInstalling=Instalacja -InstallingLabel=Poczekaj, a instalator zainstaluje aplikacj [name] na komputerze. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Zakoczono instalacj aplikacji [name] -FinishedLabelNoIcons=Instalator zakoczy instalacj aplikacji [name] na komputerze. -FinishedLabel=Instalator zakoczy instalacj aplikacji [name] na komputerze. Aplikacja moe by uruchomiona poprzez uycie zainstalowanych skrtw. -ClickFinish=Kliknij przycisk Zakocz, aby zakoczy instalacj. -FinishedRestartLabel=Aby zakoczy instalacj aplikacji [name], instalator musi ponownie uruchomi komputer. Czy chcesz teraz uruchomi komputer ponownie? -FinishedRestartMessage=Aby zakoczy instalacj aplikacji [name], instalator musi ponownie uruchomi komputer.%n%nCzy chcesz teraz uruchomi komputer ponownie? -ShowReadmeCheck=Tak, chc przeczyta dodatkowe informacje -YesRadio=&Tak, uruchom ponownie teraz -NoRadio=&Nie, uruchomi ponownie pniej -; used for example as 'Run MyProg.exe' -RunEntryExec=Uruchom aplikacj %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Wywietl plik %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Instalator potrzebuje kolejnego archiwum -SelectDiskLabel2=Prosz woy dysk %1 i klikn przycisk OK.%n%nJeli wymieniony poniej folder nie okrela pooenia plikw z tego dysku, prosz wprowadzi poprawn ciek lub klikn przycisk Przegldaj. -PathLabel=&cieka: -FileNotInDir2=cieka "%2" nie zawiera pliku "%1". Prosz woy waciwy dysk lub wybra inny folder. -SelectDirectoryLabel=Prosz okreli lokalizacj kolejnego archiwum instalatora. - -; *** Installation phase messages -SetupAborted=Instalacja nie zostaa zakoczona.%n%nProsz rozwiza problem i ponownie rozpocz instalacj. -AbortRetryIgnoreSelectAction=Wybierz operacj -AbortRetryIgnoreRetry=Sprbuj &ponownie -AbortRetryIgnoreIgnore=Z&ignoruj bd i kontynuuj -AbortRetryIgnoreCancel=Przerwij instalacj - -; *** Installation status messages -StatusClosingApplications=Zamykanie aplikacji... -StatusCreateDirs=Tworzenie folderw... -StatusExtractFiles=Dekompresja plikw... -StatusCreateIcons=Tworzenie skrtw aplikacji... -StatusCreateIniEntries=Tworzenie zapisw w plikach INI... -StatusCreateRegistryEntries=Tworzenie zapisw w rejestrze... -StatusRegisterFiles=Rejestracja plikw... -StatusSavingUninstall=Zapisywanie informacji o dezinstalacji... -StatusRunProgram=Koczenie instalacji... -StatusRestartingApplications=Ponowne uruchamianie aplikacji... -StatusRollback=Cofanie zmian... - -; *** Misc. errors -ErrorInternal2=Wewntrzny bd: %1 -ErrorFunctionFailedNoCode=Bd podczas wykonywania %1 -ErrorFunctionFailed=Bd podczas wykonywania %1; kod %2 -ErrorFunctionFailedWithMessage=Bd podczas wykonywania %1; kod %2.%n%3 -ErrorExecutingProgram=Nie mona uruchomi:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Bd podczas otwierania klucza rejestru:%n%1\%2 -ErrorRegCreateKey=Bd podczas tworzenia klucza rejestru:%n%1\%2 -ErrorRegWriteKey=Bd podczas zapisu do klucza rejestru:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Bd podczas tworzenia pozycji w pliku INI: "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Pomi plik (niezalecane) -FileAbortRetryIgnoreIgnoreNotRecommended=Z&ignoruj bd i kontynuuj (niezalecane) -SourceIsCorrupted=Plik rdowy jest uszkodzony -SourceDoesntExist=Plik rdowy "%1" nie istnieje -ExistingFileReadOnly2=Istniejcy plik nie moe zosta zastpiony, gdy jest oznaczony jako "Tylko do odczytu". -ExistingFileReadOnlyRetry=&Usu atrybut "Tylko do odczytu" i sprbuj ponownie -ExistingFileReadOnlyKeepExisting=&Zachowaj istniejcy plik -ErrorReadingExistingDest=Wystpi bd podczas prby odczytu istniejcego pliku: -FileExistsSelectAction=Wybierz czynno -FileExists2=Plik ju istnieje. -FileExistsOverwriteExisting=&Nadpisz istniejcy plik -FileExistsKeepExisting=&Zachowaj istniejcy plik -FileExistsOverwriteOrKeepAll=&Wykonaj t czynno dla kolejnych przypadkw -ExistingFileNewerSelectAction=Wybierz czynno -ExistingFileNewer2=Istniejcy plik jest nowszy ni ten, ktry instalator prbuje skopiowa. -ExistingFileNewerOverwriteExisting=&Nadpisz istniejcy plik -ExistingFileNewerKeepExisting=&Zachowaj istniejcy plik (zalecane) -ExistingFileNewerOverwriteOrKeepAll=&Wykonaj t czynno dla kolejnych przypadkw -ErrorChangingAttr=Wystpi bd podczas prby zmiany atrybutw pliku docelowego: -ErrorCreatingTemp=Wystpi bd podczas prby utworzenia pliku w folderze docelowym: -ErrorReadingSource=Wystpi bd podczas prby odczytu pliku rdowego: -ErrorCopying=Wystpi bd podczas prby kopiowania pliku: -ErrorReplacingExistingFile=Wystpi bd podczas prby zamiany istniejcego pliku: -ErrorRestartReplace=Prba zastpienia plikw przy ponownym uruchomieniu komputera nie powioda si. -ErrorRenamingTemp=Wystpi bd podczas prby zmiany nazwy pliku w folderze docelowym: -ErrorRegisterServer=Nie mona zarejestrowa DLL/OCX: %1 -ErrorRegSvr32Failed=Funkcja RegSvr32 zakoczya si z kodem bdu %1 -ErrorRegisterTypeLib=Nie mog zarejestrowa biblioteki typw: %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=wersja 32-bitowa -UninstallDisplayNameMark64Bit=wersja 64-bitowa -UninstallDisplayNameMarkAllUsers=wszyscy uytkownicy -UninstallDisplayNameMarkCurrentUser=biecy uytkownik - -; *** Post-installation errors -ErrorOpeningReadme=Wystpi bd podczas prby otwarcia pliku z informacjami dodatkowymi. -ErrorRestartingComputer=Instalator nie mg ponownie uruchomi tego komputera. Prosz wykona t czynno samodzielnie. - -; *** Uninstaller messages -UninstallNotFound=Plik "%1" nie istnieje. Nie mona przeprowadzi dezinstalacji. -UninstallOpenError=Plik "%1" nie mg zosta otwarty. Nie mona przeprowadzi dezinstalacji. -UninstallUnsupportedVer=Ta wersja programu dezinstalacyjnego nie rozpoznaje formatu logu dezinstalacji w pliku "%1". Nie mona przeprowadzi dezinstalacji. -UninstallUnknownEntry=W logu dezinstalacji wystpia nieznana pozycja (%1) -ConfirmUninstall=Czy na pewno chcesz usun aplikacj %1 i wszystkie jej skadniki? -UninstallOnlyOnWin64=Ta aplikacja moe by odinstalowana tylko w 64-bitowej wersji systemu Windows. -OnlyAdminCanUninstall=Ta instalacja moe by odinstalowana tylko przez uytkownika z uprawnieniami administratora. -UninstallStatusLabel=Poczekaj, a aplikacja %1 zostanie usunita z komputera. -UninstalledAll=Aplikacja %1 zostaa usunita z komputera. -UninstalledMost=Dezinstalacja aplikacji %1 zakoczya si.%n%nNiektre elementy nie mogy zosta usunite. Naley usun je samodzielnie. -UninstalledAndNeedsRestart=Komputer musi zosta ponownie uruchomiony, aby zakoczy proces dezinstalacji aplikacji %1.%n%nCzy chcesz teraz ponownie uruchomi komputer? -UninstallDataCorrupted=Plik "%1" jest uszkodzony. Nie mona przeprowadzi dezinstalacji. - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Usun plik wspdzielony? -ConfirmDeleteSharedFile2=System wskazuje, i nastpujcy plik nie jest ju uywany przez aden program. Czy chcesz odinstalowa ten plik wspdzielony?%n%nJeli inne programy nadal uywaj tego pliku, a zostanie on usunity, mog one przesta dziaa prawidowo. W przypadku braku pewnoci, kliknij przycisk Nie. Pozostawienie tego pliku w systemie nie spowoduje adnych szkd. -SharedFileNameLabel=Nazwa pliku: -SharedFileLocationLabel=Pooenie: -WizardUninstalling=Stan dezinstalacji -StatusUninstalling=Dezinstalacja aplikacji %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Instalacja aplikacji %1. -ShutdownBlockReasonUninstallingApp=Dezinstalacja aplikacji %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 (wersja %2) -AdditionalIcons=Dodatkowe skrty: -CreateDesktopIcon=Utwrz skrt na &pulpicie -CreateQuickLaunchIcon=Utwrz skrt na pasku &szybkiego uruchamiania -ProgramOnTheWeb=Strona internetowa aplikacji %1 -UninstallProgram=Dezinstalacja aplikacji %1 -LaunchProgram=Uruchom aplikacj %1 -AssocFileExtension=&Przypisz aplikacj %1 do rozszerzenia pliku %2 -AssocingFileExtension=Przypisywanie aplikacji %1 do rozszerzenia pliku %2... -AutoStartProgramGroupDescription=Autostart: -AutoStartProgram=Automatycznie uruchamiaj aplikacj %1 -AddonHostProgramNotFound=Aplikacja %1 nie zostaa znaleziona we wskazanym przez Ciebie folderze.%n%nCzy pomimo tego chcesz kontynuowa? diff --git a/Dependencies/Inno/Languages/Portuguese.isl b/Dependencies/Inno/Languages/Portuguese.isl deleted file mode 100644 index 42d4e549..00000000 --- a/Dependencies/Inno/Languages/Portuguese.isl +++ /dev/null @@ -1,366 +0,0 @@ -; *** Inno Setup version 6.1.0+ Portuguese (Portugal) messages *** -; -; Maintained by Nuno Silva (nars AT gmx.net) - -[LangOptions] -LanguageName=Portugu<00EA>s (Portugal) -LanguageID=$0816 -LanguageCodePage=1252 - -[Messages] - -; *** Application titles -SetupAppTitle=Instalao -SetupWindowTitle=%1 - Instalao -UninstallAppTitle=Desinstalao -UninstallAppFullTitle=%1 - Desinstalao - -; *** Misc. common -InformationTitle=Informao -ConfirmTitle=Confirmao -ErrorTitle=Erro - -; *** SetupLdr messages -SetupLdrStartupMessage=Ir ser instalado o %1. Deseja continuar? -LdrCannotCreateTemp=No foi possvel criar um ficheiro temporrio. Instalao cancelada -LdrCannotExecTemp=No foi possvel executar um ficheiro na directoria temporria. Instalao cancelada -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nErro %2: %3 -SetupFileMissing=O ficheiro %1 no foi encontrado na pasta de instalao. Corrija o problema ou obtenha uma nova cpia do programa. -SetupFileCorrupt=Os ficheiros de instalao esto corrompidos. Obtenha uma nova cpia do programa. -SetupFileCorruptOrWrongVer=Os ficheiros de instalao esto corrompidos, ou so incompatveis com esta verso do Assistente de Instalao. Corrija o problema ou obtenha uma nova cpia do programa. -InvalidParameter=Foi especificado um parmetro invlido na linha de comando:%n%n%1 -SetupAlreadyRunning=A instalao j est em execuo. -WindowsVersionNotSupported=Este programa no suporta a verso do Windows que est a utilizar. -WindowsServicePackRequired=Este programa necessita de %1 Service Pack %2 ou mais recente. -NotOnThisPlatform=Este programa no pode ser executado no %1. -OnlyOnThisPlatform=Este programa deve ser executado no %1. -OnlyOnTheseArchitectures=Este programa s pode ser instalado em verses do Windows preparadas para as seguintes arquitecturas:%n%n%1 -WinVersionTooLowError=Este programa necessita do %1 verso %2 ou mais recente. -WinVersionTooHighError=Este programa no pode ser instalado no %1 verso %2 ou mais recente. -AdminPrivilegesRequired=Deve iniciar sesso como administrador para instalar este programa. -PowerUserPrivilegesRequired=Deve iniciar sesso como administrador ou membro do grupo de Super Utilizadores para instalar este programa. -SetupAppRunningError=O Assistente de Instalao detectou que o %1 est em execuo. Feche-o e de seguida clique em OK para continuar, ou clique em Cancelar para cancelar a instalao. -UninstallAppRunningError=O Assistente de Desinstalao detectou que o %1 est em execuo. Feche-o e de seguida clique em OK para continuar, ou clique em Cancelar para cancelar a desinstalao. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Seleccione o Modo de Instalao -PrivilegesRequiredOverrideInstruction=Seleccione o Modo de Instalao -PrivilegesRequiredOverrideText1=%1 pode ser instalado para todos os utilizadores (necessita de privilgios administrativos), ou s para si. -PrivilegesRequiredOverrideText2=%1 pode ser instalado s para si, ou para todos os utilizadores (necessita de privilgios administrativos). -PrivilegesRequiredOverrideAllUsers=Instalar para &todos os utilizadores -PrivilegesRequiredOverrideAllUsersRecommended=Instalar para &todos os utilizadores (recomendado) -PrivilegesRequiredOverrideCurrentUser=Instalar apenas para &mim -PrivilegesRequiredOverrideCurrentUserRecommended=Instalar apenas para &mim (recomendado) - -; *** Misc. errors -ErrorCreatingDir=O Assistente de Instalao no consegue criar a directoria "%1" -ErrorTooManyFilesInDir=No possvel criar um ficheiro na directoria "%1" porque esta contm demasiados ficheiros - -; *** Setup common messages -ExitSetupTitle=Terminar a instalao -ExitSetupMessage=A instalao no est completa. Se terminar agora, o programa no ser instalado.%n%nMais tarde poder executar novamente este Assistente de Instalao e concluir a instalao.%n%nDeseja terminar a instalao? -AboutSetupMenuItem=&Acerca de... -AboutSetupTitle=Acerca do Assistente de Instalao -AboutSetupMessage=%1 verso %2%n%3%n%n%1 home page:%n%4 -AboutSetupNote= -TranslatorNote=Portuguese translation maintained by NARS (nars@gmx.net) - -; *** Buttons -ButtonBack=< &Anterior -ButtonNext=&Seguinte > -ButtonInstall=&Instalar -ButtonOK=OK -ButtonCancel=Cancelar -ButtonYes=&Sim -ButtonYesToAll=Sim para &todos -ButtonNo=&No -ButtonNoToAll=N&o para todos -ButtonFinish=&Concluir -ButtonBrowse=&Procurar... -ButtonWizardBrowse=P&rocurar... -ButtonNewFolder=&Criar Nova Pasta - -; *** "Select Language" dialog messages -SelectLanguageTitle=Seleccione o Idioma do Assistente de Instalao -SelectLanguageLabel=Seleccione o idioma para usar durante a Instalao. - -; *** Common wizard text -ClickNext=Clique em Seguinte para continuar ou em Cancelar para cancelar a instalao. -BeveledLabel= -BrowseDialogTitle=Procurar Pasta -BrowseDialogLabel=Seleccione uma pasta na lista abaixo e clique em OK. -NewFolderName=Nova Pasta - -; *** "Welcome" wizard page -WelcomeLabel1=Bem-vindo ao Assistente de Instalao do [name] -WelcomeLabel2=O Assistente de Instalao ir instalar o [name/ver] no seu computador.%n%n recomendado que feche todas as outras aplicaes antes de continuar. - -; *** "Password" wizard page -WizardPassword=Palavra-passe -PasswordLabel1=Esta instalao est protegida por palavra-passe. -PasswordLabel3=Insira a palavra-passe e de seguida clique em Seguinte para continuar. Na palavra-passe existe diferena entre maisculas e minsculas. -PasswordEditLabel=&Palavra-passe: -IncorrectPassword=A palavra-passe que introduziu no est correcta. Tente novamente. - -; *** "License Agreement" wizard page -WizardLicense=Contrato de licena -LicenseLabel= importante que leia as seguintes informaes antes de continuar. -LicenseLabel3=Leia atentamente o seguinte contrato de licena. Deve aceitar os termos do contrato antes de continuar a instalao. -LicenseAccepted=A&ceito o contrato -LicenseNotAccepted=&No aceito o contrato - -; *** "Information" wizard pages -WizardInfoBefore=Informao -InfoBeforeLabel= importante que leia as seguintes informaes antes de continuar. -InfoBeforeClickLabel=Quando estiver pronto para continuar clique em Seguinte. -WizardInfoAfter=Informao -InfoAfterLabel= importante que leia as seguintes informaes antes de continuar. -InfoAfterClickLabel=Quando estiver pronto para continuar clique em Seguinte. - -; *** "User Information" wizard page -WizardUserInfo=Informaes do utilizador -UserInfoDesc=Introduza as suas informaes. -UserInfoName=Nome do &utilizador: -UserInfoOrg=&Organizao: -UserInfoSerial=&Nmero de srie: -UserInfoNameRequired=Deve introduzir um nome. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Seleccione a localizao de destino -SelectDirDesc=Onde dever ser instalado o [name]? -SelectDirLabel3=O [name] ser instalado na seguinte pasta. -SelectDirBrowseLabel=Para continuar, clique em Seguinte. Se desejar seleccionar uma pasta diferente, clique em Procurar. -DiskSpaceGBLabel= necessrio pelo menos [gb] GB de espao livre em disco. -DiskSpaceMBLabel= necessrio pelo menos [mb] MB de espao livre em disco. -CannotInstallToNetworkDrive=O Assistente de Instalao no pode instalar numa unidade de rede. -CannotInstallToUNCPath=O Assistente de Instalao no pode instalar num caminho UNC. -InvalidPath= necessrio indicar o caminho completo com a letra de unidade; por exemplo:%n%nC:\APP%n%nou um caminho UNC no formato:%n%n\\servidor\partilha -InvalidDrive=A unidade ou partilha UNC seleccionada no existe ou no est acessvel. Seleccione outra. -DiskSpaceWarningTitle=No h espao suficiente no disco -DiskSpaceWarning=O Assistente de Instalao necessita de pelo menos %1 KB de espao livre, mas a unidade seleccionada tem apenas %2 KB disponveis.%n%nDeseja continuar de qualquer forma? -DirNameTooLong=O nome ou caminho para a pasta demasiado longo. -InvalidDirName=O nome da pasta no vlido. -BadDirName32=O nome da pasta no pode conter nenhum dos seguintes caracteres:%n%n%1 -DirExistsTitle=A pasta j existe -DirExists=A pasta:%n%n%1%n%nj existe. Pretende instalar nesta pasta? -DirDoesntExistTitle=A pasta no existe -DirDoesntExist=A pasta:%n%n%1%n%nno existe. Pretende que esta pasta seja criada? - -; *** "Select Components" wizard page -WizardSelectComponents=Seleccione os componentes -SelectComponentsDesc=Que componentes devero ser instalados? -SelectComponentsLabel2=Seleccione os componentes que quer instalar e desseleccione os componentes que no quer instalar. Clique em Seguinte quando estiver pronto para continuar. -FullInstallation=Instalao Completa -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Instalao Compacta -CustomInstallation=Instalao Personalizada -NoUninstallWarningTitle=Componentes Encontrados -NoUninstallWarning=O Assistente de Instalao detectou que os seguintes componentes esto instalados no seu computador:%n%n%1%n%nSe desseleccionar estes componentes eles no sero desinstalados.%n%nDeseja continuar? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=A seleco actual necessita de pelo menos [gb] GB de espao em disco. -ComponentsDiskSpaceMBLabel=A seleco actual necessita de pelo menos [mb] MB de espao em disco. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Seleccione tarefas adicionais -SelectTasksDesc=Que tarefas adicionais devero ser executadas? -SelectTasksLabel2=Seleccione as tarefas adicionais que deseja que o Assistente de Instalao execute na instalao do [name] e em seguida clique em Seguinte. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Seleccione a pasta do Menu Iniciar -SelectStartMenuFolderDesc=Onde devero ser colocados os cones de atalho do programa? -SelectStartMenuFolderLabel3=Os cones de atalho do programa sero criados na seguinte pasta do Menu Iniciar. -SelectStartMenuFolderBrowseLabel=Para continuar, clique em Seguinte. Se desejar seleccionar uma pasta diferente, clique em Procurar. -MustEnterGroupName= necessrio introduzir um nome para a pasta. -GroupNameTooLong=O nome ou caminho para a pasta demasiado longo. -InvalidGroupName=O nome da pasta no vlido. -BadGroupName=O nome da pasta no pode conter nenhum dos seguintes caracteres:%n%n%1 -NoProgramGroupCheck2=&No criar nenhuma pasta no Menu Iniciar - -; *** "Ready to Install" wizard page -WizardReady=Pronto para Instalar -ReadyLabel1=O Assistente de Instalao est pronto para instalar o [name] no seu computador. -ReadyLabel2a=Clique em Instalar para continuar a instalao, ou clique em Anterior se desejar rever ou alterar alguma das configuraes. -ReadyLabel2b=Clique em Instalar para continuar a instalao. -ReadyMemoUserInfo=Informaes do utilizador: -ReadyMemoDir=Localizao de destino: -ReadyMemoType=Tipo de instalao: -ReadyMemoComponents=Componentes seleccionados: -ReadyMemoGroup=Pasta do Menu Iniciar: -ReadyMemoTasks=Tarefas adicionais: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=A transferir ficheiros adicionais... -ButtonStopDownload=&Parar transferncia -StopDownload=Tem a certeza que deseja parar a transferncia? -ErrorDownloadAborted=Transferncia cancelada -ErrorDownloadFailed=Falha na transferncia: %1 %2 -ErrorDownloadSizeFailed=Falha ao obter tamanho: %1 %2 -ErrorFileHash1=Falha de verificao do ficheiro: %1 -ErrorFileHash2=Hash do ficheiro invlida: experado %1, encontrado %2 -ErrorProgress=Progresso invlido: %1 de %2 -ErrorFileSize=Tamanho de ficheiro invlido: experado %1, encontrado %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Preparando-se para instalar -PreparingDesc=Preparando-se para instalar o [name] no seu computador. -PreviousInstallNotCompleted=A instalao/remoo de um programa anterior no foi completada. Necessitar de reiniciar o computador para completar essa instalao.%n%nDepois de reiniciar o computador, execute novamente este Assistente de Instalao para completar a instalao do [name]. -CannotContinue=A instalao no pode continuar. Clique em Cancelar para sair. -ApplicationsFound=As seguintes aplicaes esto a utilizar ficheiros que necessitam ser actualizados pelo Assistente de Instalao. recomendado que permita que o Assistente de Instalao feche estas aplicaes. -ApplicationsFound2=As seguintes aplicaes esto a utilizar ficheiros que necessitam ser actualizados pelo Assistente de Instalao. recomendado que permita que o Assistente de Instalao feche estas aplicaes. Depois de completar a instalao, o Assistente de Instalao tentar reiniciar as aplicaes. -CloseApplications=&Fechar as aplicaes automaticamente -DontCloseApplications=&No fechar as aplicaes -ErrorCloseApplications=O Assistente de Instalao no conseguiu fechar todas as aplicaes automaticamente. Antes de continuar recomendado que feche todas as aplicaes que utilizem ficheiros que necessitem de ser actualizados pelo Assistente de Instalao. -PrepareToInstallNeedsRestart=O Assistente de Instalao necessita reiniciar o seu computador. Depois de reiniciar o computador, execute novamente o Assistente de Instalao para completar a instalao do [name].%n%nDeseja reiniciar agora? - -; *** "Installing" wizard page -WizardInstalling=A instalar -InstallingLabel=Aguarde enquanto o Assistente de Instalao instala o [name] no seu computador. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Instalao do [name] concluda -FinishedLabelNoIcons=O Assistente de Instalao concluiu a instalao do [name] no seu computador. -FinishedLabel=O Assistente de Instalao concluiu a instalao do [name] no seu computador. A aplicao pode ser iniciada atravs dos cones de atalho instalados. -ClickFinish=Clique em Concluir para finalizar o Assistente de Instalao. -FinishedRestartLabel=Para completar a instalao do [name], o Assistente de Instalao dever reiniciar o seu computador. Deseja reiniciar agora? -FinishedRestartMessage=Para completar a instalao do [name], o Assistente de Instalao dever reiniciar o seu computador.%n%nDeseja reiniciar agora? -ShowReadmeCheck=Sim, desejo ver o ficheiro LEIAME -YesRadio=&Sim, desejo reiniciar o computador agora -NoRadio=&No, desejo reiniciar o computador mais tarde -; used for example as 'Run MyProg.exe' -RunEntryExec=Executar %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Visualizar %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=O Assistente de Instalao precisa do disco seguinte -SelectDiskLabel2=Introduza o disco %1 e clique em OK.%n%nSe os ficheiros deste disco estiverem num local diferente do mostrado abaixo, indique o caminho correcto ou clique em Procurar. -PathLabel=&Caminho: -FileNotInDir2=O ficheiro "%1" no foi encontrado em "%2". Introduza o disco correcto ou seleccione outra pasta. -SelectDirectoryLabel=Indique a localizao do disco seguinte. - -; *** Installation phase messages -SetupAborted=A instalao no est completa.%n%nCorrija o problema e execute o Assistente de Instalao novamente. -AbortRetryIgnoreSelectAction=Seleccione uma aco -AbortRetryIgnoreRetry=&Tentar novamente -AbortRetryIgnoreIgnore=&Ignorar o erro e continuar -AbortRetryIgnoreCancel=Cancelar a instalao - -; *** Installation status messages -StatusClosingApplications=A fechar aplicaes... -StatusCreateDirs=A criar directorias... -StatusExtractFiles=A extrair ficheiros... -StatusCreateIcons=A criar atalhos... -StatusCreateIniEntries=A criar entradas em INI... -StatusCreateRegistryEntries=A criar entradas no registo... -StatusRegisterFiles=A registar ficheiros... -StatusSavingUninstall=A guardar informaes para desinstalao... -StatusRunProgram=A concluir a instalao... -StatusRestartingApplications=A reiniciar aplicaes... -StatusRollback=A anular as alteraes... - -; *** Misc. errors -ErrorInternal2=Erro interno: %1 -ErrorFunctionFailedNoCode=%1 falhou -ErrorFunctionFailed=%1 falhou; cdigo %2 -ErrorFunctionFailedWithMessage=%1 falhou; cdigo %2.%n%3 -ErrorExecutingProgram=No possvel executar o ficheiro:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Erro ao abrir a chave de registo:%n%1\%2 -ErrorRegCreateKey=Erro ao criar a chave de registo:%n%1\%2 -ErrorRegWriteKey=Erro ao escrever na chave de registo:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Erro ao criar entradas em INI no ficheiro "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Ignorar este ficheiro (no recomendado) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar este erro e continuar (no recomendado) -SourceIsCorrupted=O ficheiro de origem est corrompido -SourceDoesntExist=O ficheiro de origem "%1" no existe -ExistingFileReadOnly2=O ficheiro existente no pode ser substitudo porque tem o atributo "s de leitura". -ExistingFileReadOnlyRetry=&Remover o atributo "s de leitura" e tentar novamente -ExistingFileReadOnlyKeepExisting=&Manter o ficheiro existente -ErrorReadingExistingDest=Ocorreu um erro ao tentar ler o ficheiro existente: -FileExistsSelectAction=Seleccione uma aco -FileExists2=O ficheiro j existe. -FileExistsOverwriteExisting=&Substituir o ficheiro existente -FileExistsKeepExisting=&Manter o ficheiro existente -FileExistsOverwriteOrKeepAll=&Fazer isto para os prximos conflitos -ExistingFileNewerSelectAction=Seleccione uma aco -ExistingFileNewer2=O ficheiro existente mais recente que o que est a ser instalado. -ExistingFileNewerOverwriteExisting=&Substituir o ficheiro existente -ExistingFileNewerKeepExisting=&Manter o ficheiro existente (recomendado) -ExistingFileNewerOverwriteOrKeepAll=&Fazer isto para os prximos conflitos -ErrorChangingAttr=Ocorreu um erro ao tentar alterar os atributos do ficheiro existente: -ErrorCreatingTemp=Ocorreu um erro ao tentar criar um ficheiro na directoria de destino: -ErrorReadingSource=Ocorreu um erro ao tentar ler o ficheiro de origem: -ErrorCopying=Ocorreu um erro ao tentar copiar um ficheiro: -ErrorReplacingExistingFile=Ocorreu um erro ao tentar substituir o ficheiro existente: -ErrorRestartReplace=RestartReplace falhou: -ErrorRenamingTemp=Ocorreu um erro ao tentar mudar o nome de um ficheiro na directoria de destino: -ErrorRegisterServer=No possvel registar o DLL/OCX: %1 -ErrorRegSvr32Failed=O RegSvr32 falhou com o cdigo de sada %1 -ErrorRegisterTypeLib=No foi possvel registar a livraria de tipos: %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Todos os utilizadores -UninstallDisplayNameMarkCurrentUser=Utilizador actual - -; *** Post-installation errors -ErrorOpeningReadme=Ocorreu um erro ao tentar abrir o ficheiro LEIAME. -ErrorRestartingComputer=O Assistente de Instalao no consegue reiniciar o computador. Por favor reinicie manualmente. - -; *** Uninstaller messages -UninstallNotFound=O ficheiro "%1" no existe. No possvel desinstalar. -UninstallOpenError=No foi possvel abrir o ficheiro "%1". No possvel desinstalar. -UninstallUnsupportedVer=O ficheiro log de desinstalao "%1" est num formato que no reconhecido por esta verso do desinstalador. No possvel desinstalar -UninstallUnknownEntry=Foi encontrada uma entrada desconhecida (%1) no ficheiro log de desinstalao -ConfirmUninstall=Tem a certeza que deseja remover completamente o %1 e todos os seus componentes? -UninstallOnlyOnWin64=Esta desinstalao s pode ser realizada na verso de 64-bit's do Windows. -OnlyAdminCanUninstall=Esta desinstalao s pode ser realizada por um utilizador com privilgios administrativos. -UninstallStatusLabel=Por favor aguarde enquanto o %1 est a ser removido do seu computador. -UninstalledAll=O %1 foi removido do seu computador com sucesso. -UninstalledMost=A desinstalao do %1 est concluda.%n%nAlguns elementos no puderam ser removidos. Estes elementos podem ser removidos manualmente. -UninstalledAndNeedsRestart=Para completar a desinstalao do %1, o computador deve ser reiniciado.%n%nDeseja reiniciar agora? -UninstallDataCorrupted=O ficheiro "%1" est corrompido. No possvel desinstalar - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Remover ficheiro partilhado? -ConfirmDeleteSharedFile2=O sistema indica que o seguinte ficheiro partilhado j no est a ser utilizado por nenhum programa. Deseja remov-lo?%n%nSe algum programa ainda necessitar deste ficheiro, poder no funcionar correctamente depois de o remover. Se no tiver a certeza, seleccione No. Manter o ficheiro no causar nenhum problema. -SharedFileNameLabel=Nome do ficheiro: -SharedFileLocationLabel=Localizao: -WizardUninstalling=Estado da desinstalao -StatusUninstalling=A desinstalar o %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=A instalar %1. -ShutdownBlockReasonUninstallingApp=A desinstalar %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 verso %2 -AdditionalIcons=Atalhos adicionais: -CreateDesktopIcon=Criar atalho no Ambiente de &Trabalho -CreateQuickLaunchIcon=&Criar atalho na barra de Iniciao Rpida -ProgramOnTheWeb=%1 na Web -UninstallProgram=Desinstalar o %1 -LaunchProgram=Executar o %1 -AssocFileExtension=Associa&r o %1 aos ficheiros com a extenso %2 -AssocingFileExtension=A associar o %1 aos ficheiros com a extenso %2... -AutoStartProgramGroupDescription=Inicializao Automtica: -AutoStartProgram=Iniciar %1 automaticamente -AddonHostProgramNotFound=No foi possvel localizar %1 na pasta seleccionada.%n%nDeseja continuar de qualquer forma? diff --git a/Dependencies/Inno/Languages/Russian.isl b/Dependencies/Inno/Languages/Russian.isl deleted file mode 100644 index 4e2c7149..00000000 --- a/Dependencies/Inno/Languages/Russian.isl +++ /dev/null @@ -1,370 +0,0 @@ -; *** Inno Setup version 6.1.0+ Russian messages *** -; -; Translated from English by Dmitry Kann, yktooo at gmail.com -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). - -[LangOptions] -LanguageName=<0420><0443><0441><0441><043A><0438><0439> -LanguageID=$0419 -LanguageCodePage=1251 - -[Messages] - -; *** Application titles -SetupAppTitle= -SetupWindowTitle= %1 -UninstallAppTitle= -UninstallAppFullTitle= %1 - -; *** Misc. common -InformationTitle= -ConfirmTitle= -ErrorTitle= - -; *** SetupLdr messages -SetupLdrStartupMessage= %1 , ? -LdrCannotCreateTemp= . -LdrCannotExecTemp= . -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%n %2: %3 -SetupFileMissing= %1 . , . -SetupFileCorrupt= . , . -SetupFileCorruptOrWrongVer= . , . -InvalidParameter= :%n%n%1 -SetupAlreadyRunning= . -WindowsVersionNotSupported= Windows, . -WindowsServicePackRequired= %1 Service Pack %2 . -NotOnThisPlatform= %1. -OnlyOnThisPlatform= %1. -OnlyOnTheseArchitectures= Windows :%n%n%1 -WinVersionTooLowError= %1 %2 . -WinVersionTooHighError= %1 %2 . -AdminPrivilegesRequired= , . -PowerUserPrivilegesRequired= , (Power Users). -SetupAppRunningError= %1.%n%n, , OK, , , . -UninstallAppRunningError= %1.%n%n, , OK, , , . - -; *** Startup questions -PrivilegesRequiredOverrideTitle= -PrivilegesRequiredOverrideInstruction= -PrivilegesRequiredOverrideText1=%1 ( ), . -PrivilegesRequiredOverrideText2=%1 , ( ). -PrivilegesRequiredOverrideAllUsers= & -PrivilegesRequiredOverrideAllUsersRecommended= & () -PrivilegesRequiredOverrideCurrentUser= & -PrivilegesRequiredOverrideCurrentUserRecommended= & () - -; *** Misc. errors -ErrorCreatingDir= "%1" -ErrorTooManyFilesInDir= "%1", - -; *** Setup common messages -ExitSetupTitle= -ExitSetupMessage= . , .%n%n , .%n%n ? -AboutSetupMenuItem=& ... -AboutSetupTitle= -AboutSetupMessage=%1, %2%n%3%n%n %1:%n%4 -AboutSetupNote= -TranslatorNote=Russian translation by Dmitry Kann, http://www.dk-soft.org/ - -; *** Buttons -ButtonBack=< & -ButtonNext=& > -ButtonInstall=& -ButtonOK=OK -ButtonCancel= -ButtonYes=& -ButtonYesToAll= & -ButtonNo=& -ButtonNoToAll=& -ButtonFinish=& -ButtonBrowse=&... -ButtonWizardBrowse=&... -ButtonNewFolder=& - -; *** "Select Language" dialog messages -SelectLanguageTitle= -SelectLanguageLabel= , . - -; *** Common wizard text -ClickNext= , , , . -BeveledLabel= -BrowseDialogTitle= -BrowseDialogLabel= ʻ. -NewFolderName= - -; *** "Welcome" wizard page -WelcomeLabel1= [name] -WelcomeLabel2= [name/ver] .%n%n , . - -; *** "Password" wizard page -WizardPassword= -PasswordLabel1= . -PasswordLabel3=, , . . -PasswordEditLabel=&: -IncorrectPassword= . , . - -; *** "License Agreement" wizard page -WizardLicense= -LicenseLabel=, , . -LicenseLabel3=, . , . -LicenseAccepted= & -LicenseNotAccepted= & - -; *** "Information" wizard pages -WizardInfoBefore= -InfoBeforeLabel=, , . -InfoBeforeClickLabel= , . -WizardInfoAfter= -InfoAfterLabel=, , . -InfoAfterClickLabel= , . - -; *** "User Information" wizard page -WizardUserInfo= -UserInfoDesc=, . -UserInfoName=& : -UserInfoOrg=&: -UserInfoSerial=& : -UserInfoNameRequired= . - -; *** "Select Destination Location" wizard page -WizardSelectDir= -SelectDirDesc= [name]? -SelectDirLabel3= [name] . -SelectDirBrowseLabel= , . , . -DiskSpaceGBLabel= [gb] . -DiskSpaceMBLabel= [mb] . -CannotInstallToNetworkDrive= . -CannotInstallToUNCPath= UNC-. -InvalidPath= ; :%n%nC:\APP%n%n UNC:%n%n\\_\_ -InvalidDrive= . , . -DiskSpaceWarningTitle= -DiskSpaceWarning= %1 , %2 .%n%n ? -DirNameTooLong= . -InvalidDirName= . -BadDirName32= : %n%n%1 -DirExistsTitle= -DirExists=%n%n%1%n%n . ? -DirDoesntExistTitle= -DirDoesntExist=%n%n%1%n%n . ? - -; *** "Select Components" wizard page -WizardSelectComponents= -SelectComponentsDesc= ? -SelectComponentsLabel2= , ; , . , . -FullInstallation= -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation= -CustomInstallation= -NoUninstallWarningTitle= -NoUninstallWarning= , :%n%n%1%n%n .%n%n? -ComponentSize1=%1 -ComponentSize2=%1 -ComponentsDiskSpaceGBLabel= [gb] . -ComponentsDiskSpaceMBLabel= [mb] . - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks= -SelectTasksDesc= ? -SelectTasksLabel2= , [name], : - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup= -SelectStartMenuFolderDesc= ? -SelectStartMenuFolderLabel3= . -SelectStartMenuFolderBrowseLabel= , . , . -MustEnterGroupName= . -GroupNameTooLong= . -InvalidGroupName= . -BadGroupName= :%n%n%1 -NoProgramGroupCheck2=& - -; *** "Ready to Install" wizard page -WizardReady= -ReadyLabel1= [name] . -ReadyLabel2a= , , , . -ReadyLabel2b= , . -ReadyMemoUserInfo= : -ReadyMemoDir= : -ReadyMemoType= : -ReadyMemoComponents= : -ReadyMemoGroup= : -ReadyMemoTasks= : - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel= ... -ButtonStopDownload=& -StopDownload= ? -ErrorDownloadAborted= -ErrorDownloadFailed= : %1 %2 -ErrorDownloadSizeFailed= : %1 %2 -ErrorFileHash1= : %1 -ErrorFileHash2= : %1, %2 -ErrorProgress= : %1 %2 -ErrorFileSize= : %1, %2 - -; *** "Preparing to Install" wizard page -WizardPreparing= -PreparingDesc= [name] . -PreviousInstallNotCompleted= . , .%n%n , [name]. -CannotContinue= . . -ApplicationsFound= , . . -ApplicationsFound2= , . . , . -CloseApplications=& -DontCloseApplications=& -ErrorCloseApplications= . , , . -PrepareToInstallNeedsRestart= . , , , [name].%n%n ? - -; *** "Installing" wizard page -WizardInstalling=... -InstallingLabel=, , [name] . - -; *** "Setup Completed" wizard page -FinishedHeadingLabel= [name] -FinishedLabelNoIcons= [name] . -FinishedLabel= [name] . . -ClickFinish= , . -FinishedRestartLabel= [name] . ? -FinishedRestartMessage= [name] .%n%n ? -ShowReadmeCheck= README -YesRadio=&, -NoRadio=&, -; used for example as 'Run MyProg.exe' -RunEntryExec= %1 -; used for example as 'View Readme.txt' -RunEntryShellExec= %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle= -SelectDiskLabel2=, %1 OK.%n%n , , . -PathLabel=&: -FileNotInDir2= "%1" "%2". , . -SelectDirectoryLabel=, . - -; *** Installation phase messages -SetupAborted= .%n%n, . -AbortRetryIgnoreSelectAction= -AbortRetryIgnoreRetry= & -AbortRetryIgnoreIgnore=& -AbortRetryIgnoreCancel= - -; *** Installation status messages -StatusClosingApplications= ... -StatusCreateDirs= ... -StatusExtractFiles= ... -StatusCreateIcons= ... -StatusCreateIniEntries= INI-... -StatusCreateRegistryEntries= ... -StatusRegisterFiles= ... -StatusSavingUninstall= ... -StatusRunProgram= ... -StatusRestartingApplications= ... -StatusRollback= ... - -; *** Misc. errors -ErrorInternal2= : %1 -ErrorFunctionFailedNoCode=%1: -ErrorFunctionFailed=%1: ; %2 -ErrorFunctionFailedWithMessage=%1: ; %2.%n%3 -ErrorExecutingProgram= :%n%1 - -; *** Registry errors -ErrorRegOpenKey= :%n%1\%2 -ErrorRegCreateKey= :%n%1\%2 -ErrorRegWriteKey= :%n%1\%2 - -; *** INI errors -ErrorIniEntry= INI- "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=& ( ) -FileAbortRetryIgnoreIgnoreNotRecommended=& ( ) -SourceIsCorrupted= -SourceDoesntExist= "%1" -ExistingFileReadOnly2= , . -ExistingFileReadOnlyRetry=& -ExistingFileReadOnlyKeepExisting=& -ErrorReadingExistingDest= : -FileExistsSelectAction= -FileExists2= . -FileExistsOverwriteExisting=& -FileExistsKeepExisting=& -FileExistsOverwriteOrKeepAll=& -ExistingFileNewerSelectAction= -ExistingFileNewer2= , . -ExistingFileNewerOverwriteExisting=& -ExistingFileNewerKeepExisting=& () -ExistingFileNewerOverwriteOrKeepAll=& -ErrorChangingAttr= : -ErrorCreatingTemp= : -ErrorReadingSource= : -ErrorCopying= : -ErrorReplacingExistingFile= : -ErrorRestartReplace= RestartReplace: -ErrorRenamingTemp= : -ErrorRegisterServer= DLL/OCX: %1 -ErrorRegSvr32Failed= RegSvr32, %1 -ErrorRegisterTypeLib= (Type Library): %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32 -UninstallDisplayNameMark64Bit=64 -UninstallDisplayNameMarkAllUsers= -UninstallDisplayNameMarkCurrentUser= - -; *** Post-installation errors -ErrorOpeningReadme= README. -ErrorRestartingComputer= . , . - -; *** Uninstaller messages -UninstallNotFound= "%1" , . -UninstallOpenError= "%1". -UninstallUnsupportedVer= "%1" -. -UninstallUnknownEntry= (%1) -ConfirmUninstall= %1 ? -UninstallOnlyOnWin64= 64- Windows. -OnlyAdminCanUninstall= . -UninstallStatusLabel=, , %1 . -UninstalledAll= %1 . -UninstalledMost= %1 .%n%n . . -UninstalledAndNeedsRestart= %1 .%n%n ? -UninstallDataCorrupted= "%1" . - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle= ? -ConfirmDeleteSharedFile2= , . ?%n%n - , , . , . . -SharedFileNameLabel= : -SharedFileLocationLabel=: -WizardUninstalling= -StatusUninstalling= %1... - - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp= %1. -ShutdownBlockReasonUninstallingApp= %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1, %2 -AdditionalIcons= : -CreateDesktopIcon= & -CreateQuickLaunchIcon= & -ProgramOnTheWeb= %1 -UninstallProgram= %1 -LaunchProgram= %1 -AssocFileExtension=& %1 , %2 -AssocingFileExtension= %1 %2... -AutoStartProgramGroupDescription=: -AutoStartProgram= %1 -AddonHostProgramNotFound=%1 .%n%n ? diff --git a/Dependencies/Inno/Languages/Slovak.isl b/Dependencies/Inno/Languages/Slovak.isl deleted file mode 100644 index db23993e..00000000 --- a/Dependencies/Inno/Languages/Slovak.isl +++ /dev/null @@ -1,312 +0,0 @@ -; ****************************************************** -; *** *** -; *** Inno Setup version 6.1.0+ Slovak messages *** -; *** *** -; *** Original Author: *** -; *** *** -; *** Milan Potancok (milan.potancok AT gmail.com) *** -; *** *** -; *** Contributors: *** -; *** *** -; *** Ivo Bauer (bauer AT ozm.cz) *** -; *** *** -; *** Tomas Falb (tomasf AT pobox.sk) *** -; *** Slappy (slappy AT pobox.sk) *** -; *** *** -; *** Update: 22.08.2020 *** -; *** *** -; ****************************************************** -; -; - -[LangOptions] -LanguageName=Sloven<010D>ina -LanguageID=$041b -LanguageCodePage=1250 - -[Messages] -SetupAppTitle=Sprievodca intalciou -SetupWindowTitle=Sprievodca intalciou - %1 -UninstallAppTitle=Sprievodca odintalciou -UninstallAppFullTitle=Sprievodca odintalciou - %1 -InformationTitle=Informcie -ConfirmTitle=Potvrdenie -ErrorTitle=Chyba -SetupLdrStartupMessage=Toto je sprievodca intalciou produktu %1. Prajete si pokraova? -LdrCannotCreateTemp=Nie je mon vytvori doasn sbor. Sprievodca intalciou sa ukon -LdrCannotExecTemp=Nie je mon spusti sbor v doasnom adresri. Sprievodca intalciou sa ukon -LastErrorMessage=%1.%n%nChyba %2: %3 -SetupFileMissing=Intalan adresr neobsahuje sbor %1. Opravte, prosm, tto chybu alebo si zaobstarajte nov kpiu tohto produktu. -SetupFileCorrupt=Sbory sprievodcu intalciou s pokoden. Zaobstarajte si, prosm, nov kpiu tohto produktu. -SetupFileCorruptOrWrongVer=Sbory sprievodcu intalciou s pokoden alebo sa nezhoduj s touto verziou sprievodcu intalciou. Opravte, prosm, tto chybu alebo si zaobstarajte nov kpiu tohto produktu. -InvalidParameter=Nesprvny parameter na prkazovom riadku:%n%n%1 -SetupAlreadyRunning=Intalcia u be. -WindowsVersionNotSupported=Tento program nepodporuje vau verziu Windows. -WindowsServicePackRequired=Tento program vyaduje %1 Service Pack %2 alebo nov. -NotOnThisPlatform=Tento produkt sa ned spusti v %1. -OnlyOnThisPlatform=Tento produkt mus by spusten v %1. -OnlyOnTheseArchitectures=Tento produkt je mon naintalova iba vo verzich MS Windows s podporou architektry procesorov:%n%n%1 - -WinVersionTooLowError=Tento produkt vyaduje %1 verzie %2 alebo vyej. -WinVersionTooHighError=Tento produkt sa ned naintalova vo %1 verzie %2 alebo vyej. -AdminPrivilegesRequired=Na intalciu tohto produktu muste by prihlsen s prvami administrtora. -PowerUserPrivilegesRequired=Na intalciu tohto produktu muste by prihlsen s prvami administrtora alebo lena skupiny Power Users. -SetupAppRunningError=Sprievodca intalciou zistil, e produkt %1 je teraz spusten.%n%nUkonite, prosm, vetky spusten intancie tohto produktu a pokraujte kliknutm na tlaidlo OK alebo ukonite intalciu tlaidlom Zrui. -UninstallAppRunningError=Sprievodca odintalciou zistil, e produkt %1 je teraz spusten.%n%nUkonite, prosm, vetky spusten intancie tohto produktu a pokraujte kliknutm na tlaidlo OK alebo ukonite intalciu tlaidlom Zrui. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Vyberte intalan md intaltora -PrivilegesRequiredOverrideInstruction=Vyberte intalan md -PrivilegesRequiredOverrideText1=%1 sa me naintalova pre Vetkch uvateov (vyaduje administrtorsk prva), alebo len pre Vs. -PrivilegesRequiredOverrideText2=%1 sa me naintalova len pre Vs, alebo pre Vetkch uvateov (vyaduje administrtorsk prva). -PrivilegesRequiredOverrideAllUsers=Intalova pre &Vetkch uvateov -PrivilegesRequiredOverrideAllUsersRecommended=Intalova pre &Vetkch uvateov (odporan) -PrivilegesRequiredOverrideCurrentUser=Intalova len pre &ma -PrivilegesRequiredOverrideCurrentUserRecommended=Intalova len pre &ma (odporan) - -ErrorCreatingDir=Sprievodca intalciou nemohol vytvori adresr "%1" -ErrorTooManyFilesInDir=Ned sa vytvori sbor v adresri "%1", pretoe tento adresr u obsahuje prli vea sborov -ExitSetupTitle=Ukoni sprievodcu intalciou -ExitSetupMessage=Intalcia nebola celkom dokonen. Ak teraz ukonte sprievodcu intalciou, produkt nebude naintalovan.%n%nSprievodcu intalciou mete znovu spusti neskr a dokoni tak intalciu.%n%nUkoni sprievodcu intalciou? -AboutSetupMenuItem=&O sprievodcovi intalcie... -AboutSetupTitle=O sprievodcovi intalcie -AboutSetupMessage=%1 verzia %2%n%3%n%n%1 domovsk strnka:%n%4 -AboutSetupNote= -TranslatorNote=Slovak translation maintained by Milan Potancok (milan.potancok AT gmail.com), Ivo Bauer (bauer AT ozm.cz) and Tomas Falb (tomasf AT pobox.sk) + Slappy (slappy AT pobox.sk) -ButtonBack=< &Sp -ButtonNext=&alej > -ButtonInstall=&Intalova -ButtonOK=OK -ButtonCancel=Zrui -ButtonYes=&no -ButtonYesToAll=no &vetkm -ButtonNo=&Nie -ButtonNoToAll=Ni&e vetkm -ButtonFinish=&Dokoni -ButtonBrowse=&Prechdza... -ButtonWizardBrowse=&Prechdza... -ButtonNewFolder=&Vytvori nov adresr -SelectLanguageTitle=Vber jazyka sprievodcu intalciou -SelectLanguageLabel=Zvote jazyk, ktor sa m poui pri intalcii. -ClickNext=Pokraujte kliknutm na tlaidlo alej alebo ukonite sprievodcu intalciou tlaidlom Zrui. -BeveledLabel= -BrowseDialogTitle=Njs adresr -BrowseDialogLabel=Z dole uvedenho zoznamu vyberte adresr a kliknite na OK. -NewFolderName=Nov adresr -WelcomeLabel1=Vt Vs sprievodca intalciou produktu [name]. -WelcomeLabel2=Produkt [name/ver] sa naintaluje na V pota.%n%nSkr, ako budete pokraova, odporame Vm ukoni vetky spusten aplikcie. -WizardPassword=Heslo -PasswordLabel1=Tto intalcia je chrnen heslom. -PasswordLabel3=Zadajte, prosm, heslo a pokraujte kliknutm na tlaidlo alej. Pri zadvn hesla rozliujte mal a vek psmen. -PasswordEditLabel=&Heslo: -IncorrectPassword=Zadan heslo nie je sprvne. Skste to, prosm, ete raz. -WizardLicense=Licenn zmluva -LicenseLabel=Skr, ako budete pokraova, pretajte si, prosm, tieto dleit informcie. -LicenseLabel3=Pretajte si, prosm, tto Licenn zmluvu. Aby mohla intalcia pokraova, muste shlasi s podmienkami tejto zmluvy. -LicenseAccepted=&Shlasm s podmienkami Licennej zmluvy -LicenseNotAccepted=&Neshlasm s podmienkami Licennej zmluvy -WizardInfoBefore=Informcie -InfoBeforeLabel=Skr, ako budete pokraova, pretajte si, prosm, tieto dleit informcie. -InfoBeforeClickLabel=Pokraujte v intalcii kliknutm na tlaidlo alej. -WizardInfoAfter=Informcie -InfoAfterLabel=Skr, ako budete pokraova, pretajte si, prosm, tieto dleit informcie. -InfoAfterClickLabel=Pokraujte v intalcii kliknutm na tlaidlo alej. -WizardUserInfo=Informcie o pouvateovi -UserInfoDesc=Zadajte, prosm, poadovan informcie. -UserInfoName=&Pouvatesk meno: -UserInfoOrg=&Organizcia: -UserInfoSerial=&Sriove slo: -UserInfoNameRequired=Pouvatesk meno mus by zadan. -WizardSelectDir=Vyberte cieov adresr -SelectDirDesc=Kam m by produkt [name] naintalovan? -SelectDirLabel3=Sprievodca naintaluje produkt [name] do nasledujceho adresra. -SelectDirBrowseLabel=Pokraujte kliknutm na tlaidlo alej. Ak chcete vybra in adresr, kliknite na tlaidlo Prechdza. -DiskSpaceGBLabel=Intalcia vyaduje najmenej [gb] GB miesta na disku. -DiskSpaceMBLabel=Intalcia vyaduje najmenej [mb] MB miesta na disku. -CannotInstallToNetworkDrive=Intaltor neme intalova na sieov jednotku. -CannotInstallToUNCPath=Intaltor neme intalova na UNC cestu. -InvalidPath=Muste zadat pln cestu vrtane psmena jednotky; naprklad:%n%nC:\Aplikcia%n%nalebo cestu UNC v tvare:%n%n\\Server\Zdiean adresr -InvalidDrive=Vami vybran jednotka alebo cesta UNC neexistuje alebo nie je dostupn. Vyberte, prosm, in umiestnenie. -DiskSpaceWarningTitle=Nedostatok miesta na disku -DiskSpaceWarning=Sprievodca intalciou vyaduje najmenej %1 KB vonho miesta na intalciu produktu, ale na vybranej jednotke je dostupnch len %2 KB.%n%nPrajete si napriek tomu pokraova? -DirNameTooLong=Nzov adresra alebo cesta s prli dlh. -InvalidDirName=Nzov adresra nie je platn. -BadDirName32=Nzvy adresrov nesm obsahova iadny z nasledujcich znakov:%n%n%1 -DirExistsTitle=Adresr existuje -DirExists=Adresr:%n%n%1%n%nu existuje. M sa napriek tomu intalova do tohto adresra? -DirDoesntExistTitle=Adresr neexistuje -DirDoesntExist=Adresr:%n%n%1%n%nete neexistuje. M sa tento adresr vytvori? -WizardSelectComponents=Vyberte komponenty -SelectComponentsDesc=Ak komponenty maj by naintalovan? -SelectComponentsLabel2=Zakrtnite komponenty, ktor maj by naintalovan; komponenty, ktor se nemaj intalova, nechajte nezakrtnut. Pokraujte kliknutm na tlaidlo alej. -FullInstallation=pln intalcia -CompactInstallation=Kompaktn intalcia -CustomInstallation=Voliten intalcia -NoUninstallWarningTitle=Komponenty existuj -NoUninstallWarning=Sprievodca intalciou zistil, e nasledujce komponenty s u na Vaom potai naintalovan:%n%n%1%n%nAk ich teraz nezahrniete do vberu, nebud neskr odintalovan.%n%nPrajete si napriek tomu pokraova? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Vybran komponenty vyaduj najmenej [gb] GB miesta na disku. -ComponentsDiskSpaceMBLabel=Vybran komponenty vyaduj najmenej [mb] MB miesta na disku. -WizardSelectTasks=Vyberte alie lohy -SelectTasksDesc=Ktor alie lohy maj by vykonan? -SelectTasksLabel2=Vyberte alie lohy, ktor maj by vykonan v priebehu intalcie produktu [name] a pokraujte kliknutm na tlaidlo alej. -WizardSelectProgramGroup=Vyberte skupinu v ponuke tart -SelectStartMenuFolderDesc=Kam m sprievodca intalcie umiestni zstupcov aplikcie? -SelectStartMenuFolderLabel3=Sprievodca intalciou vytvor zstupcov aplikcie v nasledujcom adresri ponuky tart. -SelectStartMenuFolderBrowseLabel=Pokraujte kliknutm na tlaidlo alej. Ak chcete zvoli in adresr, kliknite na tlaidlo Prechdza. -MustEnterGroupName=Muste zada nzov skupiny. -GroupNameTooLong=Nzov adresra alebo cesta s prli dlh. -InvalidGroupName=Nzov adresra nie je platn. -BadGroupName=Nzov skupiny nesmie obsahova iadny z nasledujcich znakov:%n%n%1 -NoProgramGroupCheck2=&Nevytvra skupinu v ponuke tart -WizardReady=Intalcia je pripraven -ReadyLabel1=Sprievodca intalciou je teraz pripraven naintalova produkt [name] na V pota. -ReadyLabel2a=Pokraujte v intalcii kliknutm na tlaidlo Intalova. Ak si prajete zmeni niektor nastavenia intalcie, kliknite na tlaidlo Sp. -ReadyLabel2b=Pokraujte v intalcii kliknutm na tlaidlo Intalova. -ReadyMemoUserInfo=Informcie o pouvateovi: -ReadyMemoDir=Cieov adresr: -ReadyMemoType=Typ intalcie: -ReadyMemoComponents=Vybran komponenty: -ReadyMemoGroup=Skupina v ponuke tart: -ReadyMemoTasks=alie lohy: -DownloadingLabel=Sahovanie dodatonch sborov... -ButtonStopDownload=&Zastavi sahovanie -StopDownload=Ste si ist, e chcete zastavi sahovanie? -ErrorDownloadAborted=Sahovanie preruen -ErrorDownloadFailed=Sahovanie zlyhalo: %1 %2 -ErrorDownloadSizeFailed=Zlyhalo zskanie vekosti: %1 %2 -ErrorFileHash1=Kontroln suma sbora zlyhala: %1 -ErrorFileHash2=Nesprvna kontroln suma: oakvalo sa %1, zistilo sa %2 -ErrorProgress=Nesprvny priebeh: %1 z %2 -ErrorFileSize=Nesprvna vekos sbora: oakvalo sa %1, zistilo sa %2 - -WizardPreparing=Prprava intalcie -PreparingDesc=Sprievodca intalciou pripravuje intalciu produktu [name] na V pota. -PreviousInstallNotCompleted=Intalcia/odintalcia predolho produktu nebola plne dokonen. Dokonenie tohto procesu vyaduje retart potaa.%n%nPo retartovan potaa spustite znovu sprievodcu intalciou, aby bolo mon dokoni intalciu produktu [name]. -CannotContinue=Sprievodca intalciou neme pokraova. Ukonite, prosm, sprievodcu intalciou kliknutm na tlaidlo Zrui. -ApplicationsFound=Nasledujce aplikcie pracuj so sbormi, ktor mus intaltor aktualizova. Odporame Vm, aby ste povolili intaltoru automaticky ukoni tieto aplikcie. -ApplicationsFound2=Nasledujce aplikcie pracuj so sbormi, ktor mus intaltor aktualizova. Odporame Vm, aby ste povolili intaltoru automaticky ukoni tieto aplikcie. Po skonen intalcie sa intaltor poksi tieto aplikcie optovne spusti. -CloseApplications=&Automaticky ukoni aplikcie -DontCloseApplications=&Neukonova aplikcie -ErrorCloseApplications=Sprievodca nemohol automaticky zatvori vetky aplikcie. Odporame Vm, aby ste rune uzavreli vetky aplikcie, ktor pouvaj sbory, ktor m Sprievodca aktualizova. -PrepareToInstallNeedsRestart=Sprievodca potrebuje retartova V pota. Po retartovan spuste tohto Sprievodcu op, aby sa intalcia [name] dokonila.%n%nChcete retartova teraz? -WizardInstalling=Intalujem -InstallingLabel=Pokajte prosm, km sprievodca intalciou nedokon intalciu produktu [name] na V pota. -FinishedHeadingLabel=Dokonuje sa intalcia produktu [name] -FinishedLabelNoIcons=Sprievodca intalciou dokonil intalciu produktu [name] na V pota. -FinishedLabel=Sprievodca intalciou dokonil intalciu produktu [name] na V pota. Produkt je mon spusti pomocou naintalovanch ikon a zstupcov. -ClickFinish=Ukonite sprievodcu intalciou kliknutm na tlaidlo Dokoni. -FinishedRestartLabel=Na dokonenie intalcie produktu [name] je nutn retartova V pota. Prajete si teraz retartova V pota? -FinishedRestartMessage=Na dokonenie intalcie produktu [name] je nutn retartova V pota.%n%nPrajete si teraz retartova V pota? -ShowReadmeCheck=no, chcem zobrazi dokument "ITAJMA" -YesRadio=&no, chcem teraz retartova pota -NoRadio=&Nie, pota retartujem neskr -RunEntryExec=Spusti %1 -RunEntryShellExec=Zobrazi %1 -ChangeDiskTitle=Sprievodca intalciou vyaduje al disk -SelectDiskLabel2=Vlote, prosm, disk %1 a kliknite na tlaidlo OK.%n%nAk sa sbory na tomto disku nachdzaj v inom adresri, ako v tom, ktor je zobrazen niie, zadajte sprvnu cestu alebo kliknite na tlaidlo Prechdza. -PathLabel=&Cesta: -FileNotInDir2=Sbor "%1" sa ned njs v "%2". Vlote, prosm, sprvny disk alebo zvote in adresr. -SelectDirectoryLabel=pecifikujte, prosm, umiestnenie alieho disku. -SetupAborted=Intalcia nebola plne dokonen.%n%nOpravte, prosm, chybu a spustite sprievodcu intalciou znova. -AbortRetryIgnoreSelectAction=Vyberte akciu -AbortRetryIgnoreRetry=&Sksi znova -AbortRetryIgnoreIgnore=&Ignorova chybu a pokraova -AbortRetryIgnoreCancel=Zrui intalciu - -StatusClosingApplications=Ukonovanie aplikci... -StatusCreateDirs=Vytvraj sa adresre... -StatusExtractFiles=Rozbauj sa sbory... -StatusCreateIcons=Vytvraj sa ikony a zstupcovia... -StatusCreateIniEntries=Vytvraj sa zznamy v konfiguranch sboroch... -StatusCreateRegistryEntries=Vytvraj sa zznamy v systmovom registri... -StatusRegisterFiles=Registruj sa sbory... -StatusSavingUninstall=Ukladaj sa informcie potrebn pre neskorie odintalovanie produktu... -StatusRunProgram=Dokonuje sa intalcia... -StatusRestartingApplications=Retartovanie aplikci... -StatusRollback=Vykonan zmeny sa vracaj sp... -ErrorInternal2=Intern chyba: %1 -ErrorFunctionFailedNoCode=%1 zlyhala -ErrorFunctionFailed=%1 zlyhala; kd %2 -ErrorFunctionFailedWithMessage=%1 zlyhala; kd %2.%n%3 -ErrorExecutingProgram=Ned sa spusti sbor:%n%1 -ErrorRegOpenKey=Dolo k chybe pri otvran ka systmovho registra:%n%1\%2 -ErrorRegCreateKey=Dolo k chybe pri vytvran ka systmovho registra:%n%1\%2 -ErrorRegWriteKey=Dolo k chybe pri zpise do ka systmovho registra:%n%1\%2 -ErrorIniEntry=Dolo k chybe pri vytvran zznamu v konfiguranom sbore "%1". -FileAbortRetryIgnoreSkipNotRecommended=&Preskoi tento sbor (neodporan) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorova chybu a pokraova (neodporan) -SourceIsCorrupted=Zdrojov sbor je pokoden -SourceDoesntExist=Zdrojov sbor "%1" neexistuje - -ExistingFileReadOnly2=Existujci sbor nie je mon prepsa, pretoe je oznaen atribtom len na tanie. -ExistingFileReadOnlyRetry=&Odstrni atribt len na tanie a sksi znova -ExistingFileReadOnlyKeepExisting=&Ponecha existujci sbor - -ErrorReadingExistingDest=Dolo k chybe pri pokuse o tanie existujceho sboru: -FileExistsSelectAction=Vyberte akciu -FileExists2=Sbor u existuje. -FileExistsOverwriteExisting=&Prepsa existujci sbor -FileExistsKeepExisting=Ponecha &existujci sbor -FileExistsOverwriteOrKeepAll=&Vykona pre vetky alie konflikty -ExistingFileNewerSelectAction=Vyberte akciu -ExistingFileNewer2=Existujci sbor je nov ako sbor, ktor sa Sprievodca intalciou poka naintalova. -ExistingFileNewerOverwriteExisting=&Prepsa existujci sbor -ExistingFileNewerKeepExisting=Ponecha &existujci sbor (odporan) -ExistingFileNewerOverwriteOrKeepAll=&Vykona pre vetky alie konflikty -ErrorChangingAttr=Dolo k chybe pri pokuse o modifikciu atribtov existujceho sboru: -ErrorCreatingTemp=Dolo k chybe pri pokuse o vytvorenie sboru v cieovom adresri: -ErrorReadingSource=Dolo k chybe pri pokuse o tanie zdrojovho sboru: -ErrorCopying=Dolo k chybe pri pokuse o skoprovanie sboru: -ErrorReplacingExistingFile=Dolo k chybe pri pokuse o nahradenie existujceho sboru: -ErrorRestartReplace=Zlyhala funkcia "RestartReplace" sprievodcu intalciou: -ErrorRenamingTemp=Dolo k chybe pri pokuse o premenovanie sboru v cieovom adresri: -ErrorRegisterServer=Ned sa vykona registrcia DLL/OCX: %1 -ErrorRegSvr32Failed=Volanie RegSvr32 zlyhalo s nvratovm kdom %1 -ErrorRegisterTypeLib=Ned sa vykona registrcia typovej kninice: %1 -ErrorOpeningReadme=Dolo k chybe pri pokuse o otvorenie dokumentu "ITAJMA". -ErrorRestartingComputer=Sprievodcovi intalciou sa nepodarilo retartova V pota. Retartujte ho, prosm, manulne. -UninstallNotFound=Sbor "%1" neexistuje. Produkt sa ned odintalova. -UninstallOpenError=Sbor "%1" nie je mon otvori. Produkt nie je mon odintalova. -UninstallUnsupportedVer=Sprievodcovi odintalciou sa nepodarilo rozpozna formt sboru obsahujceho informcie na odintalovanie produktu "%1". Produkt sa ned odintalova -UninstallUnknownEntry=V sbore obsahujcom informcie na odintalovanie produktu bola zisten neznma poloka (%1) -ConfirmUninstall=Ste si naozaj ist, e chcete odintalova %1 a vetky jeho komponenty? -UninstallOnlyOnWin64=Tento produkt je mon odintalova iba v 64-bitovch verzich MS Windows. -OnlyAdminCanUninstall=K odintalovaniu tohto produktu muste by prihlsen s prvami administrtora. -UninstallStatusLabel=Pokajte prosm, km produkt %1 nebude odintalovan z Vho potaa. -UninstalledAll=%1 bol spene odintalovan z Vho potaa. -UninstalledMost=%1 bol odintalovan z Vho potaa.%n%nNiektor jeho komponenty sa vak nepodarilo odintalova. Mete ich odintalova manulne. -UninstalledAndNeedsRestart=Na dokonenie odintalcie produktu %1 je potrebn retartova V pota.%n%nPrajete si teraz retartova V pota? -UninstallDataCorrupted=Sbor "%1" je pokoden. Produkt sa ned odintalova -ConfirmDeleteSharedFileTitle=Odintalova zdiean sbor? -ConfirmDeleteSharedFile2=Systm indikuje, e nasledujci zdiean sbor nie je pouvan iadnymi inmi aplikciami. M sprievodca odintalcie tento zdiean sbor odstrni?%n%nAk niektor aplikcie tento sbor pouvaj, nemusia po jeho odintalovan pracova sprvne. Ak si nie ste ist, zvote Nie. Ponechanie tohoto sboru vo Vaom systme nespsob iadnu kodu. -SharedFileNameLabel=Nzov sboru: -SharedFileLocationLabel=Umiestnenie: -WizardUninstalling=Stav odintalovania -StatusUninstalling=Odintalujem %1... -ShutdownBlockReasonInstallingApp=Intalovanie %1. -ShutdownBlockReasonUninstallingApp=Odintalovanie %1. - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Vetci uvatelia -UninstallDisplayNameMarkCurrentUser=Aktulny uvate - - -[CustomMessages] -NameAndVersion=%1 verzia %2 -AdditionalIcons=al zstupcovia: -CreateDesktopIcon=Vytvori zstupcu na &ploche -CreateQuickLaunchIcon=Vytvori zstupcu na paneli &Rchle spustenie -ProgramOnTheWeb=Aplikcia %1 na internete -UninstallProgram=Odintalova aplikciu %1 -LaunchProgram=Spusti aplikciu %1 -AssocFileExtension=Vytvori &asociciu medzi sbormi typu %2 a aplikciou %1 -AssocingFileExtension=Vytvra sa asocicia medzi sbormi typu %2 a aplikciou %1... -AutoStartProgramGroupDescription=Po spusten: -AutoStartProgram=Automaticky spusti %1 -AddonHostProgramNotFound=Nepodarilo sa njs %1 v prieinku, ktor ste zvolili.%n%nChcete napriek tomu pokraova? diff --git a/Dependencies/Inno/Languages/Slovenian.isl b/Dependencies/Inno/Languages/Slovenian.isl deleted file mode 100644 index 248b688c..00000000 --- a/Dependencies/Inno/Languages/Slovenian.isl +++ /dev/null @@ -1,370 +0,0 @@ -; *** Inno Setup version 6.1.0+ Slovenian messages *** -; -; To download user-contributed translations of this file, go to: -; http://www.jrsoftware.org/is3rdparty.php -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). -; -; Maintained by Jernej Simoncic (jernej+s-innosetup@eternallybored.org) - -[LangOptions] -LanguageName=Slovenski -LanguageID=$0424 -LanguageCodePage=1250 - -DialogFontName= -[Messages] - -; *** Application titles -SetupAppTitle=Namestitev -SetupWindowTitle=Namestitev - %1 -UninstallAppTitle=Odstranitev -UninstallAppFullTitle=Odstranitev programa %1 - -; *** Misc. common -InformationTitle=Informacija -ConfirmTitle=Potrditev -ErrorTitle=Napaka - -; *** SetupLdr messages -SetupLdrStartupMessage=V raunalnik boste namestili program %1. elite nadaljevati? -LdrCannotCreateTemp=Ni bilo mogoe ustvariti zaasne datoteke. Namestitev je prekinjena -LdrCannotExecTemp=Ni bilo mogoe zagnati datoteke v zaasni mapi. Namestitev je prekinjena - -; *** Startup error messages -LastErrorMessage=%1.%n%nNapaka %2: %3 -SetupFileMissing=Datoteka %1 manjka. Odpravite napako ali si priskrbite drugo kopijo programa. -SetupFileCorrupt=Datoteke namestitvenega programa so okvarjene. Priskrbite si drugo kopijo programa. -SetupFileCorruptOrWrongVer=Datoteke so okvarjene ali nezdruljive s to razliico namestitvenega programa. Odpravite napako ali si priskrbite drugo kopijo programa. -InvalidParameter=Naveden je bil napaen parameter ukazne vrstice:%n%n%1 -SetupAlreadyRunning=Namestitveni program se e izvaja. -WindowsVersionNotSupported=Program ne deluje na vai razliici sistema Windows. -WindowsServicePackRequired=Program potrebuje %1 s servisnim paketom %2 ali novejo razliico. -NotOnThisPlatform=Program ni namenjen za uporabo v %1. -OnlyOnThisPlatform=Program je namenjen le za uporabo v %1. -OnlyOnTheseArchitectures=Program lahko namestite le na Windows sistemih, na naslednjih vrstah procesorjev:%n%n%1 -WinVersionTooLowError=Ta program zahteva %1 razliico %2 ali novejo. -WinVersionTooHighError=Tega programa ne morete namestiti v %1 razliice %2 ali noveje. -AdminPrivilegesRequired=Za namestitev programa morate biti prijavljeni v raun s skrbnikimi pravicami. -PowerUserPrivilegesRequired=Za namestitev programa morate biti prijavljeni v raun s skrbnikimi ali power user pravicami. -SetupAppRunningError=Program %1 je trenutno odprt.%n%nZaprite program, nato kliknite V redu za nadaljevanje ali Preklii za izhod. -UninstallAppRunningError=Program %1 je trenutno odprt.%n%nZaprite program, nato kliknite V redu za nadaljevanje ali Preklii za izhod. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Izberite nain namestitve -PrivilegesRequiredOverrideInstruction=Izberite nain namestitve -PrivilegesRequiredOverrideText1=Program %1 lahko namestite za vse uporabnike (potrebujete skrbnike pravice), ali pa samo za vas. -PrivilegesRequiredOverrideText2=Program %1 lahko namestite samo za vas, ali pa za vse uporabnike (potrebujete skrbnike pravice). -PrivilegesRequiredOverrideAllUsers=N&amesti za vse uporabnike -PrivilegesRequiredOverrideAllUsersRecommended=N&amesti za vse uporabnike (priporoeno) -PrivilegesRequiredOverrideCurrentUser=Namesti samo za&me -PrivilegesRequiredOverrideCurrentUserRecommended=Namesti samo za&me (priporoeno) - -; *** Misc. errors -ErrorCreatingDir=Namestitveni program ni mogel ustvariti mape %1 -ErrorTooManyFilesInDir=Namestitveni program ne more ustvariti nove datoteke v mapi %1, ker vsebuje preve datotek - -; *** Setup common messages -ExitSetupTitle=Prekini namestitev -ExitSetupMessage=Namestitev ni konana. e jo boste prekinili, program ne bo nameen.%n%nPonovno namestitev lahko izvedete kasneje.%n%nelite prekiniti namestitev? -AboutSetupMenuItem=&O namestitvenem programu... -AboutSetupTitle=O namestitvenem programu -AboutSetupMessage=%1 razliica %2%n%3%n%n%1 domaa stran:%n%4 -AboutSetupNote= -TranslatorNote=Slovenski prevod:%nMiha Remec%nJernej Simoni - -; *** Buttons -ButtonBack=< Na&zaj -ButtonNext=&Naprej > -ButtonInstall=&Namesti -ButtonOK=V redu -ButtonCancel=Preklii -ButtonYes=&Da -ButtonYesToAll=Da za &vse -ButtonNo=&Ne -ButtonNoToAll=N&e za vse -ButtonFinish=&Konaj -ButtonBrowse=Pre&brskaj... -ButtonWizardBrowse=Pre&brskaj... -ButtonNewFolder=&Ustvari novo mapo - -; *** "Select Language" dialog messages -SelectLanguageTitle=Izbira jezika namestitve -SelectLanguageLabel=Izberite jezik, ki ga elite uporabljati med namestitvijo. - -; *** Common wizard text -ClickNext=Kliknite Naprej za nadaljevanje namestitve ali Preklii za prekinitev namestitve. -BeveledLabel= -BrowseDialogTitle=Izbira mape -BrowseDialogLabel=Izberite mapo s spiska, nato kliknite V redu. -NewFolderName=Nova mapa - -; *** "Welcome" wizard page -WelcomeLabel1=Dobrodoli v namestitev programa [name]. -WelcomeLabel2=V raunalnik boste namestili program [name/ver].%n%nPriporoljivo je, da pred zaetkom namestitve zaprete vse odprte programe. - -; *** "Password" wizard page -WizardPassword=Geslo -PasswordLabel1=Namestitev je zaitena z geslom. -PasswordLabel3=Vnesite geslo, nato kliknite Naprej za nadaljevanje. Pri vnaanju pazite na male in velike rke. -PasswordEditLabel=&Geslo: -IncorrectPassword=Vneseno geslo ni pravilno. Poizkusite ponovno. - -; *** "License Agreement" wizard page -WizardLicense=Licenna pogodba -LicenseLabel=Pred nadaljevanjem preberite licenno pogodbo za uporabo programa. -LicenseLabel3=Preberite licenno pogodbo za uporabo programa. Program lahko namestite le, e se s pogodbo v celoti strinjate. -LicenseAccepted=&Da, sprejemam vse pogoje licenne pogodbe -LicenseNotAccepted=N&e, pogojev licenne pogodbe ne sprejmem - -; *** "Information" wizard pages -WizardInfoBefore=Informacije -InfoBeforeLabel=Pred nadaljevanjem preberite naslednje pomembne informacije. -InfoBeforeClickLabel=Ko boste pripravljeni na nadaljevanje namestitve, kliknite Naprej. -WizardInfoAfter=Informacije -InfoAfterLabel=Pred nadaljevanjem preberite naslednje pomembne informacije. -InfoAfterClickLabel=Ko boste pripravljeni na nadaljevanje namestitve, kliknite Naprej. - -; *** "User Information" wizard page -WizardUserInfo=Podatki o uporabniku -UserInfoDesc=Vnesite svoje podatke. -UserInfoName=&Ime: -UserInfoOrg=&Podjetje: -UserInfoSerial=&Serijska tevilka: -UserInfoNameRequired=Vnos imena je obvezen. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Izbira ciljnega mesta -SelectDirDesc=Kam elite namestiti program [name]? -SelectDirLabel3=Program [name] bo nameen v naslednjo mapo. -SelectDirBrowseLabel=Za nadaljevanje kliknite Naprej. e elite izbrati drugo mapo, kliknite Prebrskaj. -DiskSpaceGBLabel=Na disku mora biti vsaj [gb] GB prostora. -DiskSpaceMBLabel=Na disku mora biti vsaj [mb] MB prostora. -CannotInstallToNetworkDrive=Programa ni mogoe namestiti na mreni pogon. -CannotInstallToUNCPath=Programa ni mogoe namestiti v UNC pot. -InvalidPath=Vpisati morate polno pot vkljuno z oznako pogona. Primer:%n%nC:\PROGRAM%n%nali UNC pot v obliki:%n%n\\strenik\mapa_skupne_rabe -InvalidDrive=Izbrani pogon ali omreno sredstvo UNC ne obstaja ali ni dostopno. Izberite drugega. -DiskSpaceWarningTitle=Na disku ni dovolj prostora -DiskSpaceWarning=Namestitev potrebuje vsaj %1 KB prostora, toda na izbranem pogonu je na voljo le %2 KB.%n%nelite kljub temu nadaljevati? -DirNameTooLong=Ime mape ali poti je predolgo. -InvalidDirName=Ime mape ni veljavno. -BadDirName32=Ime mape ne sme vsebovati naslednjih znakov:%n%n%1 -DirExistsTitle=Mapa e obstaja -DirExists=Mapa%n%n%1%n%ne obstaja. elite program vseeno namestiti v to mapo? -DirDoesntExistTitle=Mapa ne obstaja -DirDoesntExist=Mapa %n%n%1%n%nne obstaja. Ali jo elite ustvariti? - -; *** "Select Components" wizard page -WizardSelectComponents=Izbira komponent -SelectComponentsDesc=Katere komponente elite namestiti? -SelectComponentsLabel2=Oznaite komponente, ki jih elite namestiti; odznaite komponente, ki jih ne elite namestiti. Kliknite Naprej, ko boste pripravljeni za nadaljevanje. -FullInstallation=Popolna namestitev -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Osnovna namestitev -CustomInstallation=Namestitev po meri -NoUninstallWarningTitle=Komponente e obstajajo -NoUninstallWarning=Namestitveni program je ugotovil, da so naslednje komponente e nameene v raunalniku:%n%n%1%n%nNamestitveni program teh e nameenih komponent ne bo odstranil.%n%nelite vseeno nadaljevati? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Za izbrano namestitev potrebujete vsaj [gb] GB prostora na disku. -ComponentsDiskSpaceMBLabel=Za izbrano namestitev potrebujete vsaj [mb] MB prostora na disku. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Izbira dodatnih opravil -SelectTasksDesc=Katera dodatna opravila elite izvesti? -SelectTasksLabel2=Izberite dodatna opravila, ki jih bo namestitveni program opravil med namestitvijo programa [name], nato kliknite Naprej. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Izbira mape v meniju Zaetek -SelectStartMenuFolderDesc=Kje naj namestitveni program ustvari blinjice? -SelectStartMenuFolderLabel3=Namestitveni program bo ustvaril blinjice v naslednji mapi v meniju Start. -SelectStartMenuFolderBrowseLabel=Za nadaljevanje kliknite Naprej. e elite izbrati drugo mapo, kliknite Prebrskaj. -MustEnterGroupName=Ime skupine mora biti vpisano. -GroupNameTooLong=Ime mape ali poti je predolgo. -InvalidGroupName=Ime mape ni veljavno. -BadGroupName=Ime skupine ne sme vsebovati naslednjih znakov:%n%n%1 -NoProgramGroupCheck2=&Ne ustvari mape v meniju Start - -; *** "Ready to Install" wizard page -WizardReady=Pripravljen za namestitev -ReadyLabel1=Namestitveni program je pripravljen za namestitev programa [name] v va raunalnik. -ReadyLabel2a=Kliknite Namesti za zaetek nameanja. Kliknite Nazaj, e elite pregledati ali spremeniti katerokoli nastavitev. -ReadyLabel2b=Kliknite Namesti za zaetek nameanja. -ReadyMemoUserInfo=Podatki o uporabniku: -ReadyMemoDir=Ciljno mesto: -ReadyMemoType=Vrsta namestitve: -ReadyMemoComponents=Izbrane komponente: -ReadyMemoGroup=Mapa v meniju Zaetek: -ReadyMemoTasks=Dodatna opravila: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Prenaam dodatne datoteke... -ButtonStopDownload=Prekini preno&s -StopDownload=Ali res elite prekiniti prenos? -ErrorDownloadAborted=Prenos prekinjen -ErrorDownloadFailed=Prenos ni uspel: %1 %2 -ErrorDownloadSizeFailed=Pridobivanje velikosti ni uspelo: %1 %2 -ErrorFileHash1=Pridobivanje zgoene vrednosti ni uspelo: %1 -ErrorFileHash2=Neveljavna zgoena vrednost: priakovana %1, dobljena %2 -ErrorProgress=Neveljaven potek: %1 od %2 -ErrorFileSize=Neveljavna velikost datoteke: priakovana %1, dobljena %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Pripravljam za namestitev -PreparingDesc=Namestitveni program je pripravljen za namestitev programa [name] v va raunalnik. -PreviousInstallNotCompleted=Namestitev ali odstranitev prejnjega programa ni bila konana. Da bi jo dokonali, morate raunalnik znova zagnati.%n%nPo ponovnem zagonu raunalnika znova zaenite namestitveni program, da boste konali namestitev programa [name]. -CannotContinue=Namestitveni program ne more nadaljevati. Pritisnite Preklii za izhod. - -; *** "Installing" wizard page -ApplicationsFound=Naslednji programi uporabljajo datoteke, ki jih mora namestitveni program posodobiti. Priporoljivo je, da namestitvenemu programu dovolite, da te programe kona. -ApplicationsFound2=Naslednji programi uporabljajo datoteke, ki jih mora namestitveni program posodobiti. Priporoljivo je, da namestitvenemu programu dovolite, da te programe kona. Po koncu namestitve bo namestitveni program poizkusil znova zagnati te programe. -CloseApplications=S&amodejno zapri programe -DontCloseApplications=&Ne zapri programov -ErrorCloseApplications=Namestitvenemu programu ni uspelo samodejno zapreti vseh programov. Priporoljivo je, da pred nadaljevanjem zaprete vse programe, ki uporabljajo datoteke, katere mora namestitev posodobiti. -PrepareToInstallNeedsRestart=Namestitveni program mora znova zagnati va raunalnik. Za dokonanje namestitve programa [name], po ponovnem zagonu znova zaenite namestitveni program.%n%nAli elite zdaj znova zagnati raunalnik? - -WizardInstalling=Nameanje -InstallingLabel=Poakajte, da bo program [name] nameen v va raunalnik. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Zakljuek namestitve programa [name] -FinishedLabelNoIcons=Program [name] je nameen v va raunalnik. -FinishedLabel=Program [name] je nameen v va raunalnik. Program zaenete tako, da odprete pravkar ustvarjene programske ikone. -ClickFinish=Kliknite tipko Konaj za zakljuek namestitve. -FinishedRestartLabel=Za dokonanje namestitve programa [name] morate raunalnik znova zagnati. Ali ga elite znova zagnati zdaj? -FinishedRestartMessage=Za dokonanje namestitve programa [name] morate raunalnik znova zagnati. %n%nAli ga elite znova zagnati zdaj? -ShowReadmeCheck=elim prebrati datoteko BERIME -YesRadio=&Da, raunalnik znova zaeni zdaj -NoRadio=&Ne, raunalnik bom znova zagnal pozneje - -; used for example as 'Run MyProg.exe' -RunEntryExec=Zaeni %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Preglej %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=Namestitveni program potrebuje naslednji disk -SelectDiskLabel2=Vstavite disk %1 in kliknite V redu.%n%ne se datoteke s tega diska nahajajo v drugi mapi kot je navedena spodaj, vnesite pravilno pot ali kliknite Prebrskaj. -PathLabel=&Pot: -FileNotInDir2=Datoteke %1 ni v mapi %2. Vstavite pravilni disk ali izberite drugo mapo. -SelectDirectoryLabel=Vnesite mesto naslednjega diska. - -; *** Installation phase messages -SetupAborted=Namestitev ni bila konana.%n%nOdpravite teavo in znova odprite namestitveni program. -AbortRetryIgnoreSelectAction=Izberite dejanje -AbortRetryIgnoreRetry=Poizkusi &znova -AbortRetryIgnoreIgnore=&Prezri napako in nadaljuj -AbortRetryIgnoreCancel=Preklii namestitev - -; *** Installation status messages -StatusClosingApplications=Zapiranje programov... -StatusCreateDirs=Ustvarjanje map... -StatusExtractFiles=Razirjanje datotek... -StatusCreateIcons=Ustvarjanje blinjic... -StatusCreateIniEntries=Vpisovanje v INI datoteke... -StatusCreateRegistryEntries=Ustvarjanje vnosov v register... -StatusRegisterFiles=Registriranje datotek... -StatusSavingUninstall=Zapisovanje podatkov za odstranitev... -StatusRunProgram=Zakljuevanje namestitve... -StatusRestartingApplications=Zaganjanje programov... -StatusRollback=Obnavljanje prvotnega stanja... - -; *** Misc. errors -ErrorInternal2=Interna napaka: %1 -ErrorFunctionFailedNoCode=%1 ni uspel(a) -ErrorFunctionFailed=%1 ni uspel(a); koda %2 -ErrorFunctionFailedWithMessage=%1 ni uspela; koda %2.%n%3 -ErrorExecutingProgram=Ne morem zagnati programa:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Napaka pri odpiranju kljua v registru:%n%1\%2 -ErrorRegCreateKey=Napaka pri ustvarjanju kljua v registru:%n%1\%2 -ErrorRegWriteKey=Napaka pri pisanju kljua v registru:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Napaka pri vpisu v INI datoteko %1. - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=Pre&skoi to datoteko (ni priporoeno) -FileAbortRetryIgnoreIgnoreNotRecommended=Prezr&i napako in nadaljuj (ni priporoeno) -SourceIsCorrupted=Izvorna datoteka je okvarjena -SourceDoesntExist=Izvorna datoteka %1 ne obstaja -ExistingFileReadOnly2=Obstojee datoteke ni mogoe nadomestiti, ker ima oznako samo za branje. -ExistingFileReadOnlyRetry=Odst&rani oznako samo za branje in poizkusi ponovno -ExistingFileReadOnlyKeepExisting=&Ohrani obstojeo datoteko -ErrorReadingExistingDest=Pri branju obstojee datoteke je prilo do napake: -FileExistsSelectAction=Izberite dejanje -FileExists2=Datoteka e obstaja. -FileExistsOverwriteExisting=&Prepii obstojeo datoteko -FileExistsKeepExisting=&Ohrani trenutno datoteko -FileExistsOverwriteOrKeepAll=&To naredite za preostale spore -ExistingFileNewerSelectAction=Izberite dejanje -ExistingFileNewer2=Obstojea datoteka je noveja, kot datoteka, ki se namea. -ExistingFileNewerOverwriteExisting=&Prepii obstojeo datoteko -ExistingFileNewerKeepExisting=&Ohrani trenutno datoteko (priporoeno) -ExistingFileNewerOverwriteOrKeepAll=&To naredite za preostale spore -ErrorChangingAttr=Pri poskusu spremembe lastnosti datoteke je prilo do napake: -ErrorCreatingTemp=Pri ustvarjanju datoteke v ciljni mapi je prilo do napake: -ErrorReadingSource=Pri branju izvorne datoteke je prilo do napake: -ErrorCopying=Pri kopiranju datoteke je prilo do napake: -ErrorReplacingExistingFile=Pri poskusu zamenjave obstojee datoteke je prilo do napake: -ErrorRestartReplace=Napaka RestartReplace: -ErrorRenamingTemp=Pri poskusu preimenovanja datoteke v ciljni mapi je prilo do napake: -ErrorRegisterServer=Registracija DLL/OCX ni uspela: %1 -ErrorRegSvr32Failed=RegSvr32 ni uspel s kodo napake %1 -ErrorRegisterTypeLib=Registracija TypeLib ni uspela: %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bitno -UninstallDisplayNameMark64Bit=64-bitno -UninstallDisplayNameMarkAllUsers=vsi uporabniki -UninstallDisplayNameMarkCurrentUser=trenutni uporabnik - -; *** Post-installation errors -ErrorOpeningReadme=Pri odpiranju datoteke BERIME je prilo do napake. -ErrorRestartingComputer=Namestitvenemu programu ni uspelo znova zagnati raunalnika. Sami znova zaenite raunalnik. - -; *** Uninstaller messages -UninstallNotFound=Datoteka %1 ne obstaja. Odstranitev ni mogoa. -UninstallOpenError=Datoteke %1 ne morem odpreti. Ne morem odstraniti -UninstallUnsupportedVer=Dnevnika datoteka %1 je v obliki, ki je ta razliica odstranitvenega programa ne razume. Programa ni mogoe odstraniti -UninstallUnknownEntry=V dnevniki datoteki je bil najden neznani vpis (%1) -ConfirmUninstall=Ste prepriani, da elite v celoti odstraniti program %1 in pripadajoe komponente? -UninstallOnlyOnWin64=To namestitev je mogoe odstraniti le v 64-bitni razliici sistema Windows. -OnlyAdminCanUninstall=Za odstranitev tega programa morate imeti skrbnike pravice. -UninstallStatusLabel=Poakajte, da se program %1 odstrani iz vaega raunalnika. -UninstalledAll=Program %1 je bil uspeno odstranjen iz vaega raunalnika. -UninstalledMost=Odstranjevanje programa %1 je konano.%n%nNekatere datoteke niso bile odstranjene in jih lahko odstranite rono. -UninstalledAndNeedsRestart=Za dokonanje odstranitve programa %1 morate raunalnik znova zagnati.%n%nAli ga elite znova zagnati zdaj? -UninstallDataCorrupted=Datoteka %1 je okvarjena. Odstranitev ni mona - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=elite odstraniti datoteko v skupni rabi? -ConfirmDeleteSharedFile2=Spodaj izpisane datoteke v skupni rabi ne uporablja ve noben program. elite odstraniti to datoteko?%n%ne jo uporablja katerikoli program in jo boste odstranili, ta program verjetno ne bo ve deloval pravilno. e niste prepriani, kliknite Ne. e boste datoteko ohranili v raunalniku, ne bo ni narobe. -SharedFileNameLabel=Ime datoteke: -SharedFileLocationLabel=Mesto: -WizardUninstalling=Odstranjevanje programa -StatusUninstalling=Odstranjujem %1... - -ShutdownBlockReasonInstallingApp=Nameam %1. -ShutdownBlockReasonUninstallingApp=Odstranjujem %1. - -[CustomMessages] - -NameAndVersion=%1 razliica %2 -AdditionalIcons=Dodatne ikone: -CreateDesktopIcon=Ustvari ikono na &namizju -CreateQuickLaunchIcon=Ustvari ikono za &hitri zagon -ProgramOnTheWeb=%1 na spletu -UninstallProgram=Odstrani %1 -LaunchProgram=Odpri %1 -AssocFileExtension=&Povei %1 s pripono %2 -AssocingFileExtension=Povezujem %1 s pripono %2... -AutoStartProgramGroupDescription=Zagon: -AutoStartProgram=Samodejno zaeni %1 -AddonHostProgramNotFound=Programa %1 ni bilo mogoe najti v izbrani mapi.%n%nAli elite vseeno nadaljevati? diff --git a/Dependencies/Inno/Languages/Spanish.isl b/Dependencies/Inno/Languages/Spanish.isl deleted file mode 100644 index 0bd5df2f..00000000 --- a/Dependencies/Inno/Languages/Spanish.isl +++ /dev/null @@ -1,383 +0,0 @@ -; *** Inno Setup version 6.1.0+ Spanish messages *** -; -; Maintained by Jorge Andres Brugger (jbrugger@ideaworks.com.ar) -; Spanish.isl version 1.5 (20200727) -; Default.isl version 6.1.0 -; -; Thanks to Germn Giraldo, Jordi Latorre, Ximo Tamarit, Emiliano Llano, -; Ramn Verduzco, Graciela Garca, Carles Millan and Rafael Barranco-Droege - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=Espa<00F1>ol -LanguageID=$0c0a -LanguageCodePage=1252 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Application titles -SetupAppTitle=Instalar -SetupWindowTitle=Instalar - %1 -UninstallAppTitle=Desinstalar -UninstallAppFullTitle=Desinstalar - %1 - -; *** Misc. common -InformationTitle=Informacin -ConfirmTitle=Confirmar -ErrorTitle=Error - -; *** SetupLdr messages -SetupLdrStartupMessage=Este programa instalar %1. Desea continuar? -LdrCannotCreateTemp=Imposible crear archivo temporal. Instalacin interrumpida -LdrCannotExecTemp=Imposible ejecutar archivo en la carpeta temporal. Instalacin interrumpida -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%nError %2: %3 -SetupFileMissing=El archivo %1 no se encuentra en la carpeta de instalacin. Por favor, solucione el problema u obtenga una copia nueva del programa. -SetupFileCorrupt=Los archivos de instalacin estn daados. Por favor, obtenga una copia nueva del programa. -SetupFileCorruptOrWrongVer=Los archivos de instalacin estn daados o son incompatibles con esta versin del programa de instalacin. Por favor, solucione el problema u obtenga una copia nueva del programa. -InvalidParameter=Se ha utilizado un parmetro no vlido en la lnea de comandos:%n%n%1 -SetupAlreadyRunning=El programa de instalacin an est ejecutndose. -WindowsVersionNotSupported=Este programa no es compatible con la versin de Windows de su equipo. -WindowsServicePackRequired=Este programa requiere %1 Service Pack %2 o posterior. -NotOnThisPlatform=Este programa no se ejecutar en %1. -OnlyOnThisPlatform=Este programa debe ejecutarse en %1. -OnlyOnTheseArchitectures=Este programa slo puede instalarse en versiones de Windows diseadas para las siguientes arquitecturas de procesadores:%n%n%1 -WinVersionTooLowError=Este programa requiere %1 versin %2 o posterior. -WinVersionTooHighError=Este programa no puede instalarse en %1 versin %2 o posterior. -AdminPrivilegesRequired=Debe iniciar la sesin como administrador para instalar este programa. -PowerUserPrivilegesRequired=Debe iniciar la sesin como administrador o como miembro del grupo de Usuarios Avanzados para instalar este programa. -SetupAppRunningError=El programa de instalacin ha detectado que %1 est ejecutndose.%n%nPor favor, cirrelo ahora, luego haga clic en Aceptar para continuar o en Cancelar para salir. -UninstallAppRunningError=El desinstalador ha detectado que %1 est ejecutndose.%n%nPor favor, cirrelo ahora, luego haga clic en Aceptar para continuar o en Cancelar para salir. - -; *** Startup questions -PrivilegesRequiredOverrideTitle=Seleccin del Modo de Instalacin -PrivilegesRequiredOverrideInstruction=Seleccione el modo de instalacin -PrivilegesRequiredOverrideText1=%1 puede ser instalado para todos los usuarios (requiere privilegios administrativos), o solo para Ud. -PrivilegesRequiredOverrideText2=%1 puede ser instalado solo para Ud, o para todos los usuarios (requiere privilegios administrativos). -PrivilegesRequiredOverrideAllUsers=Instalar para &todos los usuarios -PrivilegesRequiredOverrideAllUsersRecommended=Instalar para &todos los usuarios (recomendado) -PrivilegesRequiredOverrideCurrentUser=Instalar para &m solamente -PrivilegesRequiredOverrideCurrentUserRecommended=Instalar para &m solamente (recomendado) - -; *** Misc. errors -ErrorCreatingDir=El programa de instalacin no pudo crear la carpeta "%1" -ErrorTooManyFilesInDir=Imposible crear un archivo en la carpeta "%1" porque contiene demasiados archivos - -; *** Setup common messages -ExitSetupTitle=Salir de la Instalacin -ExitSetupMessage=La instalacin no se ha completado an. Si cancela ahora, el programa no se instalar.%n%nPuede ejecutar nuevamente el programa de instalacin en otra ocasin para completarla.%n%nSalir de la instalacin? -AboutSetupMenuItem=&Acerca de Instalar... -AboutSetupTitle=Acerca de Instalar -AboutSetupMessage=%1 versin %2%n%3%n%n%1 sitio Web:%n%4 -AboutSetupNote= -TranslatorNote=Spanish translation maintained by Jorge Andres Brugger (jbrugger@gmx.net) - -; *** Buttons -ButtonBack=< &Atrs -ButtonNext=&Siguiente > -ButtonInstall=&Instalar -ButtonOK=Aceptar -ButtonCancel=Cancelar -ButtonYes=&S -ButtonYesToAll=S a &Todo -ButtonNo=&No -ButtonNoToAll=N&o a Todo -ButtonFinish=&Finalizar -ButtonBrowse=&Examinar... -ButtonWizardBrowse=&Examinar... -ButtonNewFolder=&Crear Nueva Carpeta - -; *** "Select Language" dialog messages -SelectLanguageTitle=Seleccione el Idioma de la Instalacin -SelectLanguageLabel=Seleccione el idioma a utilizar durante la instalacin. - -; *** Common wizard text -ClickNext=Haga clic en Siguiente para continuar o en Cancelar para salir de la instalacin. -BeveledLabel= -BrowseDialogTitle=Buscar Carpeta -BrowseDialogLabel=Seleccione una carpeta y luego haga clic en Aceptar. -NewFolderName=Nueva Carpeta - -; *** "Welcome" wizard page -WelcomeLabel1=Bienvenido al asistente de instalacin de [name] -WelcomeLabel2=Este programa instalar [name/ver] en su sistema.%n%nSe recomienda cerrar todas las dems aplicaciones antes de continuar. - -; *** "Password" wizard page -WizardPassword=Contrasea -PasswordLabel1=Esta instalacin est protegida por contrasea. -PasswordLabel3=Por favor, introduzca la contrasea y haga clic en Siguiente para continuar. En las contraseas se hace diferencia entre maysculas y minsculas. -PasswordEditLabel=&Contrasea: -IncorrectPassword=La contrasea introducida no es correcta. Por favor, intntelo nuevamente. - -; *** "License Agreement" wizard page -WizardLicense=Acuerdo de Licencia -LicenseLabel=Es importante que lea la siguiente informacin antes de continuar. -LicenseLabel3=Por favor, lea el siguiente acuerdo de licencia. Debe aceptar las clusulas de este acuerdo antes de continuar con la instalacin. -LicenseAccepted=A&cepto el acuerdo -LicenseNotAccepted=&No acepto el acuerdo - -; *** "Information" wizard pages -WizardInfoBefore=Informacin -InfoBeforeLabel=Es importante que lea la siguiente informacin antes de continuar. -InfoBeforeClickLabel=Cuando est listo para continuar con la instalacin, haga clic en Siguiente. -WizardInfoAfter=Informacin -InfoAfterLabel=Es importante que lea la siguiente informacin antes de continuar. -InfoAfterClickLabel=Cuando est listo para continuar, haga clic en Siguiente. - -; *** "User Information" wizard page -WizardUserInfo=Informacin de Usuario -UserInfoDesc=Por favor, introduzca sus datos. -UserInfoName=Nombre de &Usuario: -UserInfoOrg=&Organizacin: -UserInfoSerial=Nmero de &Serie: -UserInfoNameRequired=Debe introducir un nombre. - -; *** "Select Destination Location" wizard page -WizardSelectDir=Seleccione la Carpeta de Destino -SelectDirDesc=Dnde debe instalarse [name]? -SelectDirLabel3=El programa instalar [name] en la siguiente carpeta. -SelectDirBrowseLabel=Para continuar, haga clic en Siguiente. Si desea seleccionar una carpeta diferente, haga clic en Examinar. -DiskSpaceGBLabel=Se requieren al menos [gb] GB de espacio libre en el disco. -DiskSpaceMBLabel=Se requieren al menos [mb] MB de espacio libre en el disco. -CannotInstallToNetworkDrive=El programa de instalacin no puede realizar la instalacin en una unidad de red. -CannotInstallToUNCPath=El programa de instalacin no puede realizar la instalacin en una ruta de acceso UNC. -InvalidPath=Debe introducir una ruta completa con la letra de la unidad; por ejemplo:%n%nC:\APP%n%no una ruta de acceso UNC de la siguiente forma:%n%n\\servidor\compartido -InvalidDrive=La unidad o ruta de acceso UNC que seleccion no existe o no es accesible. Por favor, seleccione otra. -DiskSpaceWarningTitle=Espacio Insuficiente en Disco -DiskSpaceWarning=La instalacin requiere al menos %1 KB de espacio libre, pero la unidad seleccionada slo cuenta con %2 KB disponibles.%n%nDesea continuar de todas formas? -DirNameTooLong=El nombre de la carpeta o la ruta son demasiado largos. -InvalidDirName=El nombre de la carpeta no es vlido. -BadDirName32=Los nombres de carpetas no pueden incluir los siguientes caracteres:%n%n%1 -DirExistsTitle=La Carpeta Ya Existe -DirExists=La carpeta:%n%n%1%n%nya existe. Desea realizar la instalacin en esa carpeta de todas formas? -DirDoesntExistTitle=La Carpeta No Existe -DirDoesntExist=La carpeta:%n%n%1%n%nno existe. Desea crear esa carpeta? - -; *** "Select Components" wizard page -WizardSelectComponents=Seleccione los Componentes -SelectComponentsDesc=Qu componentes deben instalarse? -SelectComponentsLabel2=Seleccione los componentes que desea instalar y desmarque los componentes que no desea instalar. Haga clic en Siguiente cuando est listo para continuar. -FullInstallation=Instalacin Completa -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation=Instalacin Compacta -CustomInstallation=Instalacin Personalizada -NoUninstallWarningTitle=Componentes Encontrados -NoUninstallWarning=El programa de instalacin ha detectado que los siguientes componentes ya estn instalados en su sistema:%n%n%1%n%nDesmarcar estos componentes no los desinstalar.%n%nDesea continuar de todos modos? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=La seleccin actual requiere al menos [gb] GB de espacio en disco. -ComponentsDiskSpaceMBLabel=La seleccin actual requiere al menos [mb] MB de espacio en disco. - -; *** "Select Additional Tasks" wizard page -WizardSelectTasks=Seleccione las Tareas Adicionales -SelectTasksDesc=Qu tareas adicionales deben realizarse? -SelectTasksLabel2=Seleccione las tareas adicionales que desea que se realicen durante la instalacin de [name] y haga clic en Siguiente. - -; *** "Select Start Menu Folder" wizard page -WizardSelectProgramGroup=Seleccione la Carpeta del Men Inicio -SelectStartMenuFolderDesc=Dnde deben colocarse los accesos directos del programa? -SelectStartMenuFolderLabel3=El programa de instalacin crear los accesos directos del programa en la siguiente carpeta del Men Inicio. -SelectStartMenuFolderBrowseLabel=Para continuar, haga clic en Siguiente. Si desea seleccionar una carpeta distinta, haga clic en Examinar. -MustEnterGroupName=Debe proporcionar un nombre de carpeta. -GroupNameTooLong=El nombre de la carpeta o la ruta son demasiado largos. -InvalidGroupName=El nombre de la carpeta no es vlido. -BadGroupName=El nombre de la carpeta no puede incluir ninguno de los siguientes caracteres:%n%n%1 -NoProgramGroupCheck2=&No crear una carpeta en el Men Inicio - -; *** "Ready to Install" wizard page -WizardReady=Listo para Instalar -ReadyLabel1=Ahora el programa est listo para iniciar la instalacin de [name] en su sistema. -ReadyLabel2a=Haga clic en Instalar para continuar con el proceso o haga clic en Atrs si desea revisar o cambiar alguna configuracin. -ReadyLabel2b=Haga clic en Instalar para continuar con el proceso. -ReadyMemoUserInfo=Informacin del usuario: -ReadyMemoDir=Carpeta de Destino: -ReadyMemoType=Tipo de Instalacin: -ReadyMemoComponents=Componentes Seleccionados: -ReadyMemoGroup=Carpeta del Men Inicio: -ReadyMemoTasks=Tareas Adicionales: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Descargando archivos adicionales... -ButtonStopDownload=&Detener descarga -StopDownload=Est seguiro que desea detener la descarga? -ErrorDownloadAborted=Descarga cancelada -ErrorDownloadFailed=Fall descarga: %1 %2 -ErrorDownloadSizeFailed=Fall obtencin de tamao: %1 %2 -ErrorFileHash1=Fall hash del archivo: %1 -ErrorFileHash2=Hash de archivo no vlido: esperado %1, encontrado %2 -ErrorProgress=Progreso no vlido: %1 de %2 -ErrorFileSize=Tamao de archivo no vlido: esperado %1, encontrado %2 - -; *** "Preparing to Install" wizard page -WizardPreparing=Preparndose para Instalar -PreparingDesc=El programa de instalacin est preparndose para instalar [name] en su sistema. -PreviousInstallNotCompleted=La instalacin/desinstalacin previa de un programa no se complet. Deber reiniciar el sistema para completar esa instalacin.%n%nUna vez reiniciado el sistema, ejecute el programa de instalacin nuevamente para completar la instalacin de [name]. -CannotContinue=El programa de instalacin no puede continuar. Por favor, presione Cancelar para salir. -ApplicationsFound=Las siguientes aplicaciones estn usando archivos que necesitan ser actualizados por el programa de instalacin. Se recomienda que permita al programa de instalacin cerrar automticamente estas aplicaciones. -ApplicationsFound2=Las siguientes aplicaciones estn usando archivos que necesitan ser actualizados por el programa de instalacin. Se recomienda que permita al programa de instalacin cerrar automticamente estas aplicaciones. Al completarse la instalacin, el programa de instalacin intentar reiniciar las aplicaciones. -CloseApplications=&Cerrar automticamente las aplicaciones -DontCloseApplications=&No cerrar las aplicaciones -ErrorCloseApplications=El programa de instalacin no pudo cerrar de forma automtica todas las aplicaciones. Se recomienda que, antes de continuar, cierre todas las aplicaciones que utilicen archivos que necesitan ser actualizados por el programa de instalacin. -PrepareToInstallNeedsRestart=El programa de instalacin necesita reiniciar el sistema. Una vez que se haya reiniciado ejecute nuevamente el programa de instalacin para completar la instalacin de [name].%n%nDesea reiniciar el sistema ahora? - -; *** "Installing" wizard page -WizardInstalling=Instalando -InstallingLabel=Por favor, espere mientras se instala [name] en su sistema. - -; *** "Setup Completed" wizard page -FinishedHeadingLabel=Completando la instalacin de [name] -FinishedLabelNoIcons=El programa complet la instalacin de [name] en su sistema. -FinishedLabel=El programa complet la instalacin de [name] en su sistema. Puede ejecutar la aplicacin utilizando los accesos directos creados. -ClickFinish=Haga clic en Finalizar para salir del programa de instalacin. -FinishedRestartLabel=Para completar la instalacin de [name], su sistema debe reiniciarse. Desea reiniciarlo ahora? -FinishedRestartMessage=Para completar la instalacin de [name], su sistema debe reiniciarse.%n%nDesea reiniciarlo ahora? -ShowReadmeCheck=S, deseo ver el archivo LAME -YesRadio=&S, deseo reiniciar el sistema ahora -NoRadio=&No, reiniciar el sistema ms tarde -; used for example as 'Run MyProg.exe' -RunEntryExec=Ejecutar %1 -; used for example as 'View Readme.txt' -RunEntryShellExec=Ver %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle=El Programa de Instalacin Necesita el Siguiente Disco -SelectDiskLabel2=Por favor, inserte el Disco %1 y haga clic en Aceptar.%n%nSi los archivos pueden ser hallados en una carpeta diferente a la indicada abajo, introduzca la ruta correcta o haga clic en Examinar. -PathLabel=&Ruta: -FileNotInDir2=El archivo "%1" no se ha podido hallar en "%2". Por favor, inserte el disco correcto o seleccione otra carpeta. -SelectDirectoryLabel=Por favor, especifique la ubicacin del siguiente disco. - -; *** Installation phase messages -SetupAborted=La instalacin no se ha completado.%n%nPor favor solucione el problema y ejecute nuevamente el programa de instalacin. -AbortRetryIgnoreSelectAction=Seleccione accin -AbortRetryIgnoreRetry=&Reintentar -AbortRetryIgnoreIgnore=&Ignorar el error y continuar -AbortRetryIgnoreCancel=Cancelar instalacin - -; *** Installation status messages -StatusClosingApplications=Cerrando aplicaciones... -StatusCreateDirs=Creando carpetas... -StatusExtractFiles=Extrayendo archivos... -StatusCreateIcons=Creando accesos directos... -StatusCreateIniEntries=Creando entradas INI... -StatusCreateRegistryEntries=Creando entradas de registro... -StatusRegisterFiles=Registrando archivos... -StatusSavingUninstall=Guardando informacin para desinstalar... -StatusRunProgram=Terminando la instalacin... -StatusRestartingApplications=Reiniciando aplicaciones... -StatusRollback=Deshaciendo cambios... - -; *** Misc. errors -ErrorInternal2=Error interno: %1 -ErrorFunctionFailedNoCode=%1 fall -ErrorFunctionFailed=%1 fall; cdigo %2 -ErrorFunctionFailedWithMessage=%1 fall; cdigo %2.%n%3 -ErrorExecutingProgram=Imposible ejecutar el archivo:%n%1 - -; *** Registry errors -ErrorRegOpenKey=Error al abrir la clave del registro:%n%1\%2 -ErrorRegCreateKey=Error al crear la clave del registro:%n%1\%2 -ErrorRegWriteKey=Error al escribir la clave del registro:%n%1\%2 - -; *** INI errors -ErrorIniEntry=Error al crear entrada INI en el archivo "%1". - -; *** File copying errors -FileAbortRetryIgnoreSkipNotRecommended=&Omitir este archivo (no recomendado) -FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar el error y continuar (no recomendado) -SourceIsCorrupted=El archivo de origen est daado -SourceDoesntExist=El archivo de origen "%1" no existe -ExistingFileReadOnly2=El archivo existente no puede ser reemplazado debido a que est marcado como slo-lectura. -ExistingFileReadOnlyRetry=&Elimine el atributo de slo-lectura y reintente -ExistingFileReadOnlyKeepExisting=&Mantener el archivo existente -ErrorReadingExistingDest=Ocurri un error mientras se intentaba leer el archivo: -FileExistsSelectAction=Seleccione accin -FileExists2=El archivo ya existe. -FileExistsOverwriteExisting=&Sobreescribir el archivo existente -FileExistsKeepExisting=&Mantener el archivo existente -FileExistsOverwriteOrKeepAll=&Hacer lo mimso para lo siguientes conflictos -ExistingFileNewerSelectAction=Seleccione accin -ExistingFileNewer2=El archivo existente es ms reciente que el que se est tratando de instalar. -ExistingFileNewerOverwriteExisting=&Sobreescribir el archivo existente -ExistingFileNewerKeepExisting=&Mantener el archivo existente (recomendado) -ExistingFileNewerOverwriteOrKeepAll=&Hacer lo mimso para lo siguientes conflictos -ErrorChangingAttr=Ocurri un error al intentar cambiar los atributos del archivo: -ErrorCreatingTemp=Ocurri un error al intentar crear un archivo en la carpeta de destino: -ErrorReadingSource=Ocurri un error al intentar leer el archivo de origen: -ErrorCopying=Ocurri un error al intentar copiar el archivo: -ErrorReplacingExistingFile=Ocurri un error al intentar reemplazar el archivo existente: -ErrorRestartReplace=Fall reintento de reemplazar: -ErrorRenamingTemp=Ocurri un error al intentar renombrar un archivo en la carpeta de destino: -ErrorRegisterServer=Imposible registrar el DLL/OCX: %1 -ErrorRegSvr32Failed=RegSvr32 fall con el cdigo de salida %1 -ErrorRegisterTypeLib=Imposible registrar la librera de tipos: %1 - -; *** Uninstall display name markings -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32-bit -UninstallDisplayNameMark64Bit=64-bit -UninstallDisplayNameMarkAllUsers=Todos los usuarios -UninstallDisplayNameMarkCurrentUser=Usuario actual - -; *** Post-installation errors -ErrorOpeningReadme=Ocurri un error al intentar abrir el archivo LAME. -ErrorRestartingComputer=El programa de instalacin no pudo reiniciar el equipo. Por favor, hgalo manualmente. - -; *** Uninstaller messages -UninstallNotFound=El archivo "%1" no existe. Imposible desinstalar. -UninstallOpenError=El archivo "%1" no pudo ser abierto. Imposible desinstalar -UninstallUnsupportedVer=El archivo de registro para desinstalar "%1" est en un formato no reconocido por esta versin del desinstalador. Imposible desinstalar -UninstallUnknownEntry=Se encontr una entrada desconocida (%1) en el registro de desinstalacin -ConfirmUninstall=Est seguro que desea desinstalar completamente %1 y todos sus componentes? -UninstallOnlyOnWin64=Este programa slo puede ser desinstalado en Windows de 64-bits. -OnlyAdminCanUninstall=Este programa slo puede ser desinstalado por un usuario con privilegios administrativos. -UninstallStatusLabel=Por favor, espere mientras %1 es desinstalado de su sistema. -UninstalledAll=%1 se desinstal satisfactoriamente de su sistema. -UninstalledMost=La desinstalacin de %1 ha sido completada.%n%nAlgunos elementos no pudieron eliminarse, pero podr eliminarlos manualmente si lo desea. -UninstalledAndNeedsRestart=Para completar la desinstalacin de %1, su sistema debe reiniciarse.%n%nDesea reiniciarlo ahora? -UninstallDataCorrupted=El archivo "%1" est daado. No puede desinstalarse - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle=Eliminar Archivo Compartido? -ConfirmDeleteSharedFile2=El sistema indica que el siguiente archivo compartido no es utilizado por ningn otro programa. Desea eliminar este archivo compartido?%n%nSi elimina el archivo y hay programas que lo utilizan, esos programas podran dejar de funcionar correctamente. Si no est seguro, elija No. Dejar el archivo en su sistema no producir ningn dao. -SharedFileNameLabel=Archivo: -SharedFileLocationLabel=Ubicacin: -WizardUninstalling=Estado de la Desinstalacin -StatusUninstalling=Desinstalando %1... - -; *** Shutdown block reasons -ShutdownBlockReasonInstallingApp=Instalando %1. -ShutdownBlockReasonUninstallingApp=Desinstalando %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 versin %2 -AdditionalIcons=Accesos directos adicionales: -CreateDesktopIcon=Crear un acceso directo en el &escritorio -CreateQuickLaunchIcon=Crear un acceso directo en &Inicio Rpido -ProgramOnTheWeb=%1 en la Web -UninstallProgram=Desinstalar %1 -LaunchProgram=Ejecutar %1 -AssocFileExtension=&Asociar %1 con la extensin de archivo %2 -AssocingFileExtension=Asociando %1 con la extensin de archivo %2... -AutoStartProgramGroupDescription=Inicio: -AutoStartProgram=Iniciar automticamente %1 -AddonHostProgramNotFound=%1 no pudo ser localizado en la carpeta seleccionada.%n%nDesea continuar de todas formas? diff --git a/Dependencies/Inno/Languages/Turkish.isl b/Dependencies/Inno/Languages/Turkish.isl deleted file mode 100644 index 932c705b..00000000 --- a/Dependencies/Inno/Languages/Turkish.isl +++ /dev/null @@ -1,384 +0,0 @@ -; *** Inno Setup version 6.1.0+ Turkish messages *** -; Language "Turkce" Turkish Translate by "Ceviren" Kaya Zeren translator@zeron.net -; To download user-contributed translations of this file, go to: -; https://www.jrsoftware.org/files/istrans/ -; -; Note: When translating this text, do not add periods (.) to the end of -; messages that didn't have them already, because on those messages Inno -; Setup adds the periods automatically (appending a period would result in -; two periods being displayed). - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=T<00FC>rk<00E7>e -LanguageID=$041f -LanguageCodePage=1254 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** Uygulama balklar -SetupAppTitle=Kurulum Yardmcs -SetupWindowTitle=%1 - Kurulum Yardmcs -UninstallAppTitle=Kaldrma Yardmcs -UninstallAppFullTitle=%1 Kaldrma Yardmcs - -; *** eitli ortak metinler -InformationTitle=Bilgi -ConfirmTitle=Onay -ErrorTitle=Hata - -; *** Kurulum ykleyici iletileri -SetupLdrStartupMessage=%1 uygulamas kurulacak. Devam etmek istiyor musunuz? -LdrCannotCreateTemp=Geici dosya oluturulamadndan kurulum iptal edildi -LdrCannotExecTemp=Geici klasrdeki dosya altrlamadndan kurulum iptal edildi -HelpTextNote= - -; *** Balang hata iletileri -LastErrorMessage=%1.%n%nHata %2: %3 -SetupFileMissing=Kurulum klasrnde %1 dosyas eksik. Ltfen sorunu zn ya da uygulamann yeni bir kopyasyla yeniden deneyin. -SetupFileCorrupt=Kurulum dosyalar bozulmu. Ltfen uygulamann yeni bir kopyasyla yeniden kurmay deneyin. -SetupFileCorruptOrWrongVer=Kurulum dosyalar bozulmu ya da bu kurulum yardmcs srm ile uyumlu deil. Ltfen sorunu zn ya da uygulamann yeni bir kopyasyla yeniden kurmay deneyin. -InvalidParameter=Komut satrnda geersiz bir parametre yazlm:%n%n%1 -SetupAlreadyRunning=Kurulum yardmcs zaten alyor. -WindowsVersionNotSupported=Bu uygulama, bilgisayarnzda ykl olan Windows srm ile uyumlu deil. -WindowsServicePackRequired=Bu uygulama, %1 Hizmet Paketi %2 ve zerindeki srmler ile alr. -NotOnThisPlatform=Bu uygulama, %1 zerinde almaz. -OnlyOnThisPlatform=Bu uygulama, %1 zerinde altrlmaldr. -OnlyOnTheseArchitectures=Bu uygulama, yalnz u ilemci mimarileri iin tasarlanm Windows srmleriyle alr:%n%n%1 -WinVersionTooLowError=Bu uygulama iin %1 srm %2 ya da zeri gereklidir. -WinVersionTooHighError=Bu uygulama, '%1' srm '%2' ya da zerine kurulamaz. -AdminPrivilegesRequired=Bu uygulamay kurmak iin Ynetici olarak oturum alm olmas gereklidir. -PowerUserPrivilegesRequired=Bu uygulamay kurarken, Ynetici ya da Gl Kullanclar grubunun bir yesi olarak oturum alm olmas gereklidir. -SetupAppRunningError=Kurulum yardmcs %1 uygulamasnn almakta olduunu alglad.%n%nLtfen uygulamann alan tm kopyalarn kapatp, devam etmek iin Tamam, kurulum yardmcsndan kmak iin ptal zerine tklayn. -UninstallAppRunningError=Kaldrma yardmcs, %1 uygulamasnn almakta olduunu alglad.%n%nLtfen uygulamann alan tm kopyalarn kapatp, devam etmek iin Tamam ya da kaldrma yardmcsndan kmak iin ptal zerine tklayn. - -; *** Balang sorular -PrivilegesRequiredOverrideTitle=Kurulum Kipini Sein -PrivilegesRequiredOverrideInstruction=Kurulum kipini sein -PrivilegesRequiredOverrideText1=%1 tm kullanclar iin (ynetici izinleri gerekir) ya da yalnz sizin hesabnz iin kurulabilir. -PrivilegesRequiredOverrideText2=%1 yalnz sizin hesabnz iin ya da tm kullanclar iin (ynetici izinleri gerekir) kurulabilir. -PrivilegesRequiredOverrideAllUsers=&Tm kullanclar iin kurulsun -PrivilegesRequiredOverrideAllUsersRecommended=&Tm kullanclar iin kurulsun (nerilir) -PrivilegesRequiredOverrideCurrentUser=&Yalnz benim kullancm iin kurulsun -PrivilegesRequiredOverrideCurrentUserRecommended=&Yalnz benim kullancm iin kurulsun (nerilir) - -; *** eitli hata metinleri -ErrorCreatingDir=Kurulum yardmcs "%1" klasrn oluturamad. -ErrorTooManyFilesInDir="%1" klasr iinde ok sayda dosya olduundan bir dosya oluturulamad - -; *** Ortak kurulum iletileri -ExitSetupTitle=Kurulum Yardmcsndan k -ExitSetupMessage=Kurulum tamamlanmad. imdi karsanz, uygulama kurulmayacak.%n%nKurulumu tamamlamak iin istediiniz zaman kurulum yardmcsn yeniden altrabilirsiniz.%n%nKurulum yardmcsndan klsn m? -AboutSetupMenuItem=Kurulum H&akknda... -AboutSetupTitle=Kurulum Hakknda -AboutSetupMessage=%1 %2 srm%n%3%n%n%1 ana sayfa:%n%4 -AboutSetupNote= -TranslatorNote= - -; *** Dmeler -ButtonBack=< &nceki -ButtonNext=&Sonraki > -ButtonInstall=&Kur -ButtonOK=Tamam -ButtonCancel=ptal -ButtonYes=E&vet -ButtonYesToAll=&Tmne Evet -ButtonNo=&Hayr -ButtonNoToAll=Tmne Ha&yr -ButtonFinish=&Bitti -ButtonBrowse=&Gzat... -ButtonWizardBrowse=Gza&t... -ButtonNewFolder=Ye&ni Klasr Olutur - -; *** "Kurulum Dilini Sein" sayfas iletileri -SelectLanguageTitle=Kurulum Yardmcs Dilini Sein -SelectLanguageLabel=Kurulum sresince kullanlacak dili sein. - -; *** Ortak metinler -ClickNext=Devam etmek iin Sonraki, kmak iin ptal zerine tklayn. -BeveledLabel= -BrowseDialogTitle=Klasre Gzat -BrowseDialogLabel=Aadaki listeden bir klasr seip, Tamam zerine tklayn. -NewFolderName=Yeni Klasr - -; *** "Ho geldiniz" sayfas -WelcomeLabel1=[name] Kurulum Yardmcsna Hogeldiniz. -WelcomeLabel2=Bilgisayarnza [name/ver] uygulamas kurulacak.%n%nDevam etmeden nce alan dier tm uygulamalar kapatmanz nerilir. - -; *** "Parola" sayfas -WizardPassword=Parola -PasswordLabel1=Bu kurulum parola korumaldr. -PasswordLabel3=Ltfen parolay yazn ve devam etmek iin Sonraki zerine tklayn. Parolalar byk kk harflere duyarldr. -PasswordEditLabel=&Parola: -IncorrectPassword=Yazdnz parola doru deil. Ltfen yeniden deneyin. - -; *** "Lisans Anlamas" sayfas -WizardLicense=Lisans Anlamas -LicenseLabel=Ltfen devam etmeden nce aadaki nemli bilgileri okuyun. -LicenseLabel3=Ltfen Aadaki Lisans Anlamasn okuyun. Kuruluma devam edebilmek iin bu anlamay kabul etmelisiniz. -LicenseAccepted=Anlamay kabul &ediyorum. -LicenseNotAccepted=Anlamay kabul et&miyorum. - -; *** "Bilgiler" sayfas -WizardInfoBefore=Bilgiler -InfoBeforeLabel=Ltfen devam etmeden nce aadaki nemli bilgileri okuyun. -InfoBeforeClickLabel=Kuruluma devam etmeye hazr olduunuzda Sonraki zerine tklayn. -WizardInfoAfter=Bilgiler -InfoAfterLabel=Ltfen devam etmeden nce aadaki nemli bilgileri okuyun. -InfoAfterClickLabel=Kuruluma devam etmeye hazr olduunuzda Sonraki zerine tklayn. - -; *** "Kullanc Bilgileri" sayfas -WizardUserInfo=Kullanc Bilgileri -UserInfoDesc=Ltfen bilgilerinizi yazn. -UserInfoName=K&ullanc Ad: -UserInfoOrg=Ku&rum: -UserInfoSerial=&Seri Numaras: -UserInfoNameRequired=Bir ad yazmalsnz. - -; *** "Hedef Konumunu Sein" sayfas -WizardSelectDir=Hedef Konumunu Sein -SelectDirDesc=[name] nereye kurulsun? -SelectDirLabel3=[name] uygulamas u klasre kurulacak. -SelectDirBrowseLabel=Devam etmek icin Sonraki zerine tklayn. Farkl bir klasr semek iin Gzat zerine tklayn. -DiskSpaceGBLabel=En az [gb] GB bo disk alan gereklidir. -DiskSpaceMBLabel=En az [mb] MB bo disk alan gereklidir. -CannotInstallToNetworkDrive=Uygulama bir a srcs zerine kurulamaz. -CannotInstallToUNCPath=Uygulama bir UNC yolu zerine (\\yol gibi) kurulamaz. -InvalidPath=Src ad ile tam yolu yazmalsnz; rnein: %n%nC:\APP%n%n ya da u ekilde bir UNC yolu:%n%n\\sunucu\paylam -InvalidDrive=Src ya da UNC paylam yok ya da eriilemiyor. Ltfen baka bir tane sein. -DiskSpaceWarningTitle=Yeterli Bo Disk Alan Yok -DiskSpaceWarning=Kurulum iin %1 KB bo alan gerekli, ancak seilmi srcde yalnz %2 KB bo alan var.%n%nGene de devam etmek istiyor musunuz? -DirNameTooLong=Klasr ad ya da yol ok uzun. -InvalidDirName=Klasr ad geersiz. -BadDirName32=Klasr adlarnda u karakterler bulunamaz:%n%n%1 -DirExistsTitle=Klasr Zaten Var" -DirExists=Klasr:%n%n%1%n%zaten var. Kurulum iin bu klasr kullanmak ister misiniz? -DirDoesntExistTitle=Klasr Bulunamad -DirDoesntExist=Klasr:%n%n%1%n%nbulunamad.Klasrn oluturmasn ister misiniz? - -; *** "Bileenleri Sein" sayfas -WizardSelectComponents=Bileenleri Sein -SelectComponentsDesc=Hangi bileenler kurulacak? -SelectComponentsLabel2=Kurmak istediiniz bileenleri sein; kurmak istemediiniz bileenlerin iaretini kaldrn. Devam etmeye hazr olduunuzda Sonraki zerine tklayn. -FullInstallation=Tam Kurulum -; Mmknse 'Compact' ifadesini kendi dilinizde 'Minimal' anlamnda evirmeyin -CompactInstallation=Normal kurulum -CustomInstallation=zel kurulum -NoUninstallWarningTitle=Bileenler Zaten Var -NoUninstallWarning=u bileenlerin bilgisayarnzda zaten kurulu olduu algland:%n%n%1%n%n Bu bileenlerin iaretlerinin kaldrlmas bileenleri kaldrmaz.%n%nGene de devam etmek istiyor musunuz? -ComponentSize1=%1 KB -ComponentSize2=%1 MB -ComponentsDiskSpaceGBLabel=Seili bileenler iin diskte en az [gb] GB bo alan bulunmas gerekli. -ComponentsDiskSpaceMBLabel=Seili bileenler iin diskte en az [mb] MB bo alan bulunmas gerekli. - -; *** "Ek lemleri Sein" sayfas -WizardSelectTasks=Ek lemleri Sein -SelectTasksDesc=Baka hangi ilemler yaplsn? -SelectTasksLabel2=[name] kurulumu srasnda yaplmasn istediiniz ek ileri sein ve Sonraki zerine tklayn. - -; *** "Balat Mens Klasrn Sein" sayfas -WizardSelectProgramGroup=Balat Mens Klasrn Sein -SelectStartMenuFolderDesc=Uygulamann ksayollar nereye eklensin? -SelectStartMenuFolderLabel3=Kurulum yardmcs uygulama ksayollarn aadaki Balat Mens klasrne ekleyecek. -SelectStartMenuFolderBrowseLabel=Devam etmek iin Sonraki zerine tklayn. Farkl bir klasr semek iin Gzat zerine tklayn. -MustEnterGroupName=Bir klasr ad yazmalsnz. -GroupNameTooLong=Klasr ad ya da yol ok uzun. -InvalidGroupName=Klasr ad geersiz. -BadGroupName=Klasr adnda u karakterler bulunamaz:%n%n%1 -NoProgramGroupCheck2=Balat Mens klasr &oluturulmasn - -; *** "Kurulmaya Hazr" sayfas -WizardReady=Kurulmaya Hazr -ReadyLabel1=[name] bilgisayarnza kurulmaya hazr. -ReadyLabel2a=Kuruluma devam etmek iin Sonraki zerine, ayarlar gzden geirip deitirmek iin nceki zerine tklayn. -ReadyLabel2b=Kuruluma devam etmek iin Sonraki zerine tklayn. -ReadyMemoUserInfo=Kullanc bilgileri: -ReadyMemoDir=Hedef konumu: -ReadyMemoType=Kurulum tr: -ReadyMemoComponents=Seilmi bileenler: -ReadyMemoGroup=Balat Mens klasr: -ReadyMemoTasks=Ek ilemler: - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel=Ek dosyalar indiriliyor... -ButtonStopDownload=ndirmeyi &durdur -StopDownload=ndirmeyi durdurmak istediinize emin misiniz? -ErrorDownloadAborted=ndirme durduruldu -ErrorDownloadFailed=ndirilemedi: %1 %2 -ErrorDownloadSizeFailed=Boyut alnamad: %1 %2 -ErrorFileHash1=Dosya karmas dorulanamad: %1 -ErrorFileHash2=Dosya karmas geersiz: %1 olmas gerekirken %2 -ErrorProgress=Adm geersiz: %1 / %2 -ErrorFileSize=Dosya boyutu geersiz: %1 olmas gerekirken %2 - -; *** "Kuruluma Hazrlanlyor" sayfas -WizardPreparing=Kuruluma Hazrlanlyor -PreparingDesc=[name] bilgisayarnza kurulmaya hazrlanyor. -PreviousInstallNotCompleted=nceki uygulama kurulumu ya da kaldrlmas tamamlanmam. Bu kurulumun tamamlanmas iin bilgisayarnz yeniden balatmalsnz.%n%nBilgisayarnz yeniden balattktan sonra ilemi tamamlamak iin [name] kurulum yardmcsn yeniden altrn. -CannotContinue=Kuruluma devam edilemiyor. kmak iin ptal zerine tklayn. -ApplicationsFound=Kurulum yardmcs tarafndan gncellenmesi gereken dosyalar, u uygulamalar tarafndan kullanyor. Kurulum yardmcsnn bu uygulamalar otomatik olarak kapatmasna izin vermeniz nerilir. -ApplicationsFound2=Kurulum yardmcs tarafndan gncellenmesi gereken dosyalar, u uygulamalar tarafndan kullanyor. Kurulum yardmcsnn bu uygulamalar otomatik olarak kapatmasna izin vermeniz nerilir. Kurulum tamamlandktan sonra, uygulamalar yeniden balatlmaya allacak. -CloseApplications=&Uygulamalar kapatlsn -DontCloseApplications=Uygulamalar &kapatlmasn -ErrorCloseApplications=Kurulum yardmcs uygulamalar kapatamad. Kurulum yardmcs tarafndan gncellenmesi gereken dosyalar kullanan uygulamalar el ile kapatmanz nerilir. -PrepareToInstallNeedsRestart=Kurulum iin bilgisayarn yeniden balatlmas gerekiyor. Bilgisayar yeniden balattktan sonra [name] kurulumunu tamamlamak iin kurulum yardmcsn yeniden altrn.%n%nBilgisayar imdi yeniden balatmak ister misiniz? - -; *** "Kuruluyor" sayfas -WizardInstalling=Kuruluyor -InstallingLabel=Ltfen [name] bilgisayarnza kurulurken bekleyin. - -; *** "Kurulum Tamamland" sayfas -FinishedHeadingLabel=[name] kurulum yardmcs tamamlanyor -FinishedLabelNoIcons=Bilgisayarnza [name] kurulumu tamamland. -FinishedLabel=Bilgisayarnza [name] kurulumu tamamland. Simgeleri yklemeyi setiyseniz, simgelere tklayarak uygulamay balatabilirsiniz. -ClickFinish=Kurulum yardmcsndan kmak iin Bitti zerine tklayn. -FinishedRestartLabel=[name] kurulumunun tamamlanmas iin, bilgisayarnz yeniden balatlmal. imdi yeniden balatmak ister misiniz? -FinishedRestartMessage=[name] kurulumunun tamamlanmas iin, bilgisayarnz yeniden balatlmal.%n%nimdi yeniden balatmak ister misiniz? -ShowReadmeCheck=Evet README dosyas grntlensin -YesRadio=&Evet, bilgisayar imdi yeniden balatlsn -NoRadio=&Hayr, bilgisayar daha sonra yeniden balatacam -; used for example as 'Run MyProg.exe' -RunEntryExec=%1 altrlsn -; used for example as 'View Readme.txt' -RunEntryShellExec=%1 grntlensin - -; *** "Kurulum iin Sradaki Disk Gerekli" iletileri -ChangeDiskTitle=Kurulum Yardmcs Sradaki Diske Gerek Duyuyor -SelectDiskLabel2=Ltfen %1 numaral diski takp Tamam zerine tklayn.%n%nDiskteki dosyalar aadakinden farkl bir klasrde bulunuyorsa, doru yolu yazn ya da Gzat zerine tklayarak doru klasr sein. -PathLabel=&Yol: -FileNotInDir2="%1" dosyas "%2" iinde bulunamad. Ltfen doru diski takn ya da baka bir klasr sein. -SelectDirectoryLabel=Ltfen sonraki diskin konumunu belirtin. - -; *** Kurulum aamas iletileri -SetupAborted=Kurulum tamamlanamad.%n%nLtfen sorunu dzelterek kurulum yardmcsn yeniden altrn. -AbortRetryIgnoreSelectAction=Yaplacak ilemi sein -AbortRetryIgnoreRetry=&Yeniden denensin -AbortRetryIgnoreIgnore=&Sorun yok saylp devam edilsin -AbortRetryIgnoreCancel=Kurulum iptal edilsin - -; *** Kurulum durumu iletileri -StatusClosingApplications=Uygulamalar kapatlyor... -StatusCreateDirs=Klasrler oluturuluyor... -StatusExtractFiles=Dosyalar ayklanyor... -StatusCreateIcons=Ksayollar oluturuluyor... -StatusCreateIniEntries=INI kaytlar oluturuluyor... -StatusCreateRegistryEntries=Kayt Defteri kaytlar oluturuluyor... -StatusRegisterFiles=Dosyalar kaydediliyor... -StatusSavingUninstall=Kaldrma bilgileri kaydediliyor... -StatusRunProgram=Kurulum tamamlanyor... -StatusRestartingApplications=Uygulamalar yeniden balatlyor... -StatusRollback=Deiiklikler geri alnyor... - -; *** eitli hata iletileri -ErrorInternal2= hata: %1 -ErrorFunctionFailedNoCode=%1 tamamlanamad. -ErrorFunctionFailed=%1 tamamlanamad; kod %2 -ErrorFunctionFailedWithMessage=%1 tamamlanamad; kod %2.%n%3 -ErrorExecutingProgram=u dosya yrtlemedi:%n%1 - -; *** Kayt defteri hatalar -ErrorRegOpenKey=Kayt defteri anahtar alrken bir sorun kt:%n%1%2 -ErrorRegCreateKey=Kayt defteri anahtar eklenirken bir sorun kt:%n%1%2 -ErrorRegWriteKey=Kayt defteri anahtar yazlrken bir sorun kt:%n%1%2 - -; *** INI hatalar -ErrorIniEntry="%1" dosyasna INI kayd eklenirken bir sorun kt. - -; *** Dosya kopyalama hatalar -FileAbortRetryIgnoreSkipNotRecommended=&Bu dosya atlansn (nerilmez) -FileAbortRetryIgnoreIgnoreNotRecommended=&Sorun yok saylp devam edilsin (nerilmez) -SourceIsCorrupted=Kaynak dosya bozulmu -SourceDoesntExist="%1" kaynak dosyas bulunamad -ExistingFileReadOnly2=Var olan dosya salt okunabilir olarak iaretlenmi olduundan zerine yazlamad. -ExistingFileReadOnlyRetry=&Salt okunur iareti kaldrlp yeniden denensin -ExistingFileReadOnlyKeepExisting=&Var olan dosya korunsun -ErrorReadingExistingDest=Var olan dosya okunmaya allrken bir sorun kt. -FileExistsSelectAction=Yaplacak ilemi sein -FileExists2=Dosya zaten var. -FileExistsOverwriteExisting=&Var olan dosyann zerine yazlsn -FileExistsKeepExisting=Var &olan dosya korunsun -FileExistsOverwriteOrKeepAll=&Sonraki akmalarda da bu ilem yaplsn -ExistingFileNewerSelectAction=Yaplacak ilemi sein -ExistingFileNewer2=Var olan dosya, kurulum yardmcs tarafndan yazlmaya allandan daha yeni. -ExistingFileNewerOverwriteExisting=&Var olan dosyann zerine yazlsn -ExistingFileNewerKeepExisting=Var &olan dosya korunsun (nerilir) -ExistingFileNewerOverwriteOrKeepAll=&Sonraki akmalarda bu ilem yaplsn -ErrorChangingAttr=Var olan dosyann znitelikleri deitirilirken bir sorun kt: -ErrorCreatingTemp=Hedef klasrde bir dosya oluturulurken bir sorun kt: -ErrorReadingSource=Kaynak dosya okunurken bir sorun kt: -ErrorCopying=Dosya kopyalanrken bir sorun kt: -ErrorReplacingExistingFile=Var olan dosya deitirilirken bir sorun kt: -ErrorRestartReplace=Yeniden balatmada zerine yazlamad: -ErrorRenamingTemp=Hedef klasrdeki bir dosyann ad deitirilirken sorun kt: -ErrorRegisterServer=DLL/OCX kayt edilemedi: %1 -ErrorRegSvr32Failed=RegSvr32 ilemi u kod ile tamamlanamad: %1 -ErrorRegisterTypeLib=Tr kitapl kayt defterine eklenemedi: %1 - -; *** Kaldrma srasnda grntlenecek ad iaretleri -; used for example as 'My Program (32-bit)' -UninstallDisplayNameMark=%1 (%2) -; used for example as 'My Program (32-bit, All users)' -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32 bit -UninstallDisplayNameMark64Bit=64 bit -UninstallDisplayNameMarkAllUsers=Tm kullanclar -UninstallDisplayNameMarkCurrentUser=Geerli kullanc - -; *** Kurulum sonras hatalar -ErrorOpeningReadme=README dosyas alrken bir sorun kt. -ErrorRestartingComputer=Kurulum yardmcs bilgisayarnz yeniden balatamyor. Ltfen bilgisayarnz yeniden balatn. - -; *** Kaldrma yardmcs iletileri -UninstallNotFound="%1" dosyas bulunamad. Uygulama kaldrlamyor. -UninstallOpenError="%1" dosyas alamad. Uygulama kaldrlamyor. -UninstallUnsupportedVer="%1" uygulama kaldrma gnlk dosyasnn biimi, bu kaldrma yardmcs srm tarafndan anlalamad. Uygulama kaldrlamyor. -UninstallUnknownEntry=Kaldrma gnlnde bilinmeyen bir kayt (%1) bulundu. -ConfirmUninstall=%1 uygulamasn tm bileenleri ile birlikte tamamen kaldrmak istediinize emin misiniz? -UninstallOnlyOnWin64=Bu kurulum yalnz 64 bit Windows zerinden kaldrlabilir. -OnlyAdminCanUninstall=Bu kurulum yalnz ynetici haklarna sahip bir kullanc tarafndan kaldrlabilir. -UninstallStatusLabel=Ltfen %1 uygulamas bilgisayarnzdan kaldrlrken bekleyin. -UninstalledAll=%1 uygulamas bilgisayarnzdan kaldrld. -UninstalledMost=%1 uygulamas kaldrld.%n%nBaz bileenler kaldrlamad. Bunlar el ile silebilirsiniz. -UninstalledAndNeedsRestart=%1 kaldrma ileminin tamamlanmas iin bilgisayarnzn yeniden balatlmas gerekli.%n%nimdi yeniden balatmak ister misiniz? -UninstallDataCorrupted="%1" dosyas bozulmu. Kaldrlamyor. - -; *** Kaldrma aamas iletileri -ConfirmDeleteSharedFileTitle=Paylalan Dosya Silinsin mi? -ConfirmDeleteSharedFile2=Sisteme gre, paylalan u dosya baka bir uygulama tarafndan kullanlmyor ve kaldrlabilir. Bu paylalm dosyay silmek ister misiniz?%n%nBu dosya, baka herhangi bir uygulama tarafndan kullanlyor ise, silindiinde dier uygulama dzgn almayabilir. Emin deilseniz Hayr zerine tklayn. Dosyay sisteminizde brakmann bir zarar olmaz. -SharedFileNameLabel=Dosya ad: -SharedFileLocationLabel=Konum: -WizardUninstalling=Kaldrma Durumu -StatusUninstalling=%1 kaldrlyor... - -; *** Kapatmay engelleme nedenleri -ShutdownBlockReasonInstallingApp=%1 kuruluyor. -ShutdownBlockReasonUninstallingApp=%1 kaldrlyor. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1 %2 srm -AdditionalIcons=Ek simgeler: -CreateDesktopIcon=Masast simg&esi oluturulsun -CreateQuickLaunchIcon=Hzl Balat simgesi &oluturulsun -ProgramOnTheWeb=%1 Web Sitesi -UninstallProgram=%1 Uygulamasn Kaldr -LaunchProgram=%1 Uygulamasn altr -AssocFileExtension=%1 &uygulamas ile %2 dosya uzants ilikilendirilsin -AssocingFileExtension=%1 uygulamas ile %2 dosya uzants ilikilendiriliyor... -AutoStartProgramGroupDescription=Balang: -AutoStartProgram=%1 otomatik olarak balatlsn -AddonHostProgramNotFound=%1 setiiniz klasrde bulunamad.%n%nYine de devam etmek istiyor musunuz? \ No newline at end of file diff --git a/Dependencies/Inno/Languages/Ukrainian.isl b/Dependencies/Inno/Languages/Ukrainian.isl deleted file mode 100644 index c12c6ebf..00000000 --- a/Dependencies/Inno/Languages/Ukrainian.isl +++ /dev/null @@ -1,385 +0,0 @@ -; *** Inno Setup version 6.1.0+ Ukrainian messages *** -; Author: Dmytro Onyshchuk -; E-Mail: mrlols3@gmail.com -; Please report all spelling/grammar errors, and observations. -; Version 2020.08.04 - -; *** Inno Setup 6.1.0 *** -; : -; E-Mail: mrlols3@gmail.com -; , . -; 2020.08.04 - -[LangOptions] -; The following three entries are very important. Be sure to read and -; understand the '[LangOptions] section' topic in the help file. -LanguageName=<0423><043A><0440><0430><0457><043D><0441><044C><043A><0430> -LanguageID=$0422 -LanguageCodePage=1251 -; If the language you are translating to requires special font faces or -; sizes, uncomment any of the following entries and change them accordingly. -;DialogFontName= -;DialogFontSize=8 -;WelcomeFontName=Verdana -;WelcomeFontSize=12 -;TitleFontName=Arial -;TitleFontSize=29 -;CopyrightFontName=Arial -;CopyrightFontSize=8 - -[Messages] - -; *** -SetupAppTitle= -SetupWindowTitle= %1 -UninstallAppTitle= -UninstallAppFullTitle= %1 - -; *** Misc. common -InformationTitle= -ConfirmTitle=ϳ -ErrorTitle= - -; *** SetupLdr messages -SetupLdrStartupMessage= %1 ', ? -LdrCannotCreateTemp= . -LdrCannotExecTemp= . -HelpTextNote= - -; *** Startup error messages -LastErrorMessage=%1.%n%n %2: %3 -SetupFileMissing= %1 . , . -SetupFileCorrupt= . , . -SetupFileCorruptOrWrongVer= . , . -InvalidParameter= :%n%n%1 -SetupAlreadyRunning= . -WindowsVersionNotSupported= Windows, '. -WindowsServicePackRequired= %1 Service Pack %2 . -NotOnThisPlatform= %1. -OnlyOnThisPlatform= %1. -OnlyOnTheseArchitectures= ' Windows :%n%n%1 -WinVersionTooLowError= %1 %2 . -WinVersionTooHighError= %1 %2 . -AdminPrivilegesRequired= . -PowerUserPrivilegesRequired= . -SetupAppRunningError=, %1 .%n%n , ﳿ OK , . -UninstallAppRunningError=, %1 .%n%n , ﳿ OK , . - -; *** Startup questions -PrivilegesRequiredOverrideTitle= -PrivilegesRequiredOverrideInstruction= -PrivilegesRequiredOverrideText1=%1 ( ), . -PrivilegesRequiredOverrideText2=%1 , ( ). -PrivilegesRequiredOverrideAllUsers= & -PrivilegesRequiredOverrideAllUsersRecommended= & () -PrivilegesRequiredOverrideCurrentUser= -PrivilegesRequiredOverrideCurrentUserRecommended= & () - -; *** г -ErrorCreatingDir= "%1" -ErrorTooManyFilesInDir= "%1", - -; *** -ExitSetupTitle= -ExitSetupMessage= . , .%n%n .%n%n ? -AboutSetupMenuItem=& ... -AboutSetupTitle= -AboutSetupMessage=%1 %2%n%3%n%n%1 :%n%4 -AboutSetupNote= -TranslatorNote=Ukrainian translation by Dmytro Onyshchuk - -; *** -ButtonBack=< & -ButtonNext=& > -ButtonInstall=& -ButtonOK=OK -ButtonCancel= -ButtonYes=& -ButtonYesToAll= & -ButtonNo=&ͳ -ButtonNoToAll=& -ButtonFinish=& -ButtonBrowse=&... -ButtonWizardBrowse=&... -ButtonNewFolder=& - -; *** ij " " -SelectLanguageTitle= -SelectLanguageLabel= , . - -; *** -ClickNext= 볻, , . -BeveledLabel= -BrowseDialogTitle= -BrowseDialogLabel= ʻ. -NewFolderName= - -; *** "" -WelcomeLabel1= [name]. -WelcomeLabel2= [name/ver] .%n%n . - -; *** "" -WizardPassword= -PasswordLabel1= . -PasswordLabel3= , 볻, . . -PasswordEditLabel=&: -IncorrectPassword= . , . - -; *** "˳ " -WizardLicense=˳ -LicenseLabel= , . -LicenseLabel3= , . , . -LicenseAccepted= & -LicenseNotAccepted= & - -; *** "" -WizardInfoBefore= -InfoBeforeLabel= , , . -InfoBeforeClickLabel= , 볻. -WizardInfoAfter= -InfoAfterLabel= , , . -InfoAfterClickLabel= , 볻. - -; *** " " -WizardUserInfo= -UserInfoDesc= , . -UserInfoName=& : -UserInfoOrg=&: -UserInfoSerial=& : -UserInfoNameRequired= '. - -; *** " " -WizardSelectDir= -SelectDirDesc= [name]? -SelectDirLabel3= [name] . -SelectDirBrowseLabel= 볻, . , . -DiskSpaceGBLabel= [gb] . -DiskSpaceMBLabel= [mb] M . -CannotInstallToNetworkDrive= . -CannotInstallToUNCPath= . -InvalidPath= , :%n%nC:\APP%n%n UNC:%n%n\\\ -InvalidDrive= , . , . -DiskSpaceWarningTitle= -DiskSpaceWarning= %1 , %2 .%n%n ? -DirNameTooLong=' . -InvalidDirName= . -BadDirName32=' :%n%n%1 -DirExistsTitle= -DirExists=:%n%n%1%n%n . ? -DirDoesntExistTitle= -DirDoesntExist=:%n%n%1%n%n . ? - -; *** " " -WizardSelectComponents= -SelectComponentsDesc= ? -SelectComponentsLabel2= ; . 볻, . -FullInstallation= -; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) -CompactInstallation= -CustomInstallation= -NoUninstallWarningTitle= -NoUninstallWarning=, :%n%n%1%n%n³ .%n%n ? -ComponentSize1=%1 K -ComponentSize2=%1 M -ComponentsDiskSpaceGBLabel= [gb] . -ComponentsDiskSpaceMBLabel= [mb] M . - -; *** " " -WizardSelectTasks= -SelectTasksDesc= ? -SelectTasksLabel2= [name] , 볻. - -; *** " " -WizardSelectProgramGroup= -SelectStartMenuFolderDesc= ? -SelectStartMenuFolderLabel3= . -SelectStartMenuFolderBrowseLabel= 볻, . , . -MustEnterGroupName= ' . -GroupNameTooLong= . -InvalidGroupName= . -BadGroupName=' :%n%n%1 -NoProgramGroupCheck2=& - -; *** " " -WizardReady= -ReadyLabel1= [name] . -ReadyLabel2a= , , . -ReadyLabel2b= . -ReadyMemoUserInfo= : -ReadyMemoDir= : -ReadyMemoType= : -ReadyMemoComponents= : -ReadyMemoGroup= : -ReadyMemoTasks= : - -; *** TDownloadWizardPage wizard page and DownloadTemporaryFile -DownloadingLabel= ... -ButtonStopDownload=& -StopDownload= ? -ErrorDownloadAborted= -ErrorDownloadFailed= : %1 %2 -ErrorDownloadSizeFailed= : %1 %2 -ErrorFileHash1= : %1 -ErrorFileHash2= : %1, %2 -ErrorProgress= : %1 %2 -ErrorFileSize= : %1, %2 - -; *** "ϳ " -WizardPreparing=ϳ -PreparingDesc= [name] . -PreviousInstallNotCompleted= . .%n%nϳ , [name]. -CannotContinue= . , . -ApplicationsFound= , . . -ApplicationsFound2= , . . ϳ , . -CloseApplications=& -DontCloseApplications=& -ErrorCloseApplications= . , , , . -PrepareToInstallNeedsRestart= . ϳ , [name]%n%n ? - -; *** "" -WizardInstalling= -InstallingLabel= , , [name] '. - -; *** " " -FinishedHeadingLabel= [name] -FinishedLabelNoIcons= [name] . -FinishedLabel= [name] . . -ClickFinish= . -FinishedRestartLabel= [name] . ? -FinishedRestartMessage= [name] .%n%n ? -ShowReadmeCheck=, README -YesRadio=&, -NoRadio=&ͳ, -; used for example as 'Run MyProg.exe' -RunEntryExec=³ %1 -; used for example as 'View Readme.txt' -RunEntryShellExec= %1 - -; *** "Setup Needs the Next Disk" stuff -ChangeDiskTitle= -SelectDiskLabel2= , %1 OK.%n%n , , . -PathLabel=&: -FileNotInDir2= "%1" "%2". , . -SelectDirectoryLabel= , . - -; *** Installation phase messages -SetupAborted= .%n%n , . -AbortRetryIgnoreSelectAction= -AbortRetryIgnoreRetry=& -AbortRetryIgnoreIgnore=& -AbortRetryIgnoreCancel=³ - -; *** -StatusClosingApplications= ... -StatusCreateDirs= ... -StatusExtractFiles= ... -StatusCreateIcons= ... -StatusCreateIniEntries= INI ... -StatusCreateRegistryEntries= ... -StatusRegisterFiles= ... -StatusSavingUninstall= ... -StatusRunProgram= ... -StatusRestartingApplications= ... -StatusRollback= ... - -; *** г -ErrorInternal2= : %1 -ErrorFunctionFailedNoCode=%1 -ErrorFunctionFailed=%1 ; %2 -ErrorFunctionFailedWithMessage=%1 ; %2.%n%3 -ErrorExecutingProgram= :%n%1 - -; *** -ErrorRegOpenKey= :%n%1\%2 -ErrorRegCreateKey= :%n%1\%2 -ErrorRegWriteKey= :%n%1\%2 - -; *** INI -ErrorIniEntry= INI- "%1". - -; *** -FileAbortRetryIgnoreSkipNotRecommended=& ( ) -FileAbortRetryIgnoreIgnoreNotRecommended=& ( ) -SourceIsCorrupted= -SourceDoesntExist= "%1" -ExistingFileReadOnly2= , . -ExistingFileReadOnlyRetry=& " " -ExistingFileReadOnlyKeepExisting=& -ErrorReadingExistingDest= : -FileExistsSelectAction= -FileExists2= . -FileExistsOverwriteExisting=& -FileExistsKeepExisting=& -FileExistsOverwriteOrKeepAll=& -ExistingFileNewerSelectAction= -ExistingFileNewer2= , . -ExistingFileNewerOverwriteExisting=& -ExistingFileNewerKeepExisting=& () -ExistingFileNewerOverwriteOrKeepAll=& -ErrorChangingAttr= : -ErrorCreatingTemp= : -ErrorReadingSource= : -ErrorCopying= : -ErrorReplacingExistingFile= : -ErrorRestartReplace= RestartReplace: -ErrorRenamingTemp= : -ErrorRegisterServer= DLL/OCX: %1 -ErrorRegSvr32Failed= RegSvr32, %1 -ErrorRegisterTypeLib= : %1 - -; *** Uninstall display name markings -UninstallDisplayNameMark=%1 (%2) -UninstallDisplayNameMarks=%1 (%2, %3) -UninstallDisplayNameMark32Bit=32- -UninstallDisplayNameMark64Bit=64- -UninstallDisplayNameMarkAllUsers= -UninstallDisplayNameMarkCurrentUser= - -; *** Post-installation errors -ErrorOpeningReadme= README. -ErrorRestartingComputer= '. , . - -; *** -UninstallNotFound= "%1" , . -UninstallOpenError= "%1". -UninstallUnsupportedVer= "%1" . -UninstallUnknownEntry= (%1) -ConfirmUninstall= , %1 ? -UninstallOnlyOnWin64= 64- Windows. -OnlyAdminCanUninstall= . -UninstallStatusLabel= , , %1 '. -UninstalledAll=%1 '. -UninstalledMost= %1 .%n%n . . -UninstalledAndNeedsRestart= %1 .%n%n ? -UninstallDataCorrupted= "%1" . - -; *** Uninstallation phase messages -ConfirmDeleteSharedFileTitle= ? -ConfirmDeleteSharedFile2= , . ?%n%n , . , ͳ. . -SharedFileNameLabel=' : -SharedFileLocationLabel=: -WizardUninstalling= -StatusUninstalling= %1... - - -; *** -ShutdownBlockReasonInstallingApp= %1. -ShutdownBlockReasonUninstallingApp= %1. - -; The custom messages below aren't used by Setup itself, but if you make -; use of them in your scripts, you'll want to translate them. - -[CustomMessages] - -NameAndVersion=%1, %2 -AdditionalIcons= : -CreateDesktopIcon= & -CreateQuickLaunchIcon= & -ProgramOnTheWeb= %1 -UninstallProgram= %1 -LaunchProgram=³ %1 -AssocFileExtension=& %1 %2 -AssocingFileExtension= %1 %2... -AutoStartProgramGroupDescription=: -AutoStartProgram= %1 -AddonHostProgramNotFound=%1 %n%n ? diff --git a/Dependencies/Inno/Setup.e32 b/Dependencies/Inno/Setup.e32 deleted file mode 100644 index 7fcf47cd..00000000 Binary files a/Dependencies/Inno/Setup.e32 and /dev/null differ diff --git a/Dependencies/Inno/SetupLdr.e32 b/Dependencies/Inno/SetupLdr.e32 deleted file mode 100644 index 9bf36bab..00000000 Binary files a/Dependencies/Inno/SetupLdr.e32 and /dev/null differ diff --git a/Dependencies/Inno/WizModernImage-IS.bmp b/Dependencies/Inno/WizModernImage-IS.bmp deleted file mode 100644 index cf844e09..00000000 Binary files a/Dependencies/Inno/WizModernImage-IS.bmp and /dev/null differ diff --git a/Dependencies/Inno/WizModernImage.bmp b/Dependencies/Inno/WizModernImage.bmp deleted file mode 100644 index cb05a063..00000000 Binary files a/Dependencies/Inno/WizModernImage.bmp and /dev/null differ diff --git a/Dependencies/Inno/WizModernSmallImage-IS.bmp b/Dependencies/Inno/WizModernSmallImage-IS.bmp deleted file mode 100644 index 1e8e4979..00000000 Binary files a/Dependencies/Inno/WizModernSmallImage-IS.bmp and /dev/null differ diff --git a/Dependencies/Inno/WizModernSmallImage.bmp b/Dependencies/Inno/WizModernSmallImage.bmp deleted file mode 100644 index 63f42104..00000000 Binary files a/Dependencies/Inno/WizModernSmallImage.bmp and /dev/null differ diff --git a/Dependencies/Inno/isbunzip.dll b/Dependencies/Inno/isbunzip.dll deleted file mode 100644 index 814e8680..00000000 Binary files a/Dependencies/Inno/isbunzip.dll and /dev/null differ diff --git a/Dependencies/Inno/isbzip.dll b/Dependencies/Inno/isbzip.dll deleted file mode 100644 index 1afeefd5..00000000 Binary files a/Dependencies/Inno/isbzip.dll and /dev/null differ diff --git a/Dependencies/Inno/isfaq.url b/Dependencies/Inno/isfaq.url deleted file mode 100644 index 91054550..00000000 --- a/Dependencies/Inno/isfaq.url +++ /dev/null @@ -1,2 +0,0 @@ -[InternetShortcut] -URL=https://jrsoftware.org/isfaq.php diff --git a/Dependencies/Inno/islzma.dll b/Dependencies/Inno/islzma.dll deleted file mode 100644 index 81fd05ac..00000000 Binary files a/Dependencies/Inno/islzma.dll and /dev/null differ diff --git a/Dependencies/Inno/islzma32.exe b/Dependencies/Inno/islzma32.exe deleted file mode 100644 index 7562645e..00000000 Binary files a/Dependencies/Inno/islzma32.exe and /dev/null differ diff --git a/Dependencies/Inno/islzma64.exe b/Dependencies/Inno/islzma64.exe deleted file mode 100644 index fd58a59e..00000000 Binary files a/Dependencies/Inno/islzma64.exe and /dev/null differ diff --git a/Dependencies/Inno/isscint.dll b/Dependencies/Inno/isscint.dll deleted file mode 100644 index 5f8ef49b..00000000 Binary files a/Dependencies/Inno/isscint.dll and /dev/null differ diff --git a/Dependencies/Inno/isunzlib.dll b/Dependencies/Inno/isunzlib.dll deleted file mode 100644 index 8c4ed510..00000000 Binary files a/Dependencies/Inno/isunzlib.dll and /dev/null differ diff --git a/Dependencies/Inno/iszlib.dll b/Dependencies/Inno/iszlib.dll deleted file mode 100644 index b326e3a7..00000000 Binary files a/Dependencies/Inno/iszlib.dll and /dev/null differ diff --git a/Dependencies/Inno/license.txt b/Dependencies/Inno/license.txt deleted file mode 100644 index 17b2e1b7..00000000 --- a/Dependencies/Inno/license.txt +++ /dev/null @@ -1,32 +0,0 @@ -Inno Setup License -================== - -Except where otherwise noted, all of the documentation and software included in the Inno Setup -package is copyrighted by Jordan Russell. - -Copyright (C) 1997-2020 Jordan Russell. All rights reserved. -Portions Copyright (C) 2000-2020 Martijn Laan. All rights reserved. - -This software is provided "as-is," without any express or implied warranty. In no event shall the -author be held liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including commercial -applications, and to alter and redistribute it, provided that the following conditions are met: - -1. All redistributions of source code files must retain all copyright notices that are currently in - place, and this list of conditions without modification. - -2. All redistributions in binary form must retain all occurrences of the above copyright notice and - web site addresses that are currently in place (for example, in the About boxes). - -3. The origin of this software must not be misrepresented; you must not claim that you wrote the - original software. If you use this software to distribute a product, an acknowledgment in the - product documentation would be appreciated but is not required. - -4. Modified versions in source or binary form must be plainly marked as such, and must not be - misrepresented as being the original software. - - -Jordan Russell -jr-2020 AT jrsoftware.org -https://jrsoftware.org/ \ No newline at end of file diff --git a/Dependencies/Inno/unins000.dat b/Dependencies/Inno/unins000.dat deleted file mode 100644 index 409a1aa0..00000000 Binary files a/Dependencies/Inno/unins000.dat and /dev/null differ diff --git a/Dependencies/Inno/unins000.exe b/Dependencies/Inno/unins000.exe deleted file mode 100644 index b8b4f910..00000000 Binary files a/Dependencies/Inno/unins000.exe and /dev/null differ diff --git a/Dependencies/Inno/unins000.msg b/Dependencies/Inno/unins000.msg deleted file mode 100644 index 24de8ec9..00000000 Binary files a/Dependencies/Inno/unins000.msg and /dev/null differ diff --git a/Dependencies/Inno/whatsnew.htm b/Dependencies/Inno/whatsnew.htm deleted file mode 100644 index 9add84e1..00000000 --- a/Dependencies/Inno/whatsnew.htm +++ /dev/null @@ -1,172 +0,0 @@ - - - -Inno Setup 6 Revision History - - - - - -
Inno Setup 6
Revision History
- -

Copyright © 1997-2020 Jordan Russell. All rights reserved.
-Portions Copyright © 2000-2020 Martijn Laan. All rights reserved.
-For conditions of distribution and use, see LICENSE.TXT. -

- -

Want to be notified by e-mail of new Inno Setup releases? Subscribe to the Inno Setup Mailing List!

- -

6.1.2 (2020-11-15)

-
    -
  • Compiler IDE change: Added new Print... (Ctrl+P) menu item to the File menu.
  • -
  • Minor tweaks.
  • -
- -

6.1.1-beta (2020-10-29)

-

Compiler IDE updates

-

Various improvements have been made to the Compiler IDE:

- -

Other changes

-
    -
  • The /PORTABLE=1 command line parameter accepted by Inno Setup's own installers has been improved to allow side-by-side installations. For example, to quickly install a new version to the current user's desktop without affecting already installed versions use the following command line parameters: /portable=1 /silent /currentuser.
  • -
  • Setup's and Uninstall's Back and Next buttons no longer display outdated "<" and ">" markers.
  • -
  • Added new topic to the help file listing the additional Compiler IDE keyboard commands which are not listed in the menus. Added new Keyboard Commands menu item to the Compiler IDE's Help menu to open this topic.
  • -
  • ISPP change: Added new SaveStringToFile support function.
  • -
  • Fix: Calling DLL functions which return a 64-bit integer now gives correct result values.
  • -
  • Minor tweaks.
  • -
- -

All official translations have now been updated for the changes in the previous version. Thanks to the maintainers for their time. - -

6.1.0-beta (2020-09-13)

-

Per-user fonts

-

Per-user fonts are now supported if Setup is running on Windows 10 Version 1803 and later:

-
    -
  • [Files] section parameter FontInstall can now be used in non administrative installs. Requires Windows 10 Version 1803 or later to successfully install a font.
  • -
  • The {fonts} constant has been renamed to {commonfonts}. The old name is still supported, but it is recommended to update your scripts to the new names and the compiler will issue a warning if you don't. -
  • Added new {userfonts} constant. Only Windows 10 Version 1803 and later supports {userfonts}. Same directory as {localappdata}\Microsoft\Windows\Fonts.
  • -
  • Added new {autofonts} constant which automatically maps to {commonfonts} unless the installation is running in non administrative install mode, in which case it maps to {userfonts}. It is recommended to update your scripts to use {autofonts} as much as possible to avoid mistakes.
  • -
  • Updated all examples to use {autofonts} instead of {fonts}.
  • -
  • Pascal Scripting change: The UnregisterFont support function now has an extra parameter.
  • -
-

Compiler IDE updates

-

Various improvements have been made to the Compiler IDE:

-
    -
  • If the script uses Inno Setup Preprocessor (ISPP) functionality, the Compiler IDE now automatically shows the preprocessor output in a tab so you can check it. This can be turned off in the options.
  • -
  • The Compiler IDE now automatically opens (up to 10) #include files in tabs which allow you to edit and debug these files from within the Compiler IDE. The list of #include files is updated after opening a new main file and after each compilation. This can be turned off in the options. If the option is not turned off, a new Save All menu item is added to the File menu.
  • -
  • If #include files are modified since last compile, the script is now automatically re-compiled before running it. This works even if the option to automatically open #include files is turned off.
  • -
  • Added new Next Tab and Previous Tab menu items to the View menu.
  • -
  • Added new topic to the help file explaining the various integrated debugger menu items in the Run menu which can be used to debug your [Code] section.
  • -
  • Improved highlighting for the [CustomMessages] and [Messages] sections.
  • -
  • Added new MessageBox Designer menu item to the Tools menu to design and insert MsgBox or TaskDialogMsgBox calls for the [Code] section.
  • -
  • Added new Step Out menu item to the Run menu to unpause Setup until it reaches the end of the current function, then pause it on the next line.
  • -
  • Added buttons to the Welcome dialog to Donate to support Inno Setup (Thank you!) and to Subscribe to the Inno Setup Mailing List to be notified by e-mail of new Inno Setup releases.
  • -
  • The Run Parameters dialog now shows a list of most recently used parameters.
  • -
-

Built-in download support for [Code]

-

Pascal Scripting now supports downloading files and checking SHA-256 hashes:

-
    -
  • Added new DownloadTemporaryFile support function to download files without using a third-party tool: -
      -
    • Supports HTTPS (but not expired or self-signed certificates) and HTTP.
    • -
    • Redirects are automatically followed and proxy settings are automatically used.
    • -
    • Safe to use from services unlike existing third-party tools.
    • -
    • Supports SHA-256 hash checking of the downloaded file.
    • -
    • Supports basic authentication.
    • -
    -
  • -
  • Added new CreateDownloadPage support function to easily show the download progress to the user. See the new CodeDownloadFiles.iss example script for an example.
  • -
  • Added new DownloadTemporaryFileSize support function to get the size of a file without downloading it.
  • -
  • Added new GetSHA256OfFile, GetSHA256OfString, and GetSHA256OfUnicodeString support functions to calculate SHA-256 hashes.
  • -
  • Change in default behavior: Setup no longer disables itself entirely while PrepareToInstall is running. Instead only the Cancel button is disabled.
  • -
-

Inno Setup Preprocessor (ISPP) updates

-

ISPP now uses 64-bit integers and has new functions to more easily compare version numbers:

-
    -
  • ISPP's int type is now a signed 64-bit integer type. -
  • Support function FileSize now supports 64-bit file sizes.
  • -
  • Added new GetPackedVersion, PackVersionNumbers, PackVersionComponents, ComparePackedVersion, SamePackedVersion, UnpackVersionNumbers, UnpackVersionComponents, and VersionToStr support functions.
  • -
  • Support function GetFileVersion and ParseVersion have been renamed to GetVersionNumbersString and GetVersionComponents respectively. The old names are still supported, but it is recommended to update your scripts to the new names and the compiler will issue a warning if you don't.
  • -
-

Similar Pascal Scripting changes have been done for [Code]:

-
    -
  • Added new FileSize64 support function.
  • -
  • Added new GetPackedVersion, PackVersionNumbers, PackVersionComponents, ComparePackedVersion, SamePackedVersion, UnpackVersionNumbers, UnpackVersionComponents, GetVersionComponents, and VersionToStr support functions. This makes ISPP and [Code] support the same list of version related functions.
  • -
-

Other changes

-
    -
  • Fix: Inno Setup 6.0.5 no longer supported Windows Vista.
  • -
  • Change in default behavior: [Setup] section directive MinVersion now defaults to 6.1sp1, so by default Setup will not run on Windows Vista or on versions of Windows 7 and Windows Server 2008 R2 which have not been updated. Setting MinVersion to 6.0 to allow Setup to run on Windows Vista is supported but not recommended: Windows Vista doesn't support some of Setup's security measures against potential DLL preloading attacks so these have to be removed by the compiler if MinVersion is below 6.1 making your installer less secure on all versions of Windows.
  • -
  • Inno Setup's version number doesn't display "(u)" at the end anymore since the Unicode version has been the only version for quite some time now.
  • -
  • Added new [Run] and [UninstallRun] sections flag: dontlogparameters. If this flag is specified, the command line parameters for the program will not be included in the log file.
  • -
  • If there are [UninstallRun] section entries without a RunOnceId parameter the compiler will now warn you about this. By assigning a string to RunOnceId, you can ensure that a particular [UninstallRun] entry will only be executed once during uninstallation. The warning can be disabled using new [Setup] section directive MissingRunOnceIdsWarning.
  • -
  • Added new [Icons] section parameter: AppUserModelToastActivatorCLSID. Specifies the Windows 10 Application User Model Toast Activator CLSID for the shortcut. Ignored on earlier Windows versions.
  • -
  • Setup's prompts to overwrite or keep existing files have been made more user friendly: - -
  • -
  • Console-mode compiler (ISCC) change: Warnings and errors are now colorized.
  • -
  • Pascal Scripting changes: -
      -
    • Added new CalculateButtonWidth function to the TSetupForm support class.
    • -
    • The ACaption and ADescription parameters of the various Create...Page support functions may now specify Setup messages containing shorthands like [name].
    • -
    • Fix: Support function WizardSelectComponents now also updates component sizes and the current selection's required disk space.
    • -
    -
  • -
  • ISPP changes: -
      -
    • Using #pragma verboselevel now automatically turns on verbose mode.
    • -
    • Added new Message, Warning, and Error support functions.
    • -
    • ISPP's output is now cleaner and warnings are colorized.
    • -
    -
  • Various documentation improvements.
  • -
  • Minor tweaks.
  • -
- -

Contributions via GitHub: Thanks to Gavin Lambert and Sergii Leonov for their contributions.

- -

Some messages have been added and changed in this version: (View differences in Default.isl).

-
    -
  • New messages: -
      -
    • DownloadingLabel, ButtonStopDownload, StopDownload, ErrorDownloadAborted, ErrorDownloadFailed, ErrorDownloadSizeFailed, ErrorFileHash1, ErrorFileHash2, ErrorProgress, ErrorFileSize.
    • -
    • ExistingFileNewerSelectAction, ExistingFileNewer2, ExistingFileNewerOverwriteExisting, ExistingFileNewerKeepExisting, ExistingFileNewerOverwriteOrKeepAll.
    • -
    • FileExistsSelectAction, FileExists2, FileExistsOverwriteExisting, FileExistsKeepExisting, FileExistsOverwriteOrKeepAll.
    • -
    -
  • -
  • Previously optional messages which must now always be set: -
      -
    • ComponentsDiskSpaceGBLabel, DiskSpaceGBLabel, PrepareToInstallNeedsRestart.
    • -
    -
  • Removed messages: -
      -
    • ExistingFileNewer, FileExists.
    • -
    -
  • -
- -

Note: Not all official translations have been updated for these changes at this moment. - -

Inno Setup 6.0 Revision History

- - - diff --git a/Dependencies/VclStylesinno.dll b/Dependencies/VclStylesinno.dll deleted file mode 100644 index 8a55dfb5..00000000 Binary files a/Dependencies/VclStylesinno.dll and /dev/null differ diff --git a/Example mod/Example mod.csproj b/Example mod/Example mod.csproj new file mode 100644 index 00000000..fcc8f479 --- /dev/null +++ b/Example mod/Example mod.csproj @@ -0,0 +1,127 @@ + + + + + + SN.STABLE + AnyCPU + {C8FB0981-77D2-47C7-BBEF-A3A9EBACACBF} + Library + Properties + Example_mod + Example mod + v4.7.2 + 512 + true + + + + bin\SN.STABLE\ + SUBNAUTICA;SUBNAUTICA_STABLE + true + true + AnyCPU + 8.0 + prompt + MinimumRecommendedRules.ruleset + + + false + + + bin\SN.EXP\ + SUBNAUTICA;SUBNAUTICA_EXP + true + true + AnyCPU + 8.0 + prompt + MinimumRecommendedRules.ruleset + + + false + + + bin\BZ.STABLE\ + BELOWZERO;BELOWZERO_STABLE + true + true + AnyCPU + 8.0 + prompt + MinimumRecommendedRules.ruleset + + + false + + + bin\BZ.EXP\ + BELOWZERO;BELOWZERO_EXP + true + true + AnyCPU + 8.0 + prompt + MinimumRecommendedRules.ruleset + + + false + + + + + ..\packages\HarmonyX.2.9.0\lib\net45\0Harmony.dll + False + + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.dll + False + + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Mdb.dll + False + + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Pdb.dll + False + + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Rocks.dll + False + + + ..\packages\MonoMod.RuntimeDetour.22.1.29.1\lib\net452\MonoMod.RuntimeDetour.dll + False + + + ..\packages\MonoMod.Utils.22.1.29.1\lib\net452\MonoMod.Utils.dll + False + + + + + + + + + + + + PreserveNewest + + + + + + {da63f59d-4676-4726-afec-bd9d3682733f} + QModManager + False + + + {418502dd-372d-4ef9-8021-b262552dfede} + SMLHelper + False + + + + \ No newline at end of file diff --git a/Example mod/Mod.cs b/Example mod/Mod.cs new file mode 100644 index 00000000..17611b8e --- /dev/null +++ b/Example mod/Mod.cs @@ -0,0 +1,320 @@ +using HarmonyLib; +using QModManager.API.ModLoading; +using SMLHelper.V2.Commands; +using SMLHelper.V2.Handlers; +using SMLHelper.V2.Interfaces; +using SMLHelper.V2.Json; +using SMLHelper.V2.Json.Attributes; +using SMLHelper.V2.Options; +using SMLHelper.V2.Options.Attributes; +using System; +using UnityEngine; +using UnityEngine.UI; +using Logger = QModManager.Utility.Logger; + +namespace SMLHelper.V2.Examples +{ + [QModCore] + public static class ExampleMod + { + /// + /// A simple SaveDataCache implementation, intended to save the players current position to disk. + /// + [FileName("player_position")] + internal class SaveData : SaveDataCache + { + public Vector3 PlayerPosition { get; set; } + } + + [QModPatch] + public static void Patch() + { + /// Here, we are setting up a instance of , which will automatically generate an + /// options menu using Attributes. The values in this instance will be updated whenever the user changes + /// the corresponding option in the menu. + Config config = OptionsPanelHandler.Main.RegisterModOptions(); + + /// In a similar manner to the above, here we set up an instance of , which will + /// automatically be saved and loaded to and from disk appropriately. + /// The values in this instance will be updated automatically whenever the user switches between save slots. + SaveData saveData = SaveDataHandler.Main.RegisterSaveDataCache(); + + // Simply display the recorded player position whenever the save data is loaded + saveData.OnFinishedLoading += (object sender, JsonFileEventArgs e) => + { + SaveData data = e.Instance as SaveData; // e.Instance is the instance of your SaveData stored as a JsonFile. + // We can use polymorphism to convert it back into a SaveData + // instance, and access its members, such as PlayerPosition. + + Logger.Log(Logger.Level.Info, + $"loaded player position from save slot: {data.PlayerPosition}", + showOnScreen: true); + }; + + // Update the player position before saving it + saveData.OnStartedSaving += (object sender, JsonFileEventArgs e) => + { + SaveData data = e.Instance as SaveData; + data.PlayerPosition = Player.main.transform.position; + }; + + // Simply display the position we recorded to the save file whenever the save data it is saved + saveData.OnFinishedSaving += (object sender, JsonFileEventArgs e) => + { + SaveData data = e.Instance as SaveData; + Logger.Log(Logger.Level.Info, + $"saved player position to save slot: {data.PlayerPosition}", + showOnScreen: true); + }; + + /// Here we are registering a console command by use of a delegate. The delegate will respond to the "delegatecommand" + /// command from the dev console, passing values following "delegatecommand" as the correct types, provided they can be + /// parsed to that type. For example, "delegatecommand foo 3 true" would be a valid command for the + /// delegate signature. You can also use Func or Action to define your delegate signatures + /// if you prefer, and you can also pass a reference to a method that matches this signature. + /// + /// Registered commands must be unique. If another mod has already added the command, your command will be rejected. + /// + /// If the user enters incorrect parameters for a command, they will be notified of the expected parameter types, + /// both on-screen and in the log. + /// + /// Note that a command can have a return type, but it is not necessary. If it does return any type, it will be printed + /// both on-screen and in the log. + ConsoleCommandsHandler.Main.RegisterConsoleCommand("delegatecommand", (myString, myInt, myBool) => + { + return $"Parameters: {myString} {myInt} {myBool}"; + }); + + /// Here we are registering all console commands defined in , defined by decorating them + /// with the . See below + /// for an example. + ConsoleCommandsHandler.Main.RegisterConsoleCommands(typeof(ExampleMod)); + + Logger.Log(Logger.Level.Info, "Patched successfully!"); + } + + private delegate string MyCommand(string myString, int myInt, bool myBool); + + /// + /// Here, we are using the to define a custom console command, which is + /// registered via our use of above. + /// + /// This method will respond to the "attributedcommand" command from the dev console. The command will respect the method + /// signature of the decorated method, passing values following "attributedcommand" as the correct types, as long as they can be + /// parsed to that type. For example, "attributedcommand foo 3 true" would be a valid command for this method signature. + /// + /// The decorated method must be both and , or the attribute will + /// be ignored. allows for + /// targeting non- methods (must still be ), and uses a + /// similar syntax to for defining the target method. + /// + /// + /// + /// + /// + [ConsoleCommand("attributedcommand")] + public static string MyAttributedCommand(string myString, int myInt, bool myBool = false) + { + return $"Parameters: {myString} {myInt} {myBool}"; + } + } + + public enum CustomChoice { One, Two, Three } + + /// + /// The allows us to set the title of our options menu in the "Mods" tab. + /// + /// Optionally, we can set the or properties to + /// customise when the values are saved to or loaded from disk respectively. By default, the values will be saved whenever + /// they change, and loaded from disk when the game is registered to the options menu, which in this example happens on game + /// launch and is the recommended setting. + /// + /// Both of these values allow for bitwise combinations of their options, so + /// [Menu("SMLHelper Example Mod", LoadOn = MenuAttribute.LoadEvents.MenuRegistered | MenuAttribute.LoadEvents.MenuOpened)] + /// is valid and will result in the values being loaded both on game start and also whenever the menu is opened. + /// + /// We could also specify a here to customise the name of the config file + /// (defaults to "config") and an optional subfolder for the config file to reside in. + /// + [Menu("SMLHelper Example Mod")] + public class Config : ConfigFile + { + /// + /// A is represented by a group of options where only one can be selected at a time, + /// similar in usage to a dropdown or radial button group. + /// + /// Here, we are defining a with the label "My index-based choice", where the underlying + /// field represents the index in an array of choices, where the values "One", "Two" and "Three" make + /// up that array. As we are not specifiying a default value, the index will by 0 by default. + /// + /// The is optional and allows us to specify the name of a method in the Config class to + /// call when the value has been changed via the options menu. Note that in many cases, you won't need to specify an OnChange + /// event, as the values are automatically saved to disk for you as specified by the , and are + /// updated in the instance of returned when registering it to the options menu. + /// + /// Here, we are specifying the name of a method which can handle any OnChange event, for the purposes of demonstrating + /// its usage. See for an example usage. + /// + [Choice("My index-based choice", "One", "Two", "Three"), OnChange(nameof(MyGenericValueChangedEvent))] + public int ChoiceIndex; + + /// + /// Here, we are defining a which uses a as its backing field, + /// where the value represents which option is currently selected, and are specifying "Foo" as the default. + /// + [Choice("My string-based choice", "Foo", "Bar"), OnChange(nameof(MyGenericValueChangedEvent))] + public string ChoiceValue = "Foo"; + + /// + /// Here, we are defining a which uses an -type as its backing field, + /// and the string values for each value defined in the will be used to represent each option, + /// so we don't need to specify them. The options will be "One", "Two" and "Three". + /// + [Choice("My enum-based choice"), OnChange(nameof(MyGenericValueChangedEvent))] + public CustomChoice ChoiceEnum; + + /// + /// Here, we are again defining a with a -type as its backing field, + /// however we are also specifying custom strings which will be used to represent each option in the menu. + /// + /// An option of will be represented by the "1", + /// will be represented by the "2", and so on. + /// + [Choice("My customised enum-based choice", "1", "2", "3"), OnChange(nameof(MyGenericValueChangedEvent))] + public CustomChoice ChoiceCustomEnum; + + /// + /// A is represented in the mod options menu as a customistable keybind, where the + /// user clicks the box to set the binding, stored as a . + /// + /// Here, we are not specifying a default, so by default this keybind will not be set. + /// + [Keybind("My keybind"), OnChange(nameof(MyGenericValueChangedEvent))] + public KeyCode KeybindKey; + + /// + /// A is used to represent a numeric value as a slider in the options menu, with a + /// minimum and maximum value. By default, the minimum value is 0 and maximum is 100. + /// + /// Here, we are setting an initial value of 25 for the slider. We are also setting the + /// property so that this default can be represented by a notch in the slider. + /// + /// + [Slider("My slider", 0, 50, DefaultValue = 25), OnChange(nameof(MyGenericValueChangedEvent))] + public int SliderValue = 25; + + /// + /// Here, we are defining a with a step of 10, meaning that the value will only + /// increment/decrement by 10, resulting in possible values of 0, 10, 20, 30, and so on up to 100. + /// + /// By default, an has a step of 1, and a or + /// has a step of 0.05. + /// + [Slider("My stepped slider", Step = 10), OnChange(nameof(MyGenericValueChangedEvent))] + public int SteppedSliderValue; + + /// + /// Here, we are defining a with a format string which defines how the numeric value + /// is displayed. + /// See for more + /// info on numeric format strings. + /// + [Slider("My float-based slider", Format = "{0:F2}"), OnChange(nameof(MyGenericValueChangedEvent))] + public float FloatSliderValue; + + /// + /// A is used to represent a checkbox in the options menu + /// and is backed by a . + /// + /// Note that here we are defining two s which correspond to different methods + /// in the class. They will both be fired when the value changes, but one of them is specific to this value only. See + /// for an example usage. + /// + [Toggle("My checkbox"), OnChange(nameof(MyCheckboxToggleEvent)), OnChange(nameof(MyGenericValueChangedEvent))] + public bool ToggleValue; + + /// + /// A is used to represent a button in the options menu, and is different to the other + /// attributes above in that it is backed by a public method rather than a field or property, and the method that is + /// decorated with the will be called when the corresponding button is clicked, allowing you + /// to perform some custom action on demand from the options menu. + /// + /// Here, we are also defining an to demonstrate its usage. In most cases, + /// this attribute will not be needed, but in some cases if you would like to perform some special action with the + /// it can be useful. See for an + /// example usage. + /// + /// The passed from the button click event, containing the id of the + /// button as a string. It is worth mentioning that it is not necessary to define the + /// if you don't need it. + [Button("My button"), OnGameObjectCreated(nameof(MyGameObjectCreatedEvent))] + public void MyButtonClickEvent(ButtonClickedEventArgs e) + { + Logger.Log(Logger.Level.Info, "Button was clicked!"); + Logger.Log(Logger.Level.Info, $"{e.Id}"); + } + + /// + /// This method will be called whenever a value with an referencing it by name is changed. + /// In this example, only the field references it, so it will only be called whenever this value + /// is changed by the user via the options menu. + /// + /// The passed from the onchange event, containing the id of the field + /// as a string as well as the new value. As with the other events in this example, it is not necessary to define the + /// parameter if you do not need the data it contains. + private void MyCheckboxToggleEvent(ToggleChangedEventArgs e) + { + Logger.Log(Logger.Level.Info, "Checkbox value was changed!"); + Logger.Log(Logger.Level.Info, $"{e.Value}"); + } + + /// + /// This method will be called whenever a value with an referencing it by name is changed. + /// In this example, every field above references it, so it will be called whenever any value in this class is changed by the + /// user via the options menu. + /// + /// The data from the onchange event, passed as the interface . + /// + /// As this particular method is being used as an onchange event for various field types, the usage of the + /// interface here enables coercion to its original data type for correct handling, as + /// demonstrated by the statement below. + /// + /// As with the other events in this example, it is not necessary to define the parameter if you do not need the data + /// it contains. + private void MyGenericValueChangedEvent(IModOptionEventArgs e) + { + Logger.Log(Logger.Level.Info, "Generic value changed!"); + Logger.Log(Logger.Level.Info, $"{e.Id}: {e.GetType()}"); + + switch (e) + { + case KeybindChangedEventArgs keybindChangedEventArgs: + Logger.Log(Logger.Level.Info, keybindChangedEventArgs.KeyName); + break; + case ChoiceChangedEventArgs choiceChangedEventArgs: + Logger.Log(Logger.Level.Info, $"{choiceChangedEventArgs.Index}: {choiceChangedEventArgs.Value}"); + break; + case SliderChangedEventArgs sliderChangedEventArgs: + Logger.Log(Logger.Level.Info, sliderChangedEventArgs.Value.ToString()); + break; + case ToggleChangedEventArgs toggleChangedEventArgs: + Logger.Log(Logger.Level.Info, toggleChangedEventArgs.Value.ToString()); + break; + } + } + + /// + /// The method will be called whenever the for a member with a + /// referencing it by name is created. In this example, only the + /// button is referencing it, so it will only be called whenever + /// this button is created. + /// + /// The passed from the event, containing the id of the field + /// as a string as well as the newly created . + private void MyGameObjectCreatedEvent(GameObjectCreatedEventArgs e) + { + Logger.Log(Logger.Level.Info, "GameObject was created"); + Logger.Log(Logger.Level.Info, $"{e.Id}: {e.GameObject}"); + } + } +} diff --git a/Dependencies/Inno/Examples/MyDll/C#/Properties/AssemblyInfo.cs b/Example mod/Properties/AssemblyInfo.cs similarity index 74% rename from Dependencies/Inno/Examples/MyDll/C#/Properties/AssemblyInfo.cs rename to Example mod/Properties/AssemblyInfo.cs index 93bbef2e..11142b07 100644 --- a/Dependencies/Inno/Examples/MyDll/C#/Properties/AssemblyInfo.cs +++ b/Example mod/Properties/AssemblyInfo.cs @@ -2,35 +2,35 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -// General Information about an assembly is controlled through the following +// General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("MyDll")] +[assembly: AssemblyTitle("Example mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MyDll")] -[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyProduct("Example mod")] +[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("711cc3c2-07db-46ca-b34b-ba06f4edcbcd")] +[assembly: Guid("c8fb0981-77d2-47c7-bbef-a3a9ebacacbf")] // Version information for an assembly consists of the following four values: // // Major Version -// Minor Version +// Minor Version // Build Number // Revision // -// You can specify all the values or you can default the Build and Revision Numbers +// You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("2.12.1.1")] +[assembly: AssemblyFileVersion("2.12.1.1")] diff --git a/Example mod/app.config b/Example mod/app.config new file mode 100644 index 00000000..2a4bf252 --- /dev/null +++ b/Example mod/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Example mod/mod.json b/Example mod/mod.json new file mode 100644 index 00000000..b964cadf --- /dev/null +++ b/Example mod/mod.json @@ -0,0 +1,12 @@ +{ + "Id": "SMLHelperExampleMod", + "DisplayName": "Example Mod For SMLHelper", + "Author": "The SMLHelper Dev Team", + "Version": "2.12.1.1", + "Enable": true, + "AssemblyName": "Example mod.dll", + "VersionDependencies": { + "SMLHelper": "2.13" + }, + "Game": "Both" +} diff --git a/Example mod/packages.config b/Example mod/packages.config new file mode 100644 index 00000000..e3cfd7ec --- /dev/null +++ b/Example mod/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Executable/CleanUp.cs b/Executable/CleanUp.cs deleted file mode 100644 index 60dd3225..00000000 --- a/Executable/CleanUp.cs +++ /dev/null @@ -1,68 +0,0 @@ -using Mono.Cecil; -using System; -using System.IO; - -namespace QModManager -{ - internal static class CleanUp - { - private static bool IsChildOf(this DirectoryInfo child, DirectoryInfo parent, bool recursive = false) - { - if (child.Parent == null) - return false; - - return child.Parent.FullName == parent.FullName || (recursive && child.Parent.IsChildOf(parent, recursive)); - } - - private static bool IsChildOf(this FileInfo child, DirectoryInfo parent, bool recursive = true) - { - if (child.Directory == null) - return false; - - return child.Directory.FullName == parent.FullName || (recursive && child.Directory.IsChildOf(parent, recursive)); - } - private static bool IsChildOf(this FileInfo child, string parentPath, bool recursive = true) - => child.IsChildOf(new DirectoryInfo(parentPath), recursive); - - internal static void Initialize(string gameRootDirectory, string managedDirectory) - { - string qmodsDirectory = Path.Combine(gameRootDirectory, "QMods"); - string bepinexCoreDirectory = Path.Combine(gameRootDirectory, "BepInEx", "core"); - - string[] pathsToCheck = new[] { managedDirectory, qmodsDirectory }; - - foreach (var path in pathsToCheck) - { - foreach (var file in Directory.GetFiles(path, "*.dll", SearchOption.AllDirectories)) - { - var fileInfo = new FileInfo(file); - if (fileInfo.FullName.Contains("system32") || fileInfo.FullName.Contains("Windows") || fileInfo.IsChildOf(bepinexCoreDirectory, true)) - { - Console.WriteLine($"Path is unsafe! {path}"); - continue; - } - - try - { - using (var stream = new MemoryStream(File.ReadAllBytes(file))) - { - if (AssemblyDefinition.ReadAssembly(stream).MainModule.Name == "0Harmony" && File.Exists(file)) - { - File.Delete(file); - Console.WriteLine($"Deleted {new DirectoryInfo(file).FullName}..."); - } - } - } - catch (BadImageFormatException) - { - if (Path.GetFileName(file).StartsWith("0Harmony") && File.Exists(file)) - { - File.Delete(file); - Console.WriteLine($"Deleted {new DirectoryInfo(file).FullName}..."); - } - } - } - } - } - } -} diff --git a/Executable/Executable.csproj b/Executable/Executable.csproj deleted file mode 100644 index 3d133575..00000000 --- a/Executable/Executable.csproj +++ /dev/null @@ -1,89 +0,0 @@ - - - - - Debug - AnyCPU - {E00B7FE8-0F1D-4AE6-9E47-4BFD81537F14} - Exe - QModManager - QModManager - v4.7.2 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - true - - - - ..\Build\$(Configuration)\ - SUBNAUTICA;SUBNAUTICA_STABLE - true - pdbonly - AnyCPU - 7.3 - prompt - - - ..\Build\$(Configuration)\ - SUBNAUTICA;SUBNAUTICA_EXP - true - pdbonly - AnyCPU - 7.3 - prompt - - - ..\Build\$(Configuration)\ - BELOWZERO;BELOWZERO_STABLE - true - pdbonly - AnyCPU - 7.3 - prompt - - - ..\Build\$(Configuration)\ - BELOWZERO;BELOWZERO_EXP - true - pdbonly - AnyCPU - 7.3 - prompt - - - QModManager.Executable - - - icon.ico - - - - ..\Dependencies\BepInEx\BepInEx\core\Mono.Cecil.dll - False - - - - - - - - Code - - - - - - - - - {ca99f076-7459-4682-a41d-2850aee28566} - QModManager.UnityAudioFixer - - - - - - - - \ No newline at end of file diff --git a/Executable/Program.cs b/Executable/Program.cs deleted file mode 100644 index 38095240..00000000 --- a/Executable/Program.cs +++ /dev/null @@ -1,305 +0,0 @@ -namespace QModManager -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Linq; - using System.Reflection; - using System.Runtime.InteropServices; - - internal enum Action - { - Install, - Uninstall, - RunByUser, - CleanUp - } - - [Flags] - internal enum OS - { - None = 0b00, - Windows = 0b01, - Mac = 0b10, - Both = Windows | Mac, - } - - internal static class Executable - { - internal static Action action = Action.RunByUser; - internal static OS os; - - internal static void Main(string[] args) - { - try - { - InitAssemblyResolver(); - - var parsedArgs = new Dictionary(); - - foreach (string arg in args) - { - if (arg.Contains("=")) - { - parsedArgs = args.Select(s => s.Split(new[] { '=' }, 1)).ToDictionary(s => s[0], s => s[1]); - } - else if (arg == "-i") - action = Action.Install; - else if (arg == "-u") - action = Action.Uninstall; - else if (arg == "-c") - action = Action.CleanUp; - } - - string gameRootDirectory = Path.Combine(Environment.CurrentDirectory, "../../.."); - string snManagedDirectory = Path.Combine(gameRootDirectory, "Subnautica_Data", "Managed"); - string bzManagedDirectory = Path.Combine(gameRootDirectory, "SubnauticaZero_Data", "Managed"); - string managedDirectory; - if (Directory.Exists(snManagedDirectory)) - { - managedDirectory = snManagedDirectory; - } - else if (Directory.Exists(bzManagedDirectory)) - { - managedDirectory = bzManagedDirectory; - } - else - { - Console.WriteLine("Could not find Managed directory."); - Console.WriteLine("Please make sure you have installed QModManager in the right folder."); - Console.WriteLine("If the problem persists, open a bug report on NexusMods or an issue on GitHub"); - Console.WriteLine(); - Console.WriteLine("Press any key to exit..."); - Console.ReadKey(); - Environment.Exit(1); - return; - } - string globalgamemanagers = Path.Combine(managedDirectory, "../globalgamemanagers"); - - os = GetOS(); - - if (os == OS.Both) - { - // This runs if both windows and mac files were detected, but it should NEVER happen. - Console.WriteLine("An unexpected error has occurred."); - Console.WriteLine("Both Windows and Mac files detected!"); - Console.WriteLine("Is this a Windows or a Mac environment?"); - Console.WriteLine(); - Console.WriteLine("Press any key to exit..."); - Console.ReadKey(); - Environment.Exit(1); - return; - } - else if (os == OS.None) - { - Console.WriteLine("Could not find any game to patch!"); - Console.WriteLine("An assembly file was found, but no executable was detected."); - Console.WriteLine("Please make sure you have installed QModManager in the right folder."); - Console.WriteLine("If the problem persists, open a bug report on NexusMods or an issue on GitHub"); - Console.WriteLine(); - Console.WriteLine("Press any key to exit..."); - Console.ReadKey(); - Environment.Exit(1); - return; - } - - if (!File.Exists(Path.Combine(managedDirectory, "Assembly-CSharp.dll"))) - { - Console.WriteLine("Could not find the assembly file."); - Console.WriteLine("Please make sure you have installed QModManager in the right folder."); - Console.WriteLine("If the problem persists, open a bug report on NexusMods or an issue on GitHub"); - Console.WriteLine(); - Console.WriteLine("Press any key to exit..."); - Console.ReadKey(); - Environment.Exit(1); - } - - if (action == Action.Install) - { - Console.WriteLine("Attempting to enable Unity audio..."); - UnityAudioFixer.EnableUnityAudio(); - Console.WriteLine("Unity audio enabled."); - Environment.Exit(0); - } - else if (action == Action.Uninstall) - { - Console.WriteLine("Attempting to disable Unity audio..."); - UnityAudioFixer.DisableUnityAudio(); - Console.WriteLine("Unity audio disabled."); - Environment.Exit(0); - } - else if (action == Action.CleanUp) - { - Console.WriteLine("Attempting to clean up Nitrox and previous QMM installs..."); - CleanUp.Initialize(gameRootDirectory, managedDirectory); - Console.WriteLine("Clean-up complete."); - Environment.Exit(0); - } - else - { - Console.Write("Clean up install? [Y/N] > "); - ConsoleKey key = Console.ReadKey().Key; - Console.WriteLine(); - - if (key == ConsoleKey.Y) - { - Console.WriteLine("Attempting to clean up Nitrox and previous QMM installs..."); - CleanUp.Initialize(gameRootDirectory, managedDirectory); - Console.WriteLine("Clean-up complete."); - Console.WriteLine(); - } - - Console.Write("Enable Unity sound? [Y/N] > "); - key = Console.ReadKey().Key; - Console.WriteLine(); - - if (key == ConsoleKey.Y) - { - Console.WriteLine("Attempting to enable Unity audio..."); - UnityAudioFixer.EnableUnityAudio(); - Console.WriteLine("Unity audio enabled."); - Console.WriteLine("Press any key to exit..."); - Console.ReadKey(); - Environment.Exit(0); - } - else if (key == ConsoleKey.N) - { - Console.WriteLine("Attempting to disable Unity audio..."); - UnityAudioFixer.DisableUnityAudio(); - Console.WriteLine("Unity audio disabled."); - Console.WriteLine("Press any key to exit..."); - Console.ReadKey(); - Environment.Exit(0); - } - } - } - catch (Exception e) - { - Console.WriteLine("EXCEPTION CAUGHT!"); - Console.WriteLine(e.ToString()); - Console.WriteLine(); - Console.ReadKey(); - Environment.Exit(2); - } - } - - private static OS GetOS() - { - string windowsDirectory = Path.Combine(Environment.CurrentDirectory, "../../.."); - string macDirectory = Path.Combine(Environment.CurrentDirectory, "../../../../../.."); - - bool subnautica = false, belowzero = false; - - // Check if the device is running Windows OS - bool onWindows = false, onWindowsSN, onWindowsBZ; - if (Directory.Exists(windowsDirectory)) - { - try - { - // Try to get the Subnautica executable - // This method throws a lot of exceptions - onWindowsSN = Directory.GetFiles(windowsDirectory, "Subnautica.exe", SearchOption.TopDirectoryOnly).Length > 0; - onWindowsBZ = Directory.GetFiles(windowsDirectory, "SubnauticaZero.exe", SearchOption.TopDirectoryOnly).Length > 0; - - onWindows = onWindowsSN || onWindowsBZ; - - subnautica = subnautica || onWindowsSN; - belowzero = belowzero || onWindowsBZ; - } - catch (Exception) - { - // If an exception was thrown, the file probably isn't there - onWindows = false; - } - } - - // Check if the device is running Mac OS - bool onMac = false, onMacSN, onMacBZ; - if (Directory.Exists(macDirectory)) - { - try - { - // Try to get the Subnautica executable - // This method throws a lot of exceptions - // On mac, .app files act as files and folders at the same time, but they are detected as folders. - onMacSN = Directory.GetDirectories(macDirectory, "Subnautica.app", SearchOption.TopDirectoryOnly).Length > 0; - onMacBZ = Directory.GetDirectories(macDirectory, "SubnauticaZero.app", SearchOption.TopDirectoryOnly).Length > 0; - - onMac = onMacSN || onMacBZ; - - subnautica = subnautica || onMacSN; - belowzero = belowzero || onMacBZ; - } - catch (Exception) - { - // If an exception was thrown, the file probably isn't there - onMac = false; - } - } - - var os = OS.None; - if (onWindows) - { - os |= OS.Windows; - } - if (onMac) - { - os |= OS.Mac; - } - return os; - } - - private static void InitAssemblyResolver() - { - AppDomain.CurrentDomain.AssemblyResolve += ResolveAssemblies; - } - - internal static string GameRootDirectory => Path.Combine(Environment.CurrentDirectory, "../../.."); - internal static string BepInExRootDirectory => Path.Combine(GameRootDirectory, "BepInEx"); - internal static string BepInExAssemblyDirectory => Path.Combine(BepInExRootDirectory, "core"); - internal static string QModManagerPluginDirectory => Path.Combine(BepInExRootDirectory, "plugins", "QModManager"); - internal static string QModManagerPatcherDirectory => Path.Combine(BepInExRootDirectory, "patchers", "QModManager"); - - private static Assembly ResolveAssemblies(object sender, ResolveEventArgs e) - { - var name = new AssemblyName(e.Name); - - if (Utility.TryResolveDllAssembly(name, BepInExRootDirectory, out var assembly) || // First try BepInEx assemblies - Utility.TryResolveDllAssembly(name, QModManagerPluginDirectory, out assembly) || // Then QModManager plugins - Utility.TryResolveDllAssembly(name, QModManagerPatcherDirectory, out assembly)) // Then QModManager patchers - { - - return assembly; - } - else - { - return null; - } - } - - #region Disable exit - - internal static void DisableExit() - { - DisableExitButton(); - Console.CancelKeyPress += CancelKeyPress; - Console.TreatControlCAsInput = true; - } - - private static void DisableExitButton() - { - EnableMenuItem(GetSystemMenu(GetConsoleWindow(), false), 0xF060, 0x1); - } - - private static void CancelKeyPress(object sender, ConsoleCancelEventArgs e) - { - e.Cancel = true; - } - - [DllImport("user32.dll")] private static extern int EnableMenuItem(IntPtr tMenu, int targetItem, int targetStatus); - [DllImport("user32.dll")] private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); - [DllImport("kernel32.dll", ExactSpelling = true)] private static extern IntPtr GetConsoleWindow(); - - #endregion - } -} diff --git a/Executable/Properties/AssemblyInfo.cs b/Executable/Properties/AssemblyInfo.cs deleted file mode 100644 index 1b7e0557..00000000 --- a/Executable/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -[assembly: AssemblyTitle("QModManagerExecutable")] -[assembly: AssemblyDescription("Config based patch management for Subnautica and Subnautica: Below Zero")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("QModManager")] -[assembly: AssemblyProduct("QModManagerExecutable")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -[assembly: ComVisible(false)] - -[assembly: AssemblyVersion("4.3.0")] -[assembly: AssemblyFileVersion("4.3.0")] diff --git a/Executable/Utility.cs b/Executable/Utility.cs deleted file mode 100644 index 36f1503c..00000000 --- a/Executable/Utility.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; - -namespace QModManager -{ - public static class Utility - { - /// - /// Try to resolve and load the given assembly DLL. - /// - /// Name of the assembly, of the type . - /// Directory to search the assembly from. - /// The loaded assembly. - /// True, if the assembly was found and loaded. Otherwise, false. - private static bool TryResolveDllAssembly(AssemblyName assemblyName, string directory, Func loader, out T assembly) where T : class - { - assembly = null; - - var potentialDirectories = new List { directory }; - - potentialDirectories.AddRange(Directory.GetDirectories(directory, "*", SearchOption.AllDirectories)); - - foreach (string subDirectory in potentialDirectories) - { - string path = Path.Combine(subDirectory, $"{assemblyName.Name}.dll"); - - if (!File.Exists(path)) - continue; - - try - { - assembly = loader(path); - } - catch (Exception) - { - continue; - } - - return true; - } - - return false; - } - - /// - /// Try to resolve and load the given assembly DLL. - /// - /// Name of the assembly, of the type . - /// Directory to search the assembly from. - /// The loaded assembly. - /// True, if the assembly was found and loaded. Otherwise, false. - public static bool TryResolveDllAssembly(AssemblyName assemblyName, string directory, out Assembly assembly) - { - return TryResolveDllAssembly(assemblyName, directory, Assembly.LoadFile, out assembly); - } - } -} diff --git a/Executable/app.config b/Executable/app.config deleted file mode 100644 index 312bb3f2..00000000 --- a/Executable/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Executable/icon.ico b/Executable/icon.ico deleted file mode 100644 index 0d39dee8..00000000 Binary files a/Executable/icon.ico and /dev/null differ diff --git a/Installer/BZ.EXP.iss b/Installer/BZ.EXP.iss deleted file mode 100644 index 04b9d9f1..00000000 --- a/Installer/BZ.EXP.iss +++ /dev/null @@ -1,606 +0,0 @@ -; Throws an error if the version used to compile this script is not unicode -; This ensures that the application is built correctly -#if !Defined(UNICODE) - #error A unicode version of Inno Setup is required to compile this script -#endif - -#define Name "QModManager" ; The name of the game will be added after it -#define Version "4.3.0" -#define Author "QModManager" -#define URL "https://github.com/QModManager/QModManager" -#define SupportURL "https://discord.gg/UpWuWwq" -#define UpdatesURL "https://nexusmods.com" ; The link to the mod will be added after it - -[Setup] -AllowNetworkDrive=no -AllowUNCPath=no -AlwaysShowDirOnReadyPage=yes -AppendDefaultDirName=no -AppId={code:GetGUID} -AppName={#Name} -AppPublisher={#Author} -AppPublisherURL={#URL} -AppSupportURL={#SupportURL} -AppUpdatesURL={code:GetURL} -AppVerName={#Name} {#Version} -AppVersion={#Version} -Compression=lzma -DefaultDirName=. -DirExistsWarning=no -DisableDirPage=no -DisableProgramGroupPage=yes -DisableWelcomePage=no -EnableDirDoesntExistWarning=yes -OutputBaseFilename=QModManager_{#Version}_BelowZero_Experimental_Setup -OutputDir=.\ -PrivilegesRequired=admin -SetupIconFile=..\..\Assets\Icon.ico -SolidCompression=yes -UninstallDisplayIcon={app}\BepInEx\patchers\QModManager\QModManager.exe -UninstallDisplayName={code:GetName} -UsePreviousAppDir=no -UsePreviousLanguage=no -WizardImageFile=..\..\Assets\InstallerImage.bmp -WizardSmallImageFile=..\..\Assets\InstallerSmallImage.bmp -UsePreviousSetupType=False -UsePreviousTasks=False -CloseApplications=False - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Files] -; Files used by the installer but not required by QModManager itself -; Installer theme -Source: "..\..\Dependencies\VclStylesinno.dll"; Flags: DontCopy -Source: "..\..\Dependencies\Carbon.vsf"; Flags: DontCopy -; Installer extensions -Source: "InstallerExtensions.dll"; Flags: DontCopy - -; Files required by QModManager itself -; Dependencies -Source: "..\..\packages\AssetsTools.NET.2.0.9\lib\net40\AssetsTools.NET.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "..\..\Dependencies\cldb.dat"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "..\..\Dependencies\Oculus.Newtonsoft.Json.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; QMM -Source: "QModInstaller.dll"; DestDir: "{app}\BepInEx\plugins\QModManager"; Flags: ignoreversion; -Source: "QModInstaller.xml"; DestDir: "{app}\BepInEx\plugins\QModManager"; Flags: ignoreversion; -Source: "QModManager.exe"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; BepInEx patchers -Source: "QModManager.OculusNewtonsoftRedirect.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.QModPluginGenerator.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.UnityAudioFixer.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.UnityAudioFixer.xml"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; BepInEx -Source: "..\..\Dependencies\BepInEx\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs replacesameversion sharedfile uninsnosharedfileprompt; -Source: "..\..\Dependencies\BZ.EXP\BepInEx.cfg"; DestDir: "{app}\BepInEx\config"; Flags: ignoreversion sharedfile uninsnosharedfileprompt; - -[Dirs] -Name: "{app}\QMods" - -[Run] -Filename: "{app}\BepInEx\patchers\QModManager\QModManager.exe"; Parameters: "-c"; Tasks: cleanup - -[UninstallRun] -Filename: "{app}\BepInEx\patchers\QModManager\QModManager.exe"; Parameters: "-u"; - -[Messages] -; BeveledLabel={#Name} {#Version} -WizardSelectDir=Select install location -SelectDirLabel3=Please select the install folder of the game. -SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.%nIf you have the game on steam, you can also use the buttons on the bottom left to auto-complete the install path for the chosen game. -ReadyLabel2a=By installing, you agree to allow QModManager to send external web requests, most often to check for updates. You can disable this option at any time in the Mods tab of the Subnautica options menu. -ExitSetupMessage=Setup is not complete. If you exit now, {#Name} will not be installed.%nExit Setup? -WizardSelectComponents=Review Install -SelectComponentsDesc= -SelectComponentsLabel2= - -[Types] -; Used to disable the three Full, Compact and Custom types -Name: "select"; Description: "QModManager"; Flags: IsCustom; - -[Components] -Name: "qmm"; Description: "QModManager"; Flags: fixed; Types: select; -Name: "qmm\bz"; Description: "Install for Below Zero"; Flags: exclusive fixed; - -[Tasks] -Name: "cleanup"; Description: "(Recommended) Clean up after previous Nitrox and QMM installs"; - -[Code] -// Import stuff from InstallerExtensions.dll -function PathsEqual(pathone, pathtwo: WideString): Boolean; external 'PathsEqual@files:InstallerExtensions.dll stdcall setuponly delayload'; - -function IsBelowZero(path: String): Boolean; -begin - if (FileExists(path + '\SubnauticaZero.exe')) and (FileExists(path + '\SubnauticaZero_Data\Managed\Assembly-CSharp.dll')) then - begin - Result := true - Exit - end - else - begin - Result := false - Exit - end -end; -function IsBelowZeroApp(): Boolean; -begin - Result := IsBelowZero(ExpandConstant('{app}')); -end; - -function GetName(def: string): String; -begin - if (IsBelowZeroApp()) then - begin - Result := '{#Name} (Below Zero)' - end - else - begin - Result := ExpandConstant('{app}') - end -end; - -function GetURL(def: string): String; -begin - if (IsBelowZeroApp()) then - begin - Result := '{#UpdatesURL}/subnauticabelowzero/mods/1' - end - else - begin - Result := '{#UpdatesURL}' - end -end; - -function CurPageChanged_SelectComponents(CurPageID: Integer): Boolean; -var - Index: Integer; - app: String; -begin - if CurPageID = wpSelectComponents then - begin - try - app := ExpandConstant('{app}') - except - app := 'null' - end; - if not IsBelowZero(app) then - begin - WizardForm.SelectComponentsLabel.Caption := 'No game detected in this folder, cannot install' - Exit - end; - Index := WizardForm.ComponentsList.Items.IndexOf('Install for Below Zero') - if Index <> -1 then - begin - if IsBelowZero(app) then - begin - WizardForm.ComponentsList.Checked[Index] := true - WizardForm.SelectComponentsLabel.Caption := 'Install QModManager for Below Zero' - end - end - end -end; - -function GetDir(folder: String; name: String): String; -var -I : Integer; -P : Integer; -steamInstallPath : String; -configFile : String; -fileLines: TArrayOfString; -begin - steamInstallPath := '' - RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Valve\Steam', 'InstallPath', steamInstallPath) - if (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '.exe')) and (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '_Data\Managed\Assembly-CSharp.dll')) then - begin - Result := steamInstallPath + '\steamapps\common\' + folder - Exit - end - else - begin - configFile := steamInstallPath + '\config\config.vdf' - if FileExists(configFile) then - begin - if LoadStringsFromFile(configFile, FileLines) then - begin - for I := 0 to GetArrayLength(FileLines) - 1 do - begin - P := Pos('BaseInstallFolder_', FileLines[I]) - if P > 0 then - begin - steamInstallPath := Copy(FileLines[I], P + 23, 3) + Copy(FileLines[I], P + 27, Length(FileLines[I]) - P - 27); - if (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '.exe')) and (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '_Data\Managed\Assembly-CSharp.dll')) then // If the folder is correct - begin - Result := steamInstallPath + '\steamapps\common\' + folder - Exit - end - end - end - end - end - end; - Result := 'none' - Exit -end; - -var ACLabel: TLabel; -var BelowZeroButton: TNewRadioButton; - -procedure BelowZeroButtonOnClick(Sender: TObject); -begin - WizardForm.DirEdit.Text := GetDir('SubnauticaZero', 'SubnauticaZero') - BelowZeroButton.Checked := true -end; - -function InitializeWizard_AddButtons(): Boolean; -begin - ACLabel := TLabel.Create(WizardForm) - with ACLabel do - begin - Parent := WizardForm - Caption := 'Get path from Steam for:' - Left := WizardForm.SelectDirLabel.Left / 3 - Top := WizardForm.BackButton.Top - WizardForm.BackButton.Top / 90 - end; - - BelowZeroButton := TNewRadioButton.Create(WizardForm) - with BelowZeroButton do - begin - Parent := WizardForm - Caption := 'Below Zero' - OnClick := @BelowZeroButtonOnClick - Left := WizardForm.SelectDirLabel.Left + WizardForm.SelectDirLabel.Left / 30 - Top := WizardForm.BackButton.Top + 10 - Height := WizardForm.BackButton.Height - Enabled := True - end; -end; - -function CurPageChanged_AddButtons(CurPageID: Integer): Boolean; -begin - if CurPageID = wpSelectDir then - begin - WizardForm.DirEdit.Text := '' - if GetDir('SubnauticaZero', 'SubnauticaZero') = 'none' then - begin - BelowZeroButton.Enabled := false - end; - - if BelowZeroButton.Enabled then - begin - WizardForm.DirEdit.Text := GetDir('SubnauticaZero', 'SubnauticaZero') - BelowZeroButton.Checked := true - end; - end; - BelowZeroButton.Visible := CurPageID = wpSelectDir - ACLabel.Visible := CurPageID = wpSelectDir -end; - -var DirEditOnChangePrev: TNotifyEvent; - -procedure DirEditOnChange(Sender: TObject); -var - S: String; -begin - if Pos('subnauticazero', LowerCase(WizardForm.DirEdit.Text)) <> 0 then - begin - if PathsEqual(WizardForm.DirEdit.Text, GetDir('SubnauticaZero', 'SubnauticaZero')) then - begin - BelowZeroButton.Checked := true - end - else - begin - BelowZeroButton.Checked := false; - end - end - else - begin - BelowZeroButton.Checked := false; - end; - - if (Pos('://', WizardForm.DirEdit.Text) <> 0) or (Pos(':\\', WizardForm.DirEdit.Text) <> 0) then - begin - S := WizardForm.DirEdit.Text; - StringChangeEx(S, '://', ':/', true); - StringChangeEx(S, ':\\', ':\', true); - WizardForm.DirEdit.Text := S; - end -end; - -function InitializeWizard_DirOnChange(): Boolean; -begin - DirEditOnChangePrev := WizardForm.DirEdit.OnChange - WizardForm.DirEdit.OnChange := @DirEditOnChange -end; - -var appIsSet: Boolean; - -function GetGUID(def: String): String; -begin - if not appIsSet then // The installer tries to get the GUID at startup to use previous options such as install path or install settings. As QModManager's GUID is defined AFTER the path is selected, it doesn't need to provide a value - begin - Result := '' - Exit - end; - if IsBelowZero(ExpandConstant('{app}')) then - begin - Result := '{A535470D-3403-46A2-8D44-28AD4B90C9A3}' - Exit - end -end; - -function IsAppRunning(const FileName : string): Boolean; -var - FSWbemLocator: Variant; - FWMIService : Variant; - FWbemObjectSet: Variant; -begin - Result := false; - FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator'); - FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', ''); - FWbemObjectSet := - FWMIService.ExecQuery( - Format('SELECT Name FROM Win32_Process Where Name="%s"', [FileName])); - Result := (FWbemObjectSet.Count > 0); - FWbemObjectSet := Unassigned; - FWMIService := Unassigned; - FSWbemLocator := Unassigned; -end; - -// Imports some stuff from VclStylesInno.dll -procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleW@files:VclStylesInno.dll stdcall'; -procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall'; - -// Check for .NET version -- code from http://www.kynosarges.de/DotNetVersion.html -function IsDotNetDetected(version: string; service: cardinal): boolean; -// Indicates whether the specified version and service pack of the .NET Framework is installed. -// -// version -- Specify one of these strings for the required .NET Framework version: -// 'v1.1' .NET Framework 1.1 -// 'v2.0' .NET Framework 2.0 -// 'v3.0' .NET Framework 3.0 -// 'v3.5' .NET Framework 3.5 -// 'v4\Client' .NET Framework 4.0 Client Profile -// 'v4\Full' .NET Framework 4.0 Full Installation -// 'v4.5' .NET Framework 4.5 -// 'v4.5.1' .NET Framework 4.5.1 -// 'v4.5.2' .NET Framework 4.5.2 -// 'v4.6' .NET Framework 4.6 -// 'v4.6.1' .NET Framework 4.6.1 -// 'v4.6.2' .NET Framework 4.6.2 -// 'v4.7' .NET Framework 4.7 -// -// service -- Specify any non-negative integer for the required service pack level: -// 0 No service packs required -// 1, 2, etc. Service pack 1, 2, etc. required -var - key, versionKey: string; - install, release, serviceCount, versionRelease: cardinal; - success: boolean; -begin - versionKey := version; - versionRelease := 0; - - // .NET 1.1 and 2.0 embed release number in version key - if version = 'v1.1' then begin - versionKey := 'v1.1.4322'; - end else if version = 'v2.0' then begin - versionKey := 'v2.0.50727'; - end - - // .NET 4.5 and newer install as update to .NET 4.0 Full - else if Pos('v4.', version) = 1 then begin - versionKey := 'v4\Full'; - case version of - 'v4.5': versionRelease := 378389; - 'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older - 'v4.5.2': versionRelease := 379893; - 'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older - 'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update - 'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update - 'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update - end; - end; - - // installation key group for all .NET versions - key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey; - - // .NET 3.0 uses value InstallSuccess in subkey Setup - if Pos('v3.0', version) = 1 then begin - success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install); - end else begin - success := RegQueryDWordValue(HKLM, key, 'Install', install); - end; - - // .NET 4.0 and newer use value Servicing instead of SP - if Pos('v4', version) = 1 then begin - success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount); - end else begin - success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount); - end; - - // .NET 4.5 and newer use additional value Release - if versionRelease > 0 then begin - success := success and RegQueryDWordValue(HKLM, key, 'Release', release); - success := success and (release >= versionRelease); - end; - - result := success and (install = 1) and (serviceCount >= service); -end; - -function InitializeSetup(): Boolean; -var - ErrCode: Integer; -begin - if not IsDotNetDetected('v4\Full', 0) then - begin - if MsgBox('QModManager requires Microsoft .NET Framework 4.0' + #13#10 + 'Would you like to install it now?', mbCriticalError, MB_YESNO) = IDYES then - begin - if not ShellExec('open', 'https://dotnet.microsoft.com/download/dotnet-framework/net40', '', '', SW_SHOW, ewNoWait, ErrCode) then - begin - SysErrorMessage(ErrCode); - end - end; - result := false; - Exit - end; - appIsSet := false - if IsAppRunning('SubnauticaZero.exe') then - begin - MsgBox('You need to close Below Zero before installing QModManager.' + #13#10 + 'If the game is not running, please reboot your computer.', mbError, MB_OK); - Result := false - end - else - begin - // Load skin - ExtractTemporaryFile('Carbon.vsf'); - LoadVCLStyle(ExpandConstant('{tmp}\Carbon.vsf')); - Result := true - end -end; - -function IsPreviousVersionInstalled: Boolean; -var - uninstallRegKey: String; - previousVersion: String; -begin - uninstallRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetGuid('') + '_is1'; - previousVersion := ''; - Result := (RegKeyExists(HKLM, uninstallRegKey) or RegKeyExists(HKCU, uninstallRegKey)); -end; - -function GetUninstallString: string; -var - uninstallRegKey: String; - uninstallString: String; -begin - Result := ''; - uninstallRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetGuid('') + '_is1'; - uninstallString := ''; - if not RegQueryStringValue(HKLM, uninstallRegKey, 'UninstallString', uninstallString) then - RegQueryStringValue(HKCU, uninstallRegKey, 'UninstallString', uninstallString); - Result := uninstallString; -end; - -function IsUpgrade: Boolean; -begin - Result := (GetUninstallString() <> ''); -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -var - uninstallString: String; - resultCode: Integer; -begin - if CurPageID = wpSelectComponents then - appIsSet := true; - - Result := true; -end; - -function PrepareToInstall(var NeedsRestart: boolean): string; -var - uninstallString: string; - resultCode: integer; -begin - NeedsRestart := false; - - if IsPreviousVersionInstalled() then - begin - uninstallString := RemoveQuotes(GetUninstallString()); - if FileExists(uninstallString) then - begin - Exec(uninstallString, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, resultCode); - if IsPreviousVersionInstalled() then - Result := 'Previous installation must be uninstalled to continue.'; - end; - end; -end; - -var TypesComboOnChangePrev: TNotifyEvent; - -procedure ComponentsListCheckChanges; -begin - WizardForm.NextButton.Enabled := (WizardSelectedComponents(false) <> '') -end; - -procedure ComponentsListClickCheck(Sender: TObject); -begin - ComponentsListCheckChanges -end; - -procedure TypesComboOnChange(Sender: TObject); -begin - TypesComboOnChangePrev(Sender) - ComponentsListCheckChanges -end; - -procedure CurPageChanged(CurPageID: Integer); -begin - CurPageChanged_SelectComponents(CurPageID) - CurPageChanged_AddButtons(CurPageID) - if CurPageID = wpSelectComponents then - begin - ComponentsListCheckChanges; - end -end; - -procedure InitializeWizard(); -begin - WizardForm.ComponentsList.OnClickCheck := @ComponentsListClickCheck - TypesComboOnChangePrev := WizardForm.TypesCombo.OnChange - WizardForm.TypesCombo.OnChange := @TypesComboOnChange - InitializeWizard_AddButtons - InitializeWizard_DirOnChange -end; - -procedure UnloadInstallerExtensions(); - var - FilePath: string; - BatchPath: string; - S: TArrayOfString; - ResultCode: Integer; -begin - FilePath := ExpandConstant('{tmp}\InstallerExtensions.dll'); - if not FileExists(FilePath) then - begin - Log(Format('File %s does not exist', [FilePath])); - end - else - begin - BatchPath := - ExpandConstant('{%TEMP}\') + - 'delete_' + ExtractFileName(ExpandConstant('{tmp}')) + '.bat'; - SetArrayLength(S, 7); - S[0] := ':loop'; - S[1] := 'del "' + FilePath + '"'; - S[2] := 'if not exist "' + FilePath + '" goto end'; - S[3] := 'goto loop'; - S[4] := ':end'; - S[5] := 'rd "' + ExpandConstant('{tmp}') + '"'; - S[6] := 'del "' + BatchPath + '"'; - if not SaveStringsToFile(BatchPath, S, False) then - begin - Log(Format('Error creating batch file %s to delete %s', [BatchPath, FilePath])); - end - else - if not Exec(BatchPath, '', '', SW_HIDE, ewNoWait, ResultCode) then - begin - Log(Format('Error executing batch file %s to delete %s', [BatchPath, FilePath])); - end - else - begin - Log(Format('Executed batch file %s to delete %s', [BatchPath, FilePath])); - end; - end; -end; - -procedure DeinitializeSetup(); -begin - // Unload skin - UnLoadVCLStyles; - UnloadInstallerExtensions; -end; diff --git a/Installer/BZ.STABLE.iss b/Installer/BZ.STABLE.iss deleted file mode 100644 index a111918d..00000000 --- a/Installer/BZ.STABLE.iss +++ /dev/null @@ -1,606 +0,0 @@ -; Throws an error if the version used to compile this script is not unicode -; This ensures that the application is built correctly -#if !Defined(UNICODE) - #error A unicode version of Inno Setup is required to compile this script -#endif - -#define Name "QModManager" ; The name of the game will be added after it -#define Version "4.3.0" -#define Author "QModManager" -#define URL "https://github.com/QModManager/QModManager" -#define SupportURL "https://discord.gg/UpWuWwq" -#define UpdatesURL "https://nexusmods.com" ; The link to the mod will be added after it - -[Setup] -AllowNetworkDrive=no -AllowUNCPath=no -AlwaysShowDirOnReadyPage=yes -AppendDefaultDirName=no -AppId={code:GetGUID} -AppName={#Name} -AppPublisher={#Author} -AppPublisherURL={#URL} -AppSupportURL={#SupportURL} -AppUpdatesURL={code:GetURL} -AppVerName={#Name} {#Version} -AppVersion={#Version} -Compression=lzma -DefaultDirName=. -DirExistsWarning=no -DisableDirPage=no -DisableProgramGroupPage=yes -DisableWelcomePage=no -EnableDirDoesntExistWarning=yes -OutputBaseFilename=QModManager_{#Version}_BelowZero_Setup -OutputDir=.\ -PrivilegesRequired=admin -SetupIconFile=..\..\Assets\Icon.ico -SolidCompression=yes -UninstallDisplayIcon={app}\BepInEx\patchers\QModManager\QModManager.exe -UninstallDisplayName={code:GetName} -UsePreviousAppDir=no -UsePreviousLanguage=no -WizardImageFile=..\..\Assets\InstallerImage.bmp -WizardSmallImageFile=..\..\Assets\InstallerSmallImage.bmp -UsePreviousSetupType=False -UsePreviousTasks=False -CloseApplications=False - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Files] -; Files used by the installer but not required by QModManager itself -; Installer theme -Source: "..\..\Dependencies\VclStylesinno.dll"; Flags: DontCopy -Source: "..\..\Dependencies\Carbon.vsf"; Flags: DontCopy -; Installer extensions -Source: "InstallerExtensions.dll"; Flags: DontCopy - -; Files required by QModManager itself -; Dependencies -Source: "..\..\packages\AssetsTools.NET.2.0.9\lib\net40\AssetsTools.NET.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "..\..\Dependencies\cldb.dat"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "..\..\Dependencies\Oculus.Newtonsoft.Json.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; QMM -Source: "QModInstaller.dll"; DestDir: "{app}\BepInEx\plugins\QModManager"; Flags: ignoreversion; -Source: "QModInstaller.xml"; DestDir: "{app}\BepInEx\plugins\QModManager"; Flags: ignoreversion; -Source: "QModManager.exe"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; BepInEx patchers -Source: "QModManager.OculusNewtonsoftRedirect.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.QModPluginGenerator.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.UnityAudioFixer.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.UnityAudioFixer.xml"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; BepInEx -Source: "..\..\Dependencies\BepInEx\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs replacesameversion sharedfile uninsnosharedfileprompt; -Source: "..\..\Dependencies\BZ.STABLE\BepInEx.cfg"; DestDir: "{app}\BepInEx\config"; Flags: ignoreversion sharedfile uninsnosharedfileprompt; - -[Dirs] -Name: "{app}\QMods" - -[Run] -Filename: "{app}\BepInEx\patchers\QModManager\QModManager.exe"; Parameters: "-c"; Tasks: cleanup - -[UninstallRun] -Filename: "{app}\BepInEx\patchers\QModManager\QModManager.exe"; Parameters: "-u"; - -[Messages] -; BeveledLabel={#Name} {#Version} -WizardSelectDir=Select install location -SelectDirLabel3=Please select the install folder of the game. -SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.%nIf you have the game on steam, you can also use the buttons on the bottom left to auto-complete the install path for the chosen game. -ReadyLabel2a=By installing, you agree to allow QModManager to send external web requests, most often to check for updates. You can disable this option at any time in the Mods tab of the Subnautica options menu. -ExitSetupMessage=Setup is not complete. If you exit now, {#Name} will not be installed.%nExit Setup? -WizardSelectComponents=Review Install -SelectComponentsDesc= -SelectComponentsLabel2= - -[Types] -; Used to disable the three Full, Compact and Custom types -Name: "select"; Description: "QModManager"; Flags: IsCustom; - -[Components] -Name: "qmm"; Description: "QModManager"; Flags: fixed; Types: select; -Name: "qmm\bz"; Description: "Install for Below Zero"; Flags: exclusive fixed; - -[Tasks] -Name: "cleanup"; Description: "(Recommended) Clean up after previous Nitrox and QMM installs"; - -[Code] -// Import stuff from InstallerExtensions.dll -function PathsEqual(pathone, pathtwo: WideString): Boolean; external 'PathsEqual@files:InstallerExtensions.dll stdcall setuponly delayload'; - -function IsBelowZero(path: String): Boolean; -begin - if (FileExists(path + '\SubnauticaZero.exe')) and (FileExists(path + '\SubnauticaZero_Data\Managed\Assembly-CSharp.dll')) then - begin - Result := true - Exit - end - else - begin - Result := false - Exit - end -end; -function IsBelowZeroApp(): Boolean; -begin - Result := IsBelowZero(ExpandConstant('{app}')); -end; - -function GetName(def: string): String; -begin - if (IsBelowZeroApp()) then - begin - Result := '{#Name} (Below Zero)' - end - else - begin - Result := ExpandConstant('{app}') - end -end; - -function GetURL(def: string): String; -begin - if (IsBelowZeroApp()) then - begin - Result := '{#UpdatesURL}/subnauticabelowzero/mods/1' - end - else - begin - Result := '{#UpdatesURL}' - end -end; - -function CurPageChanged_SelectComponents(CurPageID: Integer): Boolean; -var - Index: Integer; - app: String; -begin - if CurPageID = wpSelectComponents then - begin - try - app := ExpandConstant('{app}') - except - app := 'null' - end; - if not IsBelowZero(app) then - begin - WizardForm.SelectComponentsLabel.Caption := 'No game detected in this folder, cannot install' - Exit - end; - Index := WizardForm.ComponentsList.Items.IndexOf('Install for Below Zero') - if Index <> -1 then - begin - if IsBelowZero(app) then - begin - WizardForm.ComponentsList.Checked[Index] := true - WizardForm.SelectComponentsLabel.Caption := 'Install QModManager for Below Zero' - end - end - end -end; - -function GetDir(folder: String; name: String): String; -var -I : Integer; -P : Integer; -steamInstallPath : String; -configFile : String; -fileLines: TArrayOfString; -begin - steamInstallPath := '' - RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Valve\Steam', 'InstallPath', steamInstallPath) - if (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '.exe')) and (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '_Data\Managed\Assembly-CSharp.dll')) then - begin - Result := steamInstallPath + '\steamapps\common\' + folder - Exit - end - else - begin - configFile := steamInstallPath + '\config\config.vdf' - if FileExists(configFile) then - begin - if LoadStringsFromFile(configFile, FileLines) then - begin - for I := 0 to GetArrayLength(FileLines) - 1 do - begin - P := Pos('BaseInstallFolder_', FileLines[I]) - if P > 0 then - begin - steamInstallPath := Copy(FileLines[I], P + 23, 3) + Copy(FileLines[I], P + 27, Length(FileLines[I]) - P - 27); - if (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '.exe')) and (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '_Data\Managed\Assembly-CSharp.dll')) then // If the folder is correct - begin - Result := steamInstallPath + '\steamapps\common\' + folder - Exit - end - end - end - end - end - end; - Result := 'none' - Exit -end; - -var ACLabel: TLabel; -var BelowZeroButton: TNewRadioButton; - -procedure BelowZeroButtonOnClick(Sender: TObject); -begin - WizardForm.DirEdit.Text := GetDir('SubnauticaZero', 'SubnauticaZero') - BelowZeroButton.Checked := true -end; - -function InitializeWizard_AddButtons(): Boolean; -begin - ACLabel := TLabel.Create(WizardForm) - with ACLabel do - begin - Parent := WizardForm - Caption := 'Get path from Steam for:' - Left := WizardForm.SelectDirLabel.Left / 3 - Top := WizardForm.BackButton.Top - WizardForm.BackButton.Top / 90 - end; - - BelowZeroButton := TNewRadioButton.Create(WizardForm) - with BelowZeroButton do - begin - Parent := WizardForm - Caption := 'Below Zero' - OnClick := @BelowZeroButtonOnClick - Left := WizardForm.SelectDirLabel.Left + WizardForm.SelectDirLabel.Left / 30 - Top := WizardForm.BackButton.Top + 10 - Height := WizardForm.BackButton.Height - Enabled := True - end; -end; - -function CurPageChanged_AddButtons(CurPageID: Integer): Boolean; -begin - if CurPageID = wpSelectDir then - begin - WizardForm.DirEdit.Text := '' - if GetDir('SubnauticaZero', 'SubnauticaZero') = 'none' then - begin - BelowZeroButton.Enabled := false - end; - - if BelowZeroButton.Enabled then - begin - WizardForm.DirEdit.Text := GetDir('SubnauticaZero', 'SubnauticaZero') - BelowZeroButton.Checked := true - end; - end; - BelowZeroButton.Visible := CurPageID = wpSelectDir - ACLabel.Visible := CurPageID = wpSelectDir -end; - -var DirEditOnChangePrev: TNotifyEvent; - -procedure DirEditOnChange(Sender: TObject); -var - S: String; -begin - if Pos('subnauticazero', LowerCase(WizardForm.DirEdit.Text)) <> 0 then - begin - if PathsEqual(WizardForm.DirEdit.Text, GetDir('SubnauticaZero', 'SubnauticaZero')) then - begin - BelowZeroButton.Checked := true - end - else - begin - BelowZeroButton.Checked := false; - end - end - else - begin - BelowZeroButton.Checked := false; - end; - - if (Pos('://', WizardForm.DirEdit.Text) <> 0) or (Pos(':\\', WizardForm.DirEdit.Text) <> 0) then - begin - S := WizardForm.DirEdit.Text; - StringChangeEx(S, '://', ':/', true); - StringChangeEx(S, ':\\', ':\', true); - WizardForm.DirEdit.Text := S; - end -end; - -function InitializeWizard_DirOnChange(): Boolean; -begin - DirEditOnChangePrev := WizardForm.DirEdit.OnChange - WizardForm.DirEdit.OnChange := @DirEditOnChange -end; - -var appIsSet: Boolean; - -function GetGUID(def: String): String; -begin - if not appIsSet then // The installer tries to get the GUID at startup to use previous options such as install path or install settings. As QModManager's GUID is defined AFTER the path is selected, it doesn't need to provide a value - begin - Result := '' - Exit - end; - if IsBelowZero(ExpandConstant('{app}')) then - begin - Result := '{A535470D-3403-46A2-8D44-28AD4B90C9A3}' - Exit - end -end; - -function IsAppRunning(const FileName : string): Boolean; -var - FSWbemLocator: Variant; - FWMIService : Variant; - FWbemObjectSet: Variant; -begin - Result := false; - FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator'); - FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', ''); - FWbemObjectSet := - FWMIService.ExecQuery( - Format('SELECT Name FROM Win32_Process Where Name="%s"', [FileName])); - Result := (FWbemObjectSet.Count > 0); - FWbemObjectSet := Unassigned; - FWMIService := Unassigned; - FSWbemLocator := Unassigned; -end; - -// Imports some stuff from VclStylesInno.dll -procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleW@files:VclStylesInno.dll stdcall'; -procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall'; - -// Check for .NET version -- code from http://www.kynosarges.de/DotNetVersion.html -function IsDotNetDetected(version: string; service: cardinal): boolean; -// Indicates whether the specified version and service pack of the .NET Framework is installed. -// -// version -- Specify one of these strings for the required .NET Framework version: -// 'v1.1' .NET Framework 1.1 -// 'v2.0' .NET Framework 2.0 -// 'v3.0' .NET Framework 3.0 -// 'v3.5' .NET Framework 3.5 -// 'v4\Client' .NET Framework 4.0 Client Profile -// 'v4\Full' .NET Framework 4.0 Full Installation -// 'v4.5' .NET Framework 4.5 -// 'v4.5.1' .NET Framework 4.5.1 -// 'v4.5.2' .NET Framework 4.5.2 -// 'v4.6' .NET Framework 4.6 -// 'v4.6.1' .NET Framework 4.6.1 -// 'v4.6.2' .NET Framework 4.6.2 -// 'v4.7' .NET Framework 4.7 -// -// service -- Specify any non-negative integer for the required service pack level: -// 0 No service packs required -// 1, 2, etc. Service pack 1, 2, etc. required -var - key, versionKey: string; - install, release, serviceCount, versionRelease: cardinal; - success: boolean; -begin - versionKey := version; - versionRelease := 0; - - // .NET 1.1 and 2.0 embed release number in version key - if version = 'v1.1' then begin - versionKey := 'v1.1.4322'; - end else if version = 'v2.0' then begin - versionKey := 'v2.0.50727'; - end - - // .NET 4.5 and newer install as update to .NET 4.0 Full - else if Pos('v4.', version) = 1 then begin - versionKey := 'v4\Full'; - case version of - 'v4.5': versionRelease := 378389; - 'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older - 'v4.5.2': versionRelease := 379893; - 'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older - 'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update - 'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update - 'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update - end; - end; - - // installation key group for all .NET versions - key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey; - - // .NET 3.0 uses value InstallSuccess in subkey Setup - if Pos('v3.0', version) = 1 then begin - success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install); - end else begin - success := RegQueryDWordValue(HKLM, key, 'Install', install); - end; - - // .NET 4.0 and newer use value Servicing instead of SP - if Pos('v4', version) = 1 then begin - success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount); - end else begin - success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount); - end; - - // .NET 4.5 and newer use additional value Release - if versionRelease > 0 then begin - success := success and RegQueryDWordValue(HKLM, key, 'Release', release); - success := success and (release >= versionRelease); - end; - - result := success and (install = 1) and (serviceCount >= service); -end; - -function InitializeSetup(): Boolean; -var - ErrCode: Integer; -begin - if not IsDotNetDetected('v4\Full', 0) then - begin - if MsgBox('QModManager requires Microsoft .NET Framework 4.0' + #13#10 + 'Would you like to install it now?', mbCriticalError, MB_YESNO) = IDYES then - begin - if not ShellExec('open', 'https://dotnet.microsoft.com/download/dotnet-framework/net40', '', '', SW_SHOW, ewNoWait, ErrCode) then - begin - SysErrorMessage(ErrCode); - end - end; - result := false; - Exit - end; - appIsSet := false - if IsAppRunning('SubnauticaZero.exe') then - begin - MsgBox('You need to close Below Zero before installing QModManager.' + #13#10 + 'If the game is not running, please reboot your computer.', mbError, MB_OK); - Result := false - end - else - begin - // Load skin - ExtractTemporaryFile('Carbon.vsf'); - LoadVCLStyle(ExpandConstant('{tmp}\Carbon.vsf')); - Result := true - end -end; - -function IsPreviousVersionInstalled: Boolean; -var - uninstallRegKey: String; - previousVersion: String; -begin - uninstallRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetGuid('') + '_is1'; - previousVersion := ''; - Result := (RegKeyExists(HKLM, uninstallRegKey) or RegKeyExists(HKCU, uninstallRegKey)); -end; - -function GetUninstallString: string; -var - uninstallRegKey: String; - uninstallString: String; -begin - Result := ''; - uninstallRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetGuid('') + '_is1'; - uninstallString := ''; - if not RegQueryStringValue(HKLM, uninstallRegKey, 'UninstallString', uninstallString) then - RegQueryStringValue(HKCU, uninstallRegKey, 'UninstallString', uninstallString); - Result := uninstallString; -end; - -function IsUpgrade: Boolean; -begin - Result := (GetUninstallString() <> ''); -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -var - uninstallString: String; - resultCode: Integer; -begin - if CurPageID = wpSelectComponents then - appIsSet := true; - - Result := true; -end; - -function PrepareToInstall(var NeedsRestart: boolean): string; -var - uninstallString: string; - resultCode: integer; -begin - NeedsRestart := false; - - if IsPreviousVersionInstalled() then - begin - uninstallString := RemoveQuotes(GetUninstallString()); - if FileExists(uninstallString) then - begin - Exec(uninstallString, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, resultCode); - if IsPreviousVersionInstalled() then - Result := 'Previous installation must be uninstalled to continue.'; - end; - end; -end; - -var TypesComboOnChangePrev: TNotifyEvent; - -procedure ComponentsListCheckChanges; -begin - WizardForm.NextButton.Enabled := (WizardSelectedComponents(false) <> '') -end; - -procedure ComponentsListClickCheck(Sender: TObject); -begin - ComponentsListCheckChanges -end; - -procedure TypesComboOnChange(Sender: TObject); -begin - TypesComboOnChangePrev(Sender) - ComponentsListCheckChanges -end; - -procedure CurPageChanged(CurPageID: Integer); -begin - CurPageChanged_SelectComponents(CurPageID) - CurPageChanged_AddButtons(CurPageID) - if CurPageID = wpSelectComponents then - begin - ComponentsListCheckChanges; - end -end; - -procedure InitializeWizard(); -begin - WizardForm.ComponentsList.OnClickCheck := @ComponentsListClickCheck - TypesComboOnChangePrev := WizardForm.TypesCombo.OnChange - WizardForm.TypesCombo.OnChange := @TypesComboOnChange - InitializeWizard_AddButtons - InitializeWizard_DirOnChange -end; - -procedure UnloadInstallerExtensions(); - var - FilePath: string; - BatchPath: string; - S: TArrayOfString; - ResultCode: Integer; -begin - FilePath := ExpandConstant('{tmp}\InstallerExtensions.dll'); - if not FileExists(FilePath) then - begin - Log(Format('File %s does not exist', [FilePath])); - end - else - begin - BatchPath := - ExpandConstant('{%TEMP}\') + - 'delete_' + ExtractFileName(ExpandConstant('{tmp}')) + '.bat'; - SetArrayLength(S, 7); - S[0] := ':loop'; - S[1] := 'del "' + FilePath + '"'; - S[2] := 'if not exist "' + FilePath + '" goto end'; - S[3] := 'goto loop'; - S[4] := ':end'; - S[5] := 'rd "' + ExpandConstant('{tmp}') + '"'; - S[6] := 'del "' + BatchPath + '"'; - if not SaveStringsToFile(BatchPath, S, False) then - begin - Log(Format('Error creating batch file %s to delete %s', [BatchPath, FilePath])); - end - else - if not Exec(BatchPath, '', '', SW_HIDE, ewNoWait, ResultCode) then - begin - Log(Format('Error executing batch file %s to delete %s', [BatchPath, FilePath])); - end - else - begin - Log(Format('Executed batch file %s to delete %s', [BatchPath, FilePath])); - end; - end; -end; - -procedure DeinitializeSetup(); -begin - // Unload skin - UnLoadVCLStyles; - UnloadInstallerExtensions; -end; diff --git a/Installer/Extensions.cs b/Installer/Extensions.cs deleted file mode 100644 index 03cb4a84..00000000 --- a/Installer/Extensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -using RGiesecke.DllExport; -using System; -using System.IO; -using System.Runtime.InteropServices; - -namespace QModManager.Installer.Extensions -{ - public static class Extensions - { - [DllExport] - [return: MarshalAs(UnmanagedType.Bool)] - public static bool PathsEqual([MarshalAs(UnmanagedType.BStr)] string path1, [MarshalAs(UnmanagedType.BStr)] string path2) - { - string path1parsed = Path.GetFullPath(path1.Trim('/', '\\')); - string path2parsed = Path.GetFullPath(path2.Trim('/', '\\')); - - return string.Equals(path1parsed, path2parsed, StringComparison.OrdinalIgnoreCase); - } - } -} diff --git a/Installer/InstallerExtensions.csproj b/Installer/InstallerExtensions.csproj deleted file mode 100644 index 5042885a..00000000 --- a/Installer/InstallerExtensions.csproj +++ /dev/null @@ -1,78 +0,0 @@ - - - - - Debug - AnyCPU - {92726127-A08F-4843-BF96-4989CE1BF422} - Library - Properties - QModManager.Installer.Extensions - InstallerExtensions - v3.5 - 512 - true - - - ..\Build\$(Configuration)\ - SUBNAUTICA;SUBNAUTICA_STABLE - true - none - x86 - 7.3 - prompt - - - ..\Build\$(Configuration)\ - SUBNAUTICA;SUBNAUTICA_EXP - true - none - x86 - 7.3 - prompt - - - ..\Build\$(Configuration)\ - BELOWZERO;BELOWZERO_STABLE - true - none - x86 - 7.3 - prompt - - - ..\Build\$(Configuration)\ - BELOWZERO;BELOWZERO_EXP - true - none - x86 - 7.3 - prompt - - - - ..\packages\UnmanagedExports.1.2.7\lib\net\RGiesecke.DllExport.Metadata.dll - False - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Installer/Properties/AssemblyInfo.cs b/Installer/Properties/AssemblyInfo.cs deleted file mode 100644 index 82875126..00000000 --- a/Installer/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -[assembly: AssemblyTitle("QModManagerInstallerExtensions")] -[assembly: AssemblyDescription("Config based patch management for Subnautica and Subnautica: Below Zero")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("QModManager")] -[assembly: AssemblyProduct("QModManagerInstallerExtensions")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -[assembly: ComVisible(true)] - -[assembly: Guid("8c6c9a0b-80c4-43d2-89f2-749e6f09fdda")] - -[assembly: AssemblyVersion("4.3.0")] -[assembly: AssemblyFileVersion("4.3.0")] diff --git a/Installer/SN.EXP.iss b/Installer/SN.EXP.iss deleted file mode 100644 index 2532cf9d..00000000 --- a/Installer/SN.EXP.iss +++ /dev/null @@ -1,608 +0,0 @@ -; Throws an error if the version used to compile this script is not unicode -; This ensures that the application is built correctly -#if !Defined(UNICODE) - #error A unicode version of Inno Setup is required to compile this script -#endif - -#define Name "QModManager" ; The name of the game will be added after it -#define Version "4.3.0" -#define Author "QModManager" -#define URL "https://github.com/QModManager/QModManager" -#define SupportURL "https://discord.gg/UpWuWwq" -#define UpdatesURL "https://nexusmods.com" ; The link to the mod will be added after it - -[Setup] -AllowNetworkDrive=no -AllowUNCPath=no -AlwaysShowDirOnReadyPage=yes -AppendDefaultDirName=no -AppId={code:GetGUID} -AppName={#Name} -AppPublisher={#Author} -AppPublisherURL={#URL} -AppSupportURL={#SupportURL} -AppUpdatesURL={code:GetURL} -AppVerName={#Name} {#Version} -AppVersion={#Version} -Compression=lzma -DefaultDirName=. -DirExistsWarning=no -DisableDirPage=no -DisableProgramGroupPage=yes -DisableWelcomePage=no -EnableDirDoesntExistWarning=yes -OutputBaseFilename=QModManager_{#Version}_Subnautica_Experimental_Setup -OutputDir=.\ -PrivilegesRequired=admin -SetupIconFile=..\..\Assets\Icon.ico -SolidCompression=yes -UninstallDisplayIcon={app}\BepInEx\patchers\QModManager\QModManager.exe -UninstallDisplayName={code:GetName} -UsePreviousAppDir=no -UsePreviousLanguage=no -WizardImageFile=..\..\Assets\InstallerImage.bmp -WizardSmallImageFile=..\..\Assets\InstallerSmallImage.bmp -UsePreviousSetupType=False -UsePreviousTasks=False -CloseApplications=False - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Files] -; Files used by the installer but not required by QModManager itself -; Installer theme -Source: "..\..\Dependencies\VclStylesinno.dll"; Flags: DontCopy -Source: "..\..\Dependencies\Carbon.vsf"; Flags: DontCopy -; Installer extensions -Source: "InstallerExtensions.dll"; Flags: DontCopy - -; Files required by QModManager itself -; Dependencies -Source: "..\..\packages\AssetsTools.NET.2.0.9\lib\net40\AssetsTools.NET.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "..\..\Dependencies\cldb.dat"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "..\..\Dependencies\Oculus.Newtonsoft.Json.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; QMM -Source: "QModInstaller.dll"; DestDir: "{app}\BepInEx\plugins\QModManager"; Flags: ignoreversion; -Source: "QModInstaller.xml"; DestDir: "{app}\BepInEx\plugins\QModManager"; Flags: ignoreversion; -Source: "QModManager.exe"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; BepInEx patchers -Source: "QModManager.OculusNewtonsoftRedirect.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.QModPluginGenerator.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.UnityAudioFixer.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.UnityAudioFixer.xml"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; BepInEx -Source: "..\..\Dependencies\BepInEx\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs replacesameversion sharedfile uninsnosharedfileprompt; -Source: "..\..\Dependencies\SN.EXP\BepInEx.cfg"; DestDir: "{app}\BepInEx\config"; Flags: ignoreversion sharedfile uninsnosharedfileprompt; - -[Dirs] -Name: "{app}\QMods" - -[Run] -Filename: "{app}\BepInEx\patchers\QModManager\QModManager.exe"; Parameters: "-c"; Tasks: cleanup - -[UninstallRun] -Filename: "{app}\BepInEx\patchers\QModManager\QModManager.exe"; Parameters: "-u"; - -[Messages] -; BeveledLabel={#Name} {#Version} -WizardSelectDir=Select install location -SelectDirLabel3=Please select the install folder of the game. -SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.%nIf you have the game on steam, you can also use the buttons on the bottom left to auto-complete the install path for the chosen game. -ReadyLabel2a=By installing, you agree to allow QModManager to send external web requests, most often to check for updates. You can disable this option at any time in the Mods tab of the Subnautica options menu. -ExitSetupMessage=Setup is not complete. If you exit now, {#Name} will not be installed.%nExit Setup? -WizardSelectComponents=Review Install -SelectComponentsDesc= -SelectComponentsLabel2= - -[Types] -; Used to disable the three Full, Compact and Custom types -Name: "select"; Description: "QModManager"; Flags: IsCustom; - -[Components] -Name: "qmm"; Description: "QModManager"; Flags: fixed; Types: select; -Name: "qmm\sn"; Description: "Install for Subnautica"; Flags: exclusive fixed; - -[Tasks] -Name: "cleanup"; Description: "(Recommended) Clean up after previous Nitrox and QMM installs"; - -[Code] -// Import stuff from InstallerExtensions.dll -function PathsEqual(pathone, pathtwo: WideString): Boolean; external 'PathsEqual@files:InstallerExtensions.dll stdcall setuponly delayload'; - -function IsSubnautica(path: String): Boolean; -begin - if (FileExists(path + '\Subnautica.exe')) and (FileExists(path + '\Subnautica_Data\Managed\Assembly-CSharp.dll')) then - begin - Result := true - Exit - end - else - begin - Result := false - Exit - end -end; -function IsSubnauticaApp(): Boolean; -begin - Result := IsSubnautica(ExpandConstant('{app}')); -end; - -function GetName(def: string): String; -begin - if (IsSubnauticaApp()) then - begin - Result := '{#Name} (Subnautica)' - end - else - begin - Result := ExpandConstant('{app}') - end -end; - -function GetURL(def: string): String; -begin - if (IsSubnauticaApp()) then - begin - Result := '{#UpdatesURL}/subnautica/mods/201' - end - else - begin - Result := '{#UpdatesURL}' - end -end; - -function CurPageChanged_SelectComponents(CurPageID: Integer): Boolean; -var - Index: Integer; - app: String; -begin - if CurPageID = wpSelectComponents then - begin - try - app := ExpandConstant('{app}') - except - app := 'null' - end; - if not IsSubnautica(app) then - begin - WizardForm.SelectComponentsLabel.Caption := 'Game not detected in this folder, cannot install' - Exit - end; - Index := WizardForm.ComponentsList.Items.IndexOf('Install for Subnautica') - if Index <> -1 then - begin - if IsSubnautica(app) then - begin - WizardForm.ComponentsList.Checked[Index] := true - WizardForm.SelectComponentsLabel.Caption := 'Install QModManager for Subnautica' - end - end; - end -end; - -function GetDir(folder: String; name: String): String; -var -I : Integer; -P : Integer; -steamInstallPath : String; -configFile : String; -fileLines: TArrayOfString; -begin - steamInstallPath := '' - RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Valve\Steam', 'InstallPath', steamInstallPath) - if (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '.exe')) and (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '_Data\Managed\Assembly-CSharp.dll')) then - begin - Result := steamInstallPath + '\steamapps\common\' + folder - Exit - end - else - begin - configFile := steamInstallPath + '\config\config.vdf' - if FileExists(configFile) then - begin - if LoadStringsFromFile(configFile, FileLines) then - begin - for I := 0 to GetArrayLength(FileLines) - 1 do - begin - P := Pos('BaseInstallFolder_', FileLines[I]) - if P > 0 then - begin - steamInstallPath := Copy(FileLines[I], P + 23, 3) + Copy(FileLines[I], P + 27, Length(FileLines[I]) - P - 27); - if (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '.exe')) and (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '_Data\Managed\Assembly-CSharp.dll')) then // If the folder is correct - begin - Result := steamInstallPath + '\steamapps\common\' + folder - Exit - end - end - end - end - end - end; - Result := 'none' - Exit -end; - -var ACLabel: TLabel; -var SubnauticaButton: TNewRadioButton; - -procedure SubnauticaButtonOnClick(Sender: TObject); -begin - WizardForm.DirEdit.Text := GetDir('Subnautica', 'Subnautica') - SubnauticaButton.Checked := true -end; - -function InitializeWizard_AddButtons(): Boolean; -begin - ACLabel := TLabel.Create(WizardForm) - with ACLabel do - begin - Parent := WizardForm - Caption := 'Get path from Steam for:' - Left := WizardForm.SelectDirLabel.Left / 3 - Top := WizardForm.BackButton.Top - WizardForm.BackButton.Top / 90 - end; - - SubnauticaButton := TNewRadioButton.Create(WizardForm) - with SubnauticaButton do - begin - Parent := WizardForm - Caption := 'Subnautica' - OnClick := @SubnauticaButtonOnClick - Left := WizardForm.SelectDirLabel.Left + WizardForm.SelectDirLabel.Left / 30 - Top := WizardForm.BackButton.Top + 10 - Height := WizardForm.BackButton.Height - Enabled := True - end; - -end; - -function CurPageChanged_AddButtons(CurPageID: Integer): Boolean; -begin - if CurPageID = wpSelectDir then - begin - WizardForm.DirEdit.Text := '' - if GetDir('Subnautica', 'Subnautica') = 'none' then - begin - SubnauticaButton.Enabled := false - end; - - if SubnauticaButton.Enabled then - begin - WizardForm.DirEdit.Text := GetDir('Subnautica', 'Subnautica') - SubnauticaButton.Checked := true - end - - end; - SubnauticaButton.Visible := CurPageID = wpSelectDir - ACLabel.Visible := CurPageID = wpSelectDir -end; - -var DirEditOnChangePrev: TNotifyEvent; - -procedure DirEditOnChange(Sender: TObject); -var - S: String; -begin - if Pos('subnautica', LowerCase(WizardForm.DirEdit.Text)) <> 0 then - begin - if PathsEqual(WizardForm.DirEdit.Text, GetDir('Subnautica', 'Subnautica')) then - begin - SubnauticaButton.Checked := true - end - else - begin - SubnauticaButton.Checked := false; - end - end - else - begin - SubnauticaButton.Checked := false; - end; - - if (Pos('://', WizardForm.DirEdit.Text) <> 0) or (Pos(':\\', WizardForm.DirEdit.Text) <> 0) then - begin - S := WizardForm.DirEdit.Text; - StringChangeEx(S, '://', ':/', true); - StringChangeEx(S, ':\\', ':\', true); - WizardForm.DirEdit.Text := S; - end -end; - -function InitializeWizard_DirOnChange(): Boolean; -begin - DirEditOnChangePrev := WizardForm.DirEdit.OnChange - WizardForm.DirEdit.OnChange := @DirEditOnChange -end; - -var appIsSet: Boolean; - -function GetGUID(def: String): String; -begin - if not appIsSet then // The installer tries to get the GUID at startup to use previous options such as install path or install settings. As QModManager's GUID is defined AFTER the path is selected, it doesn't need to provide a value - begin - Result := '' - Exit - end; - if IsSubnautica(ExpandConstant('{app}')) then - begin - Result := '{52CC87AA-645D-40FB-8411-510142191678}' - Exit - end; -end; - -function IsAppRunning(const FileName : string): Boolean; -var - FSWbemLocator: Variant; - FWMIService : Variant; - FWbemObjectSet: Variant; -begin - Result := false; - FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator'); - FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', ''); - FWbemObjectSet := - FWMIService.ExecQuery( - Format('SELECT Name FROM Win32_Process Where Name="%s"', [FileName])); - Result := (FWbemObjectSet.Count > 0); - FWbemObjectSet := Unassigned; - FWMIService := Unassigned; - FSWbemLocator := Unassigned; -end; - -// Imports some stuff from VclStylesInno.dll -procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleW@files:VclStylesInno.dll stdcall'; -procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall'; - -// Check for .NET version -- code from http://www.kynosarges.de/DotNetVersion.html -function IsDotNetDetected(version: string; service: cardinal): boolean; -// Indicates whether the specified version and service pack of the .NET Framework is installed. -// -// version -- Specify one of these strings for the required .NET Framework version: -// 'v1.1' .NET Framework 1.1 -// 'v2.0' .NET Framework 2.0 -// 'v3.0' .NET Framework 3.0 -// 'v3.5' .NET Framework 3.5 -// 'v4\Client' .NET Framework 4.0 Client Profile -// 'v4\Full' .NET Framework 4.0 Full Installation -// 'v4.5' .NET Framework 4.5 -// 'v4.5.1' .NET Framework 4.5.1 -// 'v4.5.2' .NET Framework 4.5.2 -// 'v4.6' .NET Framework 4.6 -// 'v4.6.1' .NET Framework 4.6.1 -// 'v4.6.2' .NET Framework 4.6.2 -// 'v4.7' .NET Framework 4.7 -// -// service -- Specify any non-negative integer for the required service pack level: -// 0 No service packs required -// 1, 2, etc. Service pack 1, 2, etc. required -var - key, versionKey: string; - install, release, serviceCount, versionRelease: cardinal; - success: boolean; -begin - versionKey := version; - versionRelease := 0; - - // .NET 1.1 and 2.0 embed release number in version key - if version = 'v1.1' then begin - versionKey := 'v1.1.4322'; - end else if version = 'v2.0' then begin - versionKey := 'v2.0.50727'; - end - - // .NET 4.5 and newer install as update to .NET 4.0 Full - else if Pos('v4.', version) = 1 then begin - versionKey := 'v4\Full'; - case version of - 'v4.5': versionRelease := 378389; - 'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older - 'v4.5.2': versionRelease := 379893; - 'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older - 'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update - 'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update - 'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update - end; - end; - - // installation key group for all .NET versions - key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey; - - // .NET 3.0 uses value InstallSuccess in subkey Setup - if Pos('v3.0', version) = 1 then begin - success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install); - end else begin - success := RegQueryDWordValue(HKLM, key, 'Install', install); - end; - - // .NET 4.0 and newer use value Servicing instead of SP - if Pos('v4', version) = 1 then begin - success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount); - end else begin - success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount); - end; - - // .NET 4.5 and newer use additional value Release - if versionRelease > 0 then begin - success := success and RegQueryDWordValue(HKLM, key, 'Release', release); - success := success and (release >= versionRelease); - end; - - result := success and (install = 1) and (serviceCount >= service); -end; - -function InitializeSetup(): Boolean; -var - ErrCode: Integer; -begin - if not IsDotNetDetected('v4\Full', 0) then - begin - if MsgBox('QModManager requires Microsoft .NET Framework 4.0' + #13#10 + 'Would you like to install it now?', mbCriticalError, MB_YESNO) = IDYES then - begin - if not ShellExec('open', 'https://dotnet.microsoft.com/download/dotnet-framework/net40', '', '', SW_SHOW, ewNoWait, ErrCode) then - begin - SysErrorMessage(ErrCode); - end - end; - result := false; - Exit - end; - appIsSet := false - if IsAppRunning('Subnautica.exe') then - begin - MsgBox('You need to close Subnautica before installing QModManager.' + #13#10 + 'If the game is not running, please reboot your computer.', mbError, MB_OK); - Result := false - end - else - begin - // Load skin - ExtractTemporaryFile('Carbon.vsf'); - LoadVCLStyle(ExpandConstant('{tmp}\Carbon.vsf')); - Result := true - end -end; - -function IsPreviousVersionInstalled: Boolean; -var - uninstallRegKey: String; - previousVersion: String; -begin - uninstallRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetGuid('') + '_is1'; - previousVersion := ''; - Result := (RegKeyExists(HKLM, uninstallRegKey) or RegKeyExists(HKCU, uninstallRegKey)); -end; - -function GetUninstallString: string; -var - uninstallRegKey: String; - uninstallString: String; -begin - Result := ''; - uninstallRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetGuid('') + '_is1'; - uninstallString := ''; - if not RegQueryStringValue(HKLM, uninstallRegKey, 'UninstallString', uninstallString) then - RegQueryStringValue(HKCU, uninstallRegKey, 'UninstallString', uninstallString); - Result := uninstallString; -end; - -function IsUpgrade: Boolean; -begin - Result := (GetUninstallString() <> ''); -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -var - uninstallString: String; - resultCode: Integer; -begin - if CurPageID = wpSelectComponents then - appIsSet := true; - - Result := true; -end; - -function PrepareToInstall(var NeedsRestart: boolean): string; -var - uninstallString: string; - resultCode: integer; -begin - NeedsRestart := false; - - if IsPreviousVersionInstalled() then - begin - uninstallString := RemoveQuotes(GetUninstallString()); - if FileExists(uninstallString) then - begin - Exec(uninstallString, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, resultCode); - if IsPreviousVersionInstalled() then - Result := 'Previous installation must be uninstalled to continue.'; - end; - end; -end; - -var TypesComboOnChangePrev: TNotifyEvent; - -procedure ComponentsListCheckChanges; -begin - WizardForm.NextButton.Enabled := (WizardSelectedComponents(false) <> '') -end; - -procedure ComponentsListClickCheck(Sender: TObject); -begin - ComponentsListCheckChanges -end; - -procedure TypesComboOnChange(Sender: TObject); -begin - TypesComboOnChangePrev(Sender) - ComponentsListCheckChanges -end; - -procedure CurPageChanged(CurPageID: Integer); -begin - CurPageChanged_SelectComponents(CurPageID) - CurPageChanged_AddButtons(CurPageID) - if CurPageID = wpSelectComponents then - begin - ComponentsListCheckChanges; - end -end; - -procedure InitializeWizard(); -begin - WizardForm.ComponentsList.OnClickCheck := @ComponentsListClickCheck - TypesComboOnChangePrev := WizardForm.TypesCombo.OnChange - WizardForm.TypesCombo.OnChange := @TypesComboOnChange - InitializeWizard_AddButtons - InitializeWizard_DirOnChange -end; - -procedure UnloadInstallerExtensions(); - var - FilePath: string; - BatchPath: string; - S: TArrayOfString; - ResultCode: Integer; -begin - FilePath := ExpandConstant('{tmp}\InstallerExtensions.dll'); - if not FileExists(FilePath) then - begin - Log(Format('File %s does not exist', [FilePath])); - end - else - begin - BatchPath := - ExpandConstant('{%TEMP}\') + - 'delete_' + ExtractFileName(ExpandConstant('{tmp}')) + '.bat'; - SetArrayLength(S, 7); - S[0] := ':loop'; - S[1] := 'del "' + FilePath + '"'; - S[2] := 'if not exist "' + FilePath + '" goto end'; - S[3] := 'goto loop'; - S[4] := ':end'; - S[5] := 'rd "' + ExpandConstant('{tmp}') + '"'; - S[6] := 'del "' + BatchPath + '"'; - if not SaveStringsToFile(BatchPath, S, False) then - begin - Log(Format('Error creating batch file %s to delete %s', [BatchPath, FilePath])); - end - else - if not Exec(BatchPath, '', '', SW_HIDE, ewNoWait, ResultCode) then - begin - Log(Format('Error executing batch file %s to delete %s', [BatchPath, FilePath])); - end - else - begin - Log(Format('Executed batch file %s to delete %s', [BatchPath, FilePath])); - end; - end; -end; - -procedure DeinitializeSetup(); -begin - // Unload skin - UnLoadVCLStyles; - UnloadInstallerExtensions; -end; diff --git a/Installer/SN.STABLE.iss b/Installer/SN.STABLE.iss deleted file mode 100644 index e2c08f9d..00000000 --- a/Installer/SN.STABLE.iss +++ /dev/null @@ -1,606 +0,0 @@ -; Throws an error if the version used to compile this script is not unicode -; This ensures that the application is built correctly -#if !Defined(UNICODE) - #error A unicode version of Inno Setup is required to compile this script -#endif - -#define Name "QModManager" ; The name of the game will be added after it -#define Version "4.3.0" -#define Author "QModManager" -#define URL "https://github.com/QModManager/QModManager" -#define SupportURL "https://discord.gg/UpWuWwq" -#define UpdatesURL "https://nexusmods.com" ; The link to the mod will be added after it - -[Setup] -AllowNetworkDrive=no -AllowUNCPath=no -AlwaysShowDirOnReadyPage=yes -AppendDefaultDirName=no -AppId={code:GetGUID} -AppName={#Name} -AppPublisher={#Author} -AppPublisherURL={#URL} -AppSupportURL={#SupportURL} -AppUpdatesURL={code:GetURL} -AppVerName={#Name} {#Version} -AppVersion={#Version} -Compression=lzma -DefaultDirName=. -DirExistsWarning=no -DisableDirPage=no -DisableProgramGroupPage=yes -DisableWelcomePage=no -EnableDirDoesntExistWarning=yes -OutputBaseFilename=QModManager_{#Version}_Subnautica_Setup -OutputDir=.\ -PrivilegesRequired=admin -SetupIconFile=..\..\Assets\Icon.ico -SolidCompression=yes -UninstallDisplayIcon={app}\BepInEx\patchers\QModManager\QModManager.exe -UninstallDisplayName={code:GetName} -UsePreviousAppDir=no -UsePreviousLanguage=no -WizardImageFile=..\..\Assets\InstallerImage.bmp -WizardSmallImageFile=..\..\Assets\InstallerSmallImage.bmp -UsePreviousSetupType=False -UsePreviousTasks=False -CloseApplications=False - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Files] -; Files used by the installer but not required by QModManager itself -; Installer theme -Source: "..\..\Dependencies\VclStylesinno.dll"; Flags: DontCopy -Source: "..\..\Dependencies\Carbon.vsf"; Flags: DontCopy -; Installer extensions -Source: "InstallerExtensions.dll"; Flags: DontCopy - -; Files required by QModManager itself -; Dependencies -Source: "..\..\packages\AssetsTools.NET.2.0.9\lib\net40\AssetsTools.NET.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "..\..\Dependencies\cldb.dat"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; QMM -Source: "QModInstaller.dll"; DestDir: "{app}\BepInEx\plugins\QModManager"; Flags: ignoreversion; -Source: "QModInstaller.xml"; DestDir: "{app}\BepInEx\plugins\QModManager"; Flags: ignoreversion; -Source: "QModManager.exe"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; BepInEx patchers -Source: "QModManager.QModPluginGenerator.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.UnityAudioFixer.dll"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; -Source: "QModManager.UnityAudioFixer.xml"; DestDir: "{app}\BepInEx\patchers\QModManager"; Flags: ignoreversion; - -; BepInEx -Source: "..\..\Dependencies\BepInEx\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs replacesameversion sharedfile uninsnosharedfileprompt; -Source: "..\..\Dependencies\SN.STABLE\BepInEx.cfg"; DestDir: "{app}\BepInEx\config"; Flags: ignoreversion sharedfile uninsnosharedfileprompt; - -[Dirs] -Name: "{app}\QMods" - -[Run] -Filename: "{app}\BepInEx\patchers\QModManager\QModManager.exe"; Parameters: "-c"; Tasks: cleanup - -[UninstallRun] -Filename: "{app}\BepInEx\patchers\QModManager\QModManager.exe"; Parameters: "-u"; - -[Messages] -; BeveledLabel={#Name} {#Version} -WizardSelectDir=Select install location -SelectDirLabel3=Please select the install folder of the game. -SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.%nIf you have the game on steam, you can also use the buttons on the bottom left to auto-complete the install path for the chosen game. -ReadyLabel2a=By installing, you agree to allow QModManager to send external web requests, most often to check for updates. You can disable this option at any time in the Mods tab of the Subnautica options menu. -ExitSetupMessage=Setup is not complete. If you exit now, {#Name} will not be installed.%nExit Setup? -WizardSelectComponents=Review Install -SelectComponentsDesc= -SelectComponentsLabel2= - -[Types] -; Used to disable the three Full, Compact and Custom types -Name: "select"; Description: "QModManager"; Flags: IsCustom; - -[Components] -Name: "qmm"; Description: "QModManager"; Flags: fixed; Types: select; -Name: "qmm\sn"; Description: "Install for Subnautica"; Flags: exclusive fixed; - -[Tasks] -Name: "cleanup"; Description: "(Recommended) Clean up after previous Nitrox and QMM installs"; - -[Code] -// Import stuff from InstallerExtensions.dll -function PathsEqual(pathone, pathtwo: WideString): Boolean; external 'PathsEqual@files:InstallerExtensions.dll stdcall setuponly delayload'; - -function IsSubnautica(path: String): Boolean; -begin - if (FileExists(path + '\Subnautica.exe')) and (FileExists(path + '\Subnautica_Data\Managed\Assembly-CSharp.dll')) then - begin - Result := true - Exit - end - else - begin - Result := false - Exit - end -end; -function IsSubnauticaApp(): Boolean; -begin - Result := IsSubnautica(ExpandConstant('{app}')); -end; - -function GetName(def: string): String; -begin - if (IsSubnauticaApp()) then - begin - Result := '{#Name} (Subnautica)' - end - else - begin - Result := ExpandConstant('{app}') - end -end; - -function GetURL(def: string): String; -begin - if (IsSubnauticaApp()) then - begin - Result := '{#UpdatesURL}/subnautica/mods/201' - end - else - begin - Result := '{#UpdatesURL}' - end -end; - -function CurPageChanged_SelectComponents(CurPageID: Integer): Boolean; -var - Index: Integer; - app: String; -begin - if CurPageID = wpSelectComponents then - begin - try - app := ExpandConstant('{app}') - except - app := 'null' - end; - if not IsSubnautica(app) then - begin - WizardForm.SelectComponentsLabel.Caption := 'Game not detected in this folder, cannot install' - Exit - end; - Index := WizardForm.ComponentsList.Items.IndexOf('Install for Subnautica') - if Index <> -1 then - begin - if IsSubnautica(app) then - begin - WizardForm.ComponentsList.Checked[Index] := true - WizardForm.SelectComponentsLabel.Caption := 'Install QModManager for Subnautica' - end - end; - end -end; - -function GetDir(folder: String; name: String): String; -var -I : Integer; -P : Integer; -steamInstallPath : String; -configFile : String; -fileLines: TArrayOfString; -begin - steamInstallPath := '' - RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Valve\Steam', 'InstallPath', steamInstallPath) - if (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '.exe')) and (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '_Data\Managed\Assembly-CSharp.dll')) then - begin - Result := steamInstallPath + '\steamapps\common\' + folder - Exit - end - else - begin - configFile := steamInstallPath + '\config\config.vdf' - if FileExists(configFile) then - begin - if LoadStringsFromFile(configFile, FileLines) then - begin - for I := 0 to GetArrayLength(FileLines) - 1 do - begin - P := Pos('BaseInstallFolder_', FileLines[I]) - if P > 0 then - begin - steamInstallPath := Copy(FileLines[I], P + 23, 3) + Copy(FileLines[I], P + 27, Length(FileLines[I]) - P - 27); - if (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '.exe')) and (FileExists(steamInstallPath + '\steamapps\common\' + folder + '\' + name + '_Data\Managed\Assembly-CSharp.dll')) then // If the folder is correct - begin - Result := steamInstallPath + '\steamapps\common\' + folder - Exit - end - end - end - end - end - end; - Result := 'none' - Exit -end; - -var ACLabel: TLabel; -var SubnauticaButton: TNewRadioButton; - -procedure SubnauticaButtonOnClick(Sender: TObject); -begin - WizardForm.DirEdit.Text := GetDir('Subnautica', 'Subnautica') - SubnauticaButton.Checked := true -end; - -function InitializeWizard_AddButtons(): Boolean; -begin - ACLabel := TLabel.Create(WizardForm) - with ACLabel do - begin - Parent := WizardForm - Caption := 'Get path from Steam for:' - Left := WizardForm.SelectDirLabel.Left / 3 - Top := WizardForm.BackButton.Top - WizardForm.BackButton.Top / 90 - end; - - SubnauticaButton := TNewRadioButton.Create(WizardForm) - with SubnauticaButton do - begin - Parent := WizardForm - Caption := 'Subnautica' - OnClick := @SubnauticaButtonOnClick - Left := WizardForm.SelectDirLabel.Left + WizardForm.SelectDirLabel.Left / 30 - Top := WizardForm.BackButton.Top + 10 - Height := WizardForm.BackButton.Height - Enabled := True - end; - -end; - -function CurPageChanged_AddButtons(CurPageID: Integer): Boolean; -begin - if CurPageID = wpSelectDir then - begin - WizardForm.DirEdit.Text := '' - if GetDir('Subnautica', 'Subnautica') = 'none' then - begin - SubnauticaButton.Enabled := false - end; - - if SubnauticaButton.Enabled then - begin - WizardForm.DirEdit.Text := GetDir('Subnautica', 'Subnautica') - SubnauticaButton.Checked := true - end - - end; - SubnauticaButton.Visible := CurPageID = wpSelectDir - ACLabel.Visible := CurPageID = wpSelectDir -end; - -var DirEditOnChangePrev: TNotifyEvent; - -procedure DirEditOnChange(Sender: TObject); -var - S: String; -begin - if Pos('subnautica', LowerCase(WizardForm.DirEdit.Text)) <> 0 then - begin - if PathsEqual(WizardForm.DirEdit.Text, GetDir('Subnautica', 'Subnautica')) then - begin - SubnauticaButton.Checked := true - end - else - begin - SubnauticaButton.Checked := false; - end - end - else - begin - SubnauticaButton.Checked := false; - end; - - if (Pos('://', WizardForm.DirEdit.Text) <> 0) or (Pos(':\\', WizardForm.DirEdit.Text) <> 0) then - begin - S := WizardForm.DirEdit.Text; - StringChangeEx(S, '://', ':/', true); - StringChangeEx(S, ':\\', ':\', true); - WizardForm.DirEdit.Text := S; - end -end; - -function InitializeWizard_DirOnChange(): Boolean; -begin - DirEditOnChangePrev := WizardForm.DirEdit.OnChange - WizardForm.DirEdit.OnChange := @DirEditOnChange -end; - -var appIsSet: Boolean; - -function GetGUID(def: String): String; -begin - if not appIsSet then // The installer tries to get the GUID at startup to use previous options such as install path or install settings. As QModManager's GUID is defined AFTER the path is selected, it doesn't need to provide a value - begin - Result := '' - Exit - end; - if IsSubnautica(ExpandConstant('{app}')) then - begin - Result := '{52CC87AA-645D-40FB-8411-510142191678}' - Exit - end; -end; - -function IsAppRunning(const FileName : string): Boolean; -var - FSWbemLocator: Variant; - FWMIService : Variant; - FWbemObjectSet: Variant; -begin - Result := false; - FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator'); - FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', ''); - FWbemObjectSet := - FWMIService.ExecQuery( - Format('SELECT Name FROM Win32_Process Where Name="%s"', [FileName])); - Result := (FWbemObjectSet.Count > 0); - FWbemObjectSet := Unassigned; - FWMIService := Unassigned; - FSWbemLocator := Unassigned; -end; - -// Imports some stuff from VclStylesInno.dll -procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleW@files:VclStylesInno.dll stdcall'; -procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall'; - -// Check for .NET version -- code from http://www.kynosarges.de/DotNetVersion.html -function IsDotNetDetected(version: string; service: cardinal): boolean; -// Indicates whether the specified version and service pack of the .NET Framework is installed. -// -// version -- Specify one of these strings for the required .NET Framework version: -// 'v1.1' .NET Framework 1.1 -// 'v2.0' .NET Framework 2.0 -// 'v3.0' .NET Framework 3.0 -// 'v3.5' .NET Framework 3.5 -// 'v4\Client' .NET Framework 4.0 Client Profile -// 'v4\Full' .NET Framework 4.0 Full Installation -// 'v4.5' .NET Framework 4.5 -// 'v4.5.1' .NET Framework 4.5.1 -// 'v4.5.2' .NET Framework 4.5.2 -// 'v4.6' .NET Framework 4.6 -// 'v4.6.1' .NET Framework 4.6.1 -// 'v4.6.2' .NET Framework 4.6.2 -// 'v4.7' .NET Framework 4.7 -// -// service -- Specify any non-negative integer for the required service pack level: -// 0 No service packs required -// 1, 2, etc. Service pack 1, 2, etc. required -var - key, versionKey: string; - install, release, serviceCount, versionRelease: cardinal; - success: boolean; -begin - versionKey := version; - versionRelease := 0; - - // .NET 1.1 and 2.0 embed release number in version key - if version = 'v1.1' then begin - versionKey := 'v1.1.4322'; - end else if version = 'v2.0' then begin - versionKey := 'v2.0.50727'; - end - - // .NET 4.5 and newer install as update to .NET 4.0 Full - else if Pos('v4.', version) = 1 then begin - versionKey := 'v4\Full'; - case version of - 'v4.5': versionRelease := 378389; - 'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older - 'v4.5.2': versionRelease := 379893; - 'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older - 'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update - 'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update - 'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update - end; - end; - - // installation key group for all .NET versions - key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey; - - // .NET 3.0 uses value InstallSuccess in subkey Setup - if Pos('v3.0', version) = 1 then begin - success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install); - end else begin - success := RegQueryDWordValue(HKLM, key, 'Install', install); - end; - - // .NET 4.0 and newer use value Servicing instead of SP - if Pos('v4', version) = 1 then begin - success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount); - end else begin - success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount); - end; - - // .NET 4.5 and newer use additional value Release - if versionRelease > 0 then begin - success := success and RegQueryDWordValue(HKLM, key, 'Release', release); - success := success and (release >= versionRelease); - end; - - result := success and (install = 1) and (serviceCount >= service); -end; - -function InitializeSetup(): Boolean; -var - ErrCode: Integer; -begin - if not IsDotNetDetected('v4\Full', 0) then - begin - if MsgBox('QModManager requires Microsoft .NET Framework 4.0' + #13#10 + 'Would you like to install it now?', mbCriticalError, MB_YESNO) = IDYES then - begin - if not ShellExec('open', 'https://dotnet.microsoft.com/download/dotnet-framework/net40', '', '', SW_SHOW, ewNoWait, ErrCode) then - begin - SysErrorMessage(ErrCode); - end - end; - result := false; - Exit - end; - appIsSet := false - if IsAppRunning('Subnautica.exe') then - begin - MsgBox('You need to close Subnautica before installing QModManager.' + #13#10 + 'If the game is not running, please reboot your computer.', mbError, MB_OK); - Result := false - end - else - begin - // Load skin - ExtractTemporaryFile('Carbon.vsf'); - LoadVCLStyle(ExpandConstant('{tmp}\Carbon.vsf')); - Result := true - end -end; - -function IsPreviousVersionInstalled: Boolean; -var - uninstallRegKey: String; - previousVersion: String; -begin - uninstallRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetGuid('') + '_is1'; - previousVersion := ''; - Result := (RegKeyExists(HKLM, uninstallRegKey) or RegKeyExists(HKCU, uninstallRegKey)); -end; - -function GetUninstallString: string; -var - uninstallRegKey: String; - uninstallString: String; -begin - Result := ''; - uninstallRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + GetGuid('') + '_is1'; - uninstallString := ''; - if not RegQueryStringValue(HKLM, uninstallRegKey, 'UninstallString', uninstallString) then - RegQueryStringValue(HKCU, uninstallRegKey, 'UninstallString', uninstallString); - Result := uninstallString; -end; - -function IsUpgrade: Boolean; -begin - Result := (GetUninstallString() <> ''); -end; - -function NextButtonClick(CurPageID: Integer): Boolean; -var - uninstallString: String; - resultCode: Integer; -begin - if CurPageID = wpSelectComponents then - appIsSet := true; - - Result := true; -end; - -function PrepareToInstall(var NeedsRestart: boolean): string; -var - uninstallString: string; - resultCode: integer; -begin - NeedsRestart := false; - - if IsPreviousVersionInstalled() then - begin - uninstallString := RemoveQuotes(GetUninstallString()); - if FileExists(uninstallString) then - begin - Exec(uninstallString, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, resultCode); - if IsPreviousVersionInstalled() then - Result := 'Previous installation must be uninstalled to continue.'; - end; - end; -end; - -var TypesComboOnChangePrev: TNotifyEvent; - -procedure ComponentsListCheckChanges; -begin - WizardForm.NextButton.Enabled := (WizardSelectedComponents(false) <> '') -end; - -procedure ComponentsListClickCheck(Sender: TObject); -begin - ComponentsListCheckChanges -end; - -procedure TypesComboOnChange(Sender: TObject); -begin - TypesComboOnChangePrev(Sender) - ComponentsListCheckChanges -end; - -procedure CurPageChanged(CurPageID: Integer); -begin - CurPageChanged_SelectComponents(CurPageID) - CurPageChanged_AddButtons(CurPageID) - if CurPageID = wpSelectComponents then - begin - ComponentsListCheckChanges; - end -end; - -procedure InitializeWizard(); -begin - WizardForm.ComponentsList.OnClickCheck := @ComponentsListClickCheck - TypesComboOnChangePrev := WizardForm.TypesCombo.OnChange - WizardForm.TypesCombo.OnChange := @TypesComboOnChange - InitializeWizard_AddButtons - InitializeWizard_DirOnChange -end; - -procedure UnloadInstallerExtensions(); - var - FilePath: string; - BatchPath: string; - S: TArrayOfString; - ResultCode: Integer; -begin - FilePath := ExpandConstant('{tmp}\InstallerExtensions.dll'); - if not FileExists(FilePath) then - begin - Log(Format('File %s does not exist', [FilePath])); - end - else - begin - BatchPath := - ExpandConstant('{%TEMP}\') + - 'delete_' + ExtractFileName(ExpandConstant('{tmp}')) + '.bat'; - SetArrayLength(S, 7); - S[0] := ':loop'; - S[1] := 'del "' + FilePath + '"'; - S[2] := 'if not exist "' + FilePath + '" goto end'; - S[3] := 'goto loop'; - S[4] := ':end'; - S[5] := 'rd "' + ExpandConstant('{tmp}') + '"'; - S[6] := 'del "' + BatchPath + '"'; - if not SaveStringsToFile(BatchPath, S, False) then - begin - Log(Format('Error creating batch file %s to delete %s', [BatchPath, FilePath])); - end - else - if not Exec(BatchPath, '', '', SW_HIDE, ewNoWait, ResultCode) then - begin - Log(Format('Error executing batch file %s to delete %s', [BatchPath, FilePath])); - end - else - begin - Log(Format('Executed batch file %s to delete %s', [BatchPath, FilePath])); - end; - end; -end; - -procedure DeinitializeSetup(); -begin - // Unload skin - UnLoadVCLStyles; - UnloadInstallerExtensions; -end; diff --git a/Installer/packages.config b/Installer/packages.config deleted file mode 100644 index 79f218d4..00000000 --- a/Installer/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/NuGet.Config b/NuGet.Config new file mode 100644 index 00000000..2e1990f2 --- /dev/null +++ b/NuGet.Config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OculusNewtonsoftRedirect/QModManager.OculusNewtonsoftRedirect.csproj b/OculusNewtonsoftRedirect/OculusNewtonsoftRedirect.csproj similarity index 51% rename from OculusNewtonsoftRedirect/QModManager.OculusNewtonsoftRedirect.csproj rename to OculusNewtonsoftRedirect/OculusNewtonsoftRedirect.csproj index a8e9ff54..0f7e3107 100644 --- a/OculusNewtonsoftRedirect/QModManager.OculusNewtonsoftRedirect.csproj +++ b/OculusNewtonsoftRedirect/OculusNewtonsoftRedirect.csproj @@ -13,6 +13,8 @@ 512 true + + ..\Build\$(Configuration)\ @@ -51,12 +53,36 @@ prompt - - ..\Dependencies\BepInEx\BepInEx\core\BepInEx.dll + + ..\packages\HarmonyX.2.7.0\lib\net45\0Harmony.dll False - - ..\Dependencies\BepInEx\BepInEx\core\Mono.Cecil.dll + + ..\packages\BepInEx.BaseLib.5.4.19\lib\net35\BepInEx.dll + False + + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.dll + False + + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Mdb.dll + False + + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Pdb.dll + False + + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Rocks.dll + False + + + ..\packages\MonoMod.RuntimeDetour.21.12.13.1\lib\net452\MonoMod.RuntimeDetour.dll + False + + + ..\packages\MonoMod.Utils.21.12.13.1\lib\net452\MonoMod.Utils.dll False @@ -66,5 +92,16 @@ + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + \ No newline at end of file diff --git a/OculusNewtonsoftRedirect/app.config b/OculusNewtonsoftRedirect/app.config new file mode 100644 index 00000000..2a4bf252 --- /dev/null +++ b/OculusNewtonsoftRedirect/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/OculusNewtonsoftRedirect/packages.config b/OculusNewtonsoftRedirect/packages.config new file mode 100644 index 00000000..47859cc9 --- /dev/null +++ b/OculusNewtonsoftRedirect/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/QModManager/QModManager.csproj b/QModManager/QModManager.csproj index fbc4536c..9e8a6e98 100644 --- a/QModManager/QModManager.csproj +++ b/QModManager/QModManager.csproj @@ -13,6 +13,8 @@ 512 true + + ..\Build\$(Configuration)\ @@ -58,66 +60,41 @@ latest prompt - - - ..\Dependencies\BepInEx\BepInEx\core\0Harmony.dll - False - - - $(Dependencies)\Assemblies\Assembly-CSharp-firstpass.dll - False - - - $(Dependencies)\Assemblies\Assembly-CSharp.dll - False - - - ..\Dependencies\BepInEx\BepInEx\core\BepInEx.dll - False - - - $(Dependencies)\Assemblies\Newtonsoft.Json.dll + + + + ..\packages\HarmonyX.2.7.0\lib\net45\0Harmony.dll False - - - $(Dependencies)\Assemblies\UnityEngine.dll - False - - - $(Dependencies)\Assemblies\UnityEngine.AssetBundleModule.dll + + ..\packages\BepInEx.BaseLib.5.4.19\lib\net35\BepInEx.dll False - - $(Dependencies)\Assemblies\UnityEngine.CoreModule.dll + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.dll False - - $(Dependencies)\Assemblies\UnityEngine.IMGUIModule.dll + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Mdb.dll False - - $(Dependencies)\Assemblies\UnityEngine.InputLegacyModule.dll + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Pdb.dll False - - $(Dependencies)\Assemblies\UnityEngine.InputModule.dll + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Rocks.dll False - - $(Dependencies)\Assemblies\UnityEngine.UI.dll + + ..\packages\MonoMod.RuntimeDetour.21.12.13.1\lib\net452\MonoMod.RuntimeDetour.dll False - - $(Dependencies)\Assemblies\Unity.ResourceManager.dll - False - - - - - $(Dependencies)\Assemblies\Sentry.dll + + ..\packages\MonoMod.Utils.21.12.13.1\lib\net452\MonoMod.Utils.dll False + @@ -175,14 +152,24 @@ - + + + + -rmdir "$(Dependencies)\Assemblies" /q /s -mkdir "$(Dependencies)\Assemblies" -Echo $(SolutionDir)nstrip.exe -p -cg -cg-exclude-events "$(ManagedDir)" "$(Dependencies)/Assemblies" -$(SolutionDir)nstrip.exe -p -cg -cg-exclude-events "$(ManagedDir)" "$(Dependencies)/Assemblies" + rmdir "$(Dependencies)/$(Configuration)/Assemblies" /q /s + mkdir "$(Dependencies)/$(Configuration)/Assemblies" + Echo $(SolutionDir)nstrip.exe -p -cg -cg-exclude-events "$(ManagedDir)" "$(Dependencies)/$(Configuration)/Assemblies" + $(SolutionDir)nstrip.exe -p -cg -cg-exclude-events "$(ManagedDir)" "$(Dependencies)/$(Configuration)/Assemblies" + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + \ No newline at end of file diff --git a/QModManager/app.config b/QModManager/app.config new file mode 100644 index 00000000..2a4bf252 --- /dev/null +++ b/QModManager/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/QModManager/packages.config b/QModManager/packages.config new file mode 100644 index 00000000..47859cc9 --- /dev/null +++ b/QModManager/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/QModPluginEmulator/QModManager.QModPluginGenerator.csproj b/QModPluginEmulator/QModManager.QModPluginGenerator.csproj index 7812c02e..ad83e03f 100644 --- a/QModPluginEmulator/QModManager.QModPluginGenerator.csproj +++ b/QModPluginEmulator/QModManager.QModPluginGenerator.csproj @@ -19,6 +19,8 @@ AnyCPU 7.3 prompt + + ..\Build\$(Configuration)\ @@ -39,41 +41,39 @@ OnBuildSuccess + - - ..\Dependencies\BepInEx\BepInEx\core\0Harmony.dll - False + + ..\packages\HarmonyX.2.9.0\lib\net45\0Harmony.dll - - $(Dependencies)\Assemblies\Assembly-CSharp-firstpass_publicized.dll + + ..\packages\BepInEx.BaseLib.5.4.19\lib\net35\BepInEx.dll False - - $(Dependencies)\Assemblies\Assembly-CSharp_publicized.dll + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.dll False - - ..\Dependencies\BepInEx\BepInEx\core\BepInEx.dll + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Mdb.dll False - - ..\Dependencies\BepInEx\BepInEx\core\Mono.Cecil.dll + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Pdb.dll False - - $(Dependencies)\Assemblies\Newtonsoft.Json.dll + + ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.Rocks.dll False - - - - $(Dependencies)\Assemblies\UnityEngine.dll - False + + ..\packages\MonoMod.RuntimeDetour.22.1.29.1\lib\net452\MonoMod.RuntimeDetour.dll - - $(Dependencies)\Assemblies\UnityEngine.CoreModule.dll - False + + ..\packages\MonoMod.Utils.22.1.29.1\lib\net452\MonoMod.Utils.dll + + @@ -84,13 +84,22 @@ {da63f59d-4676-4726-afec-bd9d3682733f} QModManager + True + call "$(SolutionDir)\Scripts\QModPluginGenerator-post-build.cmd" "$(SolutionDir)" "$(TargetDir)" "$(ConfigurationName)" + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + \ No newline at end of file diff --git a/QModPluginEmulator/app.config b/QModPluginEmulator/app.config new file mode 100644 index 00000000..2a4bf252 --- /dev/null +++ b/QModPluginEmulator/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/QModPluginEmulator/packages.config b/QModPluginEmulator/packages.config index 09dc1015..9ec11252 100644 --- a/QModPluginEmulator/packages.config +++ b/QModPluginEmulator/packages.config @@ -1,4 +1,10 @@  + + + + + + \ No newline at end of file diff --git a/References.targets b/References.targets new file mode 100644 index 00000000..f86a827c --- /dev/null +++ b/References.targets @@ -0,0 +1,270 @@ + + + + + + False + + + False + + + False + + + False + + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + + + False + + + \ No newline at end of file diff --git a/SMLHelper/Assets/BelowZeroModSprite.cs b/SMLHelper/Assets/BelowZeroModSprite.cs new file mode 100644 index 00000000..3888fd8c --- /dev/null +++ b/SMLHelper/Assets/BelowZeroModSprite.cs @@ -0,0 +1,97 @@ +#if BELOWZERO +namespace SMLHelper.V2.Assets +{ + using System; + using System.Collections.Generic; + + /// + /// A class that handles a custom sprite and what item it is associated to. + /// + internal class ModSprite + { + internal static void Add(SpriteManager.Group group, string name, UnityEngine.Sprite sprite) + { + if (group == SpriteManager.Group.None) + group = SpriteManager.Group.Item; + // There are no calls for sprites in the None Group. + // All sprite calls for almost anything we don't manually group is in the Item group. + + if (!ModSprites.ContainsKey(group)) + ModSprites.Add(group, new Dictionary(StringComparer.InvariantCultureIgnoreCase)); + + ModSprites[group][name] = sprite; + } + + internal static void Add(ModSprite sprite) => Add(sprite.Group, sprite.Id, sprite.Sprite); + + internal static Dictionary> ModSprites + = new Dictionary>(); + + /// + /// The tech type of a specific item associated with this sprite. + /// Can be if this sprite is for used on a group. + /// + public TechType TechType; + + /// + /// The actual sprite used in-game when this sprite is references. + /// + public UnityEngine.Sprite Sprite; + + /// + /// The group that this sprite belongs to. + /// Can be if this sprite is for used on an item. + /// + public SpriteManager.Group Group; + + /// + /// The internal identifier of this sprite when it isn't associated to an item. + /// + public string Id; + + /// + /// Creates a new ModSprite to be used with a specific TechType. + /// Created with an Atlas Sprite. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + public ModSprite(TechType type, UnityEngine.Sprite sprite) + { + TechType = type; + Id = type.AsString(); + Sprite = sprite; + Group = SpriteManager.Group.Item; + } + + /// + /// Creates a new ModSprite to be used with a specific group and internal ID. + /// Created with an Atlas Sprite. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The sprite to be added. + public ModSprite(SpriteManager.Group group, string id, UnityEngine.Sprite sprite) + { + Group = group; + Id = id; + Sprite = sprite; + TechType = TechType.None; + } + + /// + /// Creates a new ModSprite to be used with a specific group and internal ID. + /// Created with an Atlas Sprite. + /// + /// The sprite group. + /// The techtype paired to this sprite. + /// The sprite to be added. + public ModSprite(SpriteManager.Group group, TechType type, UnityEngine.Sprite sprite) + { + Group = group; + Id = type.AsString(); + Sprite = sprite; + TechType = type; + } + } +} +#endif \ No newline at end of file diff --git a/SMLHelper/Assets/Buildable.cs b/SMLHelper/Assets/Buildable.cs new file mode 100644 index 00000000..b0b47856 --- /dev/null +++ b/SMLHelper/Assets/Buildable.cs @@ -0,0 +1,35 @@ +namespace SMLHelper.V2.Assets +{ + using System; + + /// + /// An item that can be built into the game world. + /// + /// + /// + public abstract class Buildable : PdaItem + { + /// + /// Obsolete. No longer functional. Handle with a customized HandTarget instead. + /// + [Obsolete("No longer functional. Handle with a customized HandTarget instead.", true)] + public virtual string HandOverText => null; + + /// + /// Initializes a new , the basic class for any item that can built using the Habitat Builder Tool. + /// + /// The main internal identifier for this item. Your item's will be created using this name. + /// The name displayed in-game for this item whether in the open world or in the inventory. + /// The description for this item; Typically seen in the PDA, inventory, or crafting screens. + protected Buildable(string classId, string friendlyName, string description) + : base(classId, friendlyName, description) + { + CorePatchEvents += PatchBuildable; + } + + private void PatchBuildable() + { + this.CraftDataHandler.AddBuildable(this.TechType); + } + } +} diff --git a/SMLHelper/Assets/Craftable.cs b/SMLHelper/Assets/Craftable.cs new file mode 100644 index 00000000..a55a55eb --- /dev/null +++ b/SMLHelper/Assets/Craftable.cs @@ -0,0 +1,62 @@ +namespace SMLHelper.V2.Assets +{ + using SMLHelper.V2.Interfaces; + + /// + /// An item that can be crafted into the game world from a fabricator. + /// + /// + /// + public abstract class Craftable : PdaItem + { + internal ICraftTreeHandler CraftTreeHandler { get; set; } = Handlers.CraftTreeHandler.Main; + + /// + /// Override with the vanilla fabricator that crafts this item. + /// Leave this as if you are manually adding this item to a custom fabricator. + /// + public virtual CraftTree.Type FabricatorType => CraftTree.Type.None; + + /// + /// Override with the tab node steps to take to get to the tab you want the item's blueprint to appear in. + /// If not overriden, the item will appear at the craft tree's root. + /// + public virtual string[] StepsToFabricatorTab => null; + + /// + /// Override with a custom crafting time for this item. Normal default crafting time is 1f. + /// Any value zero or less will be ignored. + /// + public virtual float CraftingTime => 0f; + + /// + /// Initializes a new , the basic class for any item that can be crafted at a fabricator. + /// + /// The main internal identifier for this item. Your item's will be created using this name. + /// The name displayed in-game for this item whether in the open world or in the inventory. + /// The description for this item; Typically seen in the PDA, inventory, or crafting screens. + protected Craftable(string classId, string friendlyName, string description) + : base(classId, friendlyName, description) + { + CorePatchEvents += PatchCraftingData; + } + + private void PatchCraftingData() + { + if (this.FabricatorType == CraftTree.Type.None) + { + Logger.Debug($"Craftable '{this.ClassID}' was not automatically patched into a crafting tree."); + } + else + { + if (this.StepsToFabricatorTab == null || this.StepsToFabricatorTab.Length == 0) + this.CraftTreeHandler.AddCraftingNode(this.FabricatorType, this.TechType); + else + this.CraftTreeHandler.AddCraftingNode(this.FabricatorType, this.TechType, this.StepsToFabricatorTab); + } + + if (this.CraftingTime > 0f) + this.CraftDataHandler.SetCraftingTime(this.TechType, this.CraftingTime); + } + } +} diff --git a/SMLHelper/Assets/CustomFabricator.cs b/SMLHelper/Assets/CustomFabricator.cs new file mode 100644 index 00000000..d5935a2a --- /dev/null +++ b/SMLHelper/Assets/CustomFabricator.cs @@ -0,0 +1,424 @@ +namespace SMLHelper.V2.Assets +{ + using System; + using System.Collections; + using System.Collections.Generic; + using SMLHelper.V2.Crafting; + using SMLHelper.V2.Handlers; + using UnityEngine; + using Logger = V2.Logger; + +#if SUBNAUTICA + using Sprite = Atlas.Sprite; +#elif BELOWZERO + using Sprite = UnityEngine.Sprite; +#endif + + /// + /// An asset class inheriting from that streamlines the process of creating a custom fabricator with a custom crafting tree. + /// + /// + public abstract class CustomFabricator : Buildable + { + /// + /// Defines a list of available models for your . + /// + public enum Models + { + /// + /// The regular fabricator like the one in the life pod. + /// + Fabricator, + + /// + /// The modification station that upgrades your equipment. + /// + Workbench, +#if SUBNAUTICA + /// + /// The style of fabricator found in the Moon Pool and the Cyclops sub. + /// + MoonPool, +#endif + /// + /// Use this option only if you want to provide your own custom model for your fabricator. + /// To use this value, you must override the method. + /// + Custom + } + + private const string RootNode = "root"; + internal readonly Dictionary CraftTreeLinkingNodes = new Dictionary(); + internal readonly List OrderedCraftTreeActions = new List(); + + /// + /// Initialized a new based on the asset class. + /// + /// The main internal identifier for this item. Your item's will be created using this name. + /// The name displayed in-game for this item whether in the open world or in the inventory. + /// The description for this item; Typically seen in the PDA, inventory, or crafting screens. + protected CustomFabricator(string classId, string friendlyName, string description) + : base(classId, friendlyName, description) + { + OnStartedPatching += () => + { + CreateCustomCraftTree(out CraftTree.Type craftTreeType); + this.TreeTypeID = craftTreeType; + }; + } + + /// + /// Override this property to change which model your custom fabricator will use. + /// By default, this will be the standard as seen in the lifepod. + /// + public virtual Models Model => Models.Fabricator; + + /// + /// Override this property to change the value of . + /// Defaults to true. + /// + public virtual bool AllowedInBase => true; + + /// + /// Override this property to change the value of . + /// Defaults to true. + /// + public virtual bool AllowedInCyclops => true; + + /// + /// Override this property to change the value of . + /// Defaults to false. + /// + public virtual bool AllowedOutside => false; + + /// + /// Override this property to change the value of . + /// Defaults to false. + /// + public virtual bool AllowedOnCeiling => false; + + /// + /// Override this property to change the value of . + /// Defaults to true for and false for all others. + /// + public virtual bool AllowedOnGround => this.Model == Models.Workbench; + + /// + /// Override this property to change the value of . + /// Defaults to false for and true for all others. + /// + public virtual bool AllowedOnWall => this.Model != Models.Workbench; + + /// + /// Override this property to change the value of . + /// Defaults to true for and false for all others. + /// + public virtual bool RotationEnabled => this.Model == Models.Workbench; + + /// + /// Override this value tp true along with to apply a simple tint to your custom fabricator for easy customization. + /// + public virtual bool UseCustomTint => false; + + /// + /// Override this value to your desired along with to apply a simple tint to your custom fabricator for easy customization. + /// + public virtual Color ColorTint => Color.white; + + /// + /// The ID value for your custom craft tree. This is set after this method is invoked. + /// + public CraftTree.Type TreeTypeID { get; private set; } + + /// + /// Gets the root node of the crafting tree. This is set after this method is invoked. + /// + public ModCraftTreeRoot Root { get; private set; } + + /// + /// Override with the category within the group in the PDA blueprints where this item appears. + /// + public override TechCategory CategoryForPDA => TechCategory.InteriorModule; + + /// + /// Override with the main group in the PDA blueprints where this item appears. + /// + public override TechGroup GroupForPDA => TechGroup.InteriorModules; + + /// + /// The in-game . + /// + /// + public override GameObject GetGameObject() + { +#if SUBNAUTICA_EXP || BELOWZERO + return null; +#else + GameObject prefab = this.Model switch + { + Models.Fabricator => GameObject.Instantiate(CraftData.GetPrefabForTechType(TechType.Fabricator)), + Models.Workbench => GameObject.Instantiate(CraftData.GetPrefabForTechType(TechType.Workbench)), +#if SUBNAUTICA + Models.MoonPool => GameObject.Instantiate(Resources.Load("Submarine/Build/CyclopsFabricator")), +#endif + Models.Custom => GetCustomCrafterPreFab(), + _ => null + }; + + return PreProcessPrefab(prefab); +#endif + } + + /// + /// The in-game , async way. + /// + /// + public override IEnumerator GetGameObjectAsync(IOut gameObject) + { + GameObject prefab; + var taskResult = new TaskResult(); + + switch (this.Model) + { + case Models.Fabricator: + default: + yield return CraftData.GetPrefabForTechTypeAsync(TechType.Fabricator, false, taskResult); + prefab = GameObject.Instantiate(taskResult.Get()); + break; + case Models.Workbench: + yield return CraftData.GetPrefabForTechTypeAsync(TechType.Workbench, false, taskResult); + prefab = GameObject.Instantiate(taskResult.Get()); + break; +#if SUBNAUTICA + case Models.MoonPool: +#pragma warning disable CS0618 // obsolete + var request = UWE.PrefabDatabase.GetPrefabForFilenameAsync("Submarine/Build/CyclopsFabricator.prefab"); +#pragma warning restore CS0618 + yield return request; + request.TryGetPrefab(out prefab); + prefab = GameObject.Instantiate(prefab); + break; +#endif + case Models.Custom: + yield return GetCustomCrafterPreFabAsync(taskResult); + prefab = taskResult.Get(); + break; + }; + + gameObject.Set(PreProcessPrefab(prefab)); + } + + private GameObject PreProcessPrefab(GameObject prefab) + { + Constructable constructible = null; + GhostCrafter crafter; + switch (this.Model) + { + case Models.Fabricator: + default: + crafter = prefab.GetComponent(); + break; + case Models.Workbench: + crafter = prefab.GetComponent(); + break; +#if SUBNAUTICA + case Models.MoonPool: + crafter = prefab.GetComponent(); + + // Add prefab ID because CyclopsFabricator normaly doesn't have one + PrefabIdentifier prefabId = prefab.AddComponent(); + prefabId.ClassId = this.ClassID; + prefabId.name = this.FriendlyName; + + // Add tech tag because CyclopsFabricator normaly doesn't have one + TechTag techTag = prefab.AddComponent(); + techTag.type = this.TechType; + + // Retrieve sub game objects + GameObject cyclopsFabLight = prefab.FindChild("fabricatorLight"); + GameObject cyclopsFabModel = prefab.FindChild("submarine_fabricator_03"); + // Translate CyclopsFabricator model and light + prefab.transform.localPosition = new Vector3(cyclopsFabModel.transform.localPosition.x, // Same X position + cyclopsFabModel.transform.localPosition.y - 0.8f, // Push towards the wall slightly + cyclopsFabModel.transform.localPosition.z); // Same Z position + prefab.transform.localPosition = new Vector3(cyclopsFabLight.transform.localPosition.x, // Same X position + cyclopsFabLight.transform.localPosition.y - 0.8f, // Push towards the wall slightly + cyclopsFabLight.transform.localPosition.z); // Same Z position + // Add constructable - This prefab normally isn't constructed. + constructible = prefab.AddComponent(); + constructible.model = cyclopsFabModel; + break; +#endif + case Models.Custom: + crafter = prefab.EnsureComponent(); + break; + } + + crafter.craftTree = this.TreeTypeID; + crafter.handOverText = $"Use {this.FriendlyName}"; + + if (constructible is null) + constructible = prefab.GetComponent(); + + constructible.allowedInBase = this.AllowedInBase; + constructible.allowedInSub = this.AllowedInCyclops; + constructible.allowedOutside = this.AllowedOutside; + constructible.allowedOnCeiling = this.AllowedOnCeiling; + constructible.allowedOnGround = this.AllowedOnGround; + constructible.allowedOnWall = this.AllowedOnWall; + constructible.allowedOnConstructables = false; + constructible.controlModelState = true; + constructible.rotationEnabled = this.RotationEnabled; + constructible.techType = this.TechType; // This was necessary to correctly associate the recipe at building time + + SkyApplier skyApplier = prefab.EnsureComponent(); + skyApplier.renderers = prefab.GetComponentsInChildren(); + skyApplier.anchorSky = Skies.Auto; + + if (this.UseCustomTint) + { + SkinnedMeshRenderer skinnedMeshRenderer = prefab.GetComponentInChildren(); + skinnedMeshRenderer.material.color = this.ColorTint; // Tint option available + } + + crafter.powerRelay = PowerSource.FindRelay(prefab.transform); + + return prefab; + } + + /// + /// Override this method if you want to provide your own prefab and model for your custom fabricator. + /// + /// + protected virtual GameObject GetCustomCrafterPreFab() + { + throw new NotImplementedException($"To use a custom fabricator model, the prefab must be created in {nameof(GetCustomCrafterPreFab)}."); + } + + /// + /// Override this method if you want to provide your own prefab and model for your custom fabricator. + /// + /// + protected virtual IEnumerator GetCustomCrafterPreFabAsync(IOut gameObject) + { + throw new NotImplementedException($"To use a custom fabricator model, the prefab must be created in {nameof(GetCustomCrafterPreFabAsync)}."); + } + + /// + /// Override this method if you want full control over how your custom craft tree is built up. + /// To use this method's default behavior, you must use the following methods to build up your crafting tree. + /// - + /// - + /// - + /// + /// + internal virtual void CreateCustomCraftTree(out CraftTree.Type craftTreeType) + { + ModCraftTreeRoot root = CraftTreeHandler.CreateCustomCraftTreeAndType(this.ClassID, out craftTreeType); + this.Root = root; + CraftTreeLinkingNodes.Add(RootNode, root); + + // Since we shouldn't rely on attached events to be executed in any particular order, + // this list of actions will ensure that the craft tree is built up in the order in which nodes were received. + foreach (Action action in OrderedCraftTreeActions) + action.Invoke(); + } + + /// + /// Adds a new tab node to the custom crafting tree of this fabricator. + /// + /// The internal ID for the tab node. + /// The in-game text shown for the tab node. + /// The sprite used for the tab node. + /// Optional. The parent tab of this tab. + /// When this value is null, the tab will be added to the root of the craft tree. + public void AddTabNode(string tabId, string displayText, Sprite tabSprite, string parentTabId = null) + { + OrderedCraftTreeActions.Add(() => + { + ModCraftTreeLinkingNode parentNode = CraftTreeLinkingNodes[parentTabId ?? RootNode]; + ModCraftTreeTab tab = parentNode.AddTabNode(tabId, displayText, tabSprite); + CraftTreeLinkingNodes[tabId] = tab; + }); + } + + /// + /// Adds a new crafting node to the custom crafting tree of this fabricator. + /// + /// The item to craft. + /// Optional. The parent tab of this craft node. + /// When this value is null, the craft node will be added to the root of the craft tree. + public void AddCraftNode(TechType techType, string parentTabId = null) + { + Logger.Debug($"'{techType.AsString()}' will be added to the custom craft tree '{this.ClassID}'"); + OrderedCraftTreeActions.Add(() => + { + ModCraftTreeLinkingNode parentTab = CraftTreeLinkingNodes[parentTabId ?? RootNode]; + parentTab.AddCraftingNode(techType); + }); + } + + /// + /// Safely attempts to add a new crafting node to the custom crafting tree of this fabricator. + /// If the modded TechType is not found, the craft node will not be added. + /// + /// The modded item to craft. + /// Optional. The parent tab of this craft node. + /// When this value is null, the craft node will be added to the root of the craft tree. + public void AddCraftNode(string moddedTechType, string parentTabId = null) + { + Logger.Debug($"'{moddedTechType}' will be added to the custom craft tree '{this.ClassID}'"); + OrderedCraftTreeActions.Add(() => + { + if (this.TechTypeHandler.TryGetModdedTechType(moddedTechType, out TechType techType)) + { + ModCraftTreeLinkingNode parentTab = CraftTreeLinkingNodes[parentTabId ?? RootNode]; + parentTab.AddCraftingNode(techType); + } + else + { + Logger.Info($"Did not find a TechType value for '{moddedTechType}' to add to the custom craft tree '{this.ClassID}'"); + } + }); + } + + /// + /// Safely adds a new crafting node to the custom crafting tree of this fabricator. + /// If the item has not been patched yet, its method will first be invoked. + /// + /// The item to craft from this fabricator. + /// Optional. The parent tab of this craft node. + /// When this value is null, the item's property will be checked instead. + /// The craft node will be added to the root of the craft tree if both are null. + public void AddCraftNode(Craftable item, string parentTabId = null) + { + Logger.Debug($"'{item.ClassID}' will be added to the custom craft tree '{this.ClassID}'"); + OrderedCraftTreeActions.Add(() => + { + if (item.TechType == TechType.None) + { + Logger.Info($"'{item.ClassID} had to be patched early to obtain its TechType value for the custom craft tree '{this.ClassID}'"); + item.Patch(); + } + + string[] stepsToParent = item.StepsToFabricatorTab; + + if (parentTabId == null) + { + if (stepsToParent != null && stepsToParent.Length > 0) + { + int last = stepsToParent.Length - 1; + parentTabId = stepsToParent[last]; + } + else + { + parentTabId = RootNode; + } + } + + ModCraftTreeLinkingNode parentTab = CraftTreeLinkingNodes[parentTabId]; + parentTab.AddCraftingNode(item.TechType); + }); + } + } +} diff --git a/SMLHelper/Assets/Equipable.cs b/SMLHelper/Assets/Equipable.cs new file mode 100644 index 00000000..e77ead7a --- /dev/null +++ b/SMLHelper/Assets/Equipable.cs @@ -0,0 +1,39 @@ +namespace SMLHelper.V2.Assets +{ + /// + /// An item that can be crafted and equipped. + /// + /// + /// + public abstract class Equipable: Craftable + { + /// + /// Gets the type of equipment slot this item can fit into. + /// + /// + /// The type of the equipment slot compatible with this item. + /// + public abstract EquipmentType EquipmentType { get; } + + /// + /// Gets the type of equipment slot this item can fit into. + /// + /// + /// The type of the equipment slot compatible with this item. + /// + public virtual QuickSlotType QuickSlotType => QuickSlotType.None; + + /// + /// Initializes a new instance of the class. + /// + /// The main internal identifier for this item. Your item's will be created using this name. + /// The name displayed in-game for this item whether in the open world or in the inventory. + /// The description for this item; Typically seen in the PDA, inventory, or crafting screens. + protected Equipable(string classId, string friendlyName, string description) + : base(classId, friendlyName, description) + { + CorePatchEvents += () => CraftDataHandler.SetEquipmentType(TechType, EquipmentType); + CorePatchEvents += () => CraftDataHandler.SetQuickSlotType(TechType, QuickSlotType); + } + } +} diff --git a/SMLHelper/Assets/Fish.cs b/SMLHelper/Assets/Fish.cs new file mode 100644 index 00000000..8ae58ff8 --- /dev/null +++ b/SMLHelper/Assets/Fish.cs @@ -0,0 +1,58 @@ +namespace SMLHelper.V2.Assets +{ + using Handlers; + using UnityEngine; + + /// + /// "A wrapper class that uses and to quickly create a custom fish + /// + public class Fish + { + /// + /// The id to use to create the creature. This should be unique + /// + public string id; + /// + /// The display name for your fish. This is shown in the inventory, and can be whatever you want + /// + public string displayName; + /// + /// The short description of your fish in the inventory + /// + public string tooltip = ""; + /// + /// The file name of your fish's sprite in the inventory. You can leave this null if your fish isn't pickupable. The file is relative + /// from the QMods folder, e.g. "MinecraftFish/Assets/cod.png" + /// + public string spriteFileName; + + /// + /// The model to use to create the creature. This would ideally only have renderer/collider components attached, but will still work if it has behaviours + /// + public GameObject modelPrefab; + + /// + /// Determines whether your creature can be picked up by the player + /// + public bool isPickupable; + /// + /// Determines whether the creature moves on land or in water. Default true, which is in water. Land creature AI does not work ATM. + /// + public bool isWaterCreature = true; + + /// + /// The speed at which your creature will swim + /// + public float swimSpeed; + + /// + /// The interval (in seconds) between when your fish will find a new position to swim to + /// + public float swimInterval = 1f; + + /// + /// The area in which your creature will look for a random position when swimming. This should be larger for larger creatures + /// + public Vector3 swimRadius; + } +} \ No newline at end of file diff --git a/SMLHelper/Assets/FishPrefab.cs b/SMLHelper/Assets/FishPrefab.cs new file mode 100644 index 00000000..ed2595fe --- /dev/null +++ b/SMLHelper/Assets/FishPrefab.cs @@ -0,0 +1,132 @@ +namespace SMLHelper.V2.Assets +{ + using UnityEngine; + + /// + /// Class used by CustomFish for constructing a prefab based on the values provided by the user. + /// You can use this yourself if you want, but you will need to manually provide a TechType + /// + public class FishPrefab : ModPrefab + { + /// + /// The model to use to create the creature. This would ideally only have renderer/collider components attached, but will still work if it has behaviours + /// + public GameObject modelPrefab; + /// + /// Determines whether your creature can be picked up + /// + public bool pickupable; + /// + /// Determines whether your creature walks or swims. Only works for swimming at the moment, land will probably be fixed at a later time + /// + public bool isWaterCreature = true; + + /// + /// The speed at which your creature moves + /// + public float swimSpeed; + /// + /// The area in which your creature's AI will look for a new spot to move to + /// + public Vector3 swimRadius; + /// + /// The interval in seconds between when your creature finds a new spot to move to + /// + public float swimInterval; + + /// + /// Creates a new with the given values + /// + /// + /// + /// + public FishPrefab(string classId, string prefabFileName, TechType techType = TechType.None) : base(classId, prefabFileName, techType) { } + + /// + /// Gets the prefab game object + /// + public sealed override GameObject GetGameObject() + { + V2.Logger.Debug($"[FishFramework] Initializing fish: {this.ClassID}"); + GameObject mainObj = modelPrefab; + + Renderer[] renderers = mainObj.GetComponentsInChildren(); + foreach (Renderer rend in renderers) + { + rend.material.shader = Shader.Find("MarmosetUBER"); + } + + Rigidbody rb = mainObj.EnsureComponent(); + rb.useGravity = false; + rb.angularDrag = 1f; + + WorldForces forces = mainObj.EnsureComponent(); + forces.useRigidbody = rb; + forces.aboveWaterDrag = 0f; + forces.aboveWaterGravity = 9.81f; + forces.handleDrag = true; + forces.handleGravity = true; + forces.underwaterDrag = 1f; + forces.underwaterGravity = 0; +#if BELOWZERO || SUBNAUTICA_EXP + forces.waterDepth = Ocean.GetOceanLevel(); +#else + forces.waterDepth = Ocean.main.GetOceanLevel(); +#endif + forces.enabled = false; + forces.enabled = true; + + mainObj.EnsureComponent().slotType = EntitySlot.Type.Creature; + mainObj.EnsureComponent().ClassId = this.ClassID; + mainObj.EnsureComponent().type = this.TechType; + mainObj.EnsureComponent().renderers = renderers; + mainObj.EnsureComponent().cellLevel = LargeWorldEntity.CellLevel.Near; + mainObj.EnsureComponent().health = 10f; + + Creature creature = mainObj.EnsureComponent(); + creature.initialCuriosity = AnimationCurve.Linear(0f, 0.5f, 1f, 0.5f); + creature.initialFriendliness = AnimationCurve.Linear(0f, 0.5f, 1f, 0.5f); + creature.initialHunger = AnimationCurve.Linear(0f, 0.5f, 1f, 0.5f); + + SwimBehaviour behaviour = null; + if (isWaterCreature) + { + behaviour = mainObj.EnsureComponent(); + SwimRandom swim = mainObj.EnsureComponent(); + swim.swimVelocity = swimSpeed; + swim.swimRadius = swimRadius; + swim.swimInterval = swimInterval; + } + else + { + behaviour = mainObj.EnsureComponent(); + WalkOnGround walk = mainObj.EnsureComponent(); + OnSurfaceMovement move = mainObj.EnsureComponent(); + move.onSurfaceTracker = mainObj.EnsureComponent(); + } + + Locomotion loco = mainObj.EnsureComponent(); + loco.useRigidbody = rb; + + mainObj.EnsureComponent().type = EcoTargetType.Peeper; + mainObj.EnsureComponent(); + mainObj.EnsureComponent(); + + SplineFollowing spline = mainObj.EnsureComponent(); + spline.locomotion = loco; + spline.levelOfDetail = mainObj.EnsureComponent(); + spline.GoTo(mainObj.transform.position + mainObj.transform.forward, mainObj.transform.forward, 5f); + + behaviour.splineFollowing = spline; + + if (pickupable) + { + mainObj.EnsureComponent(); + } + + creature.ScanCreatureActions(); + + return mainObj; + } + } +} diff --git a/SMLHelper/Assets/ModPrefab.cs b/SMLHelper/Assets/ModPrefab.cs new file mode 100644 index 00000000..c64e2371 --- /dev/null +++ b/SMLHelper/Assets/ModPrefab.cs @@ -0,0 +1,153 @@ +using System.Reflection; + +namespace SMLHelper.V2.Assets +{ + using System; + using System.Collections; + using System.Collections.Generic; + using UnityEngine; + + /// + /// The abstract class to inherit when you want to add new PreFabs into the game. + /// + public abstract class ModPrefab + { + private static readonly Dictionary FileNameDictionary = new Dictionary(StringComparer.InvariantCultureIgnoreCase); + private static readonly Dictionary ClassIdDictionary = new Dictionary(StringComparer.InvariantCultureIgnoreCase); + private static readonly List PreFabsList = new List(); + internal static bool ModPrefabsPatched = false; + + internal static void Add(ModPrefab prefab) + { + FileNameDictionary.Add(prefab.PrefabFileName, prefab); + ClassIdDictionary.Add(prefab.ClassID, prefab); + PreFabsList.Add(prefab); + ModPrefabsPatched = false; + } + + internal static IEnumerable Prefabs => PreFabsList; + internal static bool TryGetFromFileName(string classId, out ModPrefab prefab) + { + if (string.IsNullOrEmpty(classId)) + { + prefab = null; + return false; + } + return FileNameDictionary.TryGetValue(classId, out prefab); + } + + internal static bool TryGetFromClassId(string classId, out ModPrefab prefab) + { + if (string.IsNullOrEmpty(classId)) + { + prefab = null; + return false; + } + return ClassIdDictionary.TryGetValue(classId, out prefab); + } + + internal readonly Assembly Mod; + + /// + /// The class identifier used for the component whenever applicable. + /// + public string ClassID { get; protected set; } + + /// + /// Name of the prefab file. + /// + public string PrefabFileName { get; protected set; } + + /// + /// The of the corresponding item. + /// Used for , and components whenever applicable. + /// + public TechType TechType { get; protected set; } + + /// + /// Initializes a new instance of the class. + /// + /// The class identifier used for the component whenever applicable. + /// Name of the prefab file. + /// The techtype of the corresponding item. + /// Used for the and components whenever applicable. + /// Can also be set later in the constructor if it is not yet provided. + protected ModPrefab(string classId, string prefabFileName, TechType techType = TechType.None) + { + this.ClassID = classId; + this.PrefabFileName = prefabFileName; + this.TechType = techType; + + Mod = GetType().Assembly; + } + + internal GameObject GetGameObjectInternal() + { + GameObject go = GetGameObject(); + if (go == null) + return null; + + ProcessPrefab(go); + return go; + } + + internal IEnumerator GetGameObjectInternalAsync(IOut gameObject) + { + var taskResult = new TaskResult(); + yield return GetGameObjectAsync(taskResult); + + GameObject go = taskResult.Get(); + if (go == null) + yield break; + + ProcessPrefab(go); + gameObject.Set(go); + } + + /// + /// Caches the prefab, then sets its TechType and ClassID to a default set of values applicable to most mods.
+ /// FOR ADVANCED MODDING ONLY. Do not override unless you know exactly what you are doing. + ///
+ /// + protected virtual void ProcessPrefab(GameObject go) + { + if (go.activeInHierarchy) // inactive prefabs don't need to be removed by cache + ModPrefabCache.AddPrefab(go); + + go.name = this.ClassID; + + if (this.TechType != TechType.None) + { + if (go.GetComponent() is TechTag tag) + { + tag.type = this.TechType; + } + + if (go.GetComponent() is Constructable cs) + { + cs.techType = this.TechType; + } + } + + if (go.GetComponent() is PrefabIdentifier pid) + { + pid.ClassId = this.ClassID; + } + } + + + /// + /// Gets the prefab game object. Set up your prefab components here. + /// The and ClassID are already handled. + /// + /// The game object to be instantiated into a new in-game entity. + public virtual GameObject GetGameObject() => null; + + /// + /// Gets the prefab game object asynchronously. Set up your prefab components here. + /// The and ClassID are already handled. + /// + /// The game object to be instantiated into a new in-game entity. + public virtual IEnumerator GetGameObjectAsync(IOut gameObject) => null; + } +} diff --git a/SMLHelper/Assets/ModPrefabCache.cs b/SMLHelper/Assets/ModPrefabCache.cs new file mode 100644 index 00000000..a85cd4ef --- /dev/null +++ b/SMLHelper/Assets/ModPrefabCache.cs @@ -0,0 +1,91 @@ +namespace SMLHelper.V2.Assets +{ + using System; + using System.Collections.Generic; + using UnityEngine; + using Logger = V2.Logger; + + /// + /// Class that used by to store game objects that used as prefabs. + /// Also it can be used by mods directly, e.g. in to store prefab before returning. + /// Game objects in cache are inactive and will not be on scene. + /// + public static class ModPrefabCache + { + private const float cleanDelay = 30.0f; // delay in secs before attempt to remove prefab from cache + + // list of prefabs for removing (Item1 - time of addition, Item2 - prefab gameobject) + private readonly static List> prefabs = new List>(); + + private static GameObject root; // active root object with CacheCleaner component + private static GameObject prefabRoot; // inactive child object, parent for added prefabs + + private class CacheCleaner : MonoBehaviour + { + public void Update() + { + for (int i = prefabs.Count - 1; i >= 0; i--) + { + if (Time.time < prefabs[i].Item1 + cleanDelay || Builder.prefab == prefabs[i].Item2) + continue; + + Logger.Debug($"ModPrefabCache: removing prefab {prefabs[i].Item2}"); + + Destroy(prefabs[i].Item2); + prefabs.RemoveAt(i); + } + } + } + + private static void Init() + { + if (root) + return; + + root = new GameObject("SMLHelper.PrefabCache", typeof(SceneCleanerPreserve), typeof(CacheCleaner)); + UnityEngine.Object.DontDestroyOnLoad(root); + + prefabRoot = new GameObject("PrefabRoot"); + prefabRoot.transform.parent = root.transform; + prefabRoot.SetActive(false); + } + + /// Add prefab to cache + /// Prefab to add. + /// + /// Is prefab needed to be removed from cache after use. + /// Prefabs without autoremove flag can be safely deleted by + /// + public static void AddPrefab(GameObject prefab, bool autoremove = true) + { + Init(); + prefab.transform.parent = prefabRoot.transform; + + AddPrefabInternal(prefab, autoremove); + } + + /// Add prefab copy to cache (instatiated copy will not run 'Awake') + /// Prefab to copy and add. + /// + /// Is prefab copy needed to be removed from cache after use. + /// Prefabs without autoremove flag can be safely deleted by + /// + /// Prefab copy + public static GameObject AddPrefabCopy(GameObject prefab, bool autoremove = true) + { + Init(); + var prefabCopy = UnityEngine.Object.Instantiate(prefab, prefabRoot.transform); + + AddPrefabInternal(prefabCopy, autoremove); + return prefabCopy; + } + + private static void AddPrefabInternal(GameObject prefab, bool autoremove) + { + if (autoremove) + prefabs.Add(Tuple.Create(Time.time, prefab)); + + Logger.Debug($"ModPrefabCache: adding prefab {prefab}"); + } + } +} diff --git a/SMLHelper/Assets/ModPrefabRequest.cs b/SMLHelper/Assets/ModPrefabRequest.cs new file mode 100644 index 00000000..3cd696d0 --- /dev/null +++ b/SMLHelper/Assets/ModPrefabRequest.cs @@ -0,0 +1,59 @@ +namespace SMLHelper.V2.Assets +{ + using System.Collections; + using UnityEngine; + using UWE; + + // request for getting ModPrefab asynchronously + internal class ModPrefabRequest: IPrefabRequest, IEnumerator + { + private readonly ModPrefab modPrefab; + + private int state = 0; + private CoroutineTask task; + private TaskResult taskResult; + + public ModPrefabRequest(ModPrefab modPrefab) + { + this.modPrefab = modPrefab; + } + + private void Init() + { + if (task != null) + return; + + taskResult = new TaskResult(); + task = new CoroutineTask(modPrefab.GetGameObjectInternalAsync(taskResult), taskResult); + } + + public object Current + { + get + { + Init(); + return task; + } + } + + public bool TryGetPrefab(out GameObject result) + { + result = taskResult.Get(); + return result != null; + } + + public bool MoveNext() + { + Init(); + return state++ == 0; + } + + public void Reset() {} + +#if BELOWZERO || SUBNAUTICA_EXP + public void Release() + { + } +#endif + } +} diff --git a/SMLHelper/Assets/PdaItem.cs b/SMLHelper/Assets/PdaItem.cs new file mode 100644 index 00000000..fb908746 --- /dev/null +++ b/SMLHelper/Assets/PdaItem.cs @@ -0,0 +1,155 @@ +namespace SMLHelper.V2.Assets +{ + using Crafting; + using SMLHelper.V2.Interfaces; + using System.Collections.Generic; + + /// + /// A item that appears in the PDA blueprints. + /// + /// + public abstract class PdaItem: Spawnable + { + internal IKnownTechHandler KnownTechHandler { get; set; } = Handlers.KnownTechHandler.Main; + internal IPDAHandler PDAHandler { get; set; } = Handlers.PDAHandler.Main; + internal IPDAEncyclopediaHandler PDAEncyclopediaHandler { get; set; } = Handlers.PDAEncyclopediaHandler.Main; + + /// + /// Override to set the that must first be scanned or picked up to unlock the blueprint for this item. + /// If not overriden, it this item will be unlocked from the start of the game. + /// + public virtual TechType RequiredForUnlock => TechType.None; + + /// + /// Override to add a scanner entry to the TechType if it does not have one. + /// WARNING. You can overwrite an existing entry with this. Use with Caution as this can break recipe unlocks of the original! + /// Default is . + /// + public virtual bool AddScannerEntry => false; + + /// + /// Override to set the number of that must be scanned to unlock; + /// If not overriden, Default value is . + /// + public virtual int FragmentsToScan => 1; + + /// + /// Override to set the speed that the fragments are scanned; + /// If not overriden, Default value is . + /// + public virtual float TimeToScanFragment => 2f; + + /// + /// Override to allow fragments to be scanned for materials after the relavent TechType is already Unlocked. + /// Default is . + /// + public virtual bool DestroyFragmentOnScan => false; + + /// + /// Override to add a into the PDA's Encyclopedia for this object. + /// WARNING. You can overwrite an existing entry with this. Use with Caution! + /// Default is . + /// + public virtual PDAEncyclopedia.EntryData EncyclopediaEntryData => null; + + /// + /// Override with the main group in the PDA blueprints where this item appears. + /// + public virtual TechGroup GroupForPDA => TechGroup.Uncategorized; + + /// + /// Override with the category within the group in the PDA blueprints where this item appears. + /// + public virtual TechCategory CategoryForPDA => TechCategory.Misc; + + /// + /// Override this property to assign whether or not the should be unlocked at the start, defaulted to == + /// + public virtual bool UnlockedAtStart => RequiredForUnlock == TechType.None; + + /// + /// Message which should be shown when the item is unlocked. + /// If not overridden, the message will default to Subnautica's (language key ""). + /// + public virtual string DiscoverMessage => null; + + internal string DiscoverMessageResolved => DiscoverMessage == null ? "NotificationBlueprintUnlocked" : $"{TechType.AsString()}_DiscoverMessage"; + + /// + /// Initializes a new , the basic class for any item that appears among your PDA blueprints. + /// + /// The main internal identifier for this item. Your item's will be created using this name. + /// The name displayed in-game for this item whether in the open world or in the inventory. + /// The description for this item; Typically seen in the PDA, inventory, or crafting screens. + protected PdaItem(string classId, string friendlyName, string description) + : base(classId, friendlyName, description) + { + CorePatchEvents += PatchTechDataEntry; + } +#if SUBNAUTICA + /// + /// This provides the instance used to designate how this item is crafted or constructed. + /// + protected abstract TechData GetBlueprintRecipe(); +#elif BELOWZERO + /// + /// This provides the instance used to designate how this item is crafted or constructed. + /// + protected abstract RecipeData GetBlueprintRecipe(); +#endif + private void PatchTechDataEntry() + { + CraftDataHandler.SetTechData(TechType, GetBlueprintRecipe()); + + + if(GroupForPDA != TechGroup.Uncategorized) + { + List categories = new List(); + CraftData.GetBuilderCategories(GroupForPDA, categories); + if(categories.Contains(CategoryForPDA)) + { + CraftDataHandler.AddToGroup(GroupForPDA, CategoryForPDA, TechType); + } + else + { + Logger.Error($"Failed to add {TechType} to {GroupForPDA}/{CategoryForPDA} as it is not a registered combination."); + } + } + + if(EncyclopediaEntryData != null) + { + PDAEncyclopediaHandler.AddCustomEntry(EncyclopediaEntryData); + } + + if(!UnlockedAtStart) + { + KnownTechHandler.SetAnalysisTechEntry(RequiredForUnlock, new TechType[1] { TechType }, DiscoverMessageResolved); + + if(AddScannerEntry) + { + PDAScanner.EntryData entryData = new PDAScanner.EntryData() + { + key = RequiredForUnlock, + blueprint = TechType, + destroyAfterScan = DestroyFragmentOnScan, + isFragment = true, + locked = true, + scanTime = TimeToScanFragment, + totalFragments = FragmentsToScan + }; + + if(EncyclopediaEntryData != null) + { + entryData.encyclopedia = EncyclopediaEntryData.key; + } + PDAHandler.AddCustomScannerEntry(entryData); + } + } + } + + internal sealed override void PatchTechType() + { + TechType = TechTypeHandler.AddTechType(Mod, ClassID, FriendlyName, Description, UnlockedAtStart); + } + } +} diff --git a/SMLHelper/Assets/Spawnable.cs b/SMLHelper/Assets/Spawnable.cs new file mode 100644 index 00000000..1ccc0b24 --- /dev/null +++ b/SMLHelper/Assets/Spawnable.cs @@ -0,0 +1,240 @@ +namespace SMLHelper.V2.Assets +{ + using Handlers; + using Interfaces; + using Utility; + using System; + using System.Collections; + using System.Collections.Generic; + using System.IO; + using System.Reflection; + using UnityEngine; + using UWE; + using Logger = Logger; +#if SUBNAUTICA + using Sprite = Atlas.Sprite; +#endif + + + /// + /// An item that can be spawned into the game. + /// + /// + public abstract class Spawnable: ModPrefab + { + internal IPrefabHandler PrefabHandler { get; set; } = Handlers.PrefabHandler.Main; + internal ISpriteHandler SpriteHandler { get; set; } = Handlers.SpriteHandler.Main; + internal ICraftDataHandler CraftDataHandler { get; set; } = Handlers.CraftDataHandler.Main; + internal ITechTypeHandlerInternal TechTypeHandler { get; set; } = Handlers.TechTypeHandler.Singleton; + internal IWorldEntityDatabaseHandler WorldEntityDatabaseHandler { get; set; } = Handlers.WorldEntityDatabaseHandler.Main; + internal ILootDistributionHandler LootDistributionHandler { get; set; } = Handlers.LootDistributionHandler.Main; + + private static readonly Vector2int defaultSize = new Vector2int(1, 1); + + /// + /// A simple delegate type that takes no parameters and returns void. + /// + public delegate void PatchEvent(); + + /// + /// Override with the folder where your mod's icons and other assets are stored. + /// By default, this will point to the same folder where your mod DLL is. + /// + /// "MyModAssembly/Assets" + public virtual string AssetsFolder => modFolderLocation; + + /// + /// Override with the file name for this item's icon. + /// If not overriden, this defaults to "[this item's ClassID].png". + /// + /// "MyClassID.png" + public virtual string IconFileName => $"{ClassID}.png"; + + /// + /// The in-game name of this spawnable item. + /// + public string FriendlyName { get; protected set; } + + /// + /// The description text when viewing this spawnable item from the inventory or crafting UI. + /// + public string Description { get; protected set; } + + /// + /// Returns true if this spawnable item has already been patched; Otherwise false. + /// This will become true after the method has finished running. + /// + public bool IsPatched { get; private set; } = false; + + /// + /// Returns the size that this entity will occupy inside the player inventory.
+ /// By default this will be 1x1. Override to change the size. + ///
+ public virtual Vector2int SizeInInventory { get; } = defaultSize; + + /// + /// A lightweight class used to specify the position of a Coordinated Spawn and optionally set its rotation. + /// + /// + /// + public record SpawnLocation(Vector3 position, Vector3 eulerAngles = default); + + /// + /// Returns the list of s that specify the prefab's Coordinated Spawns.
+ /// By default this will be null. + ///
+ public virtual List CoordinatedSpawns { get; } = null; + + /// + /// Returns the List of BiomeData that handles what Biomes this prefab will spawn, how probable it is to spawn there and how many per spawn. + /// By default this will be null. Override to change this. + /// + public virtual List BiomesToSpawnIn { get; } = null; + + /// + /// Returns the of this object if it has one. + /// By default this will be null. Override to change this. + /// + public virtual WorldEntityInfo EntityInfo { get; } = null; + + /// + /// Gets a value indicating whether if we should be looking for a Sprite when NOT overriding . + /// + public virtual bool HasSprite => false; + + /// + /// Initializes a new , the basic class needed for any item that can be spawned into the Subnautica game world. + /// + /// The main internal identifier for this item. Your item's will be created using this name. + /// The name displayed in-game for this item whether in the open world or in the inventory. + /// The description for this item; Typically seen in the PDA, inventory, or crafting screens. + protected Spawnable(string classId, string friendlyName, string description) + : base(classId, $"{classId}Prefab") + { + if(string.IsNullOrEmpty(classId)) + { + Logger.Log($"ClassID for Spawnables must be a non-empty value.", LogLevel.Error); + throw new ArgumentException($"Error patching Spawnable"); + } + + FriendlyName = friendlyName; + Description = description; + + CorePatchEvents += () => + { + PrefabHandler.RegisterPrefab(this); + +#if SUBNAUTICA + SpriteHandler.RegisterSprite(TechType, GetItemSprite()); +#elif BELOWZERO + CoroutineHost.StartCoroutine(RegisterSpriteAsync()); +#endif + if (!SizeInInventory.Equals(defaultSize)) + { + CraftDataHandler.SetItemSize(TechType, SizeInInventory); + } + + if(EntityInfo != null) + { + if(BiomesToSpawnIn != null) + LootDistributionHandler.AddLootDistributionData(this, BiomesToSpawnIn, EntityInfo); + else + WorldEntityDatabaseHandler.AddCustomInfo(ClassID, EntityInfo); + } + + if (CoordinatedSpawns != null) + { + foreach (var (position, eulerAngles) in CoordinatedSpawns) + { + CoordinatedSpawnsHandler.RegisterCoordinatedSpawn(new SpawnInfo(TechType, position, eulerAngles)); + } + } + }; + } + +#if BELOWZERO + private IEnumerator RegisterSpriteAsync() + { + while (!SpriteManager.hasInitialized) + yield return new WaitForSecondsRealtime(1); + + SpriteHandler.RegisterSprite(TechType, GetItemSprite()); + yield break; + } +#endif + + /// + /// This event triggers before the core patching methods begins. + /// You can attach simple methods to this event if you want to run code before the any of the core patching methods begin. + /// + protected PatchEvent OnStartedPatching; + + /// + /// The main patching methods are executed here. + /// This event should only be used by the SMLHelper QuickStart classes. + /// + internal PatchEvent CorePatchEvents; + + /// + /// This event triggers after the core patching methods begins. + /// You can attach simple methods to this event if you want to run code after the core patching methods have finished. + /// + protected PatchEvent OnFinishedPatching; + + private readonly string modFolderLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + + /// + /// Starts all patching code in SMLHelper. + /// If is true then this method is skipped to avoid duplicate patching. + /// + /// + /// + public void Patch() + { + if(IsPatched) + { + return; // Already patched. Skip. + } + + OnStartedPatching?.Invoke(); + + // Because invocation order isn't guaranteed by event handlers, + // we make sure the TechType is patched first before anything else that might require it. + PatchTechType(); + + CorePatchEvents.Invoke(); + + IsPatched = true; + + OnFinishedPatching?.Invoke(); + } + + internal virtual void PatchTechType() + { + TechType = TechTypeHandler.AddTechType(Mod, ClassID, FriendlyName, Description, false); + } + + /// + /// Determines thee to be used for this spawnable's icon. + /// Default behavior will look for a PNG file named inside . + /// + /// Returns the that will be used in the call. + protected virtual Sprite GetItemSprite() + { + // This is for backwards compatibility with mods that were using the "ModName/Assets" format + string path = this.AssetsFolder != modFolderLocation + ? IOUtilities.Combine(".", "QMods", this.AssetsFolder.Trim('/'), this.IconFileName) + : Path.Combine(this.AssetsFolder, this.IconFileName); + + if(File.Exists(path)) + { + return ImageUtils.LoadSpriteFromFile(path); + } + + if(HasSprite) + Logger.Error($"Sprite for '{this.PrefabFileName}'{Environment.NewLine}Did not find an image file at '{path}'"); + + return SpriteManager.defaultSprite; + } + } +} diff --git a/SMLHelper/Assets/SubnauticaModSprite.cs b/SMLHelper/Assets/SubnauticaModSprite.cs new file mode 100644 index 00000000..9287ed27 --- /dev/null +++ b/SMLHelper/Assets/SubnauticaModSprite.cs @@ -0,0 +1,120 @@ +#if SUBNAUTICA +namespace SMLHelper.V2.Assets +{ + using System; + using System.Collections.Generic; + + /// + /// A class that handles a custom sprite and what item it is associated to. + /// + internal class ModSprite + { + internal static void Add(SpriteManager.Group group, string name, Atlas.Sprite sprite) + { + if (group == SpriteManager.Group.None) + group = SpriteManager.Group.Item; + // There are no calls for sprites in the None Group. + // All sprite calls for almost anything we don't manually group is in the Item group. + + if (!ModSprites.ContainsKey(group)) + ModSprites.Add(group, new Dictionary(StringComparer.InvariantCultureIgnoreCase)); + + if(ModSprites[group].ContainsKey(name)) + Logger.Debug($"ModSprite already registered for {group}/{name}. Old sprite will be overwritten."); + ModSprites[group][name] = sprite; + } + + internal static void Add(ModSprite sprite) => Add(sprite.Group, sprite.Id, sprite.Sprite); + + internal static Dictionary> ModSprites + = new Dictionary>(); + + /// + /// The tech type of a specific item associated with this sprite. + /// Can be if this sprite is for used on a group. + /// + public TechType TechType; + + /// + /// The actual sprite used in-game when this sprite is references. + /// + public Atlas.Sprite Sprite; + + /// + /// The group that this sprite belongs to. + /// Can be if this sprite is for used on an item. + /// + public SpriteManager.Group Group; + + /// + /// The internal identifier of this sprite when it isn't associated to an item. + /// + public string Id; + + /// + /// Creates a new ModSprite to be used with a specific TechType. + /// Created with an Atlas Sprite. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + public ModSprite(TechType type, Atlas.Sprite sprite) + { + TechType = type; + Id = type.AsString(); + Sprite = sprite; + Group = SpriteManager.Group.Item; + } + + /// + /// Creates a new ModSprite to be used with a specific group and internal ID. + /// Created with an Atlas Sprite. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The sprite to be added. + public ModSprite(SpriteManager.Group group, string id, Atlas.Sprite sprite) + { + Group = group; + Id = id; + Sprite = sprite; + TechType = TechType.None; + } + + /// + /// Creates a new ModSprite to be used with a specific group and internal ID. + /// Created with an Atlas Sprite. + /// + /// The sprite group. + /// The techtype paired to this sprite. + /// The sprite to be added. + public ModSprite(SpriteManager.Group group, TechType type, Atlas.Sprite sprite) + { + Group = group; + Id = type.AsString(); + Sprite = sprite; + TechType = type; + } + + /// + /// Creates a new ModSprite to be used with a specific group and internal ID. + /// Created with a UnityEngine Sprite. + /// + /// The sprite group this sprite will be added to. + /// The sprite internal identifier. + /// The sprite to be added. + public ModSprite(SpriteManager.Group group, string id, UnityEngine.Sprite sprite) : this(group, id, new Atlas.Sprite(sprite, false)) + { + } + + /// + /// Creates a new ModSprite to be used with a specific TechType. + /// Created with a UnityEngine Sprite. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + public ModSprite(TechType type, UnityEngine.Sprite sprite) : this(type, new Atlas.Sprite(sprite, false)) + { + } + } +} +#endif \ No newline at end of file diff --git a/SMLHelper/Commands/ConsoleCommand.cs b/SMLHelper/Commands/ConsoleCommand.cs new file mode 100644 index 00000000..7125c873 --- /dev/null +++ b/SMLHelper/Commands/ConsoleCommand.cs @@ -0,0 +1,145 @@ +namespace SMLHelper.V2.Commands +{ + using HarmonyLib; + using QModManager.API; + using System; + using System.Collections.Generic; + using System.Linq; + using System.Reflection; + + /// + /// Represents a console command. + /// + internal class ConsoleCommand + { + /// + /// The string that triggers the command. + /// + public string Trigger { get; } + + /// + /// The QMod that registered the command. + /// + public IQMod QMod { get; } + + /// + /// The parameters for the command. + /// + public IEnumerable Parameters { get; } + + /// + /// The types of the parameters. + /// + public Type[] ParameterTypes { get; } + + private Type DeclaringType { get; } + private string MethodName { get; } + private bool IsMethodStatic { get; } + private bool IsDelegate { get; } + private object Instance { get; } + + /// + /// Creates an instance of . + /// + /// The string that triggers the command. + /// The method targeted by the command. + /// Whether or not the method is a delegate. + /// The instance the method belongs to. + public ConsoleCommand(string trigger, MethodInfo targetMethod, bool isDelegate = false, object instance = null) + { + Trigger = trigger.ToLowerInvariant(); + DeclaringType = targetMethod.DeclaringType; + MethodName = targetMethod.Name; + IsMethodStatic = targetMethod.IsStatic; + IsDelegate = isDelegate; + Instance = instance; + QMod = QModServices.Main.GetMod(DeclaringType.Assembly); + Parameters = targetMethod.GetParameters().Select(param => new Parameter(param)); + ParameterTypes = Parameters.Select(param => param.ParameterType).ToArray(); + } + + /// + /// Determines whether the targeted method is valid in terms of whether it is static or delegate. + /// + /// + public bool HasValidInvoke() => IsDelegate || Instance != null || IsMethodStatic; + + /// + /// Determines whether the target methods parameters are valid. + /// + /// + public bool HasValidParameterTypes() + { + foreach (Parameter parameter in Parameters) + { + if (!parameter.IsValidParameterType) + return false; + } + + return true; + } + + /// + /// Returns a list of all invalid parameters. + /// + /// + public IEnumerable GetInvalidParameters() + => Parameters.Where(param => !param.IsValidParameterType); + + /// + /// Attempts to parse input parameters into appropriate types as defined in the target method. + /// + /// The parameters as input by the user. + /// The parameters that have been successfully parsed. + /// Whether or not all parameters were succesfully parsed. + public bool TryParseParameters(IEnumerable inputParameters, out object[] parsedParameters) + { + parsedParameters = null; + + // Detect incorrect number of parameters (allow for optional) + if (Parameters.Count() < inputParameters.Count() || + Parameters.Where(param => !param.IsOptional).Count() > inputParameters.Count()) + { + return false; + } + + parsedParameters = new object[Parameters.Count()]; + for (int i = 0; i < Parameters.Count(); i++) + { + Parameter parameter = Parameters.ElementAt(i); + + if (i >= inputParameters.Count()) // It's an optional parameter that wasn't passed by the user + { + parsedParameters[i] = Type.Missing; + continue; + } + + string input = inputParameters.ElementAt(i); + + try + { + parsedParameters[i] = parameter.Parse(input); + } + catch (Exception) + { + return false; // couldn't parse, wasn't a valid conversion + } + } + + return true; + } + + /// + /// Invokes the command with the given parameters. + /// + /// The command parameters. + /// The string returned from the command. + public string Invoke(object[] parameters) + { + if (Instance != null) + return Traverse.Create(Instance).Method(MethodName, ParameterTypes).GetValue(parameters)?.ToString(); + else + return Traverse.Create(DeclaringType).Method(MethodName, ParameterTypes).GetValue(parameters)?.ToString(); + } + } +} diff --git a/SMLHelper/Commands/ConsoleCommandAttribute.cs b/SMLHelper/Commands/ConsoleCommandAttribute.cs new file mode 100644 index 00000000..a61847e5 --- /dev/null +++ b/SMLHelper/Commands/ConsoleCommandAttribute.cs @@ -0,0 +1,55 @@ +namespace SMLHelper.V2.Commands +{ + using Interfaces; + using Handlers; + using System; + + /// + /// Attribute used to signify the decorated method should be called in response to a console command. + /// + /// Decorated method must be both and . + /// + /// + /// The command can take parameters and will respect optional parameters as outlined in the method's signature.
+ /// Supported parameter types: , , , , + /// .
+ /// + /// If the method has a return type, it will be printed to both the screen and the log. + ///
+ /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] + public sealed class ConsoleCommandAttribute : Attribute + { + /// + /// The unique, case-insensitive command that when entered, will call the decorated method. + /// + public string Command { get; } + + /// + /// Signifies the decorated method should be called when the given is entered + /// in the dev console. + /// + /// Decorated method must be both and . + /// + /// + /// The command can take parameters and will respect optional parameters as outlined in the method's signature.
+ /// Supported parameter types: , , , , + /// .
+ /// + /// If the method has a return type, it will be printed to both the screen and the log. + ///
+ /// The unique, case-insensitive command that when entered into the dev console will call the + /// decorated method. + /// + /// + /// + /// + public ConsoleCommandAttribute(string command) + { + Command = command; + } + } +} diff --git a/SMLHelper/Commands/Parameter.cs b/SMLHelper/Commands/Parameter.cs new file mode 100644 index 00000000..afc9eab6 --- /dev/null +++ b/SMLHelper/Commands/Parameter.cs @@ -0,0 +1,39 @@ + +namespace SMLHelper.V2.Commands +{ + using System; + using System.Collections.Generic; + using System.Globalization; + using System.Linq; + using System.Reflection; + + internal struct Parameter + { + private static Dictionary> TypeConverters = new Dictionary>() + { + [typeof(string)] = (s) => s, + [typeof(bool)] = (s) => bool.Parse(s), + [typeof(int)] = (s) => int.Parse(s, CultureInfo.InvariantCulture.NumberFormat), + [typeof(float)] = (s) => float.Parse(s, CultureInfo.InvariantCulture.NumberFormat), + [typeof(double)] = (s) => double.Parse(s, CultureInfo.InvariantCulture.NumberFormat) + }; + + public static IEnumerable SupportedTypes => TypeConverters.Keys; + + public Type ParameterType { get; } + public bool IsOptional { get; } + public string Name { get; } + public bool IsValidParameterType { get; } + + public Parameter(ParameterInfo parameter) + { + ParameterType = parameter.ParameterType; + IsOptional = parameter.IsOptional; + Name = parameter.Name; + IsValidParameterType = SupportedTypes.Contains(ParameterType); + } + + public object Parse(string input) + => TypeConverters[ParameterType](input); + } +} diff --git a/SMLHelper/Crafting/CraftingNode.cs b/SMLHelper/Crafting/CraftingNode.cs new file mode 100644 index 00000000..add0c73c --- /dev/null +++ b/SMLHelper/Crafting/CraftingNode.cs @@ -0,0 +1,12 @@ +namespace SMLHelper.V2.Crafting +{ + internal class CraftingNode : Node + { + internal TechType TechType { get; set; } + + internal CraftingNode(string[] path, CraftTree.Type scheme, TechType techType) : base(path, scheme) + { + TechType = techType; + } + } +} diff --git a/SMLHelper/Crafting/ModCraftTreeCraft.cs b/SMLHelper/Crafting/ModCraftTreeCraft.cs new file mode 100644 index 00000000..8e33c728 --- /dev/null +++ b/SMLHelper/Crafting/ModCraftTreeCraft.cs @@ -0,0 +1,14 @@ +namespace SMLHelper.V2.Crafting +{ + /// + /// A crafting node of a CraftTree. This is the last node on a tree; The one that actually crafts something. + /// + /// + public class ModCraftTreeCraft : ModCraftTreeNode + { + internal ModCraftTreeCraft(TechType techType) + : base(techType.AsString(), TreeAction.Craft, techType) + { + } + } +} diff --git a/SMLHelper/Crafting/ModCraftTreeLinkingNode.cs b/SMLHelper/Crafting/ModCraftTreeLinkingNode.cs new file mode 100644 index 00000000..f4c55e9e --- /dev/null +++ b/SMLHelper/Crafting/ModCraftTreeLinkingNode.cs @@ -0,0 +1,203 @@ +namespace SMLHelper.V2.Crafting +{ + using System.Collections.Generic; + using Patchers; + using SMLHelper.V2.Patchers.EnumPatching; + using UnityEngine; + using UnityEngine.Assertions; + using Utility; + + /// + /// Abstract class that provides methods for adding new nodes into the crafting tree. + /// + /// + public abstract class ModCraftTreeLinkingNode : ModCraftTreeNode + { + /// + /// The child nodes linked bellow this node. + /// + public readonly List ChildNodes = new List(); + + internal ModCraftTreeLinkingNode(string name, TreeAction action, TechType techType) + : base(name, action, techType) + { + } +#if SUBNAUTICA + /// + /// Creates a new tab node for the crafting tree and links it to the calling node. + /// + /// The name/ID of this node. + /// The hover text to display in-game. + /// The custom sprite to display on this tab node. + /// A new tab node linked to the root node and ready to use. + public ModCraftTreeTab AddTabNode(string nameID, string displayText, Atlas.Sprite sprite) + { + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + var tabNode = new ModCraftTreeTab(modName, nameID, displayText, sprite); + tabNode.LinkToParent(this); + + ChildNodes.Add(tabNode); + + return tabNode; + } + +#endif + /// + /// Creates a new tab node for the crafting tree and links it to the calling node. + /// + /// The name/ID of this node. + /// The hover text to display in-game. + /// The custom sprite to display on this tab node. + /// A new tab node linked to the root node and ready to use. + public ModCraftTreeTab AddTabNode(string nameID, string displayText, Sprite sprite) + { + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + var tabNode = new ModCraftTreeTab(modName, nameID, displayText, sprite); + tabNode.LinkToParent(this); + + ChildNodes.Add(tabNode); + + return tabNode; + } + + /// + /// Creates a new tab node for the crafting tree and links it to the calling node. + /// + /// The name/ID of this node. + /// A new tab node linked to the root node and ready to use. + public ModCraftTreeTab AddTabNode(string nameID) + { + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + var tabNode = new ModCraftTreeTab(modName, nameID); + tabNode.LinkToParent(this); + + ChildNodes.Add(tabNode); + + return tabNode; + } + + /// + /// Gets the tab from the calling node. + /// + /// The name id of the tab to get. + /// + public ModCraftTreeTab GetTabNode(string nameID) + { + foreach (ModCraftTreeTab node in ChildNodes) + { + if (node == null) + continue; + + if (node.Name == nameID && node.Action == TreeAction.Expand) + { + var tab = node; + return tab; + } + } + + return null; + } + + /// + /// Gets the crafting node from the calling node. + /// + /// The TechType whose node to get. + /// + public ModCraftTreeCraft GetCraftingNode(TechType techType) + { + foreach (ModCraftTreeNode node in ChildNodes) + { + if (node == null) + continue; + + if (node.TechType == techType && node.Action == TreeAction.Craft) + { + var craftNode = (ModCraftTreeCraft)node; + return craftNode; + } + } + + return null; + } + + /// + /// Gets the node associated with the ID specified. Used if you don't know whether node is a tab or a craft node. + /// + /// + /// + public ModCraftTreeNode GetNode(string nameID) + { + foreach (ModCraftTreeNode node in ChildNodes) + { + if (node == null) + continue; + + if (node.Name == nameID) + return node; + } + + return null; + } + + /// + /// Creates a new crafting node for the crafting tree and links it to the calling node. + /// + /// The TechType to be crafted. + public void AddCraftingNode(TechType techType) + { + Assert.AreNotEqual(TechType.None, techType, "Attempt to add TechType.None as a crafting node."); + + var craftNode = new ModCraftTreeCraft(techType); + craftNode.LinkToParent(this); + + ChildNodes.Add(craftNode); + } + + /// + /// Creates a collection of new crafting nodes for the crafting tree and links it to the calling node. + /// + /// The TechTypes to be crafted. + public void AddCraftingNode(params TechType[] techTypes) + { + AddCraftingNode((IEnumerable)techTypes); + } + + /// + /// Creates a collection of new crafting nodes for the crafting tree and links it to the calling node. + /// + /// The TechTypes to be crafted. + public void AddCraftingNode(IEnumerable techTypes) + { + foreach (TechType tType in techTypes) + { + Assert.AreNotEqual(TechType.None, tType, "Attempt to add TechType.None as a crafting node."); + AddCraftingNode(tType); + } + } + + /// + /// Creates a new crafting node for a modded item and links it to the calling node. + /// If the modded item isn't present for the player, this call is safely ignored. + /// + /// The internal name of the custom TechType to be crafted. + /// + /// If the player doesn't have the mod for this TechType installed, then nothing will happen. + /// + public void AddModdedCraftingNode(string moddedTechTypeName) + { + EnumTypeCache cache = TechTypePatcher.cacheManager.RequestCacheForTypeName(moddedTechTypeName); + + if (cache != null) + { + var techType = (TechType)cache.Index; + var craftNode = new ModCraftTreeCraft(techType); + craftNode.LinkToParent(this); + + ChildNodes.Add(craftNode); + } + } + } +} diff --git a/SMLHelper/Crafting/ModCraftTreeNode.cs b/SMLHelper/Crafting/ModCraftTreeNode.cs new file mode 100644 index 00000000..f616fa14 --- /dev/null +++ b/SMLHelper/Crafting/ModCraftTreeNode.cs @@ -0,0 +1,78 @@ +namespace SMLHelper.V2.Crafting +{ + using UnityEngine.Assertions; + + /// + /// Basic data structure of a crafting tree node. + /// + public abstract class ModCraftTreeNode + { + internal static bool Initialized = false; + internal static bool HasCustomTrees { get; set; } = false; + + /// + /// The action this node takes in the crafting tree. + /// + public readonly TreeAction Action; + + /// + /// The tech type ID associated to this node. + /// For item nodes, it is the item ID to be crafted. + /// For root and tab nodes, this is always . + /// + public readonly TechType TechType; + + /// + /// The name ID for this tab node. + /// + public readonly string Name; + + /// + /// The the in-game representation of this node. + /// + public CraftNode CraftNode; + + internal ModCraftTreeLinkingNode Parent = null; + + internal virtual CraftTree.Type Scheme => this.Parent.Scheme; + internal virtual string SchemeAsString => this.Parent.SchemeAsString; + + internal ModCraftTreeNode(string name, TreeAction action, TechType techType) + { + Name = name; + Action = action; + TechType = techType; + + // This is the actual class used for the real CraftTree + CraftNode = new CraftNode(Name, Action, TechType); + } + + /// + /// Removes the calling node from parent. + /// + public void RemoveNode() + { + Assert.IsNotNull(this.Parent, "No parent found to remove node from!"); + Assert.IsNotNull(this.Parent.CraftNode, "No CraftNode found on parent!"); + + if (this is ModCraftTreeLinkingNode) + { + ModCraftTreeLinkingNode linkingNode = this as ModCraftTreeLinkingNode; + foreach (ModCraftTreeNode cNode in linkingNode.ChildNodes) + { + cNode.RemoveNode(); + } + } + + this.Parent.ChildNodes.Remove(this); + this.Parent.CraftNode.RemoveNode(this.CraftNode); + this.Parent = null; + } + + internal virtual void LinkToParent(ModCraftTreeLinkingNode parent) + { + parent.CraftNode.AddNode(this.CraftNode); + this.Parent = parent; + } + } +} diff --git a/SMLHelper/Crafting/ModCraftTreeRoot.cs b/SMLHelper/Crafting/ModCraftTreeRoot.cs new file mode 100644 index 00000000..b00c70c4 --- /dev/null +++ b/SMLHelper/Crafting/ModCraftTreeRoot.cs @@ -0,0 +1,122 @@ +namespace SMLHelper.V2.Crafting +{ + using System; + using Patchers; + using SMLHelper.V2.Handlers; + using SMLHelper.V2.Patchers.EnumPatching; + using UnityEngine.Assertions; + + /// + /// The root node of a CraftTree. The whole tree starts here. + /// Build up your custom crafting tree from this root node using the AddCraftingNode and AddTabNode methods.
+ /// This tree will be automatically patched into the game. No further calls into required. + /// For more advanced usage, you can replace the default value of with your own custom function. + ///
+ /// + public class ModCraftTreeRoot : ModCraftTreeLinkingNode + { + private readonly string _schemeAsString; + private readonly CraftTree.Type _scheme; + + internal override string SchemeAsString => _schemeAsString; + internal override CraftTree.Type Scheme => _scheme; + + internal ModCraftTreeRoot(CraftTree.Type scheme, string schemeAsString) + : base("Root", TreeAction.None, TechType.None) + { + Assert.IsTrue((int)scheme > CraftTreeTypePatcher.startingIndex, "Custom CraftTree types must have an index higher than the in-game types."); + + _schemeAsString = schemeAsString; + _scheme = scheme; + HasCustomTrees = true; + + CraftTreeCreation = () => new CraftTree(_schemeAsString, CraftNode); + } + + /// + /// Dynamically creates the CraftTree object for this crafting tree. + /// The CraftNode objects were created and linked as the classes of the ModCraftTreeFamily were created and linked. + /// + internal CraftTree CustomCraftingTree => CraftTreeCreation.Invoke(); + + /// + /// Populates a new ModCraftTreeRoot from a CraftNode tree. + /// + /// The tree to create the ModCraftTreeRoot from. + /// + internal static void CreateFromExistingTree(CraftNode tree, ref ModCraftTreeLinkingNode root) + { + foreach (CraftNode node in tree) + { + if (node.action == TreeAction.Expand) + { + ModCraftTreeTab tab = root.AddTabNode(node.id); + var thing = (ModCraftTreeLinkingNode)tab; + CreateFromExistingTree(node, ref thing); + } + + if (node.action == TreeAction.Craft) + { + TechTypeExtensions.FromString(node.id, out TechType techType, false); + + root.AddCraftingNode(techType); + } + } + } + + /// + /// The craft tree creation function.
+ /// Default implementaion returns a new instantiated with and the root . + /// You can replace this function with your own to have more control of the crafting tree when it is being created. + ///
+ public Func CraftTreeCreation; + + /// + /// Gets the tab node at the specified path from the root. + /// + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + /// If the specified tab node is found, returns that ; Otherwise, returns null. + public ModCraftTreeTab GetTabNode(params string[] stepsToTab) + { + ModCraftTreeTab tab = base.GetTabNode(stepsToTab[0]); + + for (int i = 1; i < stepsToTab.Length && tab != null; i++) + { + tab = tab.GetTabNode(stepsToTab[i]); + } + + return tab; + } + + /// + /// Gets the node at the specified path from the root. + /// + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + /// If the specified tab node is found, returns that ; Otherwise, returns null. + public ModCraftTreeNode GetNode(params string[] stepsToNode) + { + if (stepsToNode.Length == 1) + { + return base.GetNode(stepsToNode[0]); + } + + int stepCountToTab = stepsToNode.Length - 1; + + string nodeID = stepsToNode[stepCountToTab]; + string[] stepsToTab = new string[stepCountToTab]; + Array.Copy(stepsToNode, stepsToTab, stepCountToTab); + + ModCraftTreeTab tab = GetTabNode(stepsToTab); + + return tab?.GetNode(nodeID); + } + } +} diff --git a/SMLHelper/Crafting/ModCraftTreeTab.cs b/SMLHelper/Crafting/ModCraftTreeTab.cs new file mode 100644 index 00000000..366b9d2b --- /dev/null +++ b/SMLHelper/Crafting/ModCraftTreeTab.cs @@ -0,0 +1,82 @@ +namespace SMLHelper.V2.Crafting +{ + using Assets; + using Patchers; + using UnityEngine; + + /// + /// A tab node of a CraftTree. Tab nodes help organize crafting nodes by grouping them into categories. + /// + /// + public class ModCraftTreeTab : ModCraftTreeLinkingNode + { + private readonly string DisplayText; +#if SUBNAUTICA + private readonly Atlas.Sprite Asprite; +#endif + private readonly Sprite Usprite; + private readonly bool IsExistingTab; + private readonly string ModName; + +#if SUBNAUTICA + internal ModCraftTreeTab(string modName, string nameID, string displayText, Atlas.Sprite sprite) + : base(nameID, TreeAction.Expand, TechType.None) + { + DisplayText = displayText; + Asprite = sprite; + Usprite = null; + ModName = modName; + } +#endif + + internal ModCraftTreeTab(string modName, string nameID, string displayText, Sprite sprite) + : base(nameID, TreeAction.Expand, TechType.None) + { + DisplayText = displayText; +#if SUBNAUTICA + Asprite = null; +#endif + Usprite = sprite; + ModName = modName; + } + + internal ModCraftTreeTab(string modName, string nameID) + : base(nameID, TreeAction.Expand, TechType.None) + { + IsExistingTab = true; + ModName = modName; + } + + internal override void LinkToParent(ModCraftTreeLinkingNode parent) + { + base.LinkToParent(parent); + + if (IsExistingTab) return; + + LanguagePatcher.AddCustomLanguageLine(ModName, $"{base.SchemeAsString}Menu_{Name}", DisplayText); + + string spriteID = $"{SchemeAsString}_{Name}"; + +#if SUBNAUTICA + ModSprite modSprite; + if (Asprite != null) + { + modSprite = new ModSprite(SpriteManager.Group.Category, spriteID, Asprite); + } + else + { + modSprite = new ModSprite(SpriteManager.Group.Category, spriteID, Usprite); + + } + + ModSprite.Add(modSprite); +#elif BELOWZERO + + ModSprite modSprite; + modSprite = new ModSprite(SpriteManager.Group.Category, spriteID, Usprite); + ModSprite.Add(modSprite); + +#endif + } + } +} diff --git a/SMLHelper/Crafting/Node.cs b/SMLHelper/Crafting/Node.cs new file mode 100644 index 00000000..a323e7d9 --- /dev/null +++ b/SMLHelper/Crafting/Node.cs @@ -0,0 +1,14 @@ +namespace SMLHelper.V2.Crafting +{ + internal class Node + { + internal string[] Path { get; set; } + internal CraftTree.Type Scheme { get; set; } + + internal Node(string[] path, CraftTree.Type scheme) + { + Path = path; + Scheme = scheme; + } + } +} diff --git a/SMLHelper/Crafting/RecipeData.cs b/SMLHelper/Crafting/RecipeData.cs new file mode 100644 index 00000000..338ca04e --- /dev/null +++ b/SMLHelper/Crafting/RecipeData.cs @@ -0,0 +1,104 @@ +#if BELOWZERO +#pragma warning disable IDE1006 // Naming Styles - Ignored for backwards compatibility +namespace SMLHelper.V2.Crafting +{ + using System.Collections.Generic; + + /// + /// A class that fully describes a recipe for a identified item. + /// + /// + public class RecipeData + { + /// + /// Gets or sets the how many copies of the item are created when crafting this recipe. + /// + /// + /// The quantity of the item this recipe yields. + /// + public int craftAmount { get; set; } + + /// + /// Gets the number of different ingredients for this recipe. + /// + /// + /// The number of ingredients for this recipe. + /// + public int ingredientCount => Ingredients.Count; + + /// + /// Gets the number of items linked to this recipe. + /// + /// + /// The number of linked items. + /// + public int linkedItemCount => LinkedItems.Count; + + /// + /// The list of ingredients required for this recipe. + /// + public List Ingredients = new List(); + + /// + /// The items that will also be created when this recipe is crafted. + /// + public List LinkedItems = new List(); + + /// + /// Initializes a new instance of the class a custom recipe. + /// + public RecipeData() { } + + /// + /// Initializes a new instance of the class for a custom recipe with a list of ingridients. + /// + /// The ingredients. + public RecipeData(List ingredients) + { + Ingredients = ingredients; + } + + /// + /// Initializes a new instance of the class for a custom recipe with a collection of ingridients. + /// + /// The ingredients. + public RecipeData(params Ingredient[] ingredients) + { + foreach (Ingredient ingredient in ingredients) + { + Ingredients.Add(ingredient); + } + } + + /// + /// Gets the ingredient at the specified index. + /// + /// The index. + /// The at the requested the index if the index is value; Otherwise returns null. + public Ingredient GetIngredient(int index) + { + if (Ingredients != null && Ingredients.Count > index) + { + return Ingredients[index]; + } + + return null; + } + + /// + /// Gets the linked item at the specified index. + /// + /// The index. + /// The at the requested the index if the index is value; Otherwise returns null. + public TechType GetLinkedItem(int index) + { + if (LinkedItems != null && LinkedItems.Count > index) + { + return LinkedItems[index]; + } + return TechType.None; + } + } +} +#pragma warning restore IDE1006 // Naming Styles +#endif \ No newline at end of file diff --git a/SMLHelper/Crafting/TabNode.cs b/SMLHelper/Crafting/TabNode.cs new file mode 100644 index 00000000..b6dbf268 --- /dev/null +++ b/SMLHelper/Crafting/TabNode.cs @@ -0,0 +1,43 @@ +namespace SMLHelper.V2.Crafting +{ + using Assets; + using Patchers; + + internal class TabNode : Node + { +#if SUBNAUTICA + + internal Atlas.Sprite Sprite { get; set; } + internal string DisplayName { get; set; } + internal string Name { get; set; } + + internal TabNode(string[] path, CraftTree.Type scheme, Atlas.Sprite sprite, string modName, string name, string displayName) : base(path, scheme) + { + Sprite = sprite; + DisplayName = displayName; + Name = name; + + ModSprite.Add(new ModSprite(SpriteManager.Group.Category, $"{Scheme.ToString()}_{Name}", Sprite)); + LanguagePatcher.AddCustomLanguageLine(modName, $"{Scheme.ToString()}Menu_{Name}", DisplayName); + } + +#elif BELOWZERO + + internal UnityEngine.Sprite Sprite { get; set; } + internal string DisplayName { get; set; } + internal string Name { get; set; } + + internal TabNode(string[] path, CraftTree.Type scheme, UnityEngine.Sprite sprite, string modName, string name, string displayName) : base(path, scheme) + { + Sprite = sprite; + DisplayName = displayName; + Name = name; + + ModSprite.Add(new ModSprite(SpriteManager.Group.Category, $"{Scheme.ToString()}_{Name}", Sprite)); + LanguagePatcher.AddCustomLanguageLine(modName, $"{Scheme.ToString()}Menu_{Name}", DisplayName); + } + +#endif + + } +} diff --git a/SMLHelper/Crafting/TechData.cs b/SMLHelper/Crafting/TechData.cs new file mode 100644 index 00000000..001b314c --- /dev/null +++ b/SMLHelper/Crafting/TechData.cs @@ -0,0 +1,140 @@ +#if SUBNAUTICA +#pragma warning disable IDE1006 // Naming Styles - Ignored for backwards compatibility +namespace SMLHelper.V2.Crafting +{ + using System.Collections.Generic; + + /// + /// A class that fully describes a recipe for a identified item. + /// + /// + public class TechData : ITechData + { + /// + /// Gets or sets the how many copies of the item are created when crafting this recipe. + /// + /// + /// The quantity of the item this recipe yields. + /// + public int craftAmount { get; set; } + + /// + /// Gets the number of different ingredients for this recipe. + /// + /// + /// The number of ingredients for this recipe. + /// + public int ingredientCount => Ingredients.Count; + + /// + /// Gets the number of items linked to this recipe. + /// + /// + /// The number of linked items. + /// + public int linkedItemCount => LinkedItems.Count; + + /// + /// The list of ingredients required for this recipe. + /// + public List Ingredients = new List(); + + /// + /// The items that will also be created when this recipe is crafted. + /// + public List LinkedItems = new List(); + + /// + /// Initializes a new instance of the class a custom recipe. + /// + public TechData() { } + + /// + /// Initializes a new instance of the class for a custom recipe with a list of ingridients. + /// + /// The ingredients. + public TechData(List ingredients) + { + Ingredients = ingredients; + } + + /// + /// Initializes a new instance of the class for a custom recipe with a collection of ingridients. + /// + /// The ingredients. + public TechData(params Ingredient[] ingredients) + { + foreach (Ingredient ingredient in ingredients) + { + Ingredients.Add(ingredient); + } + } + + /// + /// Gets the ingredient at the specified index. + /// + /// The index. + /// The at the requested the index if the index is value; Otherwise returns null. + public IIngredient GetIngredient(int index) + { + if (Ingredients != null && Ingredients.Count > index) + { + return Ingredients[index]; + } + + return null; + } + + /// + /// Gets the linked item at the specified index. + /// + /// The index. + /// The at the requested the index if the index is value; Otherwise returns null. + public TechType GetLinkedItem(int index) + { + if (LinkedItems != null && LinkedItems.Count > index) + { + return LinkedItems[index]; + } + + return TechType.None; + } + } + + /// + /// A class for representing a required ingredient in a recipe. + /// + /// + /// + public class Ingredient : IIngredient + { + /// + /// Gets or sets the item ID. + /// + /// + /// The item ID. + /// + public TechType techType { get; set; } + + /// + /// Gets or sets the number of this item required for the recipe. + /// + /// + /// The amount of this item needed for the recipe. + /// + public int amount { get; set; } + + /// + /// Initializes a new instance of the class. + /// + /// The item ID. + /// The number of instances of this item required for the recipe. + public Ingredient(TechType techType, int amount) + { + this.techType = techType; + this.amount = amount; + } + } +} +#pragma warning restore IDE1006 // Naming Styles +#endif \ No newline at end of file diff --git a/SMLHelper/Handler.cs b/SMLHelper/Handler.cs new file mode 100644 index 00000000..b01a6815 --- /dev/null +++ b/SMLHelper/Handler.cs @@ -0,0 +1,135 @@ +namespace SMLHelper.V2 +{ + using Interfaces; + + /// + /// A simple location where every SMLHelper handler class can be accessed. + /// + public static class Handler + { + /// + /// A handler with common methods for updating BioReactor values. + /// + public static IBioReactorHandler BioReactorHandler => Handlers.BioReactorHandler.Main; + + /// + /// A handler class for adding and editing crafted items. + /// + public static ICraftDataHandler CraftDataHandler => Handlers.CraftDataHandler.Main; + + /// + /// A handler class for creating and editing of crafting trees. + /// + public static ICraftTreeHandler CraftTreeHandler => Handlers.CraftTreeHandler.Main; + + /// + /// A handler class that offers simple ways to tap into functionality of the in game menu. + /// + public static IIngameMenuHandler IngameMenuHandler => Handlers.IngameMenuHandler.Main; + + /// + /// Class to manage registering of fish into the game + /// + public static IFishHandler FishHandler => Handlers.FishHandler.Main; + + /// + /// A handler class for registering your custom middle click actions for items + /// + public static IItemActionHandler ItemActionHandler => Handlers.ItemActionHandler.Main; + + /// + /// A handler class for configuring custom unlocking conditions for item blueprints. + /// + public static IKnownTechHandler KnownTechHandler => Handlers.KnownTechHandler.Main; + + /// + /// A handler for adding language lines. + /// + public static ILanguageHandler LanguageHandler => Handlers.LanguageHandler.Main; + + /// + /// A handler class for registering your custom in-game mod options. + /// + public static IOptionsPanelHandler OptionsPanelHandler => Handlers.OptionsPanelHandler.Main; + + /// + /// A handler class for various scanner related data. + /// + public static IPDAHandler PDAHandler => Handlers.PDAHandler.Main; + + /// + /// A handler class for adding custom sprites into the game. + /// + public static ISpriteHandler SpriteHandler => Handlers.SpriteHandler.Main; + + /// + /// A handler class for everything related to creating new TechTypes. + /// + public static ITechTypeHandler TechTypeHandler => Handlers.TechTypeHandler.Main; + + /// + /// A handler class for adding and editing resource spawns. + /// + public static ILootDistributionHandler LootDistributionHandler => Handlers.LootDistributionHandler.Main; + + /// + /// A handler for adding custom entries to the world entity database. + /// + public static IWorldEntityDatabaseHandler WorldEntityDatabaseHandler => Handlers.WorldEntityDatabaseHandler.Main; + + /// + /// A handler for adding custom entries to the PDA Encyclopedia. + /// + public static IPDAEncyclopediaHandler PDAEncyclopediaHandler => Handlers.PDAEncyclopediaHandler.Main; + + /// + /// A handler for registering Unity prefabs associated to a . + /// + public static IPrefabHandler PrefabHandler => Handlers.PrefabHandler.Main; + + /// + /// a handler for common uses to the Survival component + /// + public static ISurvivalHandler SurvivalHandler => Handlers.SurvivalHandler.Main; + + /// + /// A handler to making coordinated Vector3 spawns ingame. + /// + public static ICoordinatedSpawnHandler CoordinatedSpawnHandler => Handlers.CoordinatedSpawnsHandler.Main; + + /// + /// A handler class for adding custom TechGroups into the game. + /// + public static ITechGroupHandler TechGroupHandler => Handlers.TechGroupHandler.Main; + + /// + /// A handler class for adding custom TechCategories into the game. + /// + public static ITechCategoryHandler TechCategoryHandler => Handlers.TechCategoryHandler.Main; + + /// + /// A handler class for registering your custom console commands. + /// + public static IConsoleCommandHandler ConsoleCommandsHandler => Handlers.ConsoleCommandsHandler.Main; + + /// + /// A handler related to PingTypes + /// + public static IPingHandler PingHandler => Handlers.PingHandler.Main; + + /// + /// A handler for everything related to creating new BackgroundTypes. + /// + public static IBackgroundTypeHandler BackgroundTypeHandler => Handlers.BackgroundTypeHandler.Main; + + /// + /// A handler related to Custom Sounds + /// + public static ICustomSoundHandler SoundHandler => Handlers.CustomSoundHandler.Main; + + /// + /// A handler for adding custom EquipmentTypes into the game. + /// + public static IEquipmentHandler EquipmentHandler => Handlers.EquipmentHandler.Main; + } +} diff --git a/SMLHelper/Handlers/BackgroundTypeHandler.cs b/SMLHelper/Handlers/BackgroundTypeHandler.cs new file mode 100644 index 00000000..41771d37 --- /dev/null +++ b/SMLHelper/Handlers/BackgroundTypeHandler.cs @@ -0,0 +1,126 @@ +namespace SMLHelper.V2.Handlers +{ + using System.Collections.Generic; + using Interfaces; + using Utility; + using Patchers.EnumPatching; +#if SUBNAUTICA + using Sprite = Atlas.Sprite; +#elif BELOWZERO + using Sprite = UnityEngine.Sprite; +#endif + + /// + /// A handler for everything related to creating new BackgroundTypes. + /// + public class BackgroundTypeHandler : IBackgroundTypeHandler + { + internal static readonly Dictionary BackgroundSprites = new Dictionary(); + + /// + /// Main entry point for all calls to this handler. + /// + public static IBackgroundTypeHandler Main { get; } = new BackgroundTypeHandler(); + + private BackgroundTypeHandler() + { + // Hide constructor + } + + #region Interface Implementations + + /// + /// adds a new into the game. + /// + /// the name of the BackgroundType, should not contain special characters. + /// The sprite for this BackgroundType. + /// The new that's created. + CraftData.BackgroundType IBackgroundTypeHandler.AddBackgroundType(string backgroundTypeName, Sprite backgroundSprite) + { + var backgroundType = BackgroundTypePatcher.AddBackgroundType(backgroundTypeName); + + BackgroundSprites[backgroundType] = backgroundSprite; + + return backgroundType; + } + + /// + /// Safely looks for a modded Background Type from another mod in the SMLHelper BackgroundTypeCache and outputs its value when found. + /// + /// The string used to define the BackgroundType + /// The BackgroundType enum value of the modded. Defaults to when the item was not found. + /// if the item was found; otherwise . + bool IBackgroundTypeHandler.TryGetModdedBackgroundType(string backgroundTypeString, out CraftData.BackgroundType modBackgroundType) + { + EnumTypeCache cache = BackgroundTypePatcher.cacheManager.RequestCacheForTypeName(backgroundTypeString, false); + + if (cache != null) // Item Found + { + modBackgroundType = (CraftData.BackgroundType)cache.Index; + return true; + } + else // Mod not present or not yet loaded + { + modBackgroundType = CraftData.BackgroundType.Normal; + return false; + } + } + + /// + /// Safely looks for a modded Background Type from another mod in the SMLHelper BackgroundTypeCache. + /// + /// The string used to define the BackgroundType. + /// if the item was found; otherwise . + bool IBackgroundTypeHandler.ModdedBackgroundTypeExists(string backgroundTypeString) + { + EnumTypeCache cache = BackgroundTypePatcher.cacheManager.RequestCacheForTypeName(backgroundTypeString, false); + + if (cache != null) // Item Found + { + return true; + } + else // Mod not present or not yet loaded + { + return false; + } + } + #endregion + + #region Static Methods + + /// + /// adds a new into the game. + /// + /// the name of the BackgroundType, should not contain special characters. + /// The sprite for this BackgroundType. + /// The new that's created. + /// + public static CraftData.BackgroundType AddBackgroundType(string backgroundTypeName, Sprite backgroundSprite) + { + return Main.AddBackgroundType(backgroundTypeName, backgroundSprite); + } + + /// + /// Safely looks for a modded Background Type from another mod in the SMLHelper BackgroundTypeCache and outputs its value when found. + /// + /// The string used to define the BackgroundType + /// The BackgroundType enum value of the modded. Defaults to when the item was not found. + /// if the item was found; otherwise . + public static bool TryGetModdedBackgroundType(string backgroundTypeString, out CraftData.BackgroundType modBackgroundType) + { + return Main.TryGetModdedBackgroundType(backgroundTypeString, out modBackgroundType); + } + + /// + /// Safely looks for a modded Background Type from another mod in the SMLHelper BackgroundTypeCache. + /// + /// The string used to define the BackgroundType. + /// if the item was found; otherwise . + public static bool ModdedBackgroundTypeExists(string backgroundTypeString) + { + return Main.ModdedBackgroundTypeExists(backgroundTypeString); + } + + #endregion + } +} diff --git a/SMLHelper/Handlers/BioReactorHandler.cs b/SMLHelper/Handlers/BioReactorHandler.cs new file mode 100644 index 00000000..b711bd81 --- /dev/null +++ b/SMLHelper/Handlers/BioReactorHandler.cs @@ -0,0 +1,43 @@ +namespace SMLHelper.V2.Handlers +{ + using Patchers; + using Interfaces; + + /// + /// A handler with common methods for updating BioReactor values. + /// + public class BioReactorHandler : IBioReactorHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IBioReactorHandler Main { get; } = new BioReactorHandler(); + + private BioReactorHandler() + { + // Hides constructor + } + + /// + /// Allows you to specify the quantity of energy that a TechType will produce with bio reactors. + /// + /// The TechType that you want to use with bioreactors. + /// The quantity of energy that will be produced by this TechType. + /// + void IBioReactorHandler.SetBioReactorCharge(TechType techType, float charge) + { + BioReactorPatcher.CustomBioreactorCharges.Add(techType, charge); + } + + /// + /// Allows you to specify the quantity of energy that a TechType will produce with bio reactors. + /// + /// The TechType that you want to use with bioreactors. + /// The quantity of energy that will be produced by this TechType. + /// + public static void SetBioReactorCharge(TechType techType, float charge) + { + Main.SetBioReactorCharge(techType, charge); + } + } +} diff --git a/SMLHelper/Handlers/ConsoleCommandsHandler.cs b/SMLHelper/Handlers/ConsoleCommandsHandler.cs new file mode 100644 index 00000000..a9cae9a7 --- /dev/null +++ b/SMLHelper/Handlers/ConsoleCommandsHandler.cs @@ -0,0 +1,34 @@ +namespace SMLHelper.V2.Handlers +{ + using Commands; + using HarmonyLib; + using Interfaces; + using SMLHelper.V2.Patchers; + using System; + using System.Reflection; + + /// + /// A handler class for registering your custom console commands. + /// + public class ConsoleCommandsHandler : IConsoleCommandHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IConsoleCommandHandler Main { get; } = new ConsoleCommandsHandler(); + + void IConsoleCommandHandler.RegisterConsoleCommand(string command, Type declaringType, string methodName, Type[] parameters) + { + MethodInfo targetMethod = parameters == null + ? AccessTools.Method(declaringType, methodName) + : AccessTools.Method(declaringType, methodName, parameters); + ConsoleCommandsPatcher.AddCustomCommand(command, targetMethod); + } + + void IConsoleCommandHandler.RegisterConsoleCommand(string command, T callback) + => ConsoleCommandsPatcher.AddCustomCommand(command, callback.Method, true, callback.Target); + + void IConsoleCommandHandler.RegisterConsoleCommands(Type type) + => ConsoleCommandsPatcher.ParseCustomCommands(type); + } +} diff --git a/SMLHelper/Handlers/CoordinatedSpawnsHandler.cs b/SMLHelper/Handlers/CoordinatedSpawnsHandler.cs new file mode 100644 index 00000000..6ac465b2 --- /dev/null +++ b/SMLHelper/Handlers/CoordinatedSpawnsHandler.cs @@ -0,0 +1,284 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +#else +using Newtonsoft.Json; +#endif + +namespace SMLHelper.V2.Handlers +{ + using Interfaces; + using Patchers; + + /// + /// a Handler that handles and registers Coordinated ( spawns). + /// + public class CoordinatedSpawnsHandler : ICoordinatedSpawnHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ICoordinatedSpawnHandler Main { get; } = new CoordinatedSpawnsHandler(); + + private CoordinatedSpawnsHandler() + { + // Hide Constructor + } + + #region Interface Implementations + /// + /// Registers Multiple Coordinated spawns for one single passed TechType + /// + /// The TechType to spawn + /// the coordinates the should spawn to + void ICoordinatedSpawnHandler.RegisterCoordinatedSpawnsForOneTechType(TechType techTypeToSpawn, List coordinatesToSpawnTo) + { + var spawnInfos = new List(); + foreach (var coordinate in coordinatesToSpawnTo) + { + spawnInfos.Add(new SpawnInfo(techTypeToSpawn, coordinate)); + } + LargeWorldStreamerPatcher.spawnInfos.AddRange(spawnInfos); + } + + /// + /// Registers a Coordinated Spawn + /// + /// the SpawnInfo to spawn + void ICoordinatedSpawnHandler.RegisterCoordinatedSpawn(SpawnInfo spawnInfo) + { + LargeWorldStreamerPatcher.spawnInfos.Add(spawnInfo); + } + + /// + /// registers Many Coordinated Spawns. + /// + /// The SpawnInfos to spawn. + void ICoordinatedSpawnHandler.RegisterCoordinatedSpawns(List spawnInfos) + { + LargeWorldStreamerPatcher.spawnInfos.AddRange(spawnInfos); + } + + /// + /// Registers Multiple Coordinated spawns with rotations for one single passed TechType + /// + /// The TechType to spawn + /// the coordinates(Key) and the rotations(Value) the should spawn to + void ICoordinatedSpawnHandler.RegisterCoordinatedSpawnsForOneTechType(TechType techTypeToSpawn, Dictionary coordinatesAndRotationsToSpawnTo) + { + var spawnInfos = new List(); + foreach (var kvp in coordinatesAndRotationsToSpawnTo) + { + spawnInfos.Add(new SpawnInfo(techTypeToSpawn, kvp.Key, kvp.Value)); + } + LargeWorldStreamerPatcher.spawnInfos.AddRange(spawnInfos); + } + + #endregion + + #region Static Methods + + /// + /// Registers a Coordinated Spawn + /// + /// the SpawnInfo to spawn + public static void RegisterCoordinatedSpawn(SpawnInfo spawnInfo) + { + Main.RegisterCoordinatedSpawn(spawnInfo); + } + + /// + /// registers Many Coordinated Spawns. + /// + /// The SpawnInfo to spawn. + public static void RegisterCoordinatedSpawns(List spawnInfos) + { + Main.RegisterCoordinatedSpawns(spawnInfos); + } + + /// + /// Registers Multiple Coordinated spawns for one single passed TechType + /// + /// The TechType to spawn + /// the coordinates the should spawn to + public static void RegisterCoordinatedSpawnsForOneTechType(TechType techTypeToSpawn, List coordinatesToSpawnTo) + { + Main.RegisterCoordinatedSpawnsForOneTechType(techTypeToSpawn, coordinatesToSpawnTo); + } + + /// + /// Registers Multiple Coordinated spawns with rotations for one single passed TechType + /// + /// The TechType to spawn + /// the coordinates(Key) and the rotations(Value) the should spawn to + public static void RegisterCoordinatedSpawnsForOneTechType(TechType techTypeToSpawn, Dictionary coordinatesAndRotationsToSpawnTo) + { + Main.RegisterCoordinatedSpawnsForOneTechType(techTypeToSpawn, coordinatesAndRotationsToSpawnTo); + } + + #endregion + } + + #region SpawnInfo + /// + /// A basic struct that provides enough info for the System to function. + /// + public struct SpawnInfo : IEquatable + { + [JsonProperty] + internal TechType TechType { get; } + [JsonProperty] + internal string ClassId { get; } + [JsonProperty] + internal Vector3 SpawnPosition { get; } + [JsonProperty] + internal Quaternion Rotation { get; } + [JsonProperty] + internal SpawnType Type { get; } + + /// + /// Initializes a new . + /// + /// TechType to spawn. + /// Position to spawn into. + public SpawnInfo(TechType techType, Vector3 spawnPosition) + : this(default, techType, spawnPosition, Quaternion.identity) { } + + /// + /// Initializes a new . + /// + /// ClassID to spawn. + /// Position to spawn into. + public SpawnInfo(string classId, Vector3 spawnPosition) + : this(classId, default, spawnPosition, Quaternion.identity) { } + + /// + /// Initializes a new . + /// + /// TechType to spawn. + /// Position to spawn into. + /// Rotation to spawn at. + public SpawnInfo(TechType techType, Vector3 spawnPosition, Quaternion rotation) + : this(default, techType, spawnPosition, rotation) { } + + /// + /// Initializes a new . + /// + /// ClassID to spawn. + /// Position to spawn into. + /// Rotation to spawn at. + public SpawnInfo(string classId, Vector3 spawnPosition, Quaternion rotation) + : this(classId, default, spawnPosition, rotation) { } + + /// + /// Initializes a new . + /// + /// TechType to spawn. + /// Position to spawn into. + /// Rotation to spawn at. + public SpawnInfo(TechType techType, Vector3 spawnPosition, Vector3 rotation) + : this(default, techType, spawnPosition, Quaternion.Euler(rotation)) { } + + /// + /// Initializes a new . + /// + /// ClassID to spawn. + /// Position to spawn into. + /// Rotation to spawn at. + public SpawnInfo(string classId, Vector3 spawnPosition, Vector3 rotation) + : this(classId, default, spawnPosition, Quaternion.Euler(rotation)) { } + + [JsonConstructor] + internal SpawnInfo(string classId, TechType techType, Vector3 spawnPosition, Quaternion rotation) + { + ClassId = classId; + TechType = techType; + SpawnPosition = spawnPosition; + Rotation = rotation; + Type = TechType switch + { + default(TechType) => SpawnType.ClassId, + _ => SpawnType.TechType + }; + } + + /// + /// Indicates whether this instance and a specified object are equal. + /// + /// + /// It is worth noting that we use Unity's and + /// operator comparisons for comparing the and properties of each instance, + /// to allow for an approximate comparison of these values. + /// + /// The object to compare with the current instance. + /// if is a and represents the same + /// value as this instance; otherwise, . + /// + public override bool Equals(object obj) => obj is SpawnInfo spawnInfo && Equals(spawnInfo); + + /// + /// A custom hash code algorithm that takes into account the values of each property of the instance, + /// and attempts to reduce diagonal collisions. + /// + /// A 32-bit signed integer that is the hash code for this instance. + public override int GetHashCode() + { + unchecked // overflow is fine, just wrap around + { + int hash = 13; + hash = (hash * 7) + TechType.GetHashCode(); + hash = (hash * 7) + ClassId.GetHashCode(); + hash = (hash * 7) + SpawnPosition.GetHashCode(); + hash = (hash * 7) + Rotation.GetHashCode(); + hash = (hash * 7) + Type.GetHashCode(); + return hash; + } + } + + /// + /// Indicates whether the current is equal to another. + /// + /// + /// It is worth noting that we use Unity's and + /// operator comparisons for comparing the and properties of each instance, + /// to allow for an approximate comparison of these values. + /// + /// The other . + /// if the current is equal to the parameter; + /// otherwise . + public bool Equals(SpawnInfo other) => other.TechType == TechType + && other.ClassId == ClassId + && other.SpawnPosition == SpawnPosition + && other.Rotation == Rotation + && other.Type == Type; + + internal enum SpawnType + { + ClassId, + TechType + } + + /// + /// Indicates whether two instances are equal. + /// + /// The first instance to compare. + /// The second instance to compare. + /// if the instances are equal; otherwise, . + /// + /// + public static bool operator ==(SpawnInfo a, SpawnInfo b) => a.Equals(b); + + /// + /// Indicates whether two instances are not equal. + /// + /// The first instance to compare. + /// The second instance to compare. + /// if the instances are not equal; otherwise, . + /// + /// + public static bool operator !=(SpawnInfo a, SpawnInfo b) => !(a == b); + } + #endregion +} diff --git a/SMLHelper/Handlers/CraftDataHandler.cs b/SMLHelper/Handlers/CraftDataHandler.cs new file mode 100644 index 00000000..25ec9cf3 --- /dev/null +++ b/SMLHelper/Handlers/CraftDataHandler.cs @@ -0,0 +1,230 @@ +namespace SMLHelper.V2.Handlers +{ + using Interfaces; + using Patchers; + + /// + /// A handler class for adding and editing crafted items. + /// + public partial class CraftDataHandler: ICraftDataHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ICraftDataHandler Main { get; } = new CraftDataHandler(); + + private CraftDataHandler() + { + // Hides constructor + } + + #region Common Static Methods + + /// + /// Allows you to edit EquipmentTypes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose EqiupmentType you want to edit. + /// The EquipmentType for that TechType. + public static void SetEquipmentType(TechType techType, EquipmentType equipmentType) + { + Main.SetEquipmentType(techType, equipmentType); + } + +#if SUBNAUTICA + /// + /// Allows you to edit QuickSlotType for TechTypes. Can be used for existing TechTypes too. + /// Careful: This has to be called after and . + /// + /// The TechType whose QuickSlotType you want to edit. + /// The QuickSlotType for that TechType. +#elif BELOWZERO + /// + /// Allows you to edit QuickSlotType for TechTypes. Can be used for existing TechTypes too. + /// Careful: This has to be called after . + /// + /// The TechType whose QuickSlotType you want to edit. + /// The QuickSlotType for that TechType. +#endif + public static void SetQuickSlotType(TechType techType, QuickSlotType slotType) + { + Main.SetQuickSlotType(techType, slotType); + } + + /// + /// Allows you to edit harvest output, i.e. what TechType you get when you "harvest" a TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose harvest output you want to edit. + /// The harvest output for that TechType. + public static void SetHarvestOutput(TechType techType, TechType harvestOutput) + { + Main.SetHarvestOutput(techType, harvestOutput); + } + + /// + /// Allows you to edit how TechTypes are harvested. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose HarvestType you want to edit. + /// The HarvestType for that TechType. + public static void SetHarvestType(TechType techType, HarvestType harvestType) + { + Main.SetHarvestType(techType, harvestType); + } + + /// + /// Allows you to edit how much additional slices/seeds are given upon last knife hit. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose final cut bonus you want to edit. + /// The number of additional slices/seeds you'll receive on last cut. + public static void SetHarvestFinalCutBonus(TechType techType, int bonus) + { + Main.SetHarvestFinalCutBonus(techType, bonus); + } + + /// + /// Allows you to edit item sizes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose item size you want to edit. + /// The item size for that TechType. + public static void SetItemSize(TechType techType, Vector2int size) + { + Main.SetItemSize(techType, size); + } + + /// + /// Allows you to edit item sizes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose item size you want to edit. + /// The width of the item + /// The height of the item + public static void SetItemSize(TechType techType, int x, int y) + { + Main.SetItemSize(techType, x, y); + } + + /// + /// Allows you to edit crafting times for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose crafting time you want to edit. + /// The crafting time, in seconds, for that TechType. + public static void SetCraftingTime(TechType techType, float time) + { + Main.SetCraftingTime(techType, time); + } + + /// + /// Allows you to edit the cooked creature list, i.e. associate the unedible TechType to the cooked TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose cooked creature counterpart to edit. + /// The cooked creature counterpart for that TechType. + public static void SetCookedVariant(TechType uncooked, TechType cooked) + { + Main.SetCookedVariant(uncooked, cooked); + } + + /// + /// Allows you to edit inventory background colors for TechTypes. + /// + /// The TechType whose BackgroundType you want to edit. + /// The background color for that TechType. + /// + public static void SetBackgroundType(TechType techType, CraftData.BackgroundType backgroundColor) + { + Main.SetBackgroundType(techType, backgroundColor); + } + + /// + /// Allows you to add items to the buildable list. + /// + /// The TechType which you want to add to the buildable list. + public static void AddBuildable(TechType techType) + { + Main.AddBuildable(techType); + } + + /// + /// Allows you to add items to the game's internal grouping system. + /// Required if you want to make buildable items show up in the Habitat Builder. + /// + /// The TechGroup you want to add your TechType to. + /// The TechCategory (in the TechGroup) you want to add your TechType to. + /// The TechType you want to add. + public static void AddToGroup(TechGroup group, TechCategory category, TechType techType) + { + Main.AddToGroup(group, category, techType, TechType.None); + } + + /// + /// Allows you to add items to the game's internal grouping system. + /// Required if you want to make buildable items show up in the Habitat Builder. + /// + /// The TechGroup you want to add your TechType to. + /// The TechCategory (in the TechGroup) you want to add your TechType to. + /// The TechType you want to add. + /// Added TechType will be added after this TechType, for sorting purposes. + public static void AddToGroup(TechGroup group, TechCategory category, TechType techType, TechType after) + { + Main.AddToGroup(group, category, techType, after); + } + + /// + /// Allows you to remove an existing TechType from the game's internal group system. + /// + /// The TechGroup in which the TechType is located. + /// The TechCategory in which the TechType is located. + /// The TechType which you want to remove. + public static void RemoveFromGroup(TechGroup group, TechCategory category, TechType techType) + { + Main.RemoveFromGroup(group, category, techType); + } + + #endregion + + #region Common Interface Methods + + /// + /// Allows you to add items to the game's internal grouping system. + /// Required if you want to make buildable items show up in the Habitat Builder or show in the Blueprints Tab of the PDA. + /// + /// The TechGroup you want to add your TechType to. + /// The TechCategory (in the TechGroup) you want to add your TechType to. + /// The TechType you want to add. + void ICraftDataHandler.AddToGroup(TechGroup group, TechCategory category, TechType techType) + { + CraftDataPatcher.AddToCustomGroup(group, category, techType, TechType.None); + } + + /// + /// Allows you to add items to the game's internal grouping system. + /// Required if you want to make buildable items show up in the Habitat Builder or show in the Blueprints Tab of the PDA. + /// + /// The TechGroup you want to add your TechType to. + /// The TechCategory (in the TechGroup) you want to add your TechType to. + /// The TechType you want to add. + /// Added TechType will be added after this TechType, for sorting purposes. + void ICraftDataHandler.AddToGroup(TechGroup group, TechCategory category, TechType techType, TechType after) + { + CraftDataPatcher.AddToCustomGroup(group, category, techType, after); + } + + /// + /// Allows you to remove an existing TechType from the game's internal group system. + /// + /// The TechGroup in which the TechType is located. + /// The TechCategory in which the TechType is located. + /// The TechType which you want to remove. + void ICraftDataHandler.RemoveFromGroup(TechGroup group, TechCategory category, TechType techType) + { + CraftDataPatcher.RemoveFromCustomGroup(group, category, techType); + } + + #endregion + } +} diff --git a/SMLHelper/Handlers/CraftDataHandler_BelowZero.cs b/SMLHelper/Handlers/CraftDataHandler_BelowZero.cs new file mode 100644 index 00000000..5d3f3ef4 --- /dev/null +++ b/SMLHelper/Handlers/CraftDataHandler_BelowZero.cs @@ -0,0 +1,539 @@ +#if BELOWZERO +namespace SMLHelper.V2.Handlers +{ + using Crafting; + using Interfaces; + using Patchers; + using System.Collections.Generic; + + /// + /// A handler class for adding and editing crafted items. + /// + public partial class CraftDataHandler : ICraftDataHandler + { + + #region BelowZero specific Static Methods + + /// + /// Allows you to edit recipes, i.e. RecipeData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + public static void SetTechData(TechType techType, RecipeData recipeData) + { + Main.SetTechData(techType, recipeData); + } + + /// + /// Allows you to add ingredients for a TechType crafting recipe. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose ingredient list you want to edit. + /// The collection of Ingredients for that TechType. + /// + public static void SetIngredients(TechType techType, ICollection ingredients) + { + Main.SetIngredients(techType, ingredients); + } + + + /// + /// Allows you to edit the Cold Resistance for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose Cold Resistance you want to edit. + /// The int value for the Cold Resistance. + public static void SetColdResistance(TechType techType, int resistance) + { + Main.SetColdResistance(techType, resistance); + } + + /// + /// Allows you to add linked items for a TechType crafting recipe. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose ingredient list you want to edit. + /// The collection of linked items for that TechType + public static void SetLinkedItems(TechType techType, ICollection linkedItems) + { + Main.SetLinkedItems(techType, linkedItems); + } + + /// + /// Safely accesses the crafting data from a modded or vanilla item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The JsonValue from the modded item if it exists; Otherwise, returns null. + public static RecipeData GetRecipeData(TechType techType) + { + return Main.GetRecipeData(techType); + } + + + /// + /// Safely accesses the crafting data from a modded or vanilla item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The JsonValue from the modded item if it exists; Otherwise, returns null. + public static RecipeData GetTechData(TechType techType) + { + return Main.GetRecipeData(techType); + } + + /// + /// Safely accesses the crafting data from a modded item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The JsonValue from the modded item if it exists; Otherwise, returns null. + public static RecipeData GetModdedRecipeData(TechType techType) + { + return Main.GetModdedRecipeData(techType); + } + + /// + /// Safely accesses the crafting data from a modded item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The JsonValue from the modded item if it exists; Otherwise, returns null. + public static RecipeData GetModdedTechData(TechType techType) + { + return Main.GetModdedRecipeData(techType); + } + + /// + /// Sets the maximum charge. + /// + /// The TechType whose MaxCharge you want to edit. + /// The maximum charge. + public static void SetMaxCharge(TechType techType, float maxCharge) + { + Main.SetMaxCharge(techType, maxCharge); + } + + /// + /// Sets the energy cost. + /// + /// The TechType whose EnergyCost you want to edit. + /// The energy cost. + public static void SetEnergyCost(TechType techType, float energyCost) + { + Main.SetEnergyCost(techType, energyCost); + } + + + /// + /// Sets the type of the sound. + /// + /// Type of the tech. + /// Type of the sound. + public static void SetSoundType(TechType techType, TechData.SoundType soundType) + { + Main.SetSoundType(techType, soundType); + } + + #endregion + + #region BelowZero specific implementations + + /// + /// Allows you to add or edit RecipeData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + void ICraftDataHandler.SetTechData(TechType techType, RecipeData recipeData) + { + if (CraftDataPatcher.CustomTechData.TryGetValue(techType, out JsonValue jsonValue)) + { + jsonValue[TechData.PropertyToID("techType")] = new JsonValue((int)techType); + jsonValue[TechData.PropertyToID("craftAmount")] = new JsonValue(recipeData.craftAmount); + } + else + { + jsonValue = new JsonValue + { + { TechData.PropertyToID("techType"), new JsonValue((int)techType) }, + { TechData.PropertyToID("craftAmount"), new JsonValue(recipeData.craftAmount) } + }; + + CraftDataPatcher.CustomTechData.Add(techType, jsonValue); + } + + if (recipeData.ingredientCount > 0) + { + Main.SetIngredients(techType, recipeData.Ingredients); + } + if (recipeData.linkedItemCount > 0) + { + Main.SetLinkedItems(techType, recipeData.LinkedItems); + } + } + + /// + /// Allows you to edit recipes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The collection of Ingredients for that TechType. + /// + void ICraftDataHandler.SetIngredients(TechType techType, ICollection ingredients) + { + if (!CraftDataPatcher.CustomTechData.TryGetValue(techType, out JsonValue smlJsonValue)) + { + smlJsonValue = new JsonValue(); + CraftDataPatcher.CustomTechData.Add(techType, smlJsonValue); + } + + if (!smlJsonValue.Contains(TechData.PropertyToID("ingredients"))) + { + smlJsonValue.Add(TechData.PropertyToID("ingredients"), new JsonValue(JsonValue.Type.Array)); + } + else + { + smlJsonValue[TechData.PropertyToID("ingredients")] = new JsonValue(JsonValue.Type.Array); + } + + JsonValue ingredientslist = smlJsonValue[TechData.PropertyToID("ingredients")]; + + int amount = TechData.PropertyToID("amount"); + int tech = TechData.PropertyToID("techType"); + int current = 0; + + foreach (Ingredient i in ingredients) + { + ingredientslist.Add(new JsonValue(current)); + ingredientslist[current] = new JsonValue(JsonValue.Type.Object) + { + { amount, new JsonValue(i.amount) }, + { tech, new JsonValue((int)i.techType) } + }; + current++; + } + } + + /// + /// Allows you to edit Linked Items for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The collection of Ingredients for that TechType. + /// + void ICraftDataHandler.SetLinkedItems(TechType techType, ICollection linkedItems) + { + if (!CraftDataPatcher.CustomTechData.TryGetValue(techType, out JsonValue smlJsonValue)) + { + CraftDataPatcher.CustomTechData.Add(techType, new JsonValue()); + smlJsonValue = CraftDataPatcher.CustomTechData[techType]; + } + + if (!smlJsonValue.Contains(TechData.PropertyToID("linkedItems"))) + { + smlJsonValue.Add(TechData.PropertyToID("linkedItems"), new JsonValue(JsonValue.Type.Array)); + } + else + { + smlJsonValue[TechData.PropertyToID("linkedItems")] = new JsonValue(JsonValue.Type.Array); + } + + JsonValue linkedItemslist = smlJsonValue[TechData.PropertyToID("linkedItems")]; + + int current = 0; + + foreach (TechType i in linkedItems) + { + linkedItemslist.Add(new JsonValue(current)); + linkedItemslist[current] = new JsonValue((int)i); + current++; + } + } + + /// + /// Safely accesses the crafting data from a Modded or Vanilla item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The RecipeData from the item if it exists; Otherwise, returns null. + RecipeData ICraftDataHandler.GetRecipeData(TechType techType) + { + RecipeData moddedRecipeData = GetModdedRecipeData(techType); + + if (moddedRecipeData != null) + { + return moddedRecipeData; + } + + if (!TechData.Contains(TechType.Knife)) + { + TechData.Initialize(); + } + + if (TechData.TryGetValue(techType, out JsonValue techData)) + { + return ConvertToRecipeData(techData); + } + + return null; + } + + private static RecipeData ConvertToRecipeData(JsonValue techData) + { + RecipeData currentRecipeData = new RecipeData + { + craftAmount = techData.GetInt(TechData.propertyCraftAmount, out int craftAmount, 0) ? craftAmount : TechData.defaultCraftAmount + }; + + if (techData.GetArray(TechData.propertyIngredients, out JsonValue jsonValue, null)) + { + for (int i = 0; i < jsonValue.Count; i++) + { + JsonValue jsonValue2 = jsonValue[i]; + TechType techType = (TechType)jsonValue2.GetInt(TechData.propertyTechType, 0); + int int2 = jsonValue2.GetInt(TechData.propertyAmount, 0); + if (techType != TechType.None && int2 > 0) + { + if (currentRecipeData.Ingredients == null) + { + currentRecipeData.Ingredients = new List(); + } + currentRecipeData.Ingredients.Add(new Ingredient(techType, int2)); + } + } + } + + if (techData.GetArray(TechData.propertyLinkedItems, out JsonValue jsonValue3, null)) + { + for (int j = 0; j < jsonValue3.Count; j++) + { + TechType techType1 = (TechType)jsonValue3[j].GetInt(0); + if (currentRecipeData.LinkedItems == null) + { + currentRecipeData.LinkedItems = new List(); + } + currentRecipeData.LinkedItems.Add(techType1); + } + } + return currentRecipeData; + } + + /// + /// Safely accesses the crafting data from a Modded item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The RecipeData from the modded item if it exists; Otherwise, returns null. + RecipeData ICraftDataHandler.GetModdedRecipeData(TechType techType) + { + return CraftDataPatcher.CustomTechData.TryGetValue(techType, out JsonValue techData) ? ConvertToRecipeData(techData) : null; + } + + /// + /// Allows you to edit EquipmentTypes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose EqiupmentType you want to edit. + /// The EquipmentType for that TechType. + void ICraftDataHandler.SetEquipmentType(TechType techType, EquipmentType equipmentType) + { + AddJsonProperty(techType, "equipmentType", new JsonValue((int)equipmentType)); + } + + /// + /// Allows you to edit QuickSlotType for TechTypes. Can be used for existing TechTypes too. + /// Careful: This has to be called after . + /// + /// The TechType whose QuickSlotType you want to edit. + /// The QuickSlotType for that TechType. + void ICraftDataHandler.SetQuickSlotType(TechType techType, QuickSlotType slotType) + { + AddJsonProperty(techType, "slotType", new JsonValue((int)slotType)); + } + + /// + /// Allows you to edit harvest output, i.e. what TechType you get when you "harvest" a TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose harvest output you want to edit. + /// The harvest output for that TechType. + void ICraftDataHandler.SetHarvestOutput(TechType techType, TechType harvestOutput) + { + AddJsonProperty(techType, "harvestOutput", new JsonValue((int)harvestOutput)); + } + + /// + /// Allows you to edit how TechTypes are harvested. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose HarvestType you want to edit. + /// The HarvestType for that TechType. + void ICraftDataHandler.SetHarvestType(TechType techType, HarvestType harvestType) + { + AddJsonProperty(techType, "harvestType", new JsonValue((int)harvestType)); + } + + /// + /// Allows you to edit how much additional slices/seeds are given upon last knife hit. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose final cut bonus you want to edit. + /// The number of additional slices/seeds you'll receive on last cut. + void ICraftDataHandler.SetHarvestFinalCutBonus(TechType techType, int bonus) + { + AddJsonProperty(techType, "harvestFinalCutBonus", new JsonValue(bonus)); + } + + /// + /// Allows you to edit item sizes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose item size you want to edit. + /// The item size for that TechType. + void ICraftDataHandler.SetItemSize(TechType techType, Vector2int size) + { + SetItemSize(techType, size.x, size.y); + } + + /// + /// Allows you to edit item sizes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose item size you want to edit. + /// The width of the item + /// The height of the item + void ICraftDataHandler.SetItemSize(TechType techType, int x, int y) + { + JsonValue jsonValue = new JsonValue() + { + { + TechData.propertyX, + new JsonValue(x) + }, + { + TechData.propertyY, + new JsonValue(y) + } + }; + AddJsonProperty(techType, "itemSize", jsonValue); + } + + /// + /// Allows you to edit crafting times for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose crafting time you want to edit. + /// The crafting time, in seconds, for that TechType. + void ICraftDataHandler.SetCraftingTime(TechType techType, float time) + { + AddJsonProperty(techType, "craftTime", new JsonValue(time)); + } + + /// + /// Allows you to edit the cooked creature list, i.e. associate the unedible TechType to the cooked TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose cooked creature counterpart to edit. + /// The cooked creature counterpart for that TechType. + void ICraftDataHandler.SetCookedVariant(TechType uncooked, TechType cooked) + { + AddJsonProperty(uncooked, "processed", new JsonValue((int)cooked)); + } + + /// + /// Allows you to edit the Cold Resistance of a TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose Cold Resistance to edit. + /// The Cold Resistance for that TechType. + void ICraftDataHandler.SetColdResistance(TechType uncooked, int resistance) + { + AddJsonProperty(uncooked, "coldResistance", new JsonValue((int)resistance)); + } + + /// + /// Allows you to edit inventory background colors for TechTypes. + /// + /// The TechType whose BackgroundType you want to edit. + /// The background color for that TechType. + /// + void ICraftDataHandler.SetBackgroundType(TechType techType, CraftData.BackgroundType backgroundColor) + { + AddJsonProperty(techType, "backgroundType", new JsonValue((int)backgroundColor)); + } + + /// + /// Allows you to add items to the buildable list. + /// + /// The TechType which you want to add to the buildable list. + void ICraftDataHandler.AddBuildable(TechType techType) + { + AddJsonProperty(techType, "buildable", new JsonValue(true)); + } + + /// + /// Sets the maximum charge. + /// + /// The TechType whose MaxCharge you want to edit. + /// The maximum charge. + void ICraftDataHandler.SetMaxCharge(TechType techType, float maxCharge) + { + AddJsonProperty(techType, "maxCharge", new JsonValue((double)maxCharge)); + } + + /// + /// Sets the energy cost. + /// + /// The TechType whose EnergyCost you want to edit. + /// The energy cost. + void ICraftDataHandler.SetEnergyCost(TechType techType, float energyCost) + { + AddJsonProperty(techType, "energyCost", new JsonValue((double)energyCost)); + } + + /// + /// Sets the type of the sound. + /// + /// Type of the tech. + /// Type of the sound. + void ICraftDataHandler.SetSoundType(TechType techType, TechData.SoundType soundType) + { + AddJsonProperty(techType, "soundType", new JsonValue((int)soundType)); + } + + private static void AddJsonProperty(TechType techType, string key, JsonValue newValue) + { + if (CraftDataPatcher.CustomTechData.TryGetValue(techType, out JsonValue techData)) + { + techData[TechData.PropertyToID(key)] = newValue; + } + else + { + CraftDataPatcher.CustomTechData[techType] = new JsonValue + { + { + TechData.PropertyToID("techType"), + new JsonValue((int)techType) + }, + { + TechData.PropertyToID(key), + newValue + } + }; + } + } + + #endregion + } +} +#endif diff --git a/SMLHelper/Handlers/CraftDataHandler_Subnautica.cs b/SMLHelper/Handlers/CraftDataHandler_Subnautica.cs new file mode 100644 index 00000000..c820ffc9 --- /dev/null +++ b/SMLHelper/Handlers/CraftDataHandler_Subnautica.cs @@ -0,0 +1,311 @@ +#if SUBNAUTICA +namespace SMLHelper.V2.Handlers +{ + using Crafting; + using Interfaces; + using Patchers; + + /// + /// A handler class for adding and editing crafted items. + /// + public partial class CraftDataHandler : ICraftDataHandler + { +#region Subnautica Specific Static Methods + + /// + /// Allows you to edit recipes, i.e. TechData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + public static void SetTechData(TechType techType, ITechData techData) + { + Main.SetTechData(techType, techData); + } + + /// + /// Allows you to edit recipes, i.e. TechData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + public static void SetTechData(TechType techType, TechData techData) + { + Main.SetTechData(techType, techData); + } + + /// + /// Safely accesses the crafting data from a modded item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The ITechData from the modded item if it exists; Otherwise, returns null. + public static ITechData GetModdedTechData(TechType techType) + { + return Main.GetModdedTechData(techType); + } + + /// + /// Safely accesses the crafting data from any item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// Returns TechData if it exists; Otherwise, returns null. + public static TechData GetTechData(TechType techType) + { + return Main.GetTechData(techType); + } + + /// + /// Sets the eating sound for the provided TechType. + /// + /// The item being consumed during . + /// + /// The sound path. + /// + /// Value values are + /// - "event:/player/drink" + /// - "event:/player/drink_stillsuit" + /// - "event:/player/use_first_aid" + /// - "event:/player/eat" (default) + /// + /// + public static void SetEatingSound(TechType consumable, string soundPath) + { + Main.SetEatingSound(consumable, soundPath); + } + +#endregion + +#region Subnautica specific implementations + + /// + /// Allows you to edit recipes, i.e. TechData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + void ICraftDataHandler.SetTechData(TechType techType, ITechData techData) + { + CraftDataPatcher.CustomTechData[techType] = techData; + } + + /// + /// Allows you to edit recipes, i.e. TechData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + void ICraftDataHandler.SetTechData(TechType techType, TechData techData) + { + CraftDataPatcher.CustomTechData[techType] = techData; + } + + /// + /// Allows you to edit EquipmentTypes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose EqiupmentType you want to edit. + /// The EquipmentType for that TechType. + void ICraftDataHandler.SetEquipmentType(TechType techType, EquipmentType equipmentType) + { + CraftDataPatcher.CustomEquipmentTypes[techType] = equipmentType; + } + + /// + /// Allows you to edit QuickSlotType for TechTypes. Can be used for existing TechTypes too. + /// Careful: This has to be called after and . + /// + /// The TechType whose QuickSlotType you want to edit. + /// The QuickSlotType for that TechType. + void ICraftDataHandler.SetQuickSlotType(TechType techType, QuickSlotType slotType) + { + CraftDataPatcher.CustomSlotTypes[techType] = slotType; + } + + /// + /// Allows you to edit harvest output, i.e. what TechType you get when you "harvest" a TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose harvest output you want to edit. + /// The harvest output for that TechType. + void ICraftDataHandler.SetHarvestOutput(TechType techType, TechType harvestOutput) + { + CraftDataPatcher.CustomHarvestOutputList[techType] = harvestOutput; + } + + /// + /// Allows you to edit how TechTypes are harvested. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose HarvestType you want to edit. + /// The HarvestType for that TechType. + void ICraftDataHandler.SetHarvestType(TechType techType, HarvestType harvestType) + { + CraftDataPatcher.CustomHarvestTypeList[techType] = harvestType; + } + + /// + /// Allows you to edit how much additional slices/seeds are given upon last knife hit. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose final cut bonus you want to edit. + /// The number of additional slices/seeds you'll receive on last cut. + void ICraftDataHandler.SetHarvestFinalCutBonus(TechType techType, int bonus) + { + CraftDataPatcher.CustomFinalCutBonusList[techType] = bonus; + } + + /// + /// Allows you to edit item sizes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose item size you want to edit. + /// The item size for that TechType. + void ICraftDataHandler.SetItemSize(TechType techType, Vector2int size) + { + CraftDataPatcher.CustomItemSizes[techType] = size; + } + + /// + /// Allows you to edit item sizes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose item size you want to edit. + /// The width of the item + /// The height of the item + void ICraftDataHandler.SetItemSize(TechType techType, int x, int y) + { + CraftDataPatcher.CustomItemSizes[techType] = new Vector2int(x, y); + } + + /// + /// Allows you to edit crafting times for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose crafting time you want to edit. + /// The crafting time, in seconds, for that TechType. + void ICraftDataHandler.SetCraftingTime(TechType techType, float time) + { + CraftDataPatcher.CustomCraftingTimes[techType] = time; + } + + /// + /// Allows you to edit the cooked creature list, i.e. associate the unedible TechType to the cooked TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose cooked creature counterpart to edit. + /// The cooked creature counterpart for that TechType. + void ICraftDataHandler.SetCookedVariant(TechType uncooked, TechType cooked) + { + CraftDataPatcher.CustomCookedCreatureList[uncooked] = cooked; + } + + /// + /// Allows you to edit inventory background colors for TechTypes. + /// + /// The TechType whose BackgroundType you want to edit. + /// The background color for that TechType. + /// + void ICraftDataHandler.SetBackgroundType(TechType techType, CraftData.BackgroundType backgroundColor) + { + CraftDataPatcher.CustomBackgroundTypes[techType] = backgroundColor; + } + + /// + /// Allows you to add items to the buildable list. + /// + /// The TechType which you want to add to the buildable list. + void ICraftDataHandler.AddBuildable(TechType techType) + { + CraftDataPatcher.CustomBuildables.Add(techType); + } + + /// + /// Safely accesses the crafting data from a modded item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The ITechData from the modded item if it exists; Otherwise, returns null. + ITechData ICraftDataHandler.GetModdedTechData(TechType techType) + { + if (!CraftDataPatcher.CustomTechData.TryGetValue(techType, out ITechData moddedTechData)) + { + return null; + } + return moddedTechData; + } + + /// + /// Safely accesses the crafting data from any item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// Returns TechData if it exists; Otherwise, returns null. + TechData ICraftDataHandler.GetTechData(TechType techType) + { + if (CraftDataPatcher.CustomTechData.TryGetValue(techType, out ITechData iTechData)) + { + return ConvertToTechData(iTechData); + } + + iTechData = CraftData.Get(techType, true); + + if (iTechData != null) + { + return ConvertToTechData(iTechData); + } + + return null; + } + + private static TechData ConvertToTechData(ITechData iTechData) + { + var techData = new TechData() { craftAmount = iTechData.craftAmount }; + + for (int i = 0; i < iTechData.ingredientCount; i++) + { + IIngredient ingredient = iTechData.GetIngredient(i); + var smlingredient = new Ingredient(ingredient.techType, ingredient.amount); + techData.Ingredients.Add(smlingredient); + } + + for (int i = 0; i < iTechData.linkedItemCount; i++) + { + techData.LinkedItems.Add(iTechData.GetLinkedItem(i)); + } + + return techData; + } + + /// + /// Sets the eating sound for the provided TechType. + /// + /// The item being consumed during . + /// + /// The sound path. + /// + /// Value values are + /// - "event:/player/drink" + /// - "event:/player/drink_stillsuit" + /// - "event:/player/use_first_aid" + /// - "event:/player/eat" (default) + /// + /// + void ICraftDataHandler.SetEatingSound(TechType consumable, string soundPath) + { + CraftDataPatcher.CustomEatingSounds.Add(consumable, soundPath); + } + +#endregion + } +} +#endif \ No newline at end of file diff --git a/SMLHelper/Handlers/CraftTreeHandler.cs b/SMLHelper/Handlers/CraftTreeHandler.cs new file mode 100644 index 00000000..11744401 --- /dev/null +++ b/SMLHelper/Handlers/CraftTreeHandler.cs @@ -0,0 +1,393 @@ +namespace SMLHelper.V2.Handlers +{ + using System; + using Crafting; + using Interfaces; + using Patchers; + using Utility; + using UnityEngine; + using SMLHelper.V2.Patchers.EnumPatching; + + /// + /// A handler class for creating and editing of crafting trees. + /// + public class CraftTreeHandler : ICraftTreeHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ICraftTreeHandler Main { get; } = new CraftTreeHandler(); + + private CraftTreeHandler() + { + // Hides constructor + } + + #region Static Methods + + /// + /// Your first method call to start a new custom crafting tree.
+ /// Creating a new CraftTree only makes sense if you're going to use it in a new type of . + ///
+ /// The name for the new enum. + /// The new enum instance for your custom craft tree type. + /// + /// Returns the root node for your custom craft tree, as a new instance.
+ /// Build up your custom crafting tree from this root node.
+ /// This tree will be automatically patched into the game. No further calls into required. + /// For more advanced usage, you can replace the default value of with your own custom function. + ///
+ /// + /// + /// + /// + public static ModCraftTreeRoot CreateCustomCraftTreeAndType(string name, out CraftTree.Type craftTreeType) + { + return Main.CreateCustomCraftTreeAndType(name, out craftTreeType); + } + + /// + /// Safely looks for a modded CraftTree Type from another mod in the SMLHelper CraftTreeTypeCache. + /// + /// The string used to define the modded item's new techtype. + /// + /// True if the craft tree was found; Otherwise false. + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + public static bool ModdedCraftTreeTypeExists(string craftTreeString) + { + return Main.ModdedCraftTreeTypeExists(craftTreeString); + } + + /// + /// Adds a new crafting node to the root of the specified crafting tree, at the provided tab location. + /// + /// The target craft tree to edit. + /// The item to craft. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + public static void AddCraftingNode(CraftTree.Type craftTree, TechType craftingItem, params string[] stepsToTab) + { + Main.AddCraftingNode(craftTree, craftingItem, stepsToTab); + } + + /// + /// Adds a new crafting node to the root of the specified crafting tree + /// + /// The target craft tree to edit. + /// The item to craft. + public static void AddCraftingNode(CraftTree.Type craftTree, TechType craftingItem) + { + Main.AddCraftingNode(craftTree, craftingItem); + } + + /// + /// Adds a new tab node to the root of the specified crafting tree. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Sprite sprite) + { + Main.AddTabNode(craftTree, name, displayName, sprite); + } + +#if SUBNAUTICA + + /// + /// Adds a new tab node to the root of the specified crafting tree. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Atlas.Sprite sprite) + { + Main.AddTabNode(craftTree, name, displayName, sprite); + } + + /// + /// Adds a new tab node to the root of the specified crafting tree, at the specified tab location. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Atlas.Sprite sprite, params string[] stepsToTab) + { + Main.AddTabNode(craftTree, name, displayName, sprite, stepsToTab); + } + +#endif + + /// + /// Adds a new tab node to the root of the specified crafting tree, at the specified tab location. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Sprite sprite, params string[] stepsToTab) + { + Main.AddTabNode(craftTree, name, displayName, sprite, stepsToTab); + } + + /// + /// Removes a node at the specified node location. Can be used to remove either tabs or craft nodes. + /// If a tab node is selected, all child nodes to it will also be removed. + /// + /// The target craft tree to edit. + /// + /// The steps to the target node. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// This means matching the id of the crafted item or the id of the tab name. + /// Do not include "root" in this path. + /// + public static void RemoveNode(CraftTree.Type craftTree, params string[] stepsToNode) + { + Main.RemoveNode(craftTree, stepsToNode); + } + + #endregion + + #region Interface Methods + + /// + /// Your first method call to start a new custom crafting tree.
+ /// Creating a new CraftTree only makes sense if you're going to use it in a new type of . + ///
+ /// The name for the new enum. + /// The new enum instance for your custom craft tree type. + /// + /// Returns the root node for your custom craft tree, as a new instance.
+ /// Build up your custom crafting tree from this root node.
+ /// This tree will be automatically patched into the game. No further calls into required. + /// For more advanced usage, you can replace the default value of with your own custom function. + ///
+ /// + /// + /// + /// + ModCraftTreeRoot ICraftTreeHandler.CreateCustomCraftTreeAndType(string name, out CraftTree.Type craftTreeType) + { + return CraftTreeTypePatcher.CreateCustomCraftTreeAndType(name, out craftTreeType); + } + + /// + /// Safely looks for a modded CraftTree Type from another mod in the SMLHelper CraftTreeTypeCache. + /// + /// The string used to define the modded item's new techtype. + /// + /// True if the craft tree was found; Otherwise false. + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + bool ICraftTreeHandler.ModdedCraftTreeTypeExists(string craftTreeString) + { + EnumTypeCache cache = CraftTreeTypePatcher.cacheManager.RequestCacheForTypeName(craftTreeString); + return cache != null; + } + + /// + /// Adds a new crafting node to the root of the specified crafting tree, at the provided tab location. + /// + /// The target craft tree to edit. + /// The item to craft. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + void ICraftTreeHandler.AddCraftingNode(CraftTree.Type craftTree, TechType craftingItem, params string[] stepsToTab) + { + ValidateStandardCraftTree(craftTree); + CraftTreePatcher.CraftingNodes.Add(new CraftingNode(stepsToTab, craftTree, craftingItem)); + } + + /// + /// Adds a new crafting node to the root of the specified crafting tree + /// + /// The target craft tree to edit. + /// The item to craft. + + void ICraftTreeHandler.AddCraftingNode(CraftTree.Type craftTree, TechType craftingItem) + { + ValidateStandardCraftTree(craftTree); + CraftTreePatcher.CraftingNodes.Add(new CraftingNode(new string[0], craftTree, craftingItem)); + } + +#if SUBNAUTICA + /// + /// Adds a new tab node to the root of the specified crafting tree. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + void ICraftTreeHandler.AddTabNode(CraftTree.Type craftTree, string name, string displayName, Atlas.Sprite sprite) + { + ValidateStandardCraftTree(craftTree); + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + CraftTreePatcher.TabNodes.Add(new TabNode(new string[0], craftTree, sprite, modName, name, displayName)); + } + + /// + /// Adds a new tab node to the root of the specified crafting tree. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + + void ICraftTreeHandler.AddTabNode(CraftTree.Type craftTree, string name, string displayName, UnityEngine.Sprite sprite) + { + ValidateStandardCraftTree(craftTree); + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + CraftTreePatcher.TabNodes.Add(new TabNode(new string[0], craftTree, new Atlas.Sprite(sprite), modName, name, displayName)); + } + + /// + /// Adds a new tab node to the root of the specified crafting tree, at the specified tab location. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + void ICraftTreeHandler.AddTabNode(CraftTree.Type craftTree, string name, string displayName, Atlas.Sprite sprite, params string[] stepsToTab) + { + ValidateStandardCraftTree(craftTree); + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + CraftTreePatcher.TabNodes.Add(new TabNode(stepsToTab, craftTree, sprite, modName, name, displayName)); + } + + /// + /// Adds a new tab node to the root of the specified crafting tree, at the specified tab location. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + void ICraftTreeHandler.AddTabNode(CraftTree.Type craftTree, string name, string displayName, UnityEngine.Sprite sprite, params string[] stepsToTab) + { + ValidateStandardCraftTree(craftTree); + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + CraftTreePatcher.TabNodes.Add(new TabNode(stepsToTab, craftTree, new Atlas.Sprite(sprite), modName, name, displayName)); + } + +#elif BELOWZERO + /// + /// Adds a new tab node to the root of the specified crafting tree. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + void ICraftTreeHandler.AddTabNode(CraftTree.Type craftTree, string name, string displayName, Sprite sprite) + { + ValidateStandardCraftTree(craftTree); + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + CraftTreePatcher.TabNodes.Add(new TabNode(new string[0], craftTree, sprite, modName, name, displayName)); + } + + /// + /// Adds a new tab node to the root of the specified crafting tree, at the specified tab location. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + void ICraftTreeHandler.AddTabNode(CraftTree.Type craftTree, string name, string displayName, Sprite sprite, params string[] stepsToTab) + { + ValidateStandardCraftTree(craftTree); + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + CraftTreePatcher.TabNodes.Add(new TabNode(stepsToTab, craftTree, sprite, modName, name, displayName)); + } + +#endif + + /// + /// Removes a node at the specified node location. Can be used to remove either tabs or craft nodes. + /// If a tab node is selected, all child nodes to it will also be removed. + /// + /// The target craft tree to edit. + /// + /// The steps to the target node. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// This means matching the id of the crafted item or the id of the tab name. + /// Do not include "root" in this path. + /// + + void ICraftTreeHandler.RemoveNode(CraftTree.Type craftTree, params string[] stepsToNode) + { + ValidateStandardCraftTree(craftTree); + CraftTreePatcher.NodesToRemove.Add(new Node(stepsToNode, craftTree)); + } + + #endregion + + private static void ValidateStandardCraftTree(CraftTree.Type craftTree) + { + switch (craftTree) + { + case CraftTree.Type.Fabricator: + case CraftTree.Type.Constructor: + case CraftTree.Type.Workbench: + case CraftTree.Type.SeamothUpgrades: + case CraftTree.Type.MapRoom: + case CraftTree.Type.Centrifuge: + case CraftTree.Type.CyclopsFabricator: + case CraftTree.Type.Rocket: +#if BELOWZERO + case CraftTree.Type.SeaTruckFabricator: +#endif + break; // Okay + case CraftTree.Type.Unused1: + case CraftTree.Type.Unused2: + case CraftTree.Type.None: + default: + throw new ArgumentException($"{nameof(craftTree)} value of '{craftTree}' does not correspond to a standard crafting tree.{Environment.NewLine}" + + $"This method is intended for use only with standard crafting trees, not custom ones or unused ones."); + } + } + } +} diff --git a/SMLHelper/Handlers/CustomSoundHandler.cs b/SMLHelper/Handlers/CustomSoundHandler.cs new file mode 100644 index 00000000..7c359247 --- /dev/null +++ b/SMLHelper/Handlers/CustomSoundHandler.cs @@ -0,0 +1,157 @@ +namespace SMLHelper.V2.Handlers +{ + using FMOD; + using Interfaces; + using Patchers; + using UnityEngine; + using Utility; + + /// + /// A handler class for adding and overriding Sounds. + /// + public class CustomSoundHandler: ICustomSoundHandler + { + + /// + /// Main entry point for all calls to this handler. + /// + public static ICustomSoundHandler Main { get; } = new CustomSoundHandler(); + + private CustomSoundHandler() + { + // Hides constructor + } + + #region Interface Methods + + /// + /// Register a Custom sound by file path. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The file path on disk of the sound file to load + /// The sound channel to get the volume to play the sound at. defaults to + /// the loaded + + Sound ICustomSoundHandler.RegisterCustomSound(string id, string filePath, SoundChannel soundChannel) + { + Sound sound = AudioUtils.CreateSound(filePath); + CustomSoundPatcher.CustomSounds[id] = sound; + CustomSoundPatcher.CustomSoundChannels[id] = soundChannel; + return sound; + } + + /// + /// Register a custom sound by an instance. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The AudioClip to register. + /// The sound channel to get the volume to play the sound at. defaults to + /// the registered. + Sound ICustomSoundHandler.RegisterCustomSound(string id, AudioClip audio, SoundChannel soundChannel) + { + var sound = AudioUtils.CreateSound(audio); + CustomSoundPatcher.CustomSounds[id] = sound; + CustomSoundPatcher.CustomSoundChannels[id] = soundChannel; + return sound; + } + + /// + /// Register a Custom sound that has been loaded using AudioUtils. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The pre loaded sound + /// The sound channel to get the volume to play the sound at. + + void ICustomSoundHandler.RegisterCustomSound(string id, Sound sound, SoundChannel soundChannel) + { + CustomSoundPatcher.CustomSounds[id] = sound; + CustomSoundPatcher.CustomSoundChannels[id] = soundChannel; + } + + /// + /// Try to find and play a custom that has been registered. + /// + /// The Id of the custom sound + void ICustomSoundHandler.TryPlayCustomSound(string id) + { + if(!CustomSoundPatcher.CustomSounds.TryGetValue(id, out Sound sound)) return; + if (!CustomSoundPatcher.CustomSoundChannels.TryGetValue(id, out var soundChannel)) + soundChannel = SoundChannel.Master; + AudioUtils.PlaySound(sound, soundChannel); + } + + /// + /// Try to get a registered custom . + /// + /// The Id of the custom sound + /// Outputs the if found and null if not found. + /// true or false depending on if the id was found + bool ICustomSoundHandler.TryGetCustomSound(string id, out Sound sound) + { + return CustomSoundPatcher.CustomSounds.TryGetValue(id, out sound); + } + + + #endregion + #region Static Methods + + /// + /// Register a Custom sound by file path. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The file path on disk of the sound file to load + /// The sound channel to get the volume to play the sound at. defaults to + /// the loaded + + public static Sound RegisterCustomSound(string id, string filePath, SoundChannel soundChannel = SoundChannel.Master) + { + return Main.RegisterCustomSound(id, filePath, soundChannel); + } + + /// + /// Register a custom sound by an instance. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The AudioClip to register. + /// The sound channel to get the volume to play the sound at. defaults to + /// the registered. + public static Sound RegisterCustomSound(string id, AudioClip audio, SoundChannel soundChannel = SoundChannel.Master) + { + return Main.RegisterCustomSound(id, audio, soundChannel); + } + + /// + /// Register a Custom sound that has been loaded using AudioUtils. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The pre loaded sound + /// The sound channel to get the volume to play the sound at. + + public static void RegisterCustomSound(string id, Sound sound, SoundChannel soundChannel = SoundChannel.Master) + { + Main.RegisterCustomSound(id, sound, soundChannel); + } + + /// + /// Try to find and play a custom that has been registered. + /// + /// The Id of the custom sound + public static void TryPlayCustomSound(string id) + { + Main.TryPlayCustomSound(id); + } + + /// + /// Try to get a registered custom . + /// + /// The Id of the custom sound + /// Outputs the if found and null if not found. + /// true or false depending on if the id was found + public static bool TryGetCustomSound(string id, out Sound sound) + { + return Main.TryGetCustomSound(id, out sound); + } + + #endregion + } +} \ No newline at end of file diff --git a/SMLHelper/Handlers/EquipmentHandler.cs b/SMLHelper/Handlers/EquipmentHandler.cs new file mode 100644 index 00000000..fb120f78 --- /dev/null +++ b/SMLHelper/Handlers/EquipmentHandler.cs @@ -0,0 +1,74 @@ +namespace SMLHelper.V2.Handlers +{ + using SMLHelper.V2.Handlers; + using SMLHelper.V2.Interfaces; + using SMLHelper.V2.Patchers.EnumPatching; + using SMLHelper.V2.Utility; + + /// + /// A handler class for everything related to creating new Equipments. + /// + public class EquipmentHandler : IEquipmentHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IEquipmentHandler Main { get; } = new EquipmentHandler(); + + private EquipmentHandler() + { + // Hide constructor + } + + /// + /// Adds a new into the game. + /// + /// The name of the Equipment. Should not contain special characters. + /// + /// The new that is created. + /// + public EquipmentType AddEquipmentType(string equipmentName) + { + EquipmentType equipment = EquipmentTypePatcher.AddEquipmentType(equipmentName); + return equipment; + } + + /// + /// Safely looks for a modded group from another mod in the SMLHelper EquipmentCache. + /// + /// The string used to define the techgroup. + /// + /// True if the item was found; Otherwise false. + /// + public bool ModdedEquipmentTypeExists(string equipmentString) + { + EnumTypeCache cache = EquipmentTypePatcher.cacheManager.RequestCacheForTypeName(equipmentString, false); + // if we don't have it cached, the mod is not present or not yet loaded + return cache != null; + } + + /// + /// Safely looks for a modded item from another mod in the SMLHelper EquipmentCache and outputs its value when found. + /// + /// The string used to define the techgroup. + /// The Equipment enum value of the modded. Defaults to when the item was not found. + /// + /// True if the item was found; Otherwise false. + /// + public bool TryGetModdedEquipmentType(string equipmentString, out EquipmentType modEquipment) + { + EnumTypeCache cache = EquipmentTypePatcher.cacheManager.RequestCacheForTypeName(equipmentString, false); + if (cache != null) // Item Found + { + modEquipment = (EquipmentType)cache.Index; + return true; + } + else // Mod not present or not yet loaded + { + modEquipment = EquipmentType.None; + return false; + } + } + + } +} diff --git a/SMLHelper/Handlers/FishHandler.cs b/SMLHelper/Handlers/FishHandler.cs new file mode 100644 index 00000000..c58eef31 --- /dev/null +++ b/SMLHelper/Handlers/FishHandler.cs @@ -0,0 +1,70 @@ +namespace SMLHelper.V2.Handlers +{ + using System; + using System.Collections.Generic; + using System.IO; + using SMLHelper.V2.Assets; + using SMLHelper.V2.Interfaces; + + /// + /// Class to manage registering of fish into the game + /// + public class FishHandler : IFishHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IFishHandler Main { get; } = new FishHandler(); + + private FishHandler() { } + + /// + /// A list of all the custom fish that have so far been registered into the game. This includes ones from mods that may have been loaded earlier. + /// It is mainly used by CustomFishPatcher to spawn fish in + /// + internal static List fishTechTypes = new List(); + + /// + /// Registers a CustomFish object into the game + /// + /// The CustomFish that you are registering + /// The TechType created using the info from your CustomFish object + TechType IFishHandler.RegisterFish(Fish fish) + { + TechType type = TechTypeHandler.AddTechType(fish.id, fish.displayName, fish.tooltip); + + fishTechTypes.Add(type); + + FishPrefab fishPrefab = new FishPrefab(fish.id, $"WorldEntities/Tools/{fish.id}", type) + { + modelPrefab = fish.modelPrefab, + swimSpeed = fish.swimSpeed, + swimRadius = fish.swimRadius, + swimInterval = fish.swimInterval, + pickupable = fish.isPickupable, + isWaterCreature = fish.isWaterCreature + }; + + if (!string.IsNullOrEmpty(fish.spriteFileName)) + { + SpriteHandler.RegisterSprite(type, Path.Combine(Path.Combine(Environment.CurrentDirectory, "QMods"), fish.spriteFileName)); + } + + PrefabHandler.RegisterPrefab(fishPrefab); + + Logger.Debug($"Successfully registered fish: '{fish.displayName}' with Tech Type: '{fish.id}'"); + + return type; + } + + /// + /// Registers a CustomFish object into the game + /// + /// The CustomFish that you are registering + /// The TechType created using the info from your CustomFish object + public static TechType RegisterFish(Fish fish) + { + return Main.RegisterFish(fish); + } + } +} diff --git a/SMLHelper/Handlers/IngameMenuHandler.cs b/SMLHelper/Handlers/IngameMenuHandler.cs new file mode 100644 index 00000000..e7adf0f6 --- /dev/null +++ b/SMLHelper/Handlers/IngameMenuHandler.cs @@ -0,0 +1,174 @@ +namespace SMLHelper.V2.Handlers +{ + using System; + using SMLHelper.V2.Interfaces; + using SMLHelper.V2.Patchers; + + /// + /// A handler class that offers simple ways to tap into functionality of the in game menu. + /// + public class IngameMenuHandler : IIngameMenuHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IIngameMenuHandler Main { get; } = new IngameMenuHandler(); + + private IngameMenuHandler() { } // Hide constructor + + /// + /// Registers a simple method to invoke whenever the player saves the game via the in game menu. + /// + /// The method to invoke. + public static void RegisterOnSaveEvent(Action onSaveAction) + { + Main.RegisterOnSaveEvent(onSaveAction); + } + + /// + /// Registers a simple method to invoke whenever the player loads a saved game via the in game menu. + /// + /// The method to invoke. + public static void RegisterOnLoadEvent(Action onLoadAction) + { + Main.RegisterOnLoadEvent(onLoadAction); + } + + /// + /// Registers a simple method to invoke whenever the player quits the game via the in game menu. + /// + /// The method to invoke. + public static void RegisterOnQuitEvent(Action onQuitAction) + { + Main.RegisterOnQuitEvent(onQuitAction); + } + + /// + /// Removes a method previously added through so it is no longer invoked when saving the game. + /// If you plan on using this, do not register an anonymous method. + /// + /// The method invoked. + public static void UnregisterOnSaveEvent(Action onSaveAction) + { + Main.UnregisterOnSaveEvent(onSaveAction); + } + + /// + /// Removes a method previously added through so it is no longer invoked when loading the game. + /// If you plan on using this, do not register an anonymous method. + /// + /// The method invoked. + public static void UnregisterOnLoadEvent(Action onLoadAction) + { + Main.UnregisterOnLoadEvent(onLoadAction); + } + + /// + /// Removes a method previously added through so it is no longer invoked when quitting the game. + /// If you plan on using this, do not register an anonymous method. + /// + /// The method invoked. + public static void UnregisterOnQuitEvent(Action onQuitAction) + { + Main.UnregisterOnQuitEvent(onQuitAction); + } + + /// + /// Registers a simple method to invoke the first time the player saves the game via the in game menu. + /// + /// The method to invoke. This action will not be invoked a second time. + public static void RegisterOneTimeUseOnSaveEvent(Action onSaveAction) + { + Main.RegisterOneTimeUseOnSaveEvent(onSaveAction); + } + + /// + /// Registers a simple method to invoke the first time the player loads a saved game via the in game menu. + /// + /// The method to invoke. This action will not be invoked a second time. + public static void RegisterOneTimeUseOnLoadEvent(Action onLoadAction) + { + Main.RegisterOneTimeUseOnLoadEvent(onLoadAction); + } + + /// + /// Registers a simple method to invoke the first time the player quits the game via the in game menu. + /// + /// The method to invoke. This action will not be invoked a second time. + public static void RegisterOneTimeUseOnQuitEvent(Action onQuitAction) + { + Main.RegisterOneTimeUseOnQuitEvent(onQuitAction); + } + + /// + /// Registers a simple method to invoke whenever the player saves the game via the in game menu. + /// + /// The method to invoke. + void IIngameMenuHandler.RegisterOnSaveEvent(Action onSaveAction) + { + IngameMenuPatcher.OnSaveEvents += onSaveAction; + } + + void IIngameMenuHandler.RegisterOnLoadEvent(Action onLoadAction) + { + IngameMenuPatcher.OnLoadEvents += onLoadAction; + } + + /// + /// Registers a simple method to invoke whenever the player quits the game via the in game menu. + /// + /// The method to invoke. + void IIngameMenuHandler.RegisterOnQuitEvent(Action onQuitAction) + { + IngameMenuPatcher.OnQuitEvents += onQuitAction; + } + + /// + /// Removes a method previously added through so it is no longer invoked when saving the game. + /// If you plan on using this, do not register an anonymous method. + /// + /// The method invoked. + void IIngameMenuHandler.UnregisterOnSaveEvent(Action onSaveAction) + { + IngameMenuPatcher.OnSaveEvents -= onSaveAction; + } + + void IIngameMenuHandler.UnregisterOnLoadEvent(Action onLoadAction) + { + IngameMenuPatcher.OnLoadEvents -= onLoadAction; + } + + /// + /// Removes a method previously added through so it is no longer invoked when quiting the game. + /// If you plan on using this, do not register an anonymous method. + /// + /// The method invoked. + void IIngameMenuHandler.UnregisterOnQuitEvent(Action onQuitAction) + { + IngameMenuPatcher.OnQuitEvents -= onQuitAction; + } + + /// + /// Registers a simple method to invoke the first time the player saves the game via the in game menu. + /// + /// The method to invoke. This action will not be invoked a second time. + void IIngameMenuHandler.RegisterOneTimeUseOnSaveEvent(Action onSaveAction) + { + IngameMenuPatcher.AddOneTimeUseSaveEvent(onSaveAction); + } + + void IIngameMenuHandler.RegisterOneTimeUseOnLoadEvent(Action onLoadAction) + { + IngameMenuPatcher.AddOneTimeUseLoadEvent(onLoadAction); + } + + /// + /// Registers a simple method to invoke the first time the player quits the game via the in game menu. + /// + /// The method to invoke. This action will not be invoked a second time. + void IIngameMenuHandler.RegisterOneTimeUseOnQuitEvent(Action onQuitAction) + { + IngameMenuPatcher.AddOneTimeUseQuitEvent(onQuitAction); + } + } +} diff --git a/SMLHelper/Handlers/ItemActionHandler.cs b/SMLHelper/Handlers/ItemActionHandler.cs new file mode 100644 index 00000000..8ded7e07 --- /dev/null +++ b/SMLHelper/Handlers/ItemActionHandler.cs @@ -0,0 +1,82 @@ +namespace SMLHelper.V2.Handlers +{ + using SMLHelper.V2.Interfaces; + using SMLHelper.V2.Patchers; + using System; + + /// + /// A handler class for registering your custom middle click actions for items + /// + public class ItemActionHandler : IItemActionHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IItemActionHandler Main { get; } = new ItemActionHandler(); + + private ItemActionHandler() + { + // Hide constructor + } + + /// + /// Registers a custom left click action for a + /// + /// The to which the left click action will be assigned + /// The method which will be called when a matching with the specified was left-clicked + /// The secondary tooltip which will appear in the description of the item + /// The condition which must return for the action to be called when the item is clickedIf ommited, the action will always be called + void IItemActionHandler.RegisterLeftClickAction(TechType targetTechType, Action callback, string tooltip, Predicate condition) + { + string languageLine = $"LeftClickAction_{targetTechType.AsString()}"; + LanguageHandler.SetLanguageLine(languageLine, tooltip); + + condition = condition ?? ((item) => true); + ItemActionPatcher.LeftClickActions.Add(targetTechType, new ItemActionPatcher.CustomItemAction(callback, languageLine, condition)); + } + + /// + /// Registers a custom middle click action for a + /// + /// The which the middle click action will be assigned + /// The method which will be called when a matching with the specified was middle-clicked + /// The secondary tooltip which will appear in the description of the item + /// The condition which must return for the action to be called when the item is clickedIf ommited, the action will always be called + void IItemActionHandler.RegisterMiddleClickAction(TechType targetTechType, Action callback, string tooltip, Predicate condition) + { + string languageLine = $"MiddleClickAction_{targetTechType.AsString()}"; + LanguageHandler.SetLanguageLine(languageLine, tooltip); + + condition = condition ?? ((item) => true); + ItemActionPatcher.MiddleClickActions.Add(targetTechType, new ItemActionPatcher.CustomItemAction(callback, languageLine, condition)); + } + + #region Static Methods + + /// + /// Registers a custom left click action for a + /// + /// The to which the left click action will be assigned + /// The method which will be called when a matching with the specified was left-clicked + /// The secondary tooltip which will appear in the description of the item + /// The condition which must return for the action to be called when the item is clickedIf ommited, the action will always be called + public static void RegisterLeftClickAction(TechType targetTechType, Action callback, string tooltip, Predicate condition = null) + { + Main.RegisterLeftClickAction(targetTechType, callback, tooltip, condition); + } + + /// + /// Registers a custom middle click action for a + /// + /// The which the middle click action will be assigned + /// The method which will be called when a matching with the specified was middle-clicked + /// The secondary tooltip which will appear in the description of the item + /// The condition which must return for the action to be called when the item is clickedIf ommited, the action will always be called + public static void RegisterMiddleClickAction(TechType targetTechType, Action callback, string tooltip, Predicate condition = null) + { + Main.RegisterMiddleClickAction(targetTechType, callback, tooltip, condition); + } + + #endregion + } +} diff --git a/SMLHelper/Handlers/KnownTechHandler.cs b/SMLHelper/Handlers/KnownTechHandler.cs new file mode 100644 index 00000000..060c11be --- /dev/null +++ b/SMLHelper/Handlers/KnownTechHandler.cs @@ -0,0 +1,173 @@ +namespace SMLHelper.V2.Handlers +{ + using Interfaces; + using Patchers; + using System.Collections.Generic; + using UnityEngine; + + /// + /// A handler class for configuring custom unlocking conditions for item blueprints. + /// + public class KnownTechHandler : IKnownTechHandler + { + private static readonly KnownTechHandler singleton = new KnownTechHandler(); + + /// + /// Main entry point for all calls to this handler. + /// + public static IKnownTechHandler Main => singleton; + + private KnownTechHandler() + { + // Hides constructor + } + + /// + /// Allows you to unlock a TechType on game start. + /// + /// + public static void UnlockOnStart(TechType techType) + { + Main.UnlockOnStart(techType); + } + + /// + /// Allows you to unlock a TechType on game start. + /// + /// + void IKnownTechHandler.UnlockOnStart(TechType techType) + { + KnownTechPatcher.UnlockedAtStart.Add(techType); + } + + internal void AddAnalysisTech(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, string UnlockMessage = "NotificationBlueprintUnlocked", FMODAsset UnlockSound = null, UnityEngine.Sprite UnlockSprite = null) + { + if (KnownTechPatcher.AnalysisTech.TryGetValue(techTypeToBeAnalysed, out KnownTech.AnalysisTech existingEntry)) + { + existingEntry.unlockMessage = existingEntry.unlockMessage ?? UnlockMessage; + existingEntry.unlockSound = existingEntry.unlockSound ?? UnlockSound; + existingEntry.unlockPopup = existingEntry.unlockPopup ?? UnlockSprite; + existingEntry.unlockTechTypes.AddRange(techTypesToUnlock); + } + else + { + KnownTechPatcher.AnalysisTech.Add(techTypeToBeAnalysed, new KnownTech.AnalysisTech() + { + techType = techTypeToBeAnalysed, + unlockMessage = UnlockMessage, + unlockSound = UnlockSound, + unlockPopup = UnlockSprite, + unlockTechTypes = new List(techTypesToUnlock) + }); + } + } + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The message that shows up on the right when the blueprint is unlocked. + /// The sound that plays when you unlock the blueprint. + /// The sprite that shows up when you unlock the blueprint. + public static void SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, string UnlockMessage = "NotificationBlueprintUnlocked", FMODAsset UnlockSound = null, UnityEngine.Sprite UnlockSprite = null) + { + singleton.AddAnalysisTech(techTypeToBeAnalysed, techTypesToUnlock, UnlockMessage, UnlockSound, UnlockSprite); + } + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + void IKnownTechHandler.SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock) + { + singleton.AddAnalysisTech(techTypeToBeAnalysed, techTypesToUnlock); + } + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The message that shows up on the right when the blueprint is unlocked. + void IKnownTechHandler.SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, string UnlockMessage) + { + singleton.AddAnalysisTech(techTypeToBeAnalysed, techTypesToUnlock, UnlockMessage); + } + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The sound that plays when you unlock the blueprint. + void IKnownTechHandler.SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, FMODAsset UnlockSound) + { + singleton.AddAnalysisTech(techTypeToBeAnalysed, techTypesToUnlock, "NotificationBlueprintUnlocked", UnlockSound); + } + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The sprite that shows up when you unlock the blueprint. + void IKnownTechHandler.SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, Sprite UnlockSprite) + { + singleton.AddAnalysisTech(techTypeToBeAnalysed, techTypesToUnlock, "NotificationBlueprintUnlocked", null, UnlockSprite); + } + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The message that shows up on the right when the blueprint is unlocked. + /// The sound that plays when you unlock the blueprint. + void IKnownTechHandler.SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, string UnlockMessage, FMODAsset UnlockSound) + { + singleton.AddAnalysisTech(techTypeToBeAnalysed, techTypesToUnlock, UnlockMessage, UnlockSound, null); + } + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The message that shows up on the right when the blueprint is unlocked. + /// The sprite that shows up when you unlock the blueprint. + void IKnownTechHandler.SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, string UnlockMessage, Sprite UnlockSprite) + { + singleton.AddAnalysisTech(techTypeToBeAnalysed, techTypesToUnlock, UnlockMessage, null, UnlockSprite); + } + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The sound that plays when you unlock the blueprint. + /// The sprite that shows up when you unlock the blueprint. + void IKnownTechHandler.SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, FMODAsset UnlockSound, Sprite UnlockSprite) + { + singleton.AddAnalysisTech(techTypeToBeAnalysed, techTypesToUnlock, "NotificationBlueprintUnlocked", UnlockSound, UnlockSprite); + } + } +} diff --git a/SMLHelper/Handlers/LanguageHandler.cs b/SMLHelper/Handlers/LanguageHandler.cs new file mode 100644 index 00000000..f160fb5c --- /dev/null +++ b/SMLHelper/Handlers/LanguageHandler.cs @@ -0,0 +1,96 @@ +namespace SMLHelper.V2.Handlers +{ + using Interfaces; + using Patchers; + using Utility; + + /// + /// A handler for adding custom language lines. + /// + public class LanguageHandler : ILanguageHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ILanguageHandler Main { get; } = new LanguageHandler(); + + private LanguageHandler() + { + // Hides contructor + } + + #region Static Methods + + /// + /// Allows you to define a language entry into the game. + /// + /// The ID of the entry, this is what is used to get the actual text. + /// The actual text related to the entry. + public static void SetLanguageLine(string lineId, string text) + { + Main.SetLanguageLine(lineId, text); + } + + /// + /// Allows you to set the display name of a specific . + /// + /// The whose display name that is to be changed. + /// The new display name for the chosen . + public static void SetTechTypeName(TechType techType, string text) + { + Main.SetTechTypeName(techType, text); + } + + /// + /// Allows you to set the tooltip of a specific . + /// + /// The whose tooltip that is to be changed. + /// The new tooltip for the chosen . + public static void SetTechTypeTooltip(TechType techType, string text) + { + Main.SetTechTypeTooltip(techType, text); + } + + #endregion + + #region Interface Methods + + /// + /// Allows you to define a language entry into the game. + /// + /// The ID of the entry, this is what is used to get the actual text. + /// The actual text related to the entry. + void ILanguageHandler.SetLanguageLine(string lineId, string text) + { + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + LanguagePatcher.AddCustomLanguageLine(modName, lineId, text); + } + + /// + /// Allows you to set the display name of a specific . + /// + /// The whose display name that is to be changed. + /// The new display name for the chosen . + void ILanguageHandler.SetTechTypeName(TechType techType, string text) + { + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + LanguagePatcher.AddCustomLanguageLine(modName, techType.AsString(), text); + } + + /// + /// Allows you to set the tooltip of a specific . + /// + /// The whose tooltip that is to be changed. + /// The new tooltip for the chosen . + void ILanguageHandler.SetTechTypeTooltip(TechType techType, string text) + { + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + LanguagePatcher.AddCustomLanguageLine(modName, $"Tooltip_{techType.AsString()}", text); + } + + #endregion + } +} diff --git a/SMLHelper/Handlers/LootDistributionHandler.cs b/SMLHelper/Handlers/LootDistributionHandler.cs new file mode 100644 index 00000000..362c3ca0 --- /dev/null +++ b/SMLHelper/Handlers/LootDistributionHandler.cs @@ -0,0 +1,232 @@ +namespace SMLHelper.V2.Handlers +{ + using System.Collections.Generic; + using Interfaces; + using Patchers; + using SMLHelper.V2.Assets; + using UWE; + + /// + /// A handler that manages Loot Distribution. + /// + public class LootDistributionHandler : ILootDistributionHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ILootDistributionHandler Main { get; } = new LootDistributionHandler(); + + private LootDistributionHandler() { } // Hides constructor + + #region Static Methods + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// + /// + /// + public static void AddLootDistributionData(string classId, LootDistributionData.SrcData data) + { + Main.AddLootDistributionData(classId, data); + } + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The that contains data related to the spawning of a prefab, also contains the path to the prefab. + /// The classId of the prefab. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + public static void AddLootDistributionData(string classId, LootDistributionData.SrcData data, WorldEntityInfo info) + { + Main.AddLootDistributionData(classId, data, info); + } + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The classId of the prefab. + /// The prefab path of the prefab. + /// The dictating how the prefab should spawn in the world. + public static void AddLootDistributionData(string classId, string prefabPath, IEnumerable biomeDistribution) + { + Main.AddLootDistributionData(classId, prefabPath, biomeDistribution); + } + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The classId of the prefab. + /// The prefab path of the prefab. + /// The dictating how the prefab should spawn in the world. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + public static void AddLootDistributionData(string classId, string prefabPath, IEnumerable biomeDistribution, WorldEntityInfo info) + { + Main.AddLootDistributionData(classId, prefabPath, biomeDistribution, info); + } + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The custom prefab which you want to spawn naturally in the game. + /// The dictating how the prefab should spawn in the world. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + public static void AddLootDistributionData(ModPrefab prefab, IEnumerable biomeDistribution, WorldEntityInfo info) + { + Main.AddLootDistributionData(prefab, biomeDistribution, info); + } + + /// + /// Edits Loot Distribution Data for existing/original class IDs. + /// + public static void EditLootDistributionData(string classId, BiomeType biome, float probability, int count) + { + Main.EditLootDistributionData(classId, biome, probability, count); + } + + /// + /// Edits Loot Distribution data for existing prefabs, for e.g. original game prefabs. + /// + /// The ClassID of the prefab. If unsure, use CraftData.GetClassIdForTechType. + /// The list of that contains information about how/when it should spawn in biomes. + public static void EditLootDistributionData(string classId, IEnumerable biomeDistribution) + { + Main.EditLootDistributionData(classId, biomeDistribution); + } + + #endregion + + #region Interface methods + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The that contains data related to the spawning of a prefab, also contains the path to the prefab. + /// The classId of the prefab. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + void ILootDistributionHandler.AddLootDistributionData(string classId, LootDistributionData.SrcData data, WorldEntityInfo info) + { + Main.AddLootDistributionData(classId, data); + + WorldEntityDatabaseHandler.AddCustomInfo(classId, info); + } + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The classId of the prefab. + /// The prefab path of the prefab. + /// The dictating how the prefab should spawn in the world. + void ILootDistributionHandler.AddLootDistributionData(string classId, string prefabPath, IEnumerable biomeDistribution) + { + Main.AddLootDistributionData(classId, new LootDistributionData.SrcData() + { + distribution = new List(biomeDistribution), + prefabPath = prefabPath + }); + } + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// + /// The classId of the prefab. + /// The prefab path of the prefab. + /// The dictating how the prefab should spawn in the world. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + void ILootDistributionHandler.AddLootDistributionData(string classId, string prefabPath, IEnumerable biomeDistribution, WorldEntityInfo info) + { + Main.AddLootDistributionData(classId, new LootDistributionData.SrcData() + { + distribution = new List(biomeDistribution), + prefabPath = prefabPath + }); + + WorldEntityDatabaseHandler.AddCustomInfo(classId, info); + } + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// + /// The custom prefab which you want to spawn naturally in the game. + /// The dictating how the prefab should spawn in the world. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + void ILootDistributionHandler.AddLootDistributionData(ModPrefab prefab, IEnumerable biomeDistribution, WorldEntityInfo info) + { + Main.AddLootDistributionData(prefab.ClassID, prefab.PrefabFileName, biomeDistribution); + + WorldEntityDatabaseHandler.AddCustomInfo(prefab.ClassID, info); + } + + void ILootDistributionHandler.AddLootDistributionData(string classId, LootDistributionData.SrcData data) + { + if (LootDistributionPatcher.CustomSrcData.ContainsKey(classId)) + Logger.Log($"{classId}-{data.prefabPath} already has custom distribution data. Replacing with latest.", LogLevel.Debug); + + LootDistributionPatcher.CustomSrcData[classId] = data; + } + + void ILootDistributionHandler.EditLootDistributionData(string classId, BiomeType biome, float probability, int count) + { + if (!LootDistributionPatcher.CustomSrcData.TryGetValue(classId, out LootDistributionData.SrcData srcData)) + { + LootDistributionPatcher.CustomSrcData[classId] = (srcData = new LootDistributionData.SrcData()); + + var biomeDistribution = new List + { + new LootDistributionData.BiomeData() + { + biome = biome, + probability = probability, + count = count + } + }; + + srcData.distribution = biomeDistribution; + + return; + } + + for (int i = 0; i < srcData.distribution.Count; i++) + { + LootDistributionData.BiomeData distribution = srcData.distribution[i]; + + if (distribution.biome == biome) + { + distribution.count = count; + distribution.probability = probability; + + return; + } + } + + // If we reached this point, that means the srcData is present, but the biome in the distribution is not. + // Lets add it manually. + srcData.distribution.Add(new LootDistributionData.BiomeData() + { + biome = biome, + probability = probability, + count = count + }); + } + + /// + /// Edits Loot Distribution data for existing prefabs, for e.g. original game prefabs. + /// + /// The ClassID of the prefab. If unsure, use CraftData.GetClassIdForTechType. + /// The list of that contains information about how/when it should spawn in biomes. + void ILootDistributionHandler.EditLootDistributionData(string classId, IEnumerable biomeDistribution) + { + foreach (LootDistributionData.BiomeData distribution in biomeDistribution) + { + Main.EditLootDistributionData(classId, distribution.biome, distribution.probability, distribution.count); + } + } + + #endregion + } +} diff --git a/SMLHelper/Handlers/OptionsPanelHandler.cs b/SMLHelper/Handlers/OptionsPanelHandler.cs new file mode 100644 index 00000000..80331d3e --- /dev/null +++ b/SMLHelper/Handlers/OptionsPanelHandler.cs @@ -0,0 +1,82 @@ +namespace SMLHelper.V2.Handlers +{ + using Options; + using Options.Attributes; + using Patchers; + using Interfaces; + using Json; + using System.Reflection; + + /// + /// A handler class for registering your custom in-game mod options. + /// + public class OptionsPanelHandler : IOptionsPanelHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IOptionsPanelHandler Main { get; } = new OptionsPanelHandler(); + + private OptionsPanelHandler() + { + // Hide constructor + } + + /// + /// Registers your mod options to the in-game menu. + /// + /// The mod options. Create a new child class inheriting from this one + /// and add your options to it. + /// + public static void RegisterModOptions(ModOptions options) + { + Main.RegisterModOptions(options); + } + + /// + /// Registers your mod options to the in-game menu. + /// + /// The mod options. Create a new child class inheriting from this one + /// and add your options to it. + /// + void IOptionsPanelHandler.RegisterModOptions(ModOptions options) + { + OptionsPanelPatcher.modOptions.Add(options.Name, options); + } + + /// + /// Generates an options menu based on the attributes and members declared in the + /// and registers it to the in-game menu. + /// + /// A class derived from to generate the options menu from. + /// An instance of the : with values loaded + /// from the config file on disk. + public static T RegisterModOptions() where T : ConfigFile, new() + => Main.RegisterModOptions(); + + /// + /// Generates an options menu based on the attributes and members declared in the + /// and registers it to the in-game menu. + /// + /// A class derived from to generate the options menu from. + /// An instance of the : with values loaded + /// from the config file on disk. + T IOptionsPanelHandler.RegisterModOptions() + { + var optionsMenuBuilder = new OptionsMenuBuilder(); + RegisterModOptions(optionsMenuBuilder); + optionsMenuBuilder.ConfigFileMetadata.Registered = true; + + var menuAttribute = typeof(T).GetCustomAttribute(true) + ?? new MenuAttribute(optionsMenuBuilder.Name); + + if (menuAttribute.SaveOn.HasFlag(MenuAttribute.SaveEvents.SaveGame)) + IngameMenuHandler.RegisterOnSaveEvent(() => optionsMenuBuilder.ConfigFileMetadata.Config.Save()); + + if (menuAttribute.SaveOn.HasFlag(MenuAttribute.SaveEvents.QuitGame)) + IngameMenuHandler.RegisterOnQuitEvent(() => optionsMenuBuilder.ConfigFileMetadata.Config.Save()); + + return optionsMenuBuilder.ConfigFileMetadata.Config; + } + } +} diff --git a/SMLHelper/Handlers/PDAEncyclopediaHandler.cs b/SMLHelper/Handlers/PDAEncyclopediaHandler.cs new file mode 100644 index 00000000..5be808b6 --- /dev/null +++ b/SMLHelper/Handlers/PDAEncyclopediaHandler.cs @@ -0,0 +1,38 @@ +namespace SMLHelper.V2.Handlers +{ + using Interfaces; + using Patchers; + + /// + /// Handles Encyclopedia. + /// + public class PDAEncyclopediaHandler : IPDAEncyclopediaHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IPDAEncyclopediaHandler Main { get; } = new PDAEncyclopediaHandler(); + + private PDAEncyclopediaHandler() + { + // Hide constructor + } + + void IPDAEncyclopediaHandler.AddCustomEntry(PDAEncyclopedia.EntryData entry) + { + if (PDAEncyclopediaPatcher.CustomEntryData.ContainsKey(entry.key)) + Logger.Log($"{entry.key} already has custom PDAEncyclopedia.EntryData. Replacing with latest.", LogLevel.Debug); + + PDAEncyclopediaPatcher.CustomEntryData[entry.key] = entry; + } + + /// + /// Adds custom entry. + /// + /// The entry. + public static void AddCustomEntry(PDAEncyclopedia.EntryData entry) + { + Main.AddCustomEntry(entry); + } + } +} diff --git a/SMLHelper/Handlers/PDAHandler.cs b/SMLHelper/Handlers/PDAHandler.cs new file mode 100644 index 00000000..78ed4efe --- /dev/null +++ b/SMLHelper/Handlers/PDAHandler.cs @@ -0,0 +1,115 @@ +namespace SMLHelper.V2.Handlers +{ + using Interfaces; + using Patchers; + + /// + /// A handler class for various scanner related data. + /// + public class PDAHandler : IPDAHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IPDAHandler Main { get; } = new PDAHandler(); + + private PDAHandler() + { + // Hide constructor + } + + /// + /// Edits how many fragments must be scanned before unlocking the techtype's blueprint. + /// + /// Can be either techtype of the fragment or the crafted item. + /// The number of fragments to scan. + void IPDAHandler.EditFragmentsToScan(TechType techType, int fragmentCount) + { + if (fragmentCount <= 0) + { + fragmentCount = 1; + } + + PDAPatcher.FragmentCount[techType] = fragmentCount; + } + + /// + /// Edits the time it takes to finish scanning a fragment. + /// + /// Can be either techtype of the fragment or the crafted item. + /// The relative time spent on scanning. Default value is 1. + void IPDAHandler.EditFragmentScanTime(TechType techType, float scanTime) + { + if (scanTime <= 0f) + { + scanTime = 1f; + } + + PDAPatcher.FragmentScanTime[techType] = scanTime; + } + + /// + /// Adds in a custom . ***Cannot be used to Change the values of a techtype that has data already!*** + /// + /// The of the entry. Must be populated when passed in. + void IPDAHandler.AddCustomScannerEntry(PDAScanner.EntryData entryData) + { + if (PDAPatcher.CustomEntryData.ContainsKey(entryData.key)) + Logger.Log($"{entryData.key} already has custom PDAScanner.EntryData. Replacing with latest.", LogLevel.Debug); + + PDAPatcher.CustomEntryData[entryData.key] = entryData; + } + + /// + /// Edits how many fragments must be scanned before unlocking the techtype's blueprint. + /// + /// Can be either techtype of the fragment or the crafted item. + /// The number of fragments to scan. + public static void EditFragmentsToScan(TechType techType, int fragmentCount) + { + Main.EditFragmentsToScan(techType, fragmentCount); + } + + /// + /// Edits the time it takes to finish scanning a fragment. + /// + /// Can be either techtype of the fragment or the crafted item. + /// The relative time spent on scanning. Default value is 1. + public static void EditFragmentScanTime(TechType techType, float scanTime) + { + Main.EditFragmentScanTime(techType, scanTime); + } + + /// + /// Adds in a custom . + /// + /// The of the entry. Must be populated when passed in. + public static void AddCustomScannerEntry(PDAScanner.EntryData entryData) + { + Main.AddCustomScannerEntry(entryData); + } + + /// + /// Adds in a custom . + /// + /// The scanned object's . In case of fragments, the fragment is the key. + /// The when unlocked when scanned. In case of fragments, this is the actual that unlocks when all fragments are scanned. + /// Whether the is a fragment or not. + /// The total amount of objects of that need to be scanned to unlock the and . + /// The amount of time it takes to finish one scan. In seconds. + /// Whether the object should be destroyed after the scan is finished. + /// The key to the encyclopedia entry. + public static void AddCustomScannerEntry(TechType key, TechType blueprint, bool isFragment, string encyclopediaKey, int totalFragmentsRequired = 2, float scanTime = 2f, bool destroyAfterScan = true) + { + Main.AddCustomScannerEntry(new PDAScanner.EntryData() + { + key = key, + blueprint = blueprint, + isFragment = isFragment, + totalFragments = totalFragmentsRequired, + scanTime = scanTime, + destroyAfterScan = destroyAfterScan + }); + } + } +} diff --git a/SMLHelper/Handlers/PingHandler.cs b/SMLHelper/Handlers/PingHandler.cs new file mode 100644 index 00000000..2801ca2d --- /dev/null +++ b/SMLHelper/Handlers/PingHandler.cs @@ -0,0 +1,79 @@ +namespace SMLHelper.V2.Handlers +{ + using Patchers; + using Interfaces; +#if SUBNAUTICA + using Sprite = Atlas.Sprite; + using SMLHelper.V2.Patchers.EnumPatching; +#elif BELOWZERO + using Sprite = UnityEngine.Sprite; + using SMLHelper.V2.Patchers.EnumPatching; +#endif + + /// + /// A handler related to PingTypes + /// + public class PingHandler : IPingHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IPingHandler Main { get; } = new PingHandler(); + + private PingHandler() + { + } + + /// + /// Registers a ping type for use when creating a beacon + /// + /// The name of the new ping type + /// The sprite that is associated with the ping + /// The newly registered PingType + public static PingType RegisterNewPingType(string pingName, Sprite sprite) + { + return Main.RegisterNewPingType(pingName, sprite); + } + + /// + /// Safely looks for a modded ping type in the SMLHelper PingTypeCache and outputs its value when found. + /// + /// The string used to define the modded PingType + /// The PingType enum value. Defaults to when the PingType was not found. + /// True if the PingType was found; Otherwise false + public static bool TryGetModdedPingType(string pingTypeString, out PingType moddedPingType) + { + return Main.TryGetModdedPingType(pingTypeString, out moddedPingType); + } + + /// + /// Registers a ping type for use when creating a beacon + /// + /// The name of the new ping type + /// The sprite that is associated with the ping + /// The newly registered PingType + PingType IPingHandler.RegisterNewPingType(string pingName, Sprite sprite) + { + return PingTypePatcher.AddPingType(pingName, sprite); + } + + /// + /// Safely looks for a modded ping type in the SMLHelper PingTypeCache and outputs its value when found. + /// + /// The string used to define the modded PingType + /// The PingType enum value. Defaults to when the PingType was not found. + /// True if the PingType was found; Otherwise false + bool IPingHandler.TryGetModdedPingType(string pingTypeString, out PingType moddedPingType) + { + var cache = PingTypePatcher.cacheManager.RequestCacheForTypeName(pingTypeString, false); + if (cache != null) + { + moddedPingType = (PingType) cache.Index; + return true; + } + + moddedPingType = PingType.None; + return false; + } + } +} diff --git a/SMLHelper/Handlers/PrefabHandler.cs b/SMLHelper/Handlers/PrefabHandler.cs new file mode 100644 index 00000000..8829125e --- /dev/null +++ b/SMLHelper/Handlers/PrefabHandler.cs @@ -0,0 +1,47 @@ +namespace SMLHelper.V2.Handlers +{ + using Assets; + using Interfaces; + + /// + /// A handler for registering Unity prefabs associated to a . + /// + public class PrefabHandler : IPrefabHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IPrefabHandler Main { get; } = new PrefabHandler(); + + private PrefabHandler() + { + // Hide constructor + } + + /// + /// Registers a ModPrefab into the game. + /// + /// The mod prefab to register. Create a child class inheriting off this one and configure as needed. + /// + void IPrefabHandler.RegisterPrefab(ModPrefab prefab) + { + foreach (ModPrefab modPrefab in ModPrefab.Prefabs) + { + if (modPrefab.TechType == prefab.TechType || modPrefab.ClassID == prefab.ClassID || modPrefab.PrefabFileName == prefab.PrefabFileName) + return; + } + + ModPrefab.Add(prefab); + } + + /// + /// Registers a ModPrefab into the game. + /// + /// The mod prefab to register. Create a child class inheriting off this one and configure as needed. + /// + public static void RegisterPrefab(ModPrefab prefab) + { + Main.RegisterPrefab(prefab); + } + } +} diff --git a/SMLHelper/Handlers/SaveDataHandler.cs b/SMLHelper/Handlers/SaveDataHandler.cs new file mode 100644 index 00000000..d8d5c557 --- /dev/null +++ b/SMLHelper/Handlers/SaveDataHandler.cs @@ -0,0 +1,31 @@ +namespace SMLHelper.V2.Handlers +{ + using Interfaces; + using Json; + + /// + /// A handler class for registering your . + /// + public class SaveDataHandler : ISaveDataHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ISaveDataHandler Main { get; } = new SaveDataHandler(); + + private SaveDataHandler() + { + // Hide Constructor + } + + T ISaveDataHandler.RegisterSaveDataCache() + { + T cache = new(); + + IngameMenuHandler.Main.RegisterOnLoadEvent(() => cache.Load()); + IngameMenuHandler.Main.RegisterOnSaveEvent(() => cache.Save()); + + return cache; + } + } +} diff --git a/SMLHelper/Handlers/SpriteHandler.cs b/SMLHelper/Handlers/SpriteHandler.cs new file mode 100644 index 00000000..436ad132 --- /dev/null +++ b/SMLHelper/Handlers/SpriteHandler.cs @@ -0,0 +1,316 @@ +namespace SMLHelper.V2.Handlers +{ + using Assets; + using Interfaces; + using UnityEngine; + using Utility; + + /// + /// A handler class for adding custom sprites into the game. + /// + public class SpriteHandler : ISpriteHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ISpriteHandler Main { get; } = new SpriteHandler(); + + private SpriteHandler() + { + // Hide constructor + } + + #region Static Methods + +#if SUBNAUTICA + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + public static void RegisterSprite(TechType type, Atlas.Sprite sprite) + { + Main.RegisterSprite(type, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The sprite to be added. + public static void RegisterSprite(SpriteManager.Group group, string id, Atlas.Sprite sprite) + { + Main.RegisterSprite(group, id, sprite); + } +#endif + /// + /// Registers a new sprite to the game. + /// + /// The sprite group this sprite will be added to. + /// The sprite internal identifier. + /// The sprite to be added. + public static void RegisterSprite(SpriteManager.Group group, string id, Sprite sprite) + { + Main.RegisterSprite(group, id, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + public static void RegisterSprite(TechType type, Sprite sprite) + { + Main.RegisterSprite(type, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The file path to image to be converted into a sprite. + /// + public static void RegisterSprite(TechType type, string filePathToImage) + { + Main.RegisterSprite(type, filePathToImage); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The file path to image to be converted into a sprite. + /// The texture format. By default, this uses . + /// https://docs.unity3d.com/ScriptReference/TextureFormat.BC7.html + /// Don't change this unless you really know what you're doing. + /// + public static void RegisterSprite(TechType type, string filePathToImage, TextureFormat format) + { + Main.RegisterSprite(type, filePathToImage, format); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The file path to image. + /// + public static void RegisterSprite(SpriteManager.Group group, string id, string filePathToImage) + { + Main.RegisterSprite(group, id, filePathToImage); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The file path to image. + /// The texture format. By default, this uses . + /// https://docs.unity3d.com/ScriptReference/TextureFormat.BC7.html + /// Don't change this unless you really know what you're doing. + /// + public static void RegisterSprite(SpriteManager.Group group, string id, string filePathToImage, TextureFormat format) + { + Main.RegisterSprite(group, id, filePathToImage, format); + } + + #endregion + + #region Interface Methods + +#if SUBNAUTICA + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + void ISpriteHandler.RegisterSprite(TechType type, Atlas.Sprite sprite) + { + ModSprite.Add(SpriteManager.Group.None, type.AsString(), sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The sprite to be added. + void ISpriteHandler.RegisterSprite(SpriteManager.Group group, string id, Atlas.Sprite sprite) + { + ModSprite.Add(group, id, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group this sprite will be added to. + /// The sprite internal identifier. + /// The sprite to be added. + void ISpriteHandler.RegisterSprite(SpriteManager.Group group, string id, Sprite sprite) + { + ModSprite.Add(group, id, new Atlas.Sprite(sprite)); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + void ISpriteHandler.RegisterSprite(TechType type, Sprite sprite) + { + ModSprite.Add(SpriteManager.Group.None, type.AsString(), new Atlas.Sprite(sprite)); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The file path to image to be converted into a sprite. + /// + void ISpriteHandler.RegisterSprite(TechType type, string filePathToImage) + { + Atlas.Sprite sprite = ImageUtils.LoadSpriteFromFile(filePathToImage, TextureFormat.BC7); + + Main.RegisterSprite(type, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The file path to image to be converted into a sprite. + /// The texture format. By default, this uses . + /// https://docs.unity3d.com/ScriptReference/TextureFormat.BC7.html + /// Don't change this unless you really know what you're doing. + /// + void ISpriteHandler.RegisterSprite(TechType type, string filePathToImage, TextureFormat format) + { + Atlas.Sprite sprite = ImageUtils.LoadSpriteFromFile(filePathToImage, format); + + Main.RegisterSprite(type, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The file path to image. + /// + void ISpriteHandler.RegisterSprite(SpriteManager.Group group, string id, string filePathToImage) + { + Atlas.Sprite sprite = ImageUtils.LoadSpriteFromFile(filePathToImage, TextureFormat.BC7); + + Main.RegisterSprite(group, id, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The file path to image. + /// The texture format. By default, this uses . + /// https://docs.unity3d.com/ScriptReference/TextureFormat.BC7.html + /// Don't change this unless you really know what you're doing. + /// + void ISpriteHandler.RegisterSprite(SpriteManager.Group group, string id, string filePathToImage, TextureFormat format) + { + Atlas.Sprite sprite = ImageUtils.LoadSpriteFromFile(filePathToImage, format); + + Main.RegisterSprite(group, id, sprite); + } + +#elif BELOWZERO + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group this sprite will be added to. + /// The sprite internal identifier. + /// The sprite to be added. + void ISpriteHandler.RegisterSprite(SpriteManager.Group group, string id, Sprite sprite) + { + ModSprite.Add(group, id, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + void ISpriteHandler.RegisterSprite(TechType type, Sprite sprite) + { + ModSprite.Add(SpriteManager.Group.None, type.AsString(), sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The file path to image to be converted into a sprite. + /// + void ISpriteHandler.RegisterSprite(TechType type, string filePathToImage) + { + Sprite sprite = ImageUtils.LoadSpriteFromFile(filePathToImage, TextureFormat.BC7); + + Main.RegisterSprite(type, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The file path to image to be converted into a sprite. + /// The texture format. By default, this uses . + /// https://docs.unity3d.com/ScriptReference/TextureFormat.BC7.html + /// Don't change this unless you really know what you're doing. + /// + void ISpriteHandler.RegisterSprite(TechType type, string filePathToImage, TextureFormat format) + { + Sprite sprite = ImageUtils.LoadSpriteFromFile(filePathToImage, format); + + Main.RegisterSprite(type, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The file path to image. + /// + void ISpriteHandler.RegisterSprite(SpriteManager.Group group, string id, string filePathToImage) + { + Sprite sprite = ImageUtils.LoadSpriteFromFile(filePathToImage, TextureFormat.BC7); + + Main.RegisterSprite(group, id, sprite); + } + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The file path to image. + /// The texture format. By default, this uses . + /// https://docs.unity3d.com/ScriptReference/TextureFormat.BC7.html + /// Don't change this unless you really know what you're doing. + /// + void ISpriteHandler.RegisterSprite(SpriteManager.Group group, string id, string filePathToImage, TextureFormat format) + { + Sprite sprite = ImageUtils.LoadSpriteFromFile(filePathToImage, format); + + Main.RegisterSprite(group, id, sprite); + } + + +#endif + #endregion + } +} diff --git a/SMLHelper/Handlers/SurvivalHandler.cs b/SMLHelper/Handlers/SurvivalHandler.cs new file mode 100644 index 00000000..c6959886 --- /dev/null +++ b/SMLHelper/Handlers/SurvivalHandler.cs @@ -0,0 +1,107 @@ +namespace SMLHelper.V2.Handlers +{ + using System; + using System.Collections.Generic; + using Patchers; + using Interfaces; + + /// + /// a common handler for uses specified to the Survival component + /// + public class SurvivalHandler : ISurvivalHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ISurvivalHandler Main { get; } = new SurvivalHandler(); + + private SurvivalHandler() + { + // Hides constructor + } + + #region Implementation Methods + /// + /// makes the item gives oxygen on use. + /// + /// the TechType that you want to make it give oxygen on use + /// the oxygen amount the item gives + /// set it to if the item is edible and has the component attached to it. + /// defaults to + /// + void ISurvivalHandler.GiveOxygenOnConsume(TechType techType, float oxygenGiven, bool isEdible) + { + if (SurvivalPatcher.CustomSurvivalInventoryAction.TryGetValue(techType, out List action)) + { + action.Add(() => { Player.main.GetComponent().AddOxygen(oxygenGiven); }); // add an action to the list + return; + } + + // if we reach to this point then the techtype doesn't exist in the dictionary so we add it + SurvivalPatcher.CustomSurvivalInventoryAction[techType] = new List() + { + () => + { + Player.main.GetComponent().AddOxygen(oxygenGiven); + } + }; + if (!isEdible) + SurvivalPatcher.InventoryUseables.Add(techType); + } + /// + /// makes the item Heal the player on consume. + /// + /// the TechType that you want it to heal back + /// amount to heal the player + /// set it to if the item is edible and has the component attached to it. + /// defaults to + /// + void ISurvivalHandler.GiveHealthOnConsume(TechType techType, float healthBack, bool isEdible) + { + if (SurvivalPatcher.CustomSurvivalInventoryAction.TryGetValue(techType, out List action)) + { + action.Add(() => { Player.main.GetComponent().AddHealth(healthBack); }); // add an action to the list + return; + } + + // if we reach to this point then the techtype doesn't exist in the dictionary so we add it + SurvivalPatcher.CustomSurvivalInventoryAction[techType] = new List() + { + () => + { + Player.main.GetComponent().AddHealth(healthBack); + } + }; + if (!isEdible) + SurvivalPatcher.InventoryUseables.Add(techType); + } + #endregion + + #region Static Methods + /// + /// makes the item gives oxygen on use. + /// + /// the TechType that you want to make it give oxygen on use + /// the oxygen amount the item gives + /// set it to if the item is edible and has the component attached to it. + /// defaults to + /// + public static void GiveOxygenOnConsume(TechType techType, float oxygenGiven, bool isEdible = false) + { + Main.GiveOxygenOnConsume(techType, oxygenGiven, isEdible); + } + /// + /// makes the item Heal the player on consume. + /// + /// the TechType that you want it to heal back + /// amount to heal the player + /// set it to if the item is edible and has the component attached to it. + /// defaults to + /// + public static void GiveHealthOnConsume(TechType techType, float healthBack, bool isEdible = false) + { + Main.GiveHealthOnConsume(techType, healthBack, isEdible); + } + #endregion + } +} diff --git a/SMLHelper/Handlers/TechCategoryHandler.cs b/SMLHelper/Handlers/TechCategoryHandler.cs new file mode 100644 index 00000000..840c3b5f --- /dev/null +++ b/SMLHelper/Handlers/TechCategoryHandler.cs @@ -0,0 +1,111 @@ +namespace SMLHelper.V2.Handlers +{ + using SMLHelper.V2.Interfaces; + using SMLHelper.V2.Patchers.EnumPatching; + using SMLHelper.V2.Utility; + using System.Collections.Generic; + + /// + /// A handler class for everything related to creating new TechCategories. + /// + /// + public class TechCategoryHandler: ITechCategoryHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ITechCategoryHandler Main { get; } = new TechCategoryHandler(); + + private TechCategoryHandler() + { + // Hide constructor + } + + /// + /// Adds a new into the game. + /// + /// The name of the TechCategory. Should not contain special characters. + /// The display name of the TechCategory. Can be anything. + /// + /// The new that is created. + /// + public TechCategory AddTechCategory(string techCatagoryName, string displayName) + { + TechCategory techCategory = TechCategoryPatcher.AddTechCategory(techCatagoryName); + + Dictionary valueToString = uGUI_BlueprintsTab.techCategoryStrings.valueToString; + valueToString[techCategory] = "TechCategory" + techCatagoryName; + + + LanguageHandler.SetLanguageLine("TechCategory" + techCatagoryName, displayName); + + return techCategory; + } + + /// + /// Safely looks for a modded category from another mod in the SMLHelper TechCategoryCache. + /// + /// The string used to define the techcategory. + /// + /// True if the item was found; Otherwise false. + /// + public bool ModdedTechCategoryExists(string techCategoryString) + { + EnumTypeCache cache = TechCategoryPatcher.cacheManager.RequestCacheForTypeName(techCategoryString, false); + + if(cache != null) // Item Found + { + return true; + } + else // Mod not present or not yet loaded + { + return false; + } + } + + /// + /// Safely looks for a modded category from another mod in the SMLHelper TechCategoryCache and outputs its value when found. + /// + /// The string used to define the techcategory. + /// The TechCategory enum value of the modded. Defaults to when the item was not found. + /// + /// True if the item was found; Otherwise false. + /// + public bool TryGetModdedTechCategory(string techCategoryString, out TechCategory modTechCategory) + { + EnumTypeCache cache = TechCategoryPatcher.cacheManager.RequestCacheForTypeName(techCategoryString, false); + + if(cache != null) // Item Found + { + modTechCategory = (TechCategory)cache.Index; + return true; + } + else // Mod not present or not yet loaded + { + modTechCategory = TechCategory.Misc; + return false; + } + } + + /// + /// Registers the TechCategory to a TechGroup in CraftData.groups. + /// + /// The tech group. + /// The tech category. + /// + public bool TryRegisterTechCategoryToTechGroup(TechGroup techGroup, TechCategory techCategory) + { + if(!CraftData.groups.TryGetValue(techGroup, out var techCategories)) + { + //Should not even really be possible but just incase. + return false; + } + + if(techCategories.ContainsKey(techCategory)) + return true; + + techCategories[techCategory] = new List(); + return true; + } + } +} diff --git a/SMLHelper/Handlers/TechGroupHandler.cs b/SMLHelper/Handlers/TechGroupHandler.cs new file mode 100644 index 00000000..023be54c --- /dev/null +++ b/SMLHelper/Handlers/TechGroupHandler.cs @@ -0,0 +1,85 @@ +namespace SMLHelper.V2.Handlers +{ + using SMLHelper.V2.Handlers; + using SMLHelper.V2.Interfaces; + using SMLHelper.V2.Patchers.EnumPatching; + using SMLHelper.V2.Utility; + + /// + /// A handler class for everything related to creating new TechGroups. + /// + public class TechGroupHandler : ITechGroupHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static ITechGroupHandler Main { get; } = new TechGroupHandler(); + + private TechGroupHandler() + { + // Hide constructor + } + + /// + /// Adds a new into the game. + /// + /// The name of the TechGroup. Should not contain special characters. + /// The display name of the TechGroup. Can be anything. + /// + /// The new that is created. + /// + public TechGroup AddTechGroup(string techGroupName, string displayName) + { + TechGroup techGroup = TechGroupPatcher.AddTechGroup(techGroupName); + + LanguageHandler.SetLanguageLine("Group" + techGroupName, displayName); + + return techGroup; + } + + /// + /// Safely looks for a modded group from another mod in the SMLHelper TechGroupCache. + /// + /// The string used to define the techgroup. + /// + /// True if the item was found; Otherwise false. + /// + public bool ModdedTechGroupExists(string techGroupString) + { + EnumTypeCache cache = TechGroupPatcher.cacheManager.RequestCacheForTypeName(techGroupString, false); + + if (cache != null) // Item Found + { + return true; + } + else // Mod not present or not yet loaded + { + return false; + } + } + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechGroupCache and outputs its value when found. + /// + /// The string used to define the techgroup. + /// The TechGroup enum value of the modded. Defaults to when the item was not found. + /// + /// True if the item was found; Otherwise false. + /// + public bool TryGetModdedTechGroup(string techGroupString, out TechGroup modTechGroup) + { + EnumTypeCache cache = TechGroupPatcher.cacheManager.RequestCacheForTypeName(techGroupString, false); + + if (cache != null) // Item Found + { + modTechGroup = (TechGroup)cache.Index; + return true; + } + else // Mod not present or not yet loaded + { + modTechGroup = TechGroup.Uncategorized; + return false; + } + } + } +} diff --git a/SMLHelper/Handlers/TechTypeHandler.cs b/SMLHelper/Handlers/TechTypeHandler.cs new file mode 100644 index 00000000..145be756 --- /dev/null +++ b/SMLHelper/Handlers/TechTypeHandler.cs @@ -0,0 +1,374 @@ +namespace SMLHelper.V2.Handlers +{ + using System.Collections.Generic; + using System.Reflection; + using Assets; + using Patchers; + using SMLHelper.V2.Interfaces; + using SMLHelper.V2.Patchers.EnumPatching; + using UnityEngine; + using Utility; + + /// + /// A handler class for everything related to creating new TechTypes. + /// + public class TechTypeHandler : ITechTypeHandlerInternal, ITechTypeHandler + { + internal static readonly Dictionary TechTypesAddedBy = new Dictionary(); + + internal static readonly ITechTypeHandlerInternal Singleton = new TechTypeHandler(); + + /// + /// Main entry point for all calls to this handler. + /// + public static ITechTypeHandler Main => Singleton; + + private TechTypeHandler() + { + // Hide constructor + } + + TechType ITechTypeHandlerInternal.AddTechType(Assembly modAssembly, string internalName, string displayName, string tooltip) + { + return Singleton.AddTechType(modAssembly, internalName, displayName, tooltip, true); + } + + TechType ITechTypeHandlerInternal.AddTechType(Assembly modAssembly, string internalName, string displayName, string tooltip, bool unlockAtStart) + { + string modName = modAssembly.GetName().Name; + + // Register the TechType. + var techType = TechTypePatcher.AddTechType(internalName); + + // Remember which Assembly added it + TechTypesAddedBy[techType] = modAssembly; + + // register Language Lines. + LanguagePatcher.AddCustomLanguageLine(modName, internalName, displayName); + LanguagePatcher.AddCustomLanguageLine(modName, "Tooltip_" + internalName, tooltip); + + Dictionary valueToString = TooltipFactory.techTypeTooltipStrings.valueToString; + valueToString[techType] = "Tooltip_" + internalName; + + // Unlock the TechType on start + if (unlockAtStart) + KnownTechPatcher.UnlockedAtStart.Add(techType); + + // Return the new TechType. + return techType; + } + + #region Static Methods + + /// + /// Adds a new into the game. This new will be unlocked at the start of a game. + /// + /// The assembly this TechType is getting added by. + /// The internal name of the TechType. Should not contain special characters + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The new that is created. + public static TechType AddTechType(Assembly addedByAssembly, string internalName, string displayName, string tooltip) => + Singleton.AddTechType(addedByAssembly, internalName, displayName, tooltip); + + /// + /// Adds a new into the game. + /// + /// The assembly this TechType is getting added by. + /// The internal name of the TechType. Should not contain special characters + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// Whether this TechType should be unlocked on game start, or not. By default, . + /// The new that is created. + public static TechType AddTechType(Assembly addedByAssembly, string internalName, string displayName, string tooltip, bool unlockAtStart) => + Singleton.AddTechType(addedByAssembly, internalName, displayName, tooltip, unlockAtStart); + + /// + /// Adds a new into the game. This new will be unlocked at the start of a game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The new that is created. + public static TechType AddTechType(string internalName, string displayName, string tooltip) + { + return Main.AddTechType(internalName, displayName, tooltip); + } + + /// + /// Adds a new into the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// Whether this TechType should be unlocked on game start, or not. By default, . + /// The new that is created. + public static TechType AddTechType(string internalName, string displayName, string tooltip, bool unlockAtStart) + { + return Main.AddTechType(internalName, displayName, tooltip, unlockAtStart); + } +#if SUBNAUTICA + /// + /// Adds a new into the game, with a sprite. This new techtype will be unlocked at the start of a the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// The new that is created. + public static TechType AddTechType(string internalName, string displayName, string tooltip, Atlas.Sprite sprite) + { + return Main.AddTechType(internalName, displayName, tooltip, sprite); + } + + /// + /// Adds a new into the game, with a sprite. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// Whether this TechType should be unlocked on game start, or not. By default, . + /// The new that is created. + public static TechType AddTechType(string internalName, string displayName, string tooltip, Atlas.Sprite sprite, bool unlockAtStart) + { + return Main.AddTechType(internalName, displayName, tooltip, sprite, unlockAtStart); + } +#endif + /// + /// Adds a new into the game, with a sprite. This new techtype will be unlocked at the start of a the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// The new that is created. + public static TechType AddTechType(string internalName, string displayName, string tooltip, Sprite sprite) + { + return Main.AddTechType(internalName, displayName, tooltip, sprite); + } + + /// + /// Adds a new into the game, with a sprite. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// Whether this TechType should be unlocked on game start, or not. By default, . + /// The new that is created. + public static TechType AddTechType(string internalName, string displayName, string tooltip, Sprite sprite, bool unlockAtStart) + { + return Main.AddTechType(internalName, displayName, tooltip, sprite, unlockAtStart); + } + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechTypeCache and outputs its value when found. + /// + /// The string used to define the modded item's new techtype. + /// The TechType enum value of the modded. Defaults to when the item was not found. + /// + /// if the item was found; Otherwise . + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + public static bool TryGetModdedTechType(string techtypeString, out TechType modTechType) + { + return Main.TryGetModdedTechType(techtypeString, out modTechType); + } + + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechTypeCache. + /// + /// The string used to define the modded item's new . + /// + /// True if the item was found; Otherwise . + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + public static bool ModdedTechTypeExists(string techtypeString) + { + return Main.ModdedTechTypeExists(techtypeString); + } + + #endregion + + #region Interface methods + + /// + /// Adds a new into the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// Whether this TechType should be unlocked on game start, or not. By default, . + /// The new that is created. + TechType ITechTypeHandler.AddTechType(string internalName, string displayName, string tooltip, bool unlockAtStart) + { + var mod = ReflectionHelper.CallingAssemblyByStackTrace(); + return Singleton.AddTechType(mod, internalName, displayName, tooltip, unlockAtStart); + } + + /// + /// Adds a new into the game. This new techtype will be unlocked at the start of a the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The new that is created. + TechType ITechTypeHandler.AddTechType(string internalName, string displayName, string tooltip) + { + return Main.AddTechType(internalName, displayName, tooltip, true); + } +#if SUBNAUTICA + /// + /// Adds a new into the game, with a sprite. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// Whether this TechType should be unlocked on game start, or not. By default, true. + /// The new that is created. + TechType ITechTypeHandler.AddTechType(string internalName, string displayName, string tooltip, Atlas.Sprite sprite, bool unlockAtStart) + { + // Register the TechType using overload. + TechType techType = Main.AddTechType(internalName, displayName, tooltip, unlockAtStart); + + // Register the Sprite + if (sprite != null) + ModSprite.Add(SpriteManager.Group.None, internalName, sprite); + + // Return the new TechType + return techType; + } + + /// + /// Adds a new into the game, with a sprite. This new techtype will be unlocked at the start of a the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// The new that is created. + TechType ITechTypeHandler.AddTechType(string internalName, string displayName, string tooltip, Atlas.Sprite sprite) + { + return Main.AddTechType(internalName, displayName, tooltip, sprite, true); + } + + /// + /// Adds a new into the game, with a sprite. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// Whether this TechType should be unlocked on game start, or not. By default, true. + /// The new that is created. + TechType ITechTypeHandler.AddTechType(string internalName, string displayName, string tooltip, Sprite sprite, bool unlockAtStart) + { + // Register the TechType using overload. + TechType techType = Main.AddTechType(internalName, displayName, tooltip, unlockAtStart); + + // Register the Sprite + if (sprite != null) + ModSprite.Add(SpriteManager.Group.None, internalName, new Atlas.Sprite(sprite)); + + // Return the new TechType + return techType; + } + +#elif BELOWZERO + + /// + /// Adds a new into the game, with a sprite. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// Whether this TechType should be unlocked on game start, or not. By default, true. + /// The new that is created. + TechType ITechTypeHandler.AddTechType(string internalName, string displayName, string tooltip, Sprite sprite, bool unlockAtStart) + { + string modName = ReflectionHelper.CallingAssemblyNameByStackTrace(); + + // Register the TechType using overload. + TechType techType = Main.AddTechType(internalName, displayName, tooltip, unlockAtStart); + + // Register the Sprite + if (sprite != null) + ModSprite.Add(SpriteManager.Group.None, internalName, sprite); + + // Return the new TechType + return techType; + } + +#endif + + /// + /// Adds a new into the game, with a sprite. This new techtype will be unlocked at the start of a the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// The new that is created. + TechType ITechTypeHandler.AddTechType(string internalName, string displayName, string tooltip, Sprite sprite) + { + return Main.AddTechType(internalName, displayName, tooltip, sprite, true); + } + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechTypeCache and outputs its value when found. + /// + /// The string used to define the modded item's new techtype. + /// The TechType enum value of the modded. Defaults to when the item was not found. + /// + /// True if the item was found; Otherwise false. + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + bool ITechTypeHandler.TryGetModdedTechType(string techtypeString, out TechType modTechType) + { + EnumTypeCache cache = TechTypePatcher.cacheManager.RequestCacheForTypeName(techtypeString, false); + + if (cache != null) // Item Found + { + modTechType = (TechType)cache.Index; + return true; + } + else // Mod not present or not yet loaded + { + modTechType = TechType.None; + return false; + } + } + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechTypeCache. + /// + /// The string used to define the modded item's new techtype. + /// + /// True if the item was found; Otherwise false. + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + bool ITechTypeHandler.ModdedTechTypeExists(string techtypeString) + { + EnumTypeCache cache = TechTypePatcher.cacheManager.RequestCacheForTypeName(techtypeString, false); + return cache != null; + } + + #endregion + } +} diff --git a/SMLHelper/Handlers/WorldEntityDatabaseHandler.cs b/SMLHelper/Handlers/WorldEntityDatabaseHandler.cs new file mode 100644 index 00000000..9cba0dca --- /dev/null +++ b/SMLHelper/Handlers/WorldEntityDatabaseHandler.cs @@ -0,0 +1,63 @@ +namespace SMLHelper.V2.Handlers +{ + using Interfaces; + using SMLHelper.V2.Patchers; + using UnityEngine; + using UWE; + + /// + /// A handler for the WorldEntityDatabase of the game. + /// + public class WorldEntityDatabaseHandler : IWorldEntityDatabaseHandler + { + /// + /// Main entry point for all calls to this handler. + /// + public static IWorldEntityDatabaseHandler Main { get; } = new WorldEntityDatabaseHandler(); + + private WorldEntityDatabaseHandler() { } // Hides constructor + + /// + /// Adds in a custom to the of the game. + /// It contains information about the entity, like its , its , etc. + /// + /// The classID of the entity whose data you are adding in. + /// The data. Data is stored in the fields of the class, so they must be populated when passed in. + public static void AddCustomInfo(string classId, WorldEntityInfo data) + { + + Main.AddCustomInfo(classId, data); + } + + /// + /// Adds in a custom to the of the game. + /// It contains information about the entity, like its , its , etc. + /// + /// The classId of the entity. + /// The of the entity. + /// Whether the prefab's Z-axis should be facing up, when spawned. + /// The of the entity. + /// The of the entity. Dictates which "slots" are suitable for this entity to spawn in. For e.g., most in-crate fragments have a slot type. + /// The scale that the entity's local scale is set to when spawned. + public static void AddCustomInfo(string classId, TechType techType, Vector3 localScale, bool prefabZUp = false, LargeWorldEntity.CellLevel cellLevel = LargeWorldEntity.CellLevel.Global, EntitySlot.Type slotType = EntitySlot.Type.Small) + { + Main.AddCustomInfo(classId, new WorldEntityInfo() + { + classId = classId, + techType = techType, + cellLevel = cellLevel, + slotType = slotType, + localScale = localScale, + prefabZUp = prefabZUp + }); + } + + void IWorldEntityDatabaseHandler.AddCustomInfo(string classId, WorldEntityInfo data) + { + if(WorldEntityDatabasePatcher.CustomWorldEntityInfos.ContainsKey(classId)) + V2.Logger.Log($"{classId}-{data.techType} already has custom WorldEntityInfo. Replacing with latest.", LogLevel.Debug); + + WorldEntityDatabasePatcher.CustomWorldEntityInfos[classId] = data; + } + } +} diff --git a/SMLHelper/Initializer.cs b/SMLHelper/Initializer.cs new file mode 100644 index 00000000..bf443925 --- /dev/null +++ b/SMLHelper/Initializer.cs @@ -0,0 +1,93 @@ +namespace SMLHelper.V2 +{ + using System; + using System.Reflection; + using HarmonyLib; + using Patchers; + using Patchers.EnumPatching; + using QModManager.API.ModLoading; + + + /// + /// WARNING: This class is for use only by QModManager. + /// + [QModCore] + public class Initializer + { + internal static readonly Harmony harmony = new Harmony("com.ahk1221.smlhelper"); + + /// + /// WARNING: This method is for use only by QModManager. + /// + [QModPrePatch] + [Obsolete("This method is for use only by QModManager.", true)] + public static void PrePatch() + { + Logger.Initialize(); +#if SUBNAUTICA + Logger.Log($"Loading v{Assembly.GetExecutingAssembly().GetName().Version} for Subnautica", LogLevel.Info); +#elif BELOWZERO + Logger.Log($"Loading v{Assembly.GetExecutingAssembly().GetName().Version} for BelowZero", LogLevel.Info); +#endif + + Logger.Debug("Loading TechType Cache"); + TechTypePatcher.cacheManager.LoadCache(); + Logger.Debug("Loading CraftTreeType Cache"); + CraftTreeTypePatcher.cacheManager.LoadCache(); + Logger.Debug("Loading PingType Cache"); + PingTypePatcher.cacheManager.LoadCache(); + + PrefabDatabasePatcher.PrePatch(harmony); + } + + /// + /// WARNING: This method is for use only by QModManager. + /// + [QModPostPatch("E3DC72597463233E62D01BD222AD0C96")] + [Obsolete("This method is for use only by QModManager.", true)] + public static void PostPatch() + { + FishPatcher.Patch(harmony); + + TechTypePatcher.Patch(); + CraftTreeTypePatcher.Patch(); + PingTypePatcher.Patch(); + TechCategoryPatcher.Patch(); + TechGroupPatcher.Patch(); + BackgroundTypePatcher.Patch(); + EquipmentTypePatcher.Patch(); + EnumPatcher.Patch(harmony); + + CraftDataPatcher.Patch(harmony); + CraftTreePatcher.Patch(harmony); + ConsoleCommandsPatcher.Patch(harmony); + LanguagePatcher.Patch(harmony); + PrefabDatabasePatcher.PostPatch(harmony); + SpritePatcher.Patch(harmony); + KnownTechPatcher.Patch(harmony); + BioReactorPatcher.Patch(); + OptionsPanelPatcher.Patch(harmony); + ItemsContainerPatcher.Patch(harmony); + PDAPatcher.Patch(harmony); + PDAEncyclopediaPatcher.Patch(harmony); + ItemActionPatcher.Patch(harmony); + LootDistributionPatcher.Patch(harmony); + WorldEntityDatabasePatcher.Patch(harmony); + LargeWorldStreamerPatcher.Patch(harmony); + IngameMenuPatcher.Patch(harmony); + TooltipPatcher.Patch(harmony); + SurvivalPatcher.Patch(harmony); + CustomSoundPatcher.Patch(harmony); + + + + Logger.Debug("Saving TechType Cache"); + TechTypePatcher.cacheManager.SaveCache(); + Logger.Debug("Saving CraftTreeType Cache"); + CraftTreeTypePatcher.cacheManager.SaveCache(); + Logger.Debug("Saving PingType Cache"); + PingTypePatcher.cacheManager.SaveCache(); + + } + } +} diff --git a/SMLHelper/Interfaces/IBackgroundTypeHandler.cs b/SMLHelper/Interfaces/IBackgroundTypeHandler.cs new file mode 100644 index 00000000..01960d4e --- /dev/null +++ b/SMLHelper/Interfaces/IBackgroundTypeHandler.cs @@ -0,0 +1,37 @@ +namespace SMLHelper.V2.Interfaces +{ +#if SUBNAUTICA + using Sprite = Atlas.Sprite; +#elif BELOWZERO + using Sprite = UnityEngine.Sprite; +#endif + + /// + /// A handler interface for everything related to creating new BackgroundTypes. + /// + public interface IBackgroundTypeHandler + { + /// + /// adds a new into the game. + /// + /// the name of the BackgroundType, should not contain special characters. + /// The sprite for this BackgroundType. + /// The new that's created. + CraftData.BackgroundType AddBackgroundType(string backgroundTypeName, Sprite backgroundSprite); + + /// + /// Safely looks for a modded Background Type from another mod in the SMLHelper BackgroundTypeCache and outputs its value when found. + /// + /// The string used to define the BackgroundType + /// The BackgroundType enum value of the modded. Defaults to when the item was not found. + /// if the item was found; otherwise . + bool TryGetModdedBackgroundType(string backgroundTypeString, out CraftData.BackgroundType modBackgroundType); + + /// + /// Safely looks for a modded Background Type from another mod in the SMLHelper BackgroundTypeCache. + /// + /// The string used to define the BackgroundType. + /// if the item was found; otherwise . + bool ModdedBackgroundTypeExists(string backgroundTypeString); + } +} diff --git a/SMLHelper/Interfaces/IBasicText.cs b/SMLHelper/Interfaces/IBasicText.cs new file mode 100644 index 00000000..8bb5a93f --- /dev/null +++ b/SMLHelper/Interfaces/IBasicText.cs @@ -0,0 +1,126 @@ +#if BELOWZERO +using Text = TMPro.TextMeshPro; +using Font = TMPro.TMP_FontAsset; +using FontStyle = TMPro.FontStyles; +#endif + +using UnityEngine; + +namespace SMLHelper.V2.Interfaces +{ + /// + /// + /// Places a simple text object on the screen and keeps it there until either hidden (or a designated fade-to-black timer has passed). + /// By default uses the same font/size/color as the "Press Any Button To Begin" message at the beginning of the game, and appears + /// centered about 1/3 down the screen, but all parameters can be reconfigured. + /// + /// + /// The idea of the defaults is that new modders don't have to bootstrap a bunch of irritating Unity stuff -- don't have to understand + /// what a "Material" is or how to make one, don't have to know to initialize a font, or even a color. Can just start adding text and + /// then can always custom and configure on further revision. + /// + /// + /// + /// SIMPLE USAGE EXAMPLE: + /// BasicText message = new BasicText(); + /// message.ShowMessage("This Message Will Fade In 10 Seconds", 10); + /// + /// COMPLEX USAGE EXAMPLE: + /// BasicText message = new BasicText(TextAnchor.UpperLeft); // Note many other properties could also be set as constructor parameters + /// message.setColor(Color.red); // Set Color + /// message.setSize(20); // Set Font Size + /// message.setLoc(200, 400); // Set x/y position (0,0 is center of screen) + /// message.setFontStyle(FontStyle.Bold); // Bold + /// message.ShowMessage("This message stays on screen until hidden"); // Display message; if fadeout seconds not specified, it just keeps showing + /// ... // other things happen, time goes by + /// message.Hide(); // Hides the message + /// + public interface IBasicText + { + /// + /// Resets to using "cloned" font style of Subnautica default + /// + void ClearAlign(); + + /// + /// Resets to using "cloned" color of Subnautica default. + /// + void ClearColor(); + + /// + /// Resets to using "cloned" font of Subnautica default. + /// + void ClearFont(); + + /// + /// Resets to using "cloned" font style of Subnautica default. + /// + void ClearFontStyle(); + + /// + /// Resets to using "cloned" size of Subnautica default. + /// + void ClearSize(); + + /// + /// Returns our current text. + /// + /// + string GetText(); + + /// + /// Hides our text item if it is displaying. + /// + void Hide(); + + /// + /// Sets the text anchor. + /// + /// The text anchor to align to + void SetAlign(TextAnchor useAlign); + + /// + /// Sets the text color + /// + /// The text color to use + void SetColor(Color useColor); + + /// + /// Sets the font + /// + /// The font to render the text as. + void SetFont(Font useFont); + + /// + /// Sets the font style. + /// + /// The text font style to use + void SetFontStyle(FontStyle useStyle); + + /// + /// Sets screen display location (position relative to the actual text is determined by the alignment) + /// + /// The x coordinate to set + /// The y coordinate to set + void SetLocation(float set_x, float set_y); + + /// + /// Sets the font size. + /// + /// The text size to use + void SetSize(int useSize); + + /// + /// Shows our text item, with no schedule fade (i.e. indefinitely) + /// + /// The text to display + void ShowMessage(string s); + + /// + /// Shows our text item, fading after a specified number of seconds (or stays on indefinitely if 0 seconds) + /// + /// The text to display + /// The duration to hold before fading + void ShowMessage(string s, float seconds); + } +} diff --git a/SMLHelper/Interfaces/IBioReactorHandler.cs b/SMLHelper/Interfaces/IBioReactorHandler.cs new file mode 100644 index 00000000..0f9bb6e6 --- /dev/null +++ b/SMLHelper/Interfaces/IBioReactorHandler.cs @@ -0,0 +1,16 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// A handler with common methods for updating BioReactor values. + /// + public interface IBioReactorHandler + { + /// + /// Allows you to specify the quantity of energy that a TechType will produce with bio reactors. + /// + /// The TechType that you want to use with bioreactors. + /// The quantity of energy that will be produced by this TechType. + /// + void SetBioReactorCharge(TechType techType, float charge); + } +} diff --git a/SMLHelper/Interfaces/IConsoleCommandHandler.cs b/SMLHelper/Interfaces/IConsoleCommandHandler.cs new file mode 100644 index 00000000..8b086fcb --- /dev/null +++ b/SMLHelper/Interfaces/IConsoleCommandHandler.cs @@ -0,0 +1,68 @@ +namespace SMLHelper.V2.Interfaces +{ + using Commands; + using System; + + /// + /// A handler class for registering your custom console commands. + /// + public interface IConsoleCommandHandler + { + /// + /// Registers your custom console command by targeting a method. + /// + /// + /// Target method must be . + /// + /// The command can take parameters and will respect optional parameters as outlined in the method's signature.
+ /// Supported parameter types: , , , , + /// .
+ /// + /// If the method has a return type, it will be printed to both the screen and the log. + ///
+ /// The case-insensitive command to register. + /// The declaring type that holds the method to call when the command is entered. + /// The name of the method to call within the declaring type when the command is entered. + /// Method must be . + /// The parameter types the method receives, for targeting overloads. + /// + /// + /// + void RegisterConsoleCommand(string command, Type declaringType, string methodName, Type[] parameters = null); + + /// + /// Registers your custom console command by passing a . + /// + /// + /// Supported parameter types: , , , , + /// . + /// + /// If the delegate has a return type, it will be printed to both the screen and the log. + /// + /// The delegate type. + /// The case-insensitive command to register. + /// The callback to handle the command. + /// + /// + /// + void RegisterConsoleCommand(string command, T callback) where T : Delegate; + + /// + /// Registers methods decorated with the + /// within the as console commands. + /// + /// + /// Target methods must be . + /// + /// Commands can take parameters and will respect optional parameters as outlined in the method's signature.
+ /// Supported parameter types: , , , , + /// .
+ /// + /// If a decorated method has a return type, it will be printed to both the screen and the log. + ///
+ /// + /// + /// + void RegisterConsoleCommands(Type type); + } +} diff --git a/SMLHelper/Interfaces/ICoordinatedSpawnHandler.cs b/SMLHelper/Interfaces/ICoordinatedSpawnHandler.cs new file mode 100644 index 00000000..56caf7c0 --- /dev/null +++ b/SMLHelper/Interfaces/ICoordinatedSpawnHandler.cs @@ -0,0 +1,38 @@ +namespace SMLHelper.V2.Interfaces +{ + using System.Collections.Generic; + using Handlers; + using UnityEngine; + + /// + /// a Handler interface that handles and registers Coordinated ( spawns). + /// + public interface ICoordinatedSpawnHandler + { + /// + /// Registers a Coordinated Spawn + /// + /// the SpawnInfo to spawn + void RegisterCoordinatedSpawn(SpawnInfo spawnInfo); + + /// + /// registers Many Coordinated Spawns. + /// + /// The SpawnInfos to spawn. + void RegisterCoordinatedSpawns(List spawnInfos); + + /// + /// Registers Multiple Coordinated spawns for one single passed TechType + /// + /// The TechType to spawn + /// the coordinates the should spawn to + void RegisterCoordinatedSpawnsForOneTechType(TechType techTypeToSpawn, List coordinatesToSpawnTo); + + /// + /// Registers Multiple Coordinated spawns with rotations for one single passed TechType + /// + /// The TechType to spawn + /// the coordinates(Key) and the rotations(Value) the should spawn to + void RegisterCoordinatedSpawnsForOneTechType(TechType techTypeToSpawn, Dictionary coordinatesAndRotationsToSpawnTo); + } +} \ No newline at end of file diff --git a/SMLHelper/Interfaces/ICraftDataHandler.cs b/SMLHelper/Interfaces/ICraftDataHandler.cs new file mode 100644 index 00000000..593047fd --- /dev/null +++ b/SMLHelper/Interfaces/ICraftDataHandler.cs @@ -0,0 +1,131 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// A handler class for adding and editing crafted and some non-crafted items. + /// + public partial interface ICraftDataHandler + { + /// + /// Allows you to edit EquipmentTypes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose EqiupmentType you want to edit. + /// The EquipmentType for that TechType. + void SetEquipmentType(TechType techType, EquipmentType equipmentType); + +#if SUBNAUTICA + /// + /// Allows you to edit QuickSlotType for TechTypes. Can be used for existing TechTypes too. + /// Careful: This has to be called after and . + /// + /// The TechType whose QuickSlotType you want to edit. + /// The QuickSlotType for that TechType. +#elif BELOWZERO + /// + /// Allows you to edit QuickSlotType for TechTypes. Can be used for existing TechTypes too. + /// Careful: This has to be called after . + /// + /// The TechType whose QuickSlotType you want to edit. + /// The QuickSlotType for that TechType. +#endif + void SetQuickSlotType(TechType techType, QuickSlotType slotType); + + /// + /// Allows you to edit harvest output, i.e. what TechType you get when you "harvest" a TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose harvest output you want to edit. + /// The harvest output for that TechType. + void SetHarvestOutput(TechType techType, TechType harvestOutput); + + /// + /// Allows you to edit how TechTypes are harvested. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose HarvestType you want to edit. + /// The HarvestType for that TechType. + void SetHarvestType(TechType techType, HarvestType harvestType); + + /// + /// Allows you to edit how much additional slices/seeds are given upon last knife hit. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose final cut bonus you want to edit. + /// The number of additional slices/seeds you'll receive on last cut. + void SetHarvestFinalCutBonus(TechType techType, int bonus); + + /// + /// Allows you to edit item sizes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose item size you want to edit. + /// The item size for that TechType. + void SetItemSize(TechType techType, Vector2int size); + + /// + /// Allows you to edit item sizes for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose item size you want to edit. + /// The width of the item + /// The height of the item + void SetItemSize(TechType techType, int x, int y); + + /// + /// Allows you to edit crafting times for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose crafting time you want to edit. + /// The crafting time, in seconds, for that TechType. + void SetCraftingTime(TechType techType, float time); + + /// + /// Allows you to edit the cooked creature list, i.e. associate the unedible TechType to the cooked TechType. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose cooked creature counterpart to edit. + /// The cooked creature counterpart for that TechType. + void SetCookedVariant(TechType uncooked, TechType cooked); + + /// + /// Allows you to edit inventory background colors for TechTypes. + /// + /// The TechType whose BackgroundType you want to edit. + /// The background color for that TechType. + /// + void SetBackgroundType(TechType techType, CraftData.BackgroundType backgroundColor); + + /// + /// Allows you to add items to the buildable list. + /// + /// The TechType which you want to add to the buildable list. + void AddBuildable(TechType techType); + + /// + /// Allows you to add items to the game's internal grouping system. + /// Required if you want to make buildable items show up in the Habitat Builder. + /// + /// The TechGroup you want to add your TechType to. + /// The TechCategory (in the TechGroup) you want to add your TechType to. + /// The TechType you want to add. + void AddToGroup(TechGroup group, TechCategory category, TechType techType); + + /// + /// Allows you to add items to the game's internal grouping system. + /// Required if you want to make buildable items show up in the Habitat Builder. + /// + /// The TechGroup you want to add your TechType to. + /// The TechCategory (in the TechGroup) you want to add your TechType to. + /// The TechType you want to add. + /// Added TechType will be added after this TechType, for sorting purposes. + void AddToGroup(TechGroup group, TechCategory category, TechType techType, TechType after); + + /// + /// Allows you to remove an existing TechType from the game's internal group system. + /// + /// The TechGroup in which the TechType is located. + /// The TechCategory in which the TechType is located. + /// The TechType which you want to remove. + void RemoveFromGroup(TechGroup group, TechCategory category, TechType techType); + } +} diff --git a/SMLHelper/Interfaces/ICraftDataHandler_BelowZero.cs b/SMLHelper/Interfaces/ICraftDataHandler_BelowZero.cs new file mode 100644 index 00000000..a3e60b35 --- /dev/null +++ b/SMLHelper/Interfaces/ICraftDataHandler_BelowZero.cs @@ -0,0 +1,84 @@ +#if BELOWZERO +namespace SMLHelper.V2.Interfaces +{ + using System.Collections.Generic; + using Crafting; + + public partial interface ICraftDataHandler + { + /// + /// Allows you to edit RecipeData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + void SetTechData(TechType techType, RecipeData techData); + + /// + /// Safely accesses the crafting data from a modded item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The RecipeData from the modded item if it exists; Otherwise, returns null. + RecipeData GetRecipeData(TechType techType); + + /// + /// Safely accesses the crafting data from a modded item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The RecipeData from the modded item if it exists; Otherwise, returns null. + RecipeData GetModdedRecipeData(TechType techType); + + /// + /// Allows you to set ingredients for a TechType crafting recipe. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose ingredient list you want to edit. + /// The collection of Ingredients for that TechType. + /// + void SetIngredients(TechType techType, ICollection ingredients); + + /// + /// Allows you to set linked items for a TechType crafting recipe. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose ingredient list you want to edit. + /// The collection of linked items for that TechType + void SetLinkedItems(TechType techType, ICollection linkedItems); + + + /// + /// Allows you to edit the Cold Resistance for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose Cold Resistance you want to edit. + /// The int value for the Cold Resistance. + void SetColdResistance(TechType techType, int resistance); + + /// + /// Sets the maximum charge. + /// + /// The TechType whose MaxCharge you want to edit. + /// The maximum charge. + void SetMaxCharge(TechType techType, float maxCharge); + + /// + /// Sets the energy cost. + /// + /// The TechType whose EnergyCost you want to edit. + /// The energy cost. + void SetEnergyCost(TechType techType, float energyCost); + + /// + /// Sets the type of the sound. + /// + /// Type of the tech. + /// Type of the sound. + void SetSoundType(TechType techType, TechData.SoundType soundType); + } +} +#endif diff --git a/SMLHelper/Interfaces/ICraftDataHandler_Subnautica.cs b/SMLHelper/Interfaces/ICraftDataHandler_Subnautica.cs new file mode 100644 index 00000000..17fb8efd --- /dev/null +++ b/SMLHelper/Interfaces/ICraftDataHandler_Subnautica.cs @@ -0,0 +1,61 @@ +#if SUBNAUTICA +namespace SMLHelper.V2.Interfaces +{ + using Crafting; + + public partial interface ICraftDataHandler + { + /// + /// Allows you to edit recipes, i.e. TechData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + void SetTechData(TechType techType, ITechData techData); + + /// + /// Allows you to edit recipes, i.e. TechData for TechTypes. + /// Can be used for existing TechTypes too. + /// + /// The TechType whose TechData you want to edit. + /// The TechData for that TechType. + /// + void SetTechData(TechType techType, TechData techData); + + /// + /// Safely accesses the crafting data from a modded item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// The ITechData from the modded item if it exists; Otherwise, returns null. + ITechData GetModdedTechData(TechType techType); + + /// + /// Safely accesses the crafting data from any item. + /// WARNING: This method is highly dependent on mod load order. + /// Make sure your mod is loading after the mod whose TechData you are trying to access. + /// + /// The TechType whose TechData you want to access. + /// Returns TechData if it exists; Otherwise, returns null. + TechData GetTechData(TechType techType); + + /// + /// Sets the eating sound for the provided TechType. + /// + /// The item being consumed during . + /// + /// The sound path. + /// + /// Value values are + /// - "event:/player/drink" + /// - "event:/player/drink_stillsuit" + /// - "event:/player/use_first_aid" + /// - "event:/player/eat" (default) + /// + /// + void SetEatingSound(TechType consumable, string soundPath); + } +} +#endif diff --git a/SMLHelper/Interfaces/ICraftTreeHandler.cs b/SMLHelper/Interfaces/ICraftTreeHandler.cs new file mode 100644 index 00000000..e834c833 --- /dev/null +++ b/SMLHelper/Interfaces/ICraftTreeHandler.cs @@ -0,0 +1,124 @@ +namespace SMLHelper.V2.Interfaces +{ + using Crafting; + using SMLHelper.V2.Handlers; + using UnityEngine; + + /// + /// A handler class for creating and editing of crafting trees. + /// + public interface ICraftTreeHandler + { + /// + /// Your first method call to start a new custom crafting tree.
+ /// Creating a new CraftTree only makes sense if you're going to use it in a new type of . + ///
+ /// The name for the new enum. + /// The new enum instance for your custom craft tree type. + /// + /// Returns the root node for your custom craft tree, as a new instance.
+ /// Build up your custom crafting tree from this root node.
+ /// This tree will be automatically patched into the game. No further calls into required. + /// For more advanced usage, you can replace the default value of with your own custom function. + ///
+ /// + /// + /// + /// + ModCraftTreeRoot CreateCustomCraftTreeAndType(string name, out CraftTree.Type craftTreeType); + + /// + /// Safely looks for a modded CraftTree Type from another mod in the SMLHelper CraftTreeTypeCache. + /// + /// The string used to define the modded item's new techtype. + /// + /// True if the craft tree was found; Otherwise false. + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + bool ModdedCraftTreeTypeExists(string craftTreeString); + + /// + /// Adds a new crafting node to the root of the specified crafting tree, at the provided tab location. + /// + /// The target craft tree to edit. + /// The item to craft. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + void AddCraftingNode(CraftTree.Type craftTree, TechType craftingItem, params string[] stepsToTab); + + /// + /// Adds a new crafting node to the root of the specified crafting tree + /// + /// The target craft tree to edit. + /// The item to craft. + void AddCraftingNode(CraftTree.Type craftTree, TechType craftingItem); + + /// + /// Adds a new tab node to the root of the specified crafting tree. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Sprite sprite); + +#if SUBNAUTICA + + /// + /// Adds a new tab node to the root of the specified crafting tree. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Atlas.Sprite sprite); + + /// + /// Adds a new tab node to the root of the specified crafting tree, at the specified tab location. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Atlas.Sprite sprite, params string[] stepsToTab); + +#endif + /// + /// Adds a new tab node to the root of the specified crafting tree, at the specified tab location. + /// + /// The target craft tree to edit. + /// The ID of the tab node. Must be unique! + /// The display name of the tab, which will show up when you hover your mouse on the tab. + /// The sprite of the tab. + /// + /// The steps to the target tab. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// Do not include "root" in this path. + /// + void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Sprite sprite, params string[] stepsToTab); + + /// + /// Removes a node at the specified node location. Can be used to remove either tabs or craft nodes. + /// If a tab node is selected, all child nodes to it will also be removed. + /// + /// The target craft tree to edit. + /// + /// The steps to the target node. + /// These must match the id value of the CraftNode in the crafting tree you're targeting. + /// This means matching the id of the crafted item or the id of the tab name. + /// Do not include "root" in this path. + /// + void RemoveNode(CraftTree.Type craftTree, params string[] stepsToNode); + } +} diff --git a/SMLHelper/Interfaces/ICustomSoundHandler.cs b/SMLHelper/Interfaces/ICustomSoundHandler.cs new file mode 100644 index 00000000..a0d4ce98 --- /dev/null +++ b/SMLHelper/Interfaces/ICustomSoundHandler.cs @@ -0,0 +1,52 @@ +namespace SMLHelper.V2.Interfaces +{ + using FMOD; + using UnityEngine; + using Utility; + + /// + /// A handler class for adding and overriding Sounds. + /// + public interface ICustomSoundHandler + { + /// + /// Register a Custom sound by file path. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The file path on disk of the sound file to load + /// The sound channel to get the volume to play the sound at. defaults to + /// the loaded + Sound RegisterCustomSound(string id, string filePath, SoundChannel soundChannel = SoundChannel.Master); + + /// + /// Register a custom sound by an instance. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The AudioClip to register. + /// The sound channel to get the volume to play the sound at. defaults to + /// the registered. + Sound RegisterCustomSound(string id, AudioClip audio, SoundChannel soundChannel = SoundChannel.Master); + + /// + /// Register a Custom sound that has been loaded using AudioUtils. Some vanilla game sounds can be overridden by matching the id to the . + /// + /// The Id of your custom sound which is used when checking which sounds to play. + /// The pre loaded sound + /// The sound channel to get the volume to play the sound at. + void RegisterCustomSound(string id, Sound sound, SoundChannel soundChannel = SoundChannel.Master); + + /// + /// Try to find and play a custom that has been registered. + /// + /// The Id of the custom sound + void TryPlayCustomSound(string id); + + /// + /// Try to get a registered custom . + /// + /// The Id of the custom sound + /// Outputs the if found and null if not found. + /// true or false depending on if the id was found + bool TryGetCustomSound(string id, out Sound sound); + } +} \ No newline at end of file diff --git a/SMLHelper/Interfaces/IEquipmentHandler.cs b/SMLHelper/Interfaces/IEquipmentHandler.cs new file mode 100644 index 00000000..aba369d7 --- /dev/null +++ b/SMLHelper/Interfaces/IEquipmentHandler.cs @@ -0,0 +1,30 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// A handler related to EquipmentTypes + /// + public interface IEquipmentHandler + { + /// + /// Registers an equipment type for use when creating a equipment + /// + /// The name of the new equipment type + /// The newly registered EquipmentType + EquipmentType AddEquipmentType(string equipmentName); + + /// + /// Safely looks for a modded equipment type in the SMLHelper EquipmentTypeCache and outputs its value when found. + /// + /// The string used to define the modded EquipmentType + /// The EquipmentType enum value. Defaults to when the EquipmentType was not found. + /// True if the EquipmentType was found; Otherwise false + bool TryGetModdedEquipmentType(string equipmentTypeString, out EquipmentType moddedEquipmentType); + + /// + /// Checks for the existence of an added EquipmentType in the SMLHelper EquipmentTypeCache and outputs the result of the check + /// + /// The string used to define the modded EquipmentType + /// True if the EquipmentType was found; Otherwise false + public bool ModdedEquipmentTypeExists(string equipmentString); + } +} diff --git a/SMLHelper/Interfaces/IFishHandler.cs b/SMLHelper/Interfaces/IFishHandler.cs new file mode 100644 index 00000000..bb2dbb8a --- /dev/null +++ b/SMLHelper/Interfaces/IFishHandler.cs @@ -0,0 +1,19 @@ +namespace SMLHelper.V2.Interfaces +{ + using Assets; + using Handlers; + + /// + /// Interface for + /// Can be used for dependency injection + /// + public interface IFishHandler + { + /// + /// Registers a CustomFish object into the game + /// + /// The CustomFish that you are registering + /// The TechType created using the info from your CustomFish object + TechType RegisterFish(Fish fish); + } +} diff --git a/SMLHelper/Interfaces/IIngameMenuHandler.cs b/SMLHelper/Interfaces/IIngameMenuHandler.cs new file mode 100644 index 00000000..e10aeb62 --- /dev/null +++ b/SMLHelper/Interfaces/IIngameMenuHandler.cs @@ -0,0 +1,67 @@ +namespace SMLHelper.V2.Interfaces +{ + using System; + + /// + /// A handler class that offers simple ways to tap into functionality of the in game menu. + /// + public interface IIngameMenuHandler + { + /// + /// Registers a simple method to invoke whenever the player saves the game via the in game menu. + /// + /// The method to invoke. + void RegisterOnSaveEvent(Action onSaveAction); + + /// + /// Registers a simple method to invoke whenever the player loads a saved game via the in game menu. + /// + /// The method to invoke. + void RegisterOnLoadEvent(Action onLoadAction); + + /// + /// Registers a simple method to invoke whenever the player quits the game via the in game menu. + /// + /// The method to invoke. + void RegisterOnQuitEvent(Action onQuitAction); + + /// + /// Removes a method previously added through so it is no longer invoked when saving the game. + /// If you plan on using this, do not register an anonymous method. + /// + /// The method invoked. + void UnregisterOnSaveEvent(Action onSaveAction); + + /// + /// Removes a method previously added through so it is no longer invoked when loading the game. + /// If you plan on using this, do not register an anonymous method. + /// + /// The method invoked. + void UnregisterOnLoadEvent(Action onLoadAction); + + /// + /// Removes a method previously added through so it is no longer invoked when quiting the game. + /// If you plan on using this, do not register an anonymous method. + /// + /// The method invoked. + void UnregisterOnQuitEvent(Action onQuitAction); + + /// + /// Registers a simple method to invoke the first time the player saves the game via the in game menu. + /// + /// The method to invoke. This action will not be invoked a second time. + void RegisterOneTimeUseOnSaveEvent(Action onSaveAction); + + /// + /// Registers a simple method to invoke the first time the player loads a saved game via the in game menu. + /// + /// The method to invoke. This action will not be invoked a second time. + void RegisterOneTimeUseOnLoadEvent(Action onLoadAction); + + /// + /// Registers a simple method to invoke the first time the player quits the game via the in game menu. + /// + /// The method to invoke. This action will not be invoked a second time. + void RegisterOneTimeUseOnQuitEvent(Action onQuitAction); + } +} diff --git a/SMLHelper/Interfaces/IItemActionHandler.cs b/SMLHelper/Interfaces/IItemActionHandler.cs new file mode 100644 index 00000000..69990d08 --- /dev/null +++ b/SMLHelper/Interfaces/IItemActionHandler.cs @@ -0,0 +1,28 @@ +namespace SMLHelper.V2.Interfaces +{ + using System; + + /// + /// A handler class for registering your custom middle click actions for items + /// + public interface IItemActionHandler + { + /// + /// Registers a custom left click action for a + /// + /// The to which the left click action will be assigned + /// The method which will be called when a matching with the specified was left-clicked + /// The secondary tooltip which will appear in the description of the item + /// The condition which must return for the action to be called when the item is clickedIf ommited, the action will always be called + void RegisterLeftClickAction(TechType targetTechType, Action callback, string tooltip, Predicate condition = null); + + /// + /// Registers a custom middle click action for a + /// + /// The which the middle click action will be assigned + /// The method which will be called when a matching with the specified was middle-clicked + /// The secondary tooltip which will appear in the description of the item + /// The condition which must return for the action to be called when the item is clickedIf ommited, the action will always be called + void RegisterMiddleClickAction(TechType targetTechType, Action callback, string tooltip, Predicate condition = null); + } +} diff --git a/SMLHelper/Interfaces/IKnownTechHandler.cs b/SMLHelper/Interfaces/IKnownTechHandler.cs new file mode 100644 index 00000000..8e8f88a9 --- /dev/null +++ b/SMLHelper/Interfaces/IKnownTechHandler.cs @@ -0,0 +1,88 @@ +namespace SMLHelper.V2.Interfaces +{ + using System.Collections.Generic; + + /// + /// A handler class for configuring custom unlocking conditions for item blueprints. + /// + public interface IKnownTechHandler + { + /// + /// Allows you to unlock a TechType on game start. + /// + /// + void UnlockOnStart(TechType techType); + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + void SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock); + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The message that shows up on the right when the blueprint is unlocked. + void SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, string UnlockMessage); + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The sound that plays when you unlock the blueprint. + void SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, FMODAsset UnlockSound); + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The sprite that shows up when you unlock the blueprint. + void SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, UnityEngine.Sprite UnlockSprite); + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The message that shows up on the right when the blueprint is unlocked. + /// The sound that plays when you unlock the blueprint. + void SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, string UnlockMessage, FMODAsset UnlockSound); + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The message that shows up on the right when the blueprint is unlocked. + /// The sprite that shows up when you unlock the blueprint. + void SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, string UnlockMessage, UnityEngine.Sprite UnlockSprite); + + /// + /// Allows you to define which TechTypes are unlocked when a certain TechType is unlocked, i.e., "analysed". + /// If there is already an exisitng AnalysisTech entry for a TechType, all the TechTypes in "techTypesToUnlock" will be + /// added to the existing AnalysisTech entry unlocks. + /// + /// This TechType is the criteria for all of the "unlock TechTypes"; when this TechType is unlocked, so are all the ones in that list + /// The TechTypes that will be unlocked when "techTypeToSet" is unlocked. + /// The sound that plays when you unlock the blueprint. + /// The sprite that shows up when you unlock the blueprint. + void SetAnalysisTechEntry(TechType techTypeToBeAnalysed, IEnumerable techTypesToUnlock, FMODAsset UnlockSound, UnityEngine.Sprite UnlockSprite); + } +} diff --git a/SMLHelper/Interfaces/ILanguageHandler.cs b/SMLHelper/Interfaces/ILanguageHandler.cs new file mode 100644 index 00000000..4274a53e --- /dev/null +++ b/SMLHelper/Interfaces/ILanguageHandler.cs @@ -0,0 +1,29 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// A handler for adding custom language lines. + /// + public interface ILanguageHandler + { + /// + /// Allows you to define a language entry into the game. + /// + /// The ID of the entry, this is what is used to get the actual text. + /// The actual text related to the entry. + void SetLanguageLine(string lineId, string text); + + /// + /// Allows you to set the display name of a specific . + /// + /// The whose display name that is to be changed. + /// The new display name for the chosen . + void SetTechTypeName(TechType techType, string text); + + /// + /// Allows you to set the tooltip of a specific . + /// + /// The whose tooltip that is to be changed. + /// The new tooltip for the chosen . + void SetTechTypeTooltip(TechType techType, string text); + } +} diff --git a/SMLHelper/Interfaces/ILootDistributionHandler.cs b/SMLHelper/Interfaces/ILootDistributionHandler.cs new file mode 100644 index 00000000..d5b2de89 --- /dev/null +++ b/SMLHelper/Interfaces/ILootDistributionHandler.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using SMLHelper.V2.Assets; +using SMLHelper.V2.Handlers; +using UWE; + +namespace SMLHelper.V2.Interfaces +{ + /// + /// A handler that manages Loot Distribution (spawning of fragments, fish, etc). + /// + public interface ILootDistributionHandler + { + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// + /// + /// + void AddLootDistributionData(string classId, LootDistributionData.SrcData data); + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The that contains data related to the spawning of a prefab, also contains the path to the prefab. + /// The classId of the prefab. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + void AddLootDistributionData(string classId, LootDistributionData.SrcData data, WorldEntityInfo info); + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The classId of the prefab. + /// The prefab path of the prefab. + /// The dictating how the prefab should spawn in the world. + void AddLootDistributionData(string classId, string prefabPath, IEnumerable biomeDistribution); + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The classId of the prefab. + /// The prefab path of the prefab. + /// The dictating how the prefab should spawn in the world. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + void AddLootDistributionData(string classId, string prefabPath, IEnumerable biomeDistribution, WorldEntityInfo info); + + /// + /// Adds in a custom entry into the Loot Distribution of the game. + /// You must also add the into the using . + /// + /// The custom prefab which you want to spawn naturally in the game. + /// The dictating how the prefab should spawn in the world. + /// The WorldEntityInfo of the prefab. For more information on how to set this up, see . + void AddLootDistributionData(ModPrefab prefab, IEnumerable biomeDistribution, WorldEntityInfo info); + + /// + /// Edits Loot Distribution Data for existing/original class IDs. + /// + void EditLootDistributionData(string classId, BiomeType biome, float probability, int count); + + /// + /// Edits Loot Distribution data for existing prefabs, for e.g. original game prefabs. + /// + /// The ClassID of the prefab. If unsure, use CraftData.GetClassIdForTechType. + /// The list of that contains information about how/when it should spawn in biomes. + void EditLootDistributionData(string classId, IEnumerable biomeDistribution); + } +} diff --git a/SMLHelper/Interfaces/IModOptionAttribute.cs b/SMLHelper/Interfaces/IModOptionAttribute.cs new file mode 100644 index 00000000..d6d7edcd --- /dev/null +++ b/SMLHelper/Interfaces/IModOptionAttribute.cs @@ -0,0 +1,46 @@ +namespace SMLHelper.V2.Interfaces +{ + using Handlers; + using Json; + using Options; + using Options.Attributes; + + /// + /// Defines properties for derivatives to implement for the purpose of holding + /// metadata about fields and their generation. + /// + public interface IModOptionAttribute + { + /// + /// The label to use when displaying the field in the mod's options menu. + /// + string Label { get; set; } + + /// + /// The Id to be used for the field in the mod's option menu. If none is specified, one will be automatically generated when + /// your is registered to the . This means it will + /// change every time the game is launched, but is guaranteed to be unique. If you would like to specify an Id to use for + /// internal comparisons, you can do so here. + /// + string Id { get; set; } + + /// + /// The order in which to display fields in the mod's option menu, in ascending order. If none is specified, the order will be + /// automatically set. + /// + int Order { get; set; } + + /// + /// An optional tooltip to display for the field. + /// + string Tooltip { get; } + + /// + /// An optional id to be parsed with for the label, allowing for custom language-based strings + /// via the API. + /// + /// + /// + string LabelLanguageId { get; } + } +} diff --git a/SMLHelper/Interfaces/IModOptionEventArgs.cs b/SMLHelper/Interfaces/IModOptionEventArgs.cs new file mode 100644 index 00000000..cfe73d4b --- /dev/null +++ b/SMLHelper/Interfaces/IModOptionEventArgs.cs @@ -0,0 +1,13 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// Interface for event arguments for a . + /// + public interface IModOptionEventArgs + { + /// + /// The ID of the this event corresponds to. + /// + string Id { get; } + } +} diff --git a/SMLHelper/Interfaces/IModOptionEventAttribute.cs b/SMLHelper/Interfaces/IModOptionEventAttribute.cs new file mode 100644 index 00000000..692f03e1 --- /dev/null +++ b/SMLHelper/Interfaces/IModOptionEventAttribute.cs @@ -0,0 +1,16 @@ +namespace SMLHelper.V2.Interfaces +{ + using Options.Attributes; + + /// + /// Defines properties for derivatives to implement for the purpose + /// of holding metadata about events. + /// + public interface IModOptionEventAttribute + { + /// + /// The name of the method to invoke. + /// + string MethodName { get; } + } +} diff --git a/SMLHelper/Interfaces/IOptionsPanelHandler.cs b/SMLHelper/Interfaces/IOptionsPanelHandler.cs new file mode 100644 index 00000000..283c26c0 --- /dev/null +++ b/SMLHelper/Interfaces/IOptionsPanelHandler.cs @@ -0,0 +1,28 @@ +namespace SMLHelper.V2.Interfaces +{ + using Options; + using Json; + + /// + /// A handler class for registering your custom in-game mod options. + /// + public interface IOptionsPanelHandler + { + /// + /// Registers your mod options to the in-game menu. + /// + /// The mod options. Create a new child class inheriting from this one + /// and add your options to it. + /// + void RegisterModOptions(ModOptions options); + + /// + /// Generates an options menu based on the attributes and members declared in the + /// and registers it to the in-game menu. + /// + /// A class derived from to generate the options menu from. + /// An instance of the : with values loaded + /// from the config file on disk. + T RegisterModOptions() where T : ConfigFile, new(); + } +} diff --git a/SMLHelper/Interfaces/IPDAEncyclopediaHandler.cs b/SMLHelper/Interfaces/IPDAEncyclopediaHandler.cs new file mode 100644 index 00000000..026a822d --- /dev/null +++ b/SMLHelper/Interfaces/IPDAEncyclopediaHandler.cs @@ -0,0 +1,14 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// Handles Encyclopedia. + /// + public interface IPDAEncyclopediaHandler + { + /// + /// Adds custom entry. + /// + /// + void AddCustomEntry(PDAEncyclopedia.EntryData entry); + } +} diff --git a/SMLHelper/Interfaces/IPDAHandler.cs b/SMLHelper/Interfaces/IPDAHandler.cs new file mode 100644 index 00000000..a3d094f6 --- /dev/null +++ b/SMLHelper/Interfaces/IPDAHandler.cs @@ -0,0 +1,28 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// A handler class for various scanner related data. + /// + public interface IPDAHandler + { + /// + /// Edits how many fragments must be scanned before unlocking the techtype's blueprint. + /// + /// Can be either techtype of the fragment or the crafted item. + /// The number of fragments to scan. + void EditFragmentsToScan(TechType techType, int fragmentCount); + + /// + /// Edits the time it takes to finish scanning a fragment. + /// + /// Can be either techtype of the fragment or the crafted item. + /// The relative time spent on scanning. Default value is 1. + void EditFragmentScanTime(TechType techType, float scanTime); + + /// + /// Adds custom scanner entry. + /// + /// + void AddCustomScannerEntry(PDAScanner.EntryData entryData); + } +} diff --git a/SMLHelper/Interfaces/IPingHandler.cs b/SMLHelper/Interfaces/IPingHandler.cs new file mode 100644 index 00000000..32c46b68 --- /dev/null +++ b/SMLHelper/Interfaces/IPingHandler.cs @@ -0,0 +1,30 @@ +namespace SMLHelper.V2.Interfaces +{ +#if SUBNAUTICA + using Sprite = Atlas.Sprite; +#elif BELOWZERO + using Sprite = UnityEngine.Sprite; +#endif + + /// + /// A handler related to PingTypes + /// + public interface IPingHandler + { + /// + /// Registers a ping type for use when creating a beacon + /// + /// The name of the new ping type + /// The sprite that is associated with the ping + /// The newly registered PingType + PingType RegisterNewPingType(string pingName, Sprite sprite); + + /// + /// Safely looks for a modded ping type in the SMLHelper PingTypeCache and outputs its value when found. + /// + /// The string used to define the modded PingType + /// The PingType enum value. Defaults to when the PingType was not found. + /// True if the PingType was found; Otherwise false + bool TryGetModdedPingType(string pingTypeString, out PingType moddedPingType); + } +} diff --git a/SMLHelper/Interfaces/IPrefabHandler.cs b/SMLHelper/Interfaces/IPrefabHandler.cs new file mode 100644 index 00000000..e6b3e0bc --- /dev/null +++ b/SMLHelper/Interfaces/IPrefabHandler.cs @@ -0,0 +1,17 @@ +namespace SMLHelper.V2.Interfaces +{ + using Assets; + + /// + /// A handler for registering Unity prefabs associated to a . + /// + public interface IPrefabHandler + { + /// + /// Registers a ModPrefab into the game. + /// + /// The mod prefab to register. Create a child class inheriting off this one and configure as needed. + /// + void RegisterPrefab(ModPrefab prefab); + } +} diff --git a/SMLHelper/Interfaces/ISaveDataHandler.cs b/SMLHelper/Interfaces/ISaveDataHandler.cs new file mode 100644 index 00000000..fdbad4fd --- /dev/null +++ b/SMLHelper/Interfaces/ISaveDataHandler.cs @@ -0,0 +1,18 @@ +namespace SMLHelper.V2.Interfaces +{ + using Json; + + /// + /// A handler class for registering your . + /// + public interface ISaveDataHandler + { + /// + /// Registers your to be automatically loaded and saved whenever the game is. + /// + /// A class derived from to hold your save data. + /// An instance of the : with values loaded + /// from the json file on disk whenever a save slot is loaded. + T RegisterSaveDataCache() where T : SaveDataCache, new(); + } +} diff --git a/SMLHelper/Interfaces/ISpriteHandler.cs b/SMLHelper/Interfaces/ISpriteHandler.cs new file mode 100644 index 00000000..5f163ed8 --- /dev/null +++ b/SMLHelper/Interfaces/ISpriteHandler.cs @@ -0,0 +1,85 @@ +namespace SMLHelper.V2.Interfaces +{ + using Utility; + using UnityEngine; + + /// + /// A handler class for adding custom sprites into the game. + /// + public interface ISpriteHandler + { + +#if SUBNAUTICA + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + void RegisterSprite(TechType type, Atlas.Sprite sprite); + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The sprite to be added. + void RegisterSprite(SpriteManager.Group group, string id, Atlas.Sprite sprite); + +#endif + /// + /// Registers a new sprite to the game. + /// + /// The sprite group this sprite will be added to. + /// The sprite internal identifier. + /// The sprite to be added. + void RegisterSprite(SpriteManager.Group group, string id, Sprite sprite); + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The sprite to be added. + void RegisterSprite(TechType type, Sprite sprite); + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The file path to image to be converted into a sprite. + /// The texture format. By default, this uses . + /// https://docs.unity3d.com/ScriptReference/TextureFormat.BC7.html + /// Don't change this unless you really know what you're doing. + /// + void RegisterSprite(TechType type, string filePathToImage, TextureFormat format); + + /// + /// Registers a new sprite to the game. + /// + /// The techtype paired to this sprite. + /// The file path to image to be converted into a sprite. + /// + void RegisterSprite(TechType type, string filePathToImage); + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The file path to image. + /// The texture format. By default, this uses . + /// https://docs.unity3d.com/ScriptReference/TextureFormat.BC7.html + /// Don't change this unless you really know what you're doing. + /// + void RegisterSprite(SpriteManager.Group group, string id, string filePathToImage, TextureFormat format); + + /// + /// Registers a new sprite to the game. + /// + /// The sprite group. + /// The sprite internal identifier. + /// The file path to image. + /// + void RegisterSprite(SpriteManager.Group group, string id, string filePathToImage); + } +} diff --git a/SMLHelper/Interfaces/IStorageHelper.cs b/SMLHelper/Interfaces/IStorageHelper.cs new file mode 100644 index 00000000..319f72a3 --- /dev/null +++ b/SMLHelper/Interfaces/IStorageHelper.cs @@ -0,0 +1,72 @@ +namespace SMLHelper.V2.Utility +{ + using System.Collections.Generic; + + /// + /// A utility class that offers additional info about instances. + /// + /// + public interface IStorageHelper + { + /// + /// Using the cached container info, determines whether the specified container has room for an item of the specified size. + /// + /// The container to check. + /// The item width. + /// The item height. + /// + /// true if there is room for the item in the container,; otherwise, false. + /// + bool HasRoomForCached(ItemsContainer container, int width, int height); + + /// + /// Using the cached container info, determines whether the specified container has room for an item of the specified size. + /// + /// The container to check. + /// Size of the item. + /// + /// true if there is room for the item in the container,; otherwise, false. + /// + bool HasRoomForCached(ItemsContainer container, Vector2int itemSize); + + /// + /// Determines whether the specified container is empty. + /// + /// The items container to check. + /// + /// true if the specified container is empty; otherwise, false. + /// + bool IsEmpty(ItemsContainer container); + + /// + /// Determines whether the specified container is full. + /// + /// The items container to check. + /// + /// true if the specified container is full; otherwise, false. + /// + bool IsFull(ItemsContainer container); + + /// + /// Get the totals number of 1x1 slots in the container, as calculated by the container's width and height. + /// + /// The container. + /// The total number of slots in the container. + int GetTotalSlots(ItemsContainer container); + + /// + /// Get the inernal label for the storage container. + /// + /// The container. + /// The label used and displayed in-game for the container. + string GetStorageLabel(ItemsContainer container); + + /// + /// Gets the set of techtypes allowed in this container. This set can be altered. + /// If the set is null or empty, then all items can be added. + /// + /// The container to check. + /// The collection of techtypes allowed in the container. + HashSet GetAllowedTechTypes(ItemsContainer container); + } +} diff --git a/SMLHelper/Interfaces/ISurvivalHandler.cs b/SMLHelper/Interfaces/ISurvivalHandler.cs new file mode 100644 index 00000000..7b5fe795 --- /dev/null +++ b/SMLHelper/Interfaces/ISurvivalHandler.cs @@ -0,0 +1,27 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// a handler for common uses to the Survival component + /// + public interface ISurvivalHandler + { + /// + /// makes the item gives oxygen on use. + /// + /// the TechType that you want to make it give oxygen on use + /// the oxygen amount the item gives + /// set it to if the item is edible and has the component attached to it. + /// defaults to + /// + void GiveOxygenOnConsume(TechType techType, float oxygenGiven, bool isEdible = false); + /// + /// makes the item Heal the player on consume. + /// + /// the TechType that you want it to heal back + /// amount to heal the player + /// set it to if the item is edible and has the component attached to it. + /// defaults to + /// + void GiveHealthOnConsume(TechType techType, float healthBack, bool isEdible = false); + } +} diff --git a/SMLHelper/Interfaces/ITechCategoryHandler.cs b/SMLHelper/Interfaces/ITechCategoryHandler.cs new file mode 100644 index 00000000..ce800fd6 --- /dev/null +++ b/SMLHelper/Interfaces/ITechCategoryHandler.cs @@ -0,0 +1,43 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// A handler class for everything related to creating new TechCategorys. + /// + public interface ITechCategoryHandler + { + /// + /// Adds a new into the game. + /// + /// The name of the TechCategory. Should not contain special characters. + /// The display name of the TechCategory. Can be anything. + /// The new that is created. + TechCategory AddTechCategory(string techCatagoryName, string displayName); + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechCategoryCache and outputs its value when found. + /// + /// The string used to define the techcategory. + /// The TechCategory enum value of the modded. Defaults to when the item was not found. + /// + /// True if the item was found; Otherwise false. + /// + bool TryGetModdedTechCategory(string techCategoryString, out TechCategory modTechCategory); + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechCategoryCache. + /// + /// The string used to define the techcategory. + /// + /// True if the item was found; Otherwise false. + /// + bool ModdedTechCategoryExists(string techCategoryString); + + /// + /// Registers the TechCategory to a TechGroup. + /// + /// The tech group. + /// The tech category. + /// + bool TryRegisterTechCategoryToTechGroup(TechGroup techGroup, TechCategory techCategory); + } +} \ No newline at end of file diff --git a/SMLHelper/Interfaces/ITechGroupHandler.cs b/SMLHelper/Interfaces/ITechGroupHandler.cs new file mode 100644 index 00000000..9ed63843 --- /dev/null +++ b/SMLHelper/Interfaces/ITechGroupHandler.cs @@ -0,0 +1,42 @@ +namespace SMLHelper.V2.Interfaces +{ +#if SUBNAUTICA + using Sprite = Atlas.Sprite; +#else + using UnityEngine; +#endif + + /// + /// A handler class for everything related to creating new TechGroups. + /// + public interface ITechGroupHandler + { + /// + /// Adds a new into the game. + /// + /// The name of the TechGroup. Should not contain special characters. + /// The display name of the TechGroup. Can be anything. + /// The new that is created. + TechGroup AddTechGroup(string techGroupName, string displayName); + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechGroupCache and outputs its value when found. + /// + /// The string used to define the techgroup. + /// The TechGroup enum value of the modded. Defaults to when the item was not found. + /// + /// True if the item was found; Otherwise false. + /// + bool TryGetModdedTechGroup(string techGroupString, out TechGroup modTechGroup); + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechGroupCache. + /// + /// The string used to define the techgroup. + /// + /// True if the item was found; Otherwise false. + /// + bool ModdedTechGroupExists(string techGroupString); + + } +} \ No newline at end of file diff --git a/SMLHelper/Interfaces/ITechTypeHandler.cs b/SMLHelper/Interfaces/ITechTypeHandler.cs new file mode 100644 index 00000000..0f6e44a1 --- /dev/null +++ b/SMLHelper/Interfaces/ITechTypeHandler.cs @@ -0,0 +1,98 @@ +namespace SMLHelper.V2.Interfaces +{ + /// + /// A handler class for everything related to creating new TechTypes. + /// + public interface ITechTypeHandler + { + /// + /// Adds a new into the game. This new techtype will be unlocked at the start of a the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The new that is created. + TechType AddTechType(string internalName, string displayName, string tooltip); + + /// + /// Adds a new into the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// Whether this TechType should be unlocked on game start, or not. By default, true. + /// The new that is created. + TechType AddTechType(string internalName, string displayName, string tooltip, bool unlockAtStart); + +#if SUBNAUTICA + /// + /// Adds a new into the game, with a sprite. This new techtype will be unlocked at the start of a the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// The new that is created. + TechType AddTechType(string internalName, string displayName, string tooltip, Atlas.Sprite sprite); + + /// + /// Adds a new into the game, with a sprite. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// Whether this TechType should be unlocked on game start, or not. By default, true. + /// The new that is created. + TechType AddTechType(string internalName, string displayName, string tooltip, Atlas.Sprite sprite, bool unlockAtStart); + +#endif + /// + /// Adds a new into the game, with a sprite. This new techtype will be unlocked at the start of a the game. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// The new that is created. + TechType AddTechType(string internalName, string displayName, string tooltip, UnityEngine.Sprite sprite); + + /// + /// Adds a new into the game, with a sprite. + /// + /// The internal name of the TechType. Should not contain special characters. + /// The display name of the TechType. Can be anything. + /// The tooltip, displayed when hovered in an inventory. Can be anything. + /// The sprite that will related to this TechType. + /// Whether this TechType should be unlocked on game start, or not. By default, true. + /// The new that is created. + TechType AddTechType(string internalName, string displayName, string tooltip, UnityEngine.Sprite sprite, bool unlockAtStart); + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechTypeCache and outputs its value when found. + /// + /// The string used to define the modded item's new techtype. + /// The TechType enum value of the modded. Defaults to when the item was not found. + /// + /// True if the item was found; Otherwise false. + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + bool TryGetModdedTechType(string techtypeString, out TechType modTechType); + + /// + /// Safely looks for a modded item from another mod in the SMLHelper TechTypeCache. + /// + /// The string used to define the modded item's new techtype. + /// + /// True if the item was found; Otherwise false. + /// + /// + /// There's no guarantee in which order SMLHelper dependent mods are loaded, + /// so if two mods are added at the same time, it may take a second game load for both to be visible to each other. + /// + bool ModdedTechTypeExists(string techtypeString); + } +} diff --git a/SMLHelper/Interfaces/ITechTypeHandlerInternal.cs b/SMLHelper/Interfaces/ITechTypeHandlerInternal.cs new file mode 100644 index 00000000..e4fda442 --- /dev/null +++ b/SMLHelper/Interfaces/ITechTypeHandlerInternal.cs @@ -0,0 +1,10 @@ +using System.Reflection; + +namespace SMLHelper.V2.Interfaces +{ + internal interface ITechTypeHandlerInternal : ITechTypeHandler + { + TechType AddTechType(Assembly modAssembly, string internalName, string displayName, string tooltip); + TechType AddTechType(Assembly modAssembly, string internalName, string displayName, string tooltip, bool unlockAtStart); + } +} diff --git a/SMLHelper/Interfaces/IWorldEntityDatabaseHandler.cs b/SMLHelper/Interfaces/IWorldEntityDatabaseHandler.cs new file mode 100644 index 00000000..a615af8d --- /dev/null +++ b/SMLHelper/Interfaces/IWorldEntityDatabaseHandler.cs @@ -0,0 +1,17 @@ +using UWE; + +namespace SMLHelper.V2.Interfaces +{ + /// + /// Handles WorldEntityDatabase. + /// + public interface IWorldEntityDatabaseHandler + { + /// + /// Adds custom World Entity data to WorldEntityDatabase. + /// + /// + /// + void AddCustomInfo(string classId, WorldEntityInfo data); + } +} diff --git a/SMLHelper/Json/Attributes/FileNameAttribute.cs b/SMLHelper/Json/Attributes/FileNameAttribute.cs new file mode 100644 index 00000000..d36abe48 --- /dev/null +++ b/SMLHelper/Json/Attributes/FileNameAttribute.cs @@ -0,0 +1,25 @@ +using System; + +namespace SMLHelper.V2.Json.Attributes +{ + /// + /// Attribute used to specify a file name for use with a . + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] + public class FileNameAttribute : Attribute + { + /// + /// The filename. + /// + public string FileName { get; } + + /// + /// Used to specify the file name for a . + /// + /// + public FileNameAttribute(string fileName) + { + FileName = fileName; + } + } +} diff --git a/SMLHelper/Json/ConfigFile.cs b/SMLHelper/Json/ConfigFile.cs new file mode 100644 index 00000000..73785c3d --- /dev/null +++ b/SMLHelper/Json/ConfigFile.cs @@ -0,0 +1,174 @@ +using System; +using System.IO; +using System.Reflection; +using System.Linq; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +using Oculus.Newtonsoft.Json.Converters; +#else +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +#endif + +namespace SMLHelper.V2.Json +{ + using Converters; + using ExtensionMethods; + using Interfaces; + + /// + /// A simple implementation of for use with config files. + /// + public abstract class ConfigFile : IJsonFile + { + [JsonIgnore] + private readonly string JsonFilename; + [JsonIgnore] + private readonly string JsonPath; + + /// + /// The file path at which the JSON file is accessible for reading and writing. + /// + public string JsonFilePath => Path.Combine(JsonPath, $"{JsonFilename}.json"); + + [JsonIgnore] + private static readonly JsonConverter[] alwaysIncludedJsonConverters = new JsonConverter[] { + new KeyCodeConverter(), + new FloatConverter(), + new StringEnumConverter(), + new VersionConverter(), + new Vector2Converter(), + new Vector3Converter(), + new Vector4Converter(), + new Vector2IntConverter(), + new Vector3IntConverter(), + new QuaternionConverter() + }; + + /// + /// The s that should always be used when reading/writing JSON data. + /// + /// + public JsonConverter[] AlwaysIncludedJsonConverters => alwaysIncludedJsonConverters; + + /// + /// Creates a new instance of , parsing the filename and subfolder from a + /// if declared, or with default values otherwise. + /// + public ConfigFile() + { + if (GetType().GetCustomAttribute(true) is ConfigFileAttribute configFile) + { + JsonFilename = configFile.Filename; + JsonPath = Path.Combine( + Path.GetDirectoryName(Assembly.GetCallingAssembly().Location), + configFile.Subfolder); + } + else + { + JsonFilename = "config"; + JsonPath = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location); + } + } + + /// + /// Creates a new instance of . + /// + /// The name of the , "config" by default. + /// Optional subfolder for the . + /// + /// + /// using SMLHelper.V2.Options; + /// using UnityEngine; + /// + /// public class MyConfig : ConfigFile + /// { + /// public KeyCode ActivationKey { get; set; } = KeyCode.Escape; + /// public MyConfig() : base("options", "Config Files") { } + /// // The config file will be stored at the path "QMods\YourModName\Config Files\options.json" + /// } + /// + /// + protected ConfigFile(string fileName = "config", string subfolder = null) + { + JsonFilename = fileName; + JsonPath = Path.Combine( + Path.GetDirectoryName(Assembly.GetCallingAssembly().Location), + string.IsNullOrEmpty(subfolder) ? string.Empty : subfolder); + } + + /// + /// An event that is invoked whenever the is about to load data from disk. + /// + [JsonIgnore] + public EventHandler OnStartedLoading; + /// + /// An event that is invoked whenever the has finished loading data from disk. + /// + [JsonIgnore] + public EventHandler OnFinishedLoading; + + /// + /// An event that is invoked whenever the is about to save data to disk. + /// + [JsonIgnore] + public EventHandler OnStartedSaving; + /// + /// An event that is invoked whenever the has finished saving data to disk. + /// + [JsonIgnore] + public EventHandler OnFinishedSaving; + + /// + /// Loads the JSON properties from the file on disk into the . + /// + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// + /// + public void Load(bool createFileIfNotExist = true) + { + var e = new ConfigFileEventArgs(this); + OnStartedLoading?.Invoke(this, e); + this.LoadJson(JsonFilePath, createFileIfNotExist, AlwaysIncludedJsonConverters.Distinct().ToArray()); + OnFinishedLoading?.Invoke(this, e); + } + + /// + /// Saves the current fields and properties of the as JSON properties to the file on disk. + /// + /// + /// + public void Save() + { + var e = new ConfigFileEventArgs(this); + OnStartedSaving?.Invoke(this, e); + this.SaveJson(JsonFilePath, AlwaysIncludedJsonConverters.Distinct().ToArray()); + OnFinishedSaving?.Invoke(this, e); + } + + /// + /// Loads the JSON properties from the file on disk into the . + /// + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// Optional s to be used for serialization. + /// The will always be used, regardless of whether you pass them. + /// + /// + public void LoadWithConverters(bool createFileIfNotExist = true, params JsonConverter[] jsonConverters) + => this.LoadJson(JsonFilePath, true, + AlwaysIncludedJsonConverters.Concat(jsonConverters).Distinct().ToArray()); + + /// + /// Saves the current fields and properties of the as JSON properties to the file on disk. + /// + /// Optional s to be used for deserialization. + /// The will always be used, regardless of whether you pass them. + /// + /// + public void SaveWithConverters(params JsonConverter[] jsonConverters) + => this.SaveJson(JsonFilePath, + AlwaysIncludedJsonConverters.Concat(jsonConverters).Distinct().ToArray()); + } +} diff --git a/SMLHelper/Json/ConfigFileAttribute.cs b/SMLHelper/Json/ConfigFileAttribute.cs new file mode 100644 index 00000000..4959c3b1 --- /dev/null +++ b/SMLHelper/Json/ConfigFileAttribute.cs @@ -0,0 +1,50 @@ +namespace SMLHelper.V2.Json +{ + using System; + + /// + /// Attribute used to specify the filename and subfolder for a . + /// + /// + /// When used alongside the constructor, this attribute is ignored. + /// + /// + /// + /// using SMLHelper.V2.Json; + /// + /// [ConfigFile("options", "configs")] + /// public class Config : ConfigFile + /// { + /// public float MyFloatValue; + /// } + /// + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] + public sealed class ConfigFileAttribute : Attribute + { + /// + /// The filename to use for the . + /// + public string Filename { get; } + + /// + /// The subfolder within the mod's folder for the . + /// + public string Subfolder { get; set; } = string.Empty; + + /// + /// Used to specify the filename for the . + /// + /// + /// When used alongside the constructor, this attribute is ignored. + /// + /// The filename to use for the . + public ConfigFileAttribute(string filename = "config") + { + if (string.IsNullOrEmpty(filename)) + filename = "config"; + + Filename = filename; + } + } +} diff --git a/SMLHelper/Json/ConfigFileEventArgs.cs b/SMLHelper/Json/ConfigFileEventArgs.cs new file mode 100644 index 00000000..2dd6dfec --- /dev/null +++ b/SMLHelper/Json/ConfigFileEventArgs.cs @@ -0,0 +1,24 @@ +using System; + +namespace SMLHelper.V2.Json +{ + /// + /// Contains basic information for a event. + /// + public class ConfigFileEventArgs : EventArgs + { + /// + /// The instance of the this event pertains to. + /// + public ConfigFile Instance { get; } + + /// + /// Instantiates a new . + /// + /// The instance the event pertains to. + public ConfigFileEventArgs(ConfigFile instance) + { + Instance = instance; + } + } +} diff --git a/SMLHelper/Json/Converters/FloatConverter.cs b/SMLHelper/Json/Converters/FloatConverter.cs new file mode 100644 index 00000000..a7524170 --- /dev/null +++ b/SMLHelper/Json/Converters/FloatConverter.cs @@ -0,0 +1,93 @@ +namespace SMLHelper.V2.Json.Converters +{ + using System; + using System.Globalization; +#if SUBNAUTICA_STABLE + using Oculus.Newtonsoft.Json; +#else + using Newtonsoft.Json; +#endif + + /// + /// A for rounding floats or doubles to a given number of decimal places, + /// trimming trailing 0s. + /// + public class FloatConverter : JsonConverter + { + private readonly int DecimalPlaces = 4; + private readonly MidpointRounding Mode = MidpointRounding.AwayFromZero; + /// + /// Creates a new . + /// + /// The number of decimal places to round to, where -1 disables rounding. + /// The rounding mode to use when rounding. + /// + public FloatConverter(int decimalPlaces, MidpointRounding mode) + { + DecimalPlaces = decimalPlaces; + Mode = mode; + } + /// + /// Creates a new . + /// + /// The number of decimal places to round to, where -1 disables rounding. + public FloatConverter(int decimalPlaces) => DecimalPlaces = decimalPlaces; + /// + /// Creates a new . + /// + /// The rounding mode to use when rounding. + public FloatConverter(MidpointRounding mode) => Mode = mode; + /// + /// Creates a new . + /// + public FloatConverter() { } + + /// + /// The method for writing the data to the . + /// + /// + /// + /// + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + double d = Convert.ToDouble(value); + if (DecimalPlaces > -1) + { + writer.WriteValue(Math.Round(d, DecimalPlaces, Mode).ToString(CultureInfo.InvariantCulture.NumberFormat)); + } + else + { + writer.WriteValue(d.ToString(CultureInfo.InvariantCulture.NumberFormat)); + } + } + + /// + /// The method for reading the or data from the . + /// + /// + /// + /// + /// + /// + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + var s = (string)reader.Value; + if (objectType == typeof(float)) + { + return float.Parse(s, CultureInfo.InvariantCulture.NumberFormat); + } + else + { + return double.Parse(s, CultureInfo.InvariantCulture.NumberFormat); + } + } + + /// + /// The method for determining whether the current can be processed byt this + /// + /// + /// + /// + public override bool CanConvert(Type objectType) => objectType == typeof(float) || objectType == typeof(double); + } +} diff --git a/SMLHelper/Json/Converters/KeyCodeConverter.cs b/SMLHelper/Json/Converters/KeyCodeConverter.cs new file mode 100644 index 00000000..32de9174 --- /dev/null +++ b/SMLHelper/Json/Converters/KeyCodeConverter.cs @@ -0,0 +1,52 @@ +namespace SMLHelper.V2.Json.Converters +{ + using System; + using SMLHelper.V2.Utility; + using UnityEngine; +#if SUBNAUTICA_STABLE + using Oculus.Newtonsoft.Json; +#else + using Newtonsoft.Json; +#endif + + /// + /// A for handling s. + /// + public class KeyCodeConverter : JsonConverter + { + /// + /// The method for writing the data to the . + /// + /// + /// + /// + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var keyCode = (KeyCode)value; + writer.WriteValue(KeyCodeUtils.KeyCodeToString(keyCode)); + } + + /// + /// The method for reading the data from the . + /// + /// + /// + /// + /// + /// + public override object ReadJson(JsonReader reader, Type objectType, + object existingValue, JsonSerializer serializer) + { + var s = (string)reader.Value; + return KeyCodeUtils.StringToKeyCode(s); + } + + /// + /// The method for determining whether the current can be processed by this + /// . + /// + /// + /// + public override bool CanConvert(Type objectType) => objectType == typeof(KeyCode); + } +} diff --git a/SMLHelper/Json/Converters/QuaternionConverter.cs b/SMLHelper/Json/Converters/QuaternionConverter.cs new file mode 100644 index 00000000..81e4c3e6 --- /dev/null +++ b/SMLHelper/Json/Converters/QuaternionConverter.cs @@ -0,0 +1,56 @@ +using System; +using UnityEngine; +#if SUBNAUTICA_STABLE + using Oculus.Newtonsoft.Json; +#else +using Newtonsoft.Json; +#endif +namespace SMLHelper.V2.Json.Converters +{ + /// + /// A Quaternion json converter that simplifies the Vector3 to only x,y,z serialization. + /// + public class QuaternionConverter : JsonConverter + { + /// + /// A method that determines when this converter should process. + /// + /// the current object type + /// + public override bool CanConvert(Type objectType) + { + return objectType == typeof(Quaternion); + } + + /// + /// A method that tells Newtonsoft how to Serialize the current object. + /// + /// + /// + /// + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var quaternion = (Quaternion)value; + serializer.Serialize(writer, (QuaternionJson)quaternion); + } + + /// + /// A method that tells Newtonsoft how to Deserialize and read the current object. + /// + /// + /// + /// + /// + /// + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + return (Quaternion)serializer.Deserialize(reader); + } + } + + internal record QuaternionJson(float X, float Y, float Z, float W) + { + public static explicit operator Quaternion(QuaternionJson q) => new(q.X, q.Y, q.Z, q.W); + public static explicit operator QuaternionJson(Quaternion q) => new(q.x, q.y, q.z, q.w); + } +} diff --git a/SMLHelper/Json/Converters/Vector2Converter.cs b/SMLHelper/Json/Converters/Vector2Converter.cs new file mode 100644 index 00000000..adf6a09e --- /dev/null +++ b/SMLHelper/Json/Converters/Vector2Converter.cs @@ -0,0 +1,56 @@ +using System; +using UnityEngine; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +#else +using Newtonsoft.Json; +#endif +namespace SMLHelper.V2.Json.Converters +{ + /// + /// A Vector2 json converter that simplifies the Vector2 to only x,y serialization. + /// + public class Vector2Converter : JsonConverter + { + /// + /// A method that determines when this converter should process. + /// + /// the current object type + /// + public override bool CanConvert(Type objectType) + { + return objectType == typeof(Vector2); + } + + /// + /// A method that tells Newtonsoft how to Serialize the current object. + /// + /// + /// + /// + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var vector2 = (Vector2)value; + serializer.Serialize(writer, (Vector2Json)vector2); + } + + /// + /// A method that tells Newtonsoft how to Deserialize and read the current object. + /// + /// + /// + /// + /// + /// + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + return (Vector2)serializer.Deserialize(reader); + } + } + + internal record Vector2Json(float X, float Y) + { + public static explicit operator Vector2(Vector2Json v) => new(v.X, v.Y); + public static explicit operator Vector2Json(Vector2 v) => new(v.x, v.y); + } +} \ No newline at end of file diff --git a/SMLHelper/Json/Converters/Vector2IntConverter.cs b/SMLHelper/Json/Converters/Vector2IntConverter.cs new file mode 100644 index 00000000..849813e9 --- /dev/null +++ b/SMLHelper/Json/Converters/Vector2IntConverter.cs @@ -0,0 +1,56 @@ +using System; +using UnityEngine; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +#else +using Newtonsoft.Json; +#endif +namespace SMLHelper.V2.Json.Converters +{ + /// + /// A Vector2Int json converter that simplifies the Vector2Int to only x,y serialization. + /// + public class Vector2IntConverter : JsonConverter + { + /// + /// A method that determines when this converter should process. + /// + /// the current object type + /// + public override bool CanConvert(Type objectType) + { + return objectType == typeof(Vector2Int); + } + + /// + /// A method that tells Newtonsoft how to Serialize the current object. + /// + /// + /// + /// + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var vector2Int = (Vector2Int)value; + serializer.Serialize(writer, (Vector2IntJson)vector2Int); + } + + /// + /// A method that tells Newtonsoft how to Deserialize and read the current object. + /// + /// + /// + /// + /// + /// + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + return (Vector2Int)serializer.Deserialize(reader); + } + } + + internal record Vector2IntJson(int X, int Y) + { + public static explicit operator Vector2Int(Vector2IntJson v) => new(v.X, v.Y); + public static explicit operator Vector2IntJson(Vector2Int v) => new(v.x, v.y); + } +} \ No newline at end of file diff --git a/SMLHelper/Json/Converters/Vector3Converter.cs b/SMLHelper/Json/Converters/Vector3Converter.cs new file mode 100644 index 00000000..c68989c8 --- /dev/null +++ b/SMLHelper/Json/Converters/Vector3Converter.cs @@ -0,0 +1,56 @@ +using System; +using UnityEngine; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +#else +using Newtonsoft.Json; +#endif +namespace SMLHelper.V2.Json.Converters +{ + /// + /// A Vector3 json converter that simplifies the Vector3 to only x,y,z serialization. + /// + public class Vector3Converter : JsonConverter + { + /// + /// A method that determines when this converter should process. + /// + /// the current object type + /// + public override bool CanConvert(Type objectType) + { + return objectType == typeof(Vector3); + } + + /// + /// A method that tells Newtonsoft how to Serialize the current object. + /// + /// + /// + /// + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var vector3 = (Vector3)value; + serializer.Serialize(writer, (Vector3Json)vector3); + } + + /// + /// A method that tells Newtonsoft how to Deserialize and read the current object. + /// + /// + /// + /// + /// + /// + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + return (Vector3)serializer.Deserialize(reader); + } + } + + internal record Vector3Json(float X, float Y, float Z) + { + public static explicit operator Vector3(Vector3Json v) => new(v.X, v.Y, v.Z); + public static explicit operator Vector3Json(Vector3 v) => new(v.x, v.y, v.z); + } +} diff --git a/SMLHelper/Json/Converters/Vector3IntConverter.cs b/SMLHelper/Json/Converters/Vector3IntConverter.cs new file mode 100644 index 00000000..b052e560 --- /dev/null +++ b/SMLHelper/Json/Converters/Vector3IntConverter.cs @@ -0,0 +1,56 @@ +using System; +using UnityEngine; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +#else +using Newtonsoft.Json; +#endif +namespace SMLHelper.V2.Json.Converters +{ + /// + /// A Vector3Int json converter that simplifies the Vector3Int to only x,y,z serialization. + /// + public class Vector3IntConverter : JsonConverter + { + /// + /// A method that determines when this converter should process. + /// + /// the current object type + /// + public override bool CanConvert(Type objectType) + { + return objectType == typeof(Vector3Int); + } + + /// + /// A method that tells Newtonsoft how to Serialize the current object. + /// + /// + /// + /// + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var vector3Int = (Vector3Int)value; + serializer.Serialize(writer, (Vector3IntJson)vector3Int); + } + + /// + /// A method that tells Newtonsoft how to Deserialize and read the current object. + /// + /// + /// + /// + /// + /// + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + return (Vector3Int)serializer.Deserialize(reader); + } + } + + internal record Vector3IntJson(int X, int Y, int Z) + { + public static explicit operator Vector3Int(Vector3IntJson v) => new(v.X, v.Y, v.Z); + public static explicit operator Vector3IntJson(Vector3Int v) => new(v.x, v.y, v.z); + } +} \ No newline at end of file diff --git a/SMLHelper/Json/Converters/Vector4Converter.cs b/SMLHelper/Json/Converters/Vector4Converter.cs new file mode 100644 index 00000000..6b747cff --- /dev/null +++ b/SMLHelper/Json/Converters/Vector4Converter.cs @@ -0,0 +1,56 @@ +using System; +using UnityEngine; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +#else +using Newtonsoft.Json; +#endif +namespace SMLHelper.V2.Json.Converters +{ + /// + /// A Vector4 json converter that simplifies the Vector4 to only x,y,z,w serialization. + /// + public class Vector4Converter : JsonConverter + { + /// + /// A method that determines when this converter should process. + /// + /// the current object type + /// + public override bool CanConvert(Type objectType) + { + return objectType == typeof(Vector4); + } + + /// + /// A method that tells Newtonsoft how to Serialize the current object. + /// + /// + /// + /// + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var vector4 = (Vector4)value; + serializer.Serialize(writer, (Vector4Json)vector4); + } + + /// + /// A method that tells Newtonsoft how to Deserialize and read the current object. + /// + /// + /// + /// + /// + /// + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + return (Vector4)serializer.Deserialize(reader); + } + } + + internal record Vector4Json(float X, float Y, float Z, float W) + { + public static explicit operator Vector4(Vector4Json v) => new(v.X, v.Y, v.Z, v.W); + public static explicit operator Vector4Json(Vector4 v) => new(v.x, v.y, v.z, v.w); + } +} \ No newline at end of file diff --git a/SMLHelper/Json/ExtensionMethods/JsonExtensions.cs b/SMLHelper/Json/ExtensionMethods/JsonExtensions.cs new file mode 100644 index 00000000..b1512724 --- /dev/null +++ b/SMLHelper/Json/ExtensionMethods/JsonExtensions.cs @@ -0,0 +1,40 @@ +namespace SMLHelper.V2.Json.ExtensionMethods +{ + using SMLHelper.V2.Utility; +#if SUBNAUTICA_STABLE + using Oculus.Newtonsoft.Json; +#else + using Newtonsoft.Json; +#endif + + /// + /// Extension methods for parsing objects as JSON data. + /// + public static class JsonExtensions + { + /// + /// Loads the JSON properties from a file on disk into the . + /// + /// The type of the . + /// The object instance to load the properties into. + /// The file path to the JSON file to parse. + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// The s to be used for deserialization. + /// + public static void LoadJson(this T jsonObject, string path = null, + bool createIfNotExist = true, params JsonConverter[] jsonConverters) where T : class + => JsonUtils.Load(jsonObject, path, createIfNotExist, jsonConverters); + + /// + /// Saves the fields and properties of the as JSON properties to the file on disk. + /// + /// The type of the . + /// The object instance to save the fields and properties from. + /// The file path at which to save the JSON file. + /// The s to be used for serialization. + public static void SaveJson(this T jsonObject, string path = null, + params JsonConverter[] jsonConverters) where T : class + => JsonUtils.Save(jsonObject, path, jsonConverters); + } +} diff --git a/SMLHelper/Json/Interfaces/IJsonFile.cs b/SMLHelper/Json/Interfaces/IJsonFile.cs new file mode 100644 index 00000000..b3d4fade --- /dev/null +++ b/SMLHelper/Json/Interfaces/IJsonFile.cs @@ -0,0 +1,61 @@ +namespace SMLHelper.V2.Json.Interfaces +{ +#if SUBNAUTICA_STABLE + using Oculus.Newtonsoft.Json; +#else + using Newtonsoft.Json; +#endif + + /// + /// A simple interface for a JSON file framework. + /// + public interface IJsonFile + { + /// + /// The file path at which the JSON file is accessible for reading and writing. + /// + [JsonIgnore] + string JsonFilePath { get; } + + /// + /// The s that should always be used when reading/writing JSON data. + /// + [JsonIgnore] + JsonConverter[] AlwaysIncludedJsonConverters { get; } + + /// + /// A method for loading the JSON properties from disk. + /// + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// + /// + void Load(bool createFileIfNotExist = true); + + /// + /// A method for saving the JSON properties to disk. + /// + /// + /// + void Save(); + + /// + /// A method for loading the JSON properties from disk. + /// + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// Optional s to be used for + /// deserialization. + /// + /// + void LoadWithConverters(bool createFileIfNotExist = true, params JsonConverter[] jsonConverters); + + /// + /// A method for saving the JSON properties to disk. + /// + /// Optional s to be used for serialization. + /// + /// + void SaveWithConverters(params JsonConverter[] jsonConverters); + } +} diff --git a/SMLHelper/Json/JsonFile.cs b/SMLHelper/Json/JsonFile.cs new file mode 100644 index 00000000..59da1b13 --- /dev/null +++ b/SMLHelper/Json/JsonFile.cs @@ -0,0 +1,122 @@ +using System; +using System.Linq; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +using Oculus.Newtonsoft.Json.Converters; +#else +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +#endif + +namespace SMLHelper.V2.Json +{ + using Converters; + using ExtensionMethods; + using Interfaces; + + /// + /// A simple abstract implementation of . + /// + public abstract class JsonFile : IJsonFile + { + /// + /// The file path at which the JSON file is accessible for reading and writing. + /// + [JsonIgnore] + public abstract string JsonFilePath { get; } + + [JsonIgnore] + private static readonly JsonConverter[] alwaysIncludedJsonConverters = new JsonConverter[] { + new FloatConverter(), + new KeyCodeConverter(), + new StringEnumConverter(), + new VersionConverter(), + new Vector2Converter(), + new Vector3Converter(), + new Vector4Converter(), + new Vector2IntConverter(), + new Vector3IntConverter(), + new QuaternionConverter() + }; + + /// + /// The s that should always be used when reading/writing JSON data. + /// + /// + public virtual JsonConverter[] AlwaysIncludedJsonConverters => alwaysIncludedJsonConverters; + + /// + /// An event that is invoked whenever the is about to load data from disk. + /// + [JsonIgnore] + public EventHandler OnStartedLoading; + /// + /// An event that is invoked whenever the has finished loading data from disk. + /// + [JsonIgnore] + public EventHandler OnFinishedLoading; + + /// + /// An event that is invoked whenever the is about to save data to disk. + /// + [JsonIgnore] + public EventHandler OnStartedSaving; + /// + /// An event that is invoked whenever the has finished saving data to disk. + /// + [JsonIgnore] + public EventHandler OnFinishedSaving; + + /// + /// Loads the JSON properties from the file on disk into the . + /// + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// + /// + public virtual void Load(bool createFileIfNotExist = true) + { + var e = new JsonFileEventArgs(this); + OnStartedLoading?.Invoke(this, e); + this.LoadJson(JsonFilePath, createFileIfNotExist, AlwaysIncludedJsonConverters.Distinct().ToArray()); + OnFinishedLoading?.Invoke(this, e); + } + + /// + /// Saves the current fields and properties of the as JSON properties to the file on disk. + /// + /// + /// + public virtual void Save() + { + var e = new JsonFileEventArgs(this); + OnStartedSaving?.Invoke(this, e); + this.SaveJson(JsonFilePath, AlwaysIncludedJsonConverters.Distinct().ToArray()); + OnFinishedSaving?.Invoke(this, e); + } + + /// + /// Loads the JSON properties from the file on disk into the . + /// + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// Optional s to be used for serialization. + /// The will always be used, regardless of whether you pass them. + /// + /// + public virtual void LoadWithConverters(bool createFileIfNotExist = true, params JsonConverter[] jsonConverters) + => this.LoadJson(JsonFilePath, true, + AlwaysIncludedJsonConverters.Concat(jsonConverters).Distinct().ToArray()); + + /// + /// Saves the current fields and properties of the as JSON properties to the file on disk. + /// + /// Optional s to be used for deserialization. + /// The will always be used, regardless of whether you pass them. + /// + /// + public virtual void SaveWithConverters(params JsonConverter[] jsonConverters) + => this.SaveJson(JsonFilePath, + AlwaysIncludedJsonConverters.Concat(jsonConverters).Distinct().ToArray()); + } +} diff --git a/SMLHelper/Json/JsonFileEventArgs.cs b/SMLHelper/Json/JsonFileEventArgs.cs new file mode 100644 index 00000000..586fb74c --- /dev/null +++ b/SMLHelper/Json/JsonFileEventArgs.cs @@ -0,0 +1,24 @@ +using System; + +namespace SMLHelper.V2.Json +{ + /// + /// Contains basic information for a event. + /// + public class JsonFileEventArgs : EventArgs + { + /// + /// The instance of the this event pertains to. + /// + public JsonFile Instance { get; } + + /// + /// Instantiates a new . + /// + /// The instance the event pertains to. + public JsonFileEventArgs(JsonFile instance) + { + Instance = instance; + } + } +} diff --git a/SMLHelper/Json/SaveDataCache.cs b/SMLHelper/Json/SaveDataCache.cs new file mode 100644 index 00000000..4b2702bf --- /dev/null +++ b/SMLHelper/Json/SaveDataCache.cs @@ -0,0 +1,130 @@ +using QModManager.API; +using System; +using System.IO; +using System.Reflection; +#if SUBNAUTICA_STABLE +using Oculus.Newtonsoft.Json; +#else +using Newtonsoft.Json; +#endif + +namespace SMLHelper.V2.Json +{ + using Attributes; + using Interfaces; + + /// + /// An abstract implementation of intended for use with caching per-save data. + /// + public abstract class SaveDataCache : JsonFile + { + private string QModId { get; init; } + + private bool InGame => !string.IsNullOrWhiteSpace(SaveLoadManager.GetTemporarySavePath()); + + private string jsonFileName = null; + private string JsonFileName => jsonFileName ??= GetType().GetCustomAttribute() switch + { + FileNameAttribute fileNameAttribute => fileNameAttribute.FileName, + _ => QModId + }; + + /// + /// The file path at which the JSON file is accessible for reading and writing. + /// + public override string JsonFilePath => Path.Combine(SaveLoadManager.GetTemporarySavePath(), QModId, $"{JsonFileName}.json"); + + /// + /// Creates a new instance of , parsing the file name from + /// if declared, or with default values otherwise. + /// + public SaveDataCache() + { + QModId = QModServices.Main.FindModByAssembly(GetType().Assembly).Id; + } + + /// + /// Loads the JSON properties from the file on disk into the . + /// + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// + /// + /// Thrown when the player is not in-game. + public override void Load(bool createFileIfNotExist = true) + { + if (InGame) + { + base.Load(createFileIfNotExist); + Logger.Log($"[{QModId}] Loaded save data from {JsonFileName}.json"); + } + else + { + throw new InvalidOperationException($"[{QModId}] Cannot load save data when not in game!"); + } + } + + /// + /// Saves the current fields and properties of the as JSON properties to the file on disk. + /// + /// + /// + /// Thrown when the player is not in-game. + public override void Save() + { + if (InGame) + { + base.Save(); + Logger.Log($"[{QModId}] Saved save data to {JsonFileName}.json"); + } + else + { + throw new InvalidOperationException($"[{QModId}] Cannot save save data when not in game!"); + } + } + + /// + /// Loads the JSON properties from the file on disk into the . + /// + /// Whether a new JSON file should be created with default values if it does not + /// already exist. + /// Optional s to be used for serialization. + /// The will always be used, regardless of whether you pass them. + /// + /// + /// Thrown when the player is not in-game. + public override void LoadWithConverters(bool createFileIfNotExist = true, params JsonConverter[] jsonConverters) + { + if (InGame) + { + base.LoadWithConverters(createFileIfNotExist, jsonConverters); + Logger.Log($"[{QModId}] Loaded save data from {JsonFileName}.json"); + } + else + { + throw new InvalidOperationException($"[{QModId}] Cannot load save data when not in game!"); + } + } + + /// + /// Saves the current fields and properties of the as JSON properties to the file on disk. + /// + /// Optional s to be used for deserialization. + /// The will always be used, regardless of whether you pass them. + /// + /// + /// Thrown when the player is not in-game. + public override void SaveWithConverters(params JsonConverter[] jsonConverters) + { + if (InGame) + { + base.SaveWithConverters(jsonConverters); + Logger.Log($"[{QModId}] Saved save data to {JsonFileName}.json"); + } + else + { + throw new InvalidOperationException($"[{QModId}] Cannot save save data when not in game!"); + } + } + } +} diff --git a/SMLHelper/Logger.cs b/SMLHelper/Logger.cs new file mode 100644 index 00000000..b81819c0 --- /dev/null +++ b/SMLHelper/Logger.cs @@ -0,0 +1,109 @@ +namespace SMLHelper.V2 +{ + using System; + using System.IO; + using System.Reflection; + + internal enum LogLevel + { + Debug = 0, + Info = 1, + Warn = 2, + Error = 3, + } + + internal static class Logger + { + internal static bool Initialized = false; + + internal static bool EnableDebugging { get; private set; } + internal static void SetDebugging(bool value) + { + string configPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "EnableDebugLogs.txt"); + + File.WriteAllText(configPath, value.ToString()); + EnableDebugging = value; + } + + internal static void Initialize() + { + if (Initialized) return; + Initialized = true; + + string configPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "EnableDebugLogs.txt"); + + if (!File.Exists(configPath)) + { + File.WriteAllText(configPath, "False"); + EnableDebugging = false; + + return; + } + + string fileContents = File.ReadAllText(configPath); + + try + { + EnableDebugging = bool.Parse(fileContents); + + Log($"Enable debug logs set to: {EnableDebugging}", LogLevel.Info); + } + catch (Exception) + { + File.WriteAllText(configPath, "False"); + EnableDebugging = false; + + Log("Error reading EnableDebugLogs.txt configuration file. Defaulted to false", LogLevel.Warn); + } + } + + internal static void Debug(string text) => Log(text, LogLevel.Debug); + internal static void Info(string text) => Log(text, LogLevel.Info); + internal static void Warn(string text) => Log(text, LogLevel.Warn); + internal static void Error(string text) => Log(text, LogLevel.Error); + + internal static void Debug(string text, params object[] args) => Log(text, LogLevel.Debug, args); + internal static void Info(string text, params object[] args) => Log(text, LogLevel.Info, args); + internal static void Warn(string text, params object[] args) => Log(text, LogLevel.Warn, args); + internal static void Error(string text, params object[] args) => Log(text, LogLevel.Error, args); + + internal static void Log(string text, LogLevel level = LogLevel.Info) + { + Initialize(); + + if (level >= LogLevel.Info || EnableDebugging) + Console.WriteLine($"[SMLHelper/{level}] {text}"); + } + + internal static void Log(string text, LogLevel level = LogLevel.Info, params object[] args) + { + Initialize(); + + if (args != null && args.Length > 0) + text = string.Format(text, args); + + if (level >= LogLevel.Info || EnableDebugging) + Console.WriteLine($"[SMLHelper/{level}] {text}"); + } + + internal static void Announce(string text, LogLevel level = LogLevel.Info, bool logToFile = false) + { + Initialize(); + + ErrorMessage.AddMessage(text); + + if (logToFile) + Log(text, level); + } + + internal static void Announce(string text, LogLevel level = LogLevel.Info, bool logToFile = false, params object[] args) + { + Initialize(); + + ErrorMessage.AddMessage(string.Format(text, args)); + + if (logToFile) + Log(text, level, args); + } + } +} diff --git a/SMLHelper/MonoBehaviours/EntitySpawner.cs b/SMLHelper/MonoBehaviours/EntitySpawner.cs new file mode 100644 index 00000000..c7494957 --- /dev/null +++ b/SMLHelper/MonoBehaviours/EntitySpawner.cs @@ -0,0 +1,88 @@ +namespace SMLHelper.V2.MonoBehaviours +{ + using System.Collections; + using Handlers; + using Patchers; + using UnityEngine; + using UWE; + using Logger = Logger; + + internal class EntitySpawner : MonoBehaviour + { + internal SpawnInfo spawnInfo; + + void Start() + { + StartCoroutine(SpawnAsync()); + } + + IEnumerator SpawnAsync() + { + var stringToLog = spawnInfo.Type switch + { + SpawnInfo.SpawnType.ClassId => spawnInfo.ClassId, + _ => spawnInfo.TechType.AsString() + }; + + var task = new TaskResult(); + yield return GetPrefabAsync(task); + + var prefab = task.Get(); + + if (prefab == null) + { + Logger.Error($"no prefab found for {stringToLog}; process for Coordinated Spawn canceled."); + Destroy(gameObject); + } + + + var obj = Utils.InstantiateDeactivated(prefab, spawnInfo.SpawnPosition, spawnInfo.Rotation); + + var lwe = obj.GetComponent(); + + var lws = LargeWorldStreamer.main; + yield return new WaitUntil(() => lws != null && lws.IsReady()); // first we make sure the world streamer is initialized + + // non-global objects cannot be spawned in unloaded terrain so we need to wait + if (lwe is {cellLevel: not (LargeWorldEntity.CellLevel.Batch or LargeWorldEntity.CellLevel.Global)}) + { + var batch = lws.GetContainingBatch(spawnInfo.SpawnPosition); + yield return new WaitUntil(() => lws.IsBatchReadyToCompile(batch)); // then we wait until the terrain is fully loaded (must be checked on each frame for faster spawns) + } + + var lw = LargeWorld.main; + + yield return new WaitUntil(() => lw != null && lw.streamer.globalRoot != null); // need to make sure global root is ready too for global spawns. + + lw.streamer.cellManager.RegisterEntity(obj); + + obj.SetActive(true); + + LargeWorldStreamerPatcher.savedSpawnInfos.Add(spawnInfo); + + Destroy(gameObject); + } + + IEnumerator GetPrefabAsync(IOut gameObject) + { + GameObject obj; + + if (spawnInfo.Type == SpawnInfo.SpawnType.ClassId) // Spawn is via ClassID. + { + var request = PrefabDatabase.GetPrefabAsync(spawnInfo.ClassId); + yield return request; + + request.TryGetPrefab(out obj); + } + else // spawn is via TechType. + { + var task = CraftData.GetPrefabForTechTypeAsync(spawnInfo.TechType); + yield return task; + + obj = task.GetResult(); + } + + gameObject.Set(obj); + } + } +} diff --git a/SMLHelper/MonoBehaviours/Fixer.cs b/SMLHelper/MonoBehaviours/Fixer.cs new file mode 100644 index 00000000..c2837082 --- /dev/null +++ b/SMLHelper/MonoBehaviours/Fixer.cs @@ -0,0 +1,12 @@ +namespace SMLHelper.V2.MonoBehaviours +{ + using System; + using UnityEngine; + + /// This component is obsolete + [Obsolete("Use SMLHelper.V2.Assets.ModPrefabCache instead", true)] + public class Fixer : MonoBehaviour + { + private void Awake() => V2.Logger.Warn("Fixer component is obsolete."); + } +} diff --git a/SMLHelper/Options/Attributes/ButtonAttribute.cs b/SMLHelper/Options/Attributes/ButtonAttribute.cs new file mode 100644 index 00000000..53e247b6 --- /dev/null +++ b/SMLHelper/Options/Attributes/ButtonAttribute.cs @@ -0,0 +1,49 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System; + using QModManager.Utility; + + /// + /// Attribute used to signify the decorated method should be represented in the mod's options menu + /// as a . + /// When the button is clicked, the given method will run. + /// + /// + /// + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// using QModManager.Utility; + /// + /// [Menu("My Options Menu")] + /// public class Config : ConfigFile + /// { + /// [Button("My Cool Button")] + /// public static void MyCoolButton(object sender, ButtonClickedEventArgs e) + /// { + /// Logger.Log(Logger.Level.Info, "Button was clicked!"); + /// Logger.Log(Logger.Level.Info, e.Id.ToString()); + /// } + /// } + /// + /// + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] + public sealed class ButtonAttribute : ModOptionAttribute + { + /// + /// Signifies the decorated method should be represented in the mod's options menu as a + /// and sets its label. + /// + /// The label for the button. If none is set, the name of the method will be used. + public ButtonAttribute(string label = null) : base(label) { } + + /// + /// Signifies the decorated method should be represented in the mod's options menu as a . + /// + public ButtonAttribute() { } + } +} diff --git a/SMLHelper/Options/Attributes/ChoiceAttribute.cs b/SMLHelper/Options/Attributes/ChoiceAttribute.cs new file mode 100644 index 00000000..13264ce6 --- /dev/null +++ b/SMLHelper/Options/Attributes/ChoiceAttribute.cs @@ -0,0 +1,76 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System; + + /// + /// Attribute used to signify the decorated member should be represented in the mod's options menu as a + /// . Works for either index-based, -based, or + /// -based members. + /// + /// + /// choices can also be parsed from their values by merely omitting the . + /// + /// + /// + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// + /// public enum CustomChoice { One, Two, Three } + /// + /// [Menu("My Options Menu")] + /// public class Config : ConfigFile + /// { + /// [Choice("My index-based choice", "One", "Two", "Three")] + /// public int MyIndexBasedChoice; + /// + /// [Choice] + /// public CustomChoice MyEnumBasedChoice; + /// } + /// + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] + public sealed class ChoiceAttribute : ModOptionAttribute + { + /// + /// The list of options that will be displayed. + /// + public string[] Options { get; set; } + + /// + /// Attribute used to signify the decorated member should be represented in the mod's options menu as a + /// . Works for either index-based, -based, or + /// -based members. + /// + /// + /// choices can also be parsed from their values by merely omitting the . + /// + /// The label for the choice. If none is set, the name of the member will be used. + /// The list of options for the user to choose from. + public ChoiceAttribute(string label = null, params string[] options) : base(label) + { + Options = options; + } + + /// + /// Attribute used to signify the decorated member should be represented in the mod's options menu as a + /// . Works for either index-based, -based, or + /// -based members. + /// + /// + /// choices can also be parsed from their values by merely omitting the . + /// + /// The list of options for the user to choose from. + public ChoiceAttribute(string[] options) : this(null, options) { } + + /// + /// Attribute used to signify the decorated member should be represented in the mod's options menu as a + /// . Works for either index-based, -based, or + /// -based members. + /// + public ChoiceAttribute() { } + } +} diff --git a/SMLHelper/Options/Attributes/ConfigFileMetadata.cs b/SMLHelper/Options/Attributes/ConfigFileMetadata.cs new file mode 100644 index 00000000..c7d10a9a --- /dev/null +++ b/SMLHelper/Options/Attributes/ConfigFileMetadata.cs @@ -0,0 +1,648 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Interfaces; + using Json; + using QModManager.API; + using System; + using System.Collections; + using System.Collections.Generic; + using System.Diagnostics; + using System.Linq; + using System.Reflection; + using UnityEngine; + using Logger = Logger; +#if SUBNAUTICA + using Text = UnityEngine.UI.Text; +#elif BELOWZERO + using Text = TMPro.TextMeshProUGUI; +#endif +#if SUBNAUTICA_STABLE + using Oculus.Newtonsoft.Json; +#else + using Newtonsoft.Json; +#endif + + internal class ConfigFileMetadata where T : ConfigFile, new() + { + public T Config { get; } = new T(); + + public bool Registered { get; set; } = false; + + public IQMod QMod { get; } = QModServices.Main.GetMod(Assembly.GetAssembly(typeof(T))); + + /// + /// The relating to this menu. + /// + public MenuAttribute MenuAttribute { get; private set; } + + /// + /// A dictionary of , indexed by . + /// + public Dictionary> ModOptionAttributesMetadata { get; private set; } + + /// + /// Process metadata for members of . + /// + public void ProcessMetadata() + { + Stopwatch stopwatch = new Stopwatch(); + + if (Logger.EnableDebugging) + stopwatch.Start(); + + MenuAttribute = typeof(T).GetCustomAttribute(true) ?? new MenuAttribute(QMod.DisplayName); + ModOptionAttributesMetadata = new Dictionary>(); + + processMetadata(); + + if (Logger.EnableDebugging) + { + stopwatch.Stop(); + Logger.Debug($"[{QMod.DisplayName}] [{typeof(T).Name}] OptionsMenuBuilder metadata parsed in {stopwatch.ElapsedMilliseconds}ms."); + } + } + + private void processMetadata() + { + var bindingFlags = BindingFlags.Instance | BindingFlags.Public; + foreach (PropertyInfo property in typeof(T).GetProperties(bindingFlags) + .Where(memberIsDeclaredInConfigFileSubclass) // Only care about members declared in a subclass of ConfigFile + .Where(memberIsNotIgnored)) // Filter out explicitly ignored members + { + processFieldOrProperty(property, MemberType.Property, property.PropertyType); + } + + foreach (FieldInfo field in typeof(T).GetFields(bindingFlags) + .Where(memberIsDeclaredInConfigFileSubclass) // Only care about members declared in a subclass of ConfigFile + .Where(memberIsNotIgnored)) // Filter out explicitly ignored members + { + processFieldOrProperty(field, MemberType.Field, field.FieldType); + } + + foreach (MethodInfo method in typeof(T).GetMethods(bindingFlags | BindingFlags.Static) + .Where(memberIsDeclaredInConfigFileSubclass) // Only care about members declared in a subclass of ConfigFile + .Where(memberIsNotIgnored)) // Filter out explicitly ignored members + { + processMethod(method); + } + + Logger.Debug($"[{QMod.DisplayName}] [{typeof(T).Name}] Found {ModOptionAttributesMetadata.Count()} options to add to the menu."); + } + + /// + /// Checks whether a given is declared in any subclass of . + /// + /// The to check. + /// Whether the given is declared in any subclass of . + private static bool memberIsDeclaredInConfigFileSubclass(MemberInfo memberInfo) + => memberInfo.DeclaringType.IsSubclassOf(typeof(ConfigFile)); + + /// + /// Checks whether a given should be ignored when generating the options menu, based on whether + /// the member has a declared , or the 's + /// property. + /// + /// The to check. + /// Whether the given member should be ignored when generating the options menu. + private bool memberIsNotIgnored(MemberInfo memberInfo) + { + if (Attribute.IsDefined(memberInfo, typeof(IgnoreMemberAttribute))) + return false; + + switch (MenuAttribute.MemberProcessing) + { + case MenuAttribute.Members.Implicit: + if (memberInfo is MethodInfo) + { + if (Attribute.IsDefined(memberInfo, typeof(ButtonAttribute), true)) + return true; + + IEnumerable> eventMetadatas + = ModOptionAttributesMetadata.Values.SelectMany(modOptionsMetadata => + { + IEnumerable> result = new List>(); + + if (modOptionsMetadata.OnChangeMetadata != null) + result.Concat(modOptionsMetadata.OnChangeMetadata); + + if (modOptionsMetadata.OnGameObjectCreatedMetadata != null) + result.Concat(modOptionsMetadata.OnGameObjectCreatedMetadata); + + return result; + }); + return eventMetadatas.Any(memberInfoMetadata => memberInfoMetadata.Name == memberInfo.Name); + } + return true; + + case MenuAttribute.Members.Explicit: + return Attribute.IsDefined(memberInfo, typeof(ModOptionAttribute), true) || + Attribute.IsDefined(memberInfo, typeof(ModOptionEventAttribute), true); + + default: throw new NotImplementedException(); + } + } + + /// + /// Processes the given field or property and hands off to + /// to generate a + /// and add it to the dictionary. + /// + /// The of the member. + /// The of the member. + /// The underlying of the member. + private void processFieldOrProperty(MemberInfo memberInfo, MemberType memberType, Type underlyingType) + { + if (underlyingType == typeof(bool)) + { + addModOptionMetadata(memberInfo, memberType, underlyingType); + } + else if (underlyingType == typeof(KeyCode)) + { + addModOptionMetadata(memberInfo, memberType, underlyingType); + } + else if (underlyingType.IsEnum || Attribute.IsDefined(memberInfo, typeof(ChoiceAttribute), true)) + { + addModOptionMetadata(memberInfo, memberType, underlyingType); + } + else if (underlyingType == typeof(float) || + underlyingType == typeof(double) || + underlyingType == typeof(int) || + Attribute.IsDefined(memberInfo, typeof(SliderAttribute), true)) + { + addModOptionMetadata(memberInfo, memberType, underlyingType); + } + } + + /// + /// Processes the given method and hands off to + /// to generate a and add it to the dictionary. + /// + /// The of the method. + private void processMethod(MethodInfo methodInfo) + { + addModOptionMetadata(methodInfo, MemberType.Method); + } + + /// + /// Generates a based on the member and its attributes, then adds it to the + /// dictionary. + /// + /// The type of the to generate for this member. + /// The of the member. + /// The of the member. + /// The underlying of the member. + private void addModOptionMetadata(MemberInfo memberInfo, MemberType memberType, + Type underlyingType = null) where TAttribute : ModOptionAttribute, new() + { + try + { + // Get the ModOptionAttribute + ModOptionAttribute modOptionAttribute = memberInfo.GetCustomAttribute(true) + ?? new TAttribute(); + + // If there is no label specified, just use the member's name. + if (string.IsNullOrEmpty(modOptionAttribute.Label)) + modOptionAttribute.Label = memberInfo.Name; + + // ModOptionMetadata needed for all ModOptions + var modOptionMetadata = new ModOptionAttributeMetadata + { + ModOptionAttribute = modOptionAttribute, + MemberInfoMetadata = new MemberInfoMetadata + { + MemberType = memberType, + Name = memberInfo.Name, + ValueType = underlyingType + }, + OnGameObjectCreatedMetadata = GetEventMetadata(memberInfo) + }; + + if (memberType == MemberType.Method) + modOptionMetadata.MemberInfoMetadata.ParseMethodParameterTypes(memberInfo as MethodInfo); + + if (typeof(TAttribute) != typeof(ButtonAttribute)) + modOptionMetadata.OnChangeMetadata = GetEventMetadata(memberInfo); + + ModOptionAttributesMetadata.Add(modOptionAttribute.Id, modOptionMetadata); + } + catch (Exception ex) + { + Logger.Error($"[OptionsMenuBuilder] {ex.Message}"); + } + } + + /// + /// Gets the metadata of every defined for a member. + /// + /// + /// The type of attribute defined on the member to gather metadata for. + /// + /// The member to gather attribute metadata for. + /// + private IEnumerable> GetEventMetadata(MemberInfo memberInfo) + where TAttribute : ModOptionEventAttribute + { + var metadatas = new List>(); + foreach (TAttribute attribute in memberInfo.GetCustomAttributes(true)) + { + var methodMetadata = new MemberInfoMetadata + { + MemberType = MemberType.Method, + Name = attribute.MethodName + }; + methodMetadata.ParseMethodParameterTypes(); + metadatas.Add(methodMetadata); + } + return metadatas; + } + + public bool TryGetMetadata(string id, out ModOptionAttributeMetadata modOptionAttributeMetadata) + { + return ModOptionAttributesMetadata.TryGetValue(id, out modOptionAttributeMetadata); + } + + #region Events + public void BindEvents() + { + Config.OnStartedLoading += OptionsMenuBuilder_Config_OnStartedLoading; + Config.OnFinishedLoading += OptionsMenuBuilder_Config_OnFinishedLoading; + } + + private string jsonConfig; + public void OptionsMenuBuilder_Config_OnStartedLoading(object sender, ConfigFileEventArgs e) + { + jsonConfig = JsonConvert.SerializeObject(e.Instance as T); + } + + private void OptionsMenuBuilder_Config_OnFinishedLoading(object sender, ConfigFileEventArgs e) + { + T oldConfig = JsonConvert.DeserializeObject(jsonConfig); + T currentConfig = e.Instance as T; + + foreach (ModOptionAttributeMetadata modOptionMetadata in ModOptionAttributesMetadata.Values) + { + if (modOptionMetadata.MemberInfoMetadata.MemberType != MemberType.Field && + modOptionMetadata.MemberInfoMetadata.MemberType != MemberType.Property) + { + continue; + } + + if (!modOptionMetadata.MemberInfoMetadata.GetValue(oldConfig) + .Equals(modOptionMetadata.MemberInfoMetadata.GetValue(currentConfig))) + { + if (!Registered) + { + // if we haven't marked the options menu as being registered yet, its too soon to fire the events, + // so run a coroutine that waits until the first frame where Registered == true + // before routing the events + UWE.CoroutineHost.StartCoroutine(DeferredInvokeOnChangeEventsRoutine(modOptionMetadata, sender)); + } + else + { + // otherwise, route the events immediately + InvokeOnChangeEvents(modOptionMetadata, sender); + } + } + } + } + + /// + /// Invokes the method for a given and passes parameters when the button is clicked. + /// + /// The sender of the original button click event. + /// The for the click event. + public void HandleButtonClick(object sender, ButtonClickedEventArgs e) + { + if (TryGetMetadata(e.Id, out ModOptionAttributeMetadata modOptionMetadata) + && modOptionMetadata.MemberInfoMetadata.MethodParameterTypes is Type[] parameterTypes) + { + var parameters = new object[parameterTypes.Length]; + var senderFound = false; + var eventArgsFound = false; + + for (var i = 0; i < parameters.Length; i++) + { + Type type = parameterTypes[i]; + if (!senderFound && type == typeof(object)) + { + senderFound = true; + parameters[i] = sender; + } + else if (!eventArgsFound && type == typeof(ButtonClickedEventArgs)) + { + eventArgsFound = true; + parameters[i] = e; + } + + if (senderFound && eventArgsFound) + break; + } + + modOptionMetadata.MemberInfoMetadata.InvokeMethod(Config, parameters); + } + } + + /// + /// Sets the value in the , optionally saving the to disk if the + /// flag is set, before passing off to + /// + /// to invoke any methods specified with an . + /// + /// The sender of the original choice changed event. + /// The for the choice changed event. + public void HandleChoiceChanged(object sender, ChoiceChangedEventArgs e) + { + if (TryGetMetadata(e.Id, out ModOptionAttributeMetadata modOptionMetadata)) + { + // Set the value in the Config + MemberInfoMetadata memberInfoMetadata = modOptionMetadata.MemberInfoMetadata; + ChoiceAttribute choiceAttribute = modOptionMetadata.ModOptionAttribute as ChoiceAttribute; + + if (memberInfoMetadata.ValueType.IsEnum && (choiceAttribute.Options == null || !choiceAttribute.Options.Any())) + { + // Enum-based choice where the values are parsed from the enum type + object value = Enum.Parse(memberInfoMetadata.ValueType, e.Value); + memberInfoMetadata.SetValue(Config, value); + } + else if (memberInfoMetadata.ValueType.IsEnum) + { + // Enum-based choice where the values are defined as custom strings + object value = Enum.Parse(memberInfoMetadata.ValueType, Enum.GetNames(memberInfoMetadata.ValueType)[e.Index]); + memberInfoMetadata.SetValue(Config, value); + } + else if (memberInfoMetadata.ValueType == typeof(string)) + { + // string-based choice value + string value = e.Value; + memberInfoMetadata.SetValue(Config, value); + } + else if (memberInfoMetadata.ValueType == typeof(int)) + { + // index-based choice value + int value = e.Index; + memberInfoMetadata.SetValue(Config, value); + } + + // Optionally save the Config to disk + if (MenuAttribute.SaveOn.HasFlag(MenuAttribute.SaveEvents.ChangeValue)) + Config.Save(); + + // Invoke any OnChange methods specified + InvokeOnChangeEvents(modOptionMetadata, sender, e); + } + } + + /// + /// Sets the value in the , optionally saving the to disk if the + /// flag is set, before passing off to + /// + /// to invoke any methods specified with an . + /// + /// The sender of the original keybind changed event. + /// The for the keybind changed event. + public void HandleKeybindChanged(object sender, KeybindChangedEventArgs e) + { + if (TryGetMetadata(e.Id, out ModOptionAttributeMetadata modOptionMetadata)) + { + // Set the value in the Config + modOptionMetadata.MemberInfoMetadata.SetValue(Config, e.Key); + + // Optionally save the Config to disk + if (MenuAttribute.SaveOn.HasFlag(MenuAttribute.SaveEvents.ChangeValue)) + Config.Save(); + + // Invoke any OnChange methods specified + InvokeOnChangeEvents(modOptionMetadata, sender, e); + } + } + + /// + /// Sets the value in the , optionally saving the to disk if the + /// flag is set, before passing off to + /// + /// to invoke any methods specified with an . + /// + /// The sender of the original slider changed event. + /// The for the slider changed event. + public void HandleSliderChanged(object sender, SliderChangedEventArgs e) + { + if (TryGetMetadata(e.Id, out ModOptionAttributeMetadata modOptionMetadata)) + { + // Set the value in the Config + MemberInfoMetadata memberInfoMetadata = modOptionMetadata.MemberInfoMetadata; + object value = Convert.ChangeType(e.Value, memberInfoMetadata.ValueType); + memberInfoMetadata.SetValue(Config, value); + + // Optionally save the Config to disk + if (MenuAttribute.SaveOn.HasFlag(MenuAttribute.SaveEvents.ChangeValue)) + Config.Save(); + + // Invoke any OnChange methods specified + InvokeOnChangeEvents(modOptionMetadata, sender, e); + } + } + + /// + /// Sets the value in the , optionally saving the to disk if the + /// flag is set, before passing off to + /// + /// to invoke any methods specified with an . + /// + /// The sender of the original toggle changed event. + /// The for the toggle changed event. + public void HandleToggleChanged(object sender, ToggleChangedEventArgs e) + { + if (TryGetMetadata(e.Id, out ModOptionAttributeMetadata modOptionMetadata)) + { + // Set the value in the Config + modOptionMetadata.MemberInfoMetadata.SetValue(Config, e.Value); + + // Optionally save the Config to disk + if (MenuAttribute.SaveOn.HasFlag(MenuAttribute.SaveEvents.ChangeValue)) + Config.Save(); + + // Invoke any OnChange methods specified + InvokeOnChangeEvents(modOptionMetadata, sender, e); + } + } + + /// + /// Generates tooltips for each with a specified , before + /// invoking any relevant method(s) specified with (s) and passes + /// parameters when a is created in the options menu. + /// + /// + /// + public void HandleGameObjectCreated(object sender, GameObjectCreatedEventArgs e) + { + if (TryGetMetadata(e.Id, out ModOptionAttributeMetadata modOptionMetadata)) + { + // Create a tooltip if there is a TooltipAttribute specified + if (modOptionMetadata.ModOptionAttribute.Tooltip is string tooltip) + { + e.GameObject.GetComponentInChildren().gameObject.AddComponent().Tooltip = tooltip; + } + + if (modOptionMetadata.OnGameObjectCreatedMetadata == null) + return; // Skip attempting to invoke events if there are no OnGameObjectCreatedAttributes set for the member. + + foreach (MemberInfoMetadata onGameObjectCreatedMetadata in modOptionMetadata.OnGameObjectCreatedMetadata) + { + InvokeEvent(onGameObjectCreatedMetadata, sender, e); + } + } + } + + private IEnumerator DeferredInvokeOnChangeEventsRoutine(ModOptionAttributeMetadata modOptionMetadata, object sender) + { + yield return new WaitUntil(() => Registered); + InvokeOnChangeEvents(modOptionMetadata, sender); + } + + /// + /// Invokes the relevant method(s) specified with the (s) + /// and passes parameters when a value is changed when loaded from disk. + /// + /// The metadata for the mod option. + /// The sender of the event. + private void InvokeOnChangeEvents(ModOptionAttributeMetadata modOptionMetadata, object sender) + { + string id = modOptionMetadata.ModOptionAttribute.Id; + MemberInfoMetadata memberInfoMetadata = modOptionMetadata.MemberInfoMetadata; + + switch (modOptionMetadata.ModOptionAttribute) + { + case ChoiceAttribute choiceAttribute when memberInfoMetadata.ValueType.IsEnum && + (choiceAttribute.Options == null || !choiceAttribute.Options.Any()): + // Enum-based choice where the values are parsed from the enum type + { + string[] options = Enum.GetNames(memberInfoMetadata.ValueType); + string value = memberInfoMetadata.GetValue(Config).ToString(); + var eventArgs = new ChoiceChangedEventArgs(id, Array.IndexOf(options, value), value); + InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs); + } + break; + case ChoiceAttribute _ when memberInfoMetadata.ValueType.IsEnum: + // Enum-based choice where the values are defined as custom strings + { + string value = memberInfoMetadata.GetValue(Config).ToString(); + int index = Math.Max(Array.IndexOf(Enum.GetValues(memberInfoMetadata.ValueType), value), 0); + var eventArgs = new ChoiceChangedEventArgs(id, index, value); + InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs); + } + break; + case ChoiceAttribute choiceAttribute when memberInfoMetadata.ValueType == typeof(string): + // string-based choice value + { + string[] options = choiceAttribute.Options; + string value = memberInfoMetadata.GetValue(Config); + var eventArgs = new ChoiceChangedEventArgs(id, Array.IndexOf(options, value), value); + InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs); + } + break; + case ChoiceAttribute choiceAttribute when memberInfoMetadata.ValueType == typeof(int): + // index-based choice value + { + string[] options = choiceAttribute.Options; + int index = memberInfoMetadata.GetValue(Config); + var eventArgs = new ChoiceChangedEventArgs(id, index, options[index]); + InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs); + } + break; + + case KeybindAttribute _: + { + var eventArgs = new KeybindChangedEventArgs(id, memberInfoMetadata.GetValue(Config)); + InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs); + } + break; + + case SliderAttribute _: + { + var eventArgs = new SliderChangedEventArgs(id, Convert.ToSingle(memberInfoMetadata.GetValue(Config))); + InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs); + } + break; + + case ToggleAttribute _: + { + var eventArgs = new ToggleChangedEventArgs(id, memberInfoMetadata.GetValue(Config)); + InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs); + } + break; + } + } + + /// + /// Invokes the relevant method(s) specified with (s) + /// and passes parameters when a value is changed. + /// + /// The type of the event args. + /// The metadata for the mod option. + /// The sender of the event. + /// The event args from the OnChange event. + private void InvokeOnChangeEvents(ModOptionAttributeMetadata modOptionMetadata, object sender, TSource e) + where TSource : IModOptionEventArgs + { + if (modOptionMetadata.OnChangeMetadata == null) + return; // Skip attempting to invoke events if there are no OnChangeAttributes set for the member. + + foreach (MemberInfoMetadata onChangeMetadata in modOptionMetadata.OnChangeMetadata) + { + InvokeEvent(onChangeMetadata, sender, e); + } + } + + /// + /// Invoke the relevant method specified by a + /// and passes relevant parameters. + /// + /// The type of the event args. + /// The metadata for the method. + /// The sender of the event. + /// The event args from the event. + private void InvokeEvent(MemberInfoMetadata memberInfoMetadata, object sender, TSource e) + where TSource : IModOptionEventArgs + { + if (!memberInfoMetadata.MethodValid) + { + // Method not found, log error and skip. + Logger.Error($"[OptionsMenuBuilder] Could not find the specified method: {typeof(T)}.{memberInfoMetadata.Name}"); + return; + } + + if (memberInfoMetadata.MethodParameterTypes is Type[] parameterTypes) + { + var parameters = new object[parameterTypes.Length]; + var senderFound = false; + var eventArgsFound = false; + var modOptionEventFound = false; + + for (var i = 0; i < parameterTypes.Length; i++) + { + if (!senderFound && parameterTypes[i] == typeof(object)) + { + senderFound = true; + parameters[i] = sender; + } + else if (!eventArgsFound && parameterTypes[i] == typeof(TSource)) + { + eventArgsFound = true; + parameters[i] = e; + } + else if (!modOptionEventFound && parameterTypes[i] == typeof(IModOptionEventArgs)) + { + modOptionEventFound = true; + parameters[i] = e; + } + + if (senderFound && eventArgsFound && modOptionEventFound) + break; + } + + memberInfoMetadata.InvokeMethod(Config, parameters); + } + } + #endregion + } +} diff --git a/SMLHelper/Options/Attributes/IgnoreMemberAttribute.cs b/SMLHelper/Options/Attributes/IgnoreMemberAttribute.cs new file mode 100644 index 00000000..4fc2be52 --- /dev/null +++ b/SMLHelper/Options/Attributes/IgnoreMemberAttribute.cs @@ -0,0 +1,40 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System; + + /// + /// Attribute used to signify the given property, field or method should be ignored when generating your mod options menu. + /// + /// + /// By default, all members are ignored unless either they are decorated with a derivative, + /// or the property is set to . + /// + /// + /// + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// + /// [Menu("My Options Menu")] + /// public class Config : ConfigFile + /// { + /// [Button("My Cool Button)] + /// public static void MyCoolButton(object sender, ButtonClickedEventArgs e) + /// { + /// Logger.Log(Logger.Level.Info, "Button was clicked!"); + /// Logger.Log(Logger.Level.Info, e.Id.ToString()); + /// } + /// + /// [IgnoreMember] + /// public int FieldNotDisplayedInMenu; + /// } + /// + /// + /// + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Method, AllowMultiple = false)] + public sealed class IgnoreMemberAttribute : Attribute { } +} diff --git a/SMLHelper/Options/Attributes/KeybindAttribute.cs b/SMLHelper/Options/Attributes/KeybindAttribute.cs new file mode 100644 index 00000000..98d84e23 --- /dev/null +++ b/SMLHelper/Options/Attributes/KeybindAttribute.cs @@ -0,0 +1,43 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System; + using UnityEngine; + + /// + /// Attribute used to signify the decorated should be represented in the mod's + /// option menu as a . + /// + /// + /// + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// using UnityEngine; + /// + /// [Menu("My Options Menu")] + /// public class Config : ConfigFile + /// { + /// [Keybind("My Keybind")] + /// public KeyCode MyKeybind; + /// } + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] + public sealed class KeybindAttribute : ModOptionAttribute + { + /// + /// Signifies the decorated should be represented in the mod's option menu + /// as a . + /// + /// The label for the keybind. If none is set, the name of the member will be used. + public KeybindAttribute(string label = null) : base(label) { } + + /// + /// Signifies the decorated should be represented in the mod's option menu + /// as a . + /// + public KeybindAttribute() { } + } +} diff --git a/SMLHelper/Options/Attributes/MemberInfoMetadata.cs b/SMLHelper/Options/Attributes/MemberInfoMetadata.cs new file mode 100644 index 00000000..23e18c62 --- /dev/null +++ b/SMLHelper/Options/Attributes/MemberInfoMetadata.cs @@ -0,0 +1,114 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using HarmonyLib; + using Json; + using System; + using System.Linq; + using System.Reflection; + + internal enum MemberType { Unknown, Field, Property, Method }; + + internal class MemberInfoMetadata where T : ConfigFile, new() + { + public MemberType MemberType = MemberType.Unknown; + public string Name; + public Type ValueType; + public Type[] MethodParameterTypes; + public bool MethodValid = false; + + /// + /// Uses the stored metadata to get the current value of the member. + /// + /// The type of the value. + /// The config to get the value from. + /// The value. + public TValue GetValue(T config) + { + switch (MemberType) + { + case MemberType.Field: + return Traverse.Create(config).Field(Name).GetValue(); + case MemberType.Property: + return Traverse.Create(config).Property(Name).GetValue(); + default: + throw new InvalidOperationException($"Member must be a Field or Property but is {MemberType}: " + + $"{typeof(T).Name}.{Name}"); + } + } + + /// + /// Uses the stored metadata to get the current value of the member. + /// + /// The config to get the value from. + /// The value. + public object GetValue(T config) => GetValue(config); + + /// + /// Uses the stored metadata to set the current value of the member. + /// + /// The type of the value. + /// The config the set the value in. + /// The value. + public void SetValue(T config, TValue value) + { + switch (MemberType) + { + case MemberType.Field: + Traverse.Create(config).Field(Name).SetValue(value); + break; + case MemberType.Property: + Traverse.Create(config).Property(Name).SetValue(value); + break; + default: + throw new InvalidOperationException($"Member must be a Field or Property but is {MemberType}: " + + $"{typeof(T).Name}.{Name}"); + } + } + + /// + /// Stores the of each parameter of a method to the + /// array. + /// + /// of the method to parse. + public void ParseMethodParameterTypes(MethodInfo methodInfo = null) + { + if (MemberType != MemberType.Method) + throw new InvalidOperationException($"Member must be a Method but is {MemberType}: {typeof(T).Name}.{Name}"); + + if (methodInfo == null) + { + methodInfo = AccessTools.Method(typeof(T), Name); + + if (methodInfo == null) + { + // Method not found, log error and skip. + Logger.Error($"[OptionsMenuBuilder] Could not find the specified method: {typeof(T)}.{Name}"); + return; + } + } + + MethodValid = true; + MethodParameterTypes = methodInfo.GetParameters().Select(x => x.ParameterType).ToArray(); + } + + /// + /// Use the stored metadata to invoke the method. + /// + /// The config in which the method. + /// An array of arguments to pass to the method. + public void InvokeMethod(T config, params object[] arguments) + { + if (MemberType != MemberType.Method) + throw new InvalidOperationException($"Member must be a Method but is {MemberType}: {typeof(T).Name}.{Name}"); + + if (!MethodValid) + { + // Method not found, log error and skip. + Logger.Error($"[OptionsMenuBuilder] Could not find the specified method: {typeof(T)}.{Name}"); + return; + } + + Traverse.Create(config).Method(Name, MethodParameterTypes).GetValue(arguments); + } + } +} diff --git a/SMLHelper/Options/Attributes/MenuAttribute.cs b/SMLHelper/Options/Attributes/MenuAttribute.cs new file mode 100644 index 00000000..aa5c12a1 --- /dev/null +++ b/SMLHelper/Options/Attributes/MenuAttribute.cs @@ -0,0 +1,200 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System; + using QModManager.Utility; + + /// + /// Attribute used to signify a menu should be automatically generated from a + /// , as well as specifying options for handling the + /// and menu. + /// + /// + /// + /// using SMLHelper.V2.Interfaces; + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// using QModManager.Utility; + /// using UnityEngine; + /// + /// [Menu("SMLHelper Example Mod")] + /// public class Config : ConfigFile + /// { + /// [Choice("My index-based choice", "Choice 1", "Choice 2", "Choice 3", Tooltip = "A simple tooltip")] + /// [OnChange(nameof(MyGenericValueChangedEvent))] + /// public int ChoiceIndex; + /// + /// [Choice("My enum-based choice"), OnChange(nameof(MyGenericValueChangedEvent))] + /// public CustomChoice ChoiceEnum; + /// + /// [Keybind("My keybind"), OnChange(nameof(MyGenericValueChangedEvent))] + /// public KeyCode KeybindKey; + /// + /// [Slider("My slider", 0, 50, DefaultValue = 25, Format = "{0:F2}"), OnChange(nameof(MyGenericValueChangedEvent))] + /// public float SliderValue; + /// + /// [Toggle("My checkbox"), OnChange(nameof(MyCheckboxToggleEvent)), OnChange(nameof(MyGenericValueChangedEvent))] + /// public bool ToggleValue; + /// + /// [Button("My button")] + /// public void MyButtonClickEvent(ButtonClickedEventArgs e) + /// { + /// Logger.Log(Logger.Level.Info, "Button was clicked!"); + /// Logger.Log(Logger.Level.Info, $"{e.Id}"); + /// } + /// + /// public void MyCheckboxToggleEvent(ToggleChangedEventArgs e) + /// { + /// Logger.Log(Logger.Level.Info, "Checkbox value was changed!"); + /// Logger.Log(Logger.Level.Info, $"{e.Value}"); + /// } + /// + /// private void MyGenericValueChangedEvent(IModOptionEventArgs e) + /// { + /// Logger.Log(Logger.Level.Info, "Generic value changed!"); + /// Logger.Log(Logger.Level.Info, $"{e.Id}: {e.GetType()}"); + /// + /// switch (e) + /// { + /// case KeybindChangedEventArgs keybindChangedEventArgs: + /// Logger.Log(Logger.Level.Info, keybindChangedEventArgs.KeyName); + /// break; + /// case ChoiceChangedEventArgs choiceChangedEventArgs: + /// Logger.Log(Logger.Level.Info, choiceChangedEventArgs.Value); + /// break; + /// case SliderChangedEventArgs sliderChangedEventArgs: + /// Logger.Log(Logger.Level.Info, sliderChangedEventArgs.Value.ToString()); + /// break; + /// case ToggleChangedEventArgs toggleChangedEventArgs: + /// Logger.Log(Logger.Level.Info, toggleChangedEventArgs.Value.ToString()); + /// break; + /// } + /// } + /// } + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] + public sealed class MenuAttribute : Attribute + { + /// + /// Specifies after which events the config file should be saved to disk automatically. + /// + /// + /// This enumeration has a that allows a bitwise combination of its member values. + /// + [Flags] + public enum SaveEvents : byte + { + /// + /// Never automatically save. + /// + None = 0, + /// + /// Save whenever any value is changed. + /// + ChangeValue = 1, + /// + /// Save when the player saves the game. + /// + SaveGame = 2, + /// + /// Save when the player quits the game. + /// + QuitGame = 4 + } + + /// + /// Specifies after which events the config file should be loaded from disk automatically. + /// + /// + /// This enumeration has a that allows a bitwise combination of its member values. + /// + [Flags] + public enum LoadEvents : byte + { + /// + /// Never automatically load. + /// + None = 0, + /// + /// Load when the menu is registered to SMLHelper via . + /// + /// + /// In normal usage, this option is equivalent to loading when the game is launched. + /// + MenuRegistered = 1, + /// + /// Load when the menu is opened by the player. + /// + /// + /// Useful for allowing players to edit their config files manually without restarting the game for their changes to take effect. + /// + MenuOpened = 2 + } + + /// + /// Specifies which members of the will be parsed and added to the menu. + /// + public enum Members + { + /// + /// Only members decorated with a derivative such as + /// , etc. will be processed. + /// + Explicit, + /// + /// All members will be processed, and where they are not decorated, a default attribute + /// will be generated for them. + /// + Implicit + } + + /// + /// The display name for the generated options menu. + /// + public string Name { get; } + + /// + /// The events after which the config file will be saved to disk automatically. + /// Defaults to . + /// + /// + /// + public SaveEvents SaveOn { get; set; } = SaveEvents.ChangeValue; + + /// + /// The events after which the config file will be loaded from disk automatically. + /// Defaults to . + /// + /// + /// + public LoadEvents LoadOn { get; set; } = LoadEvents.MenuRegistered; + + /// + /// How members of the will be processed. + /// Defaults to , so that only decorated members will be processed. + /// + /// + public Members MemberProcessing { get; set; } = Members.Explicit; + + /// + /// Signifies a menu should be automatically generated from a . + /// + /// The display name for the generated options menu. + public MenuAttribute(string name) + { + Name = name; + } + + internal MenuAttribute() { } + } +} diff --git a/SMLHelper/Options/Attributes/ModOptionAttribute.cs b/SMLHelper/Options/Attributes/ModOptionAttribute.cs new file mode 100644 index 00000000..9e3a7a1e --- /dev/null +++ b/SMLHelper/Options/Attributes/ModOptionAttribute.cs @@ -0,0 +1,60 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Handlers; + using Interfaces; + using Json; + using System; + + /// + /// Abstract base attribute used to signify the decorated public member should generate a + /// in a mod's options menu. + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false)] + public abstract class ModOptionAttribute : Attribute, IModOptionAttribute + { + /// + /// The label to use when displaying the field in the mod's options menu. If is set, this + /// will be ignored. + /// + public string Label { get; set; } + + /// + /// The Id to be used for the field in the mod's option menu. If none is specified, one will be automatically generated when + /// your is registered to the . This means it will + /// change every time the game is launched, but is guaranteed to be unique. If you would like to specify an Id to use for + /// internal comparisons, you can do so here. + /// + public string Id { get; set; } = Guid.NewGuid().ToString().Replace('-', '_'); + + /// + /// The order in which to display fields in the mod's option menu, in ascending order. If none is specified, the order will be + /// automatically set. + /// + public int Order { get; set; } = i++; + private static int i = 0; + + /// + /// An optional tooltip to display for the field. + /// + public string Tooltip { get; set; } + + /// + /// An optional id to be parsed with for the label, allowing for custom language-based strings + /// via the API. If this is set, it will take precedence. + /// + /// + /// + public string LabelLanguageId { get; set; } + + /// + /// Signifies the decorated member should be represented in the mod's options menu as a + /// with an optional label. + /// + /// The label to display. If none is set, the name of the member will be used. If + /// is set, this will be ignored. + protected ModOptionAttribute(string label = null) + { + Label = label; + } + } +} diff --git a/SMLHelper/Options/Attributes/ModOptionAttributeMetadata.cs b/SMLHelper/Options/Attributes/ModOptionAttributeMetadata.cs new file mode 100644 index 00000000..799cf56e --- /dev/null +++ b/SMLHelper/Options/Attributes/ModOptionAttributeMetadata.cs @@ -0,0 +1,13 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System.Collections.Generic; + + internal class ModOptionAttributeMetadata where T : ConfigFile, new() + { + public ModOptionAttribute ModOptionAttribute; + public MemberInfoMetadata MemberInfoMetadata; + public IEnumerable> OnChangeMetadata; + public IEnumerable> OnGameObjectCreatedMetadata; + } +} diff --git a/SMLHelper/Options/Attributes/ModOptionEventAttribute.cs b/SMLHelper/Options/Attributes/ModOptionEventAttribute.cs new file mode 100644 index 00000000..ca69c20e --- /dev/null +++ b/SMLHelper/Options/Attributes/ModOptionEventAttribute.cs @@ -0,0 +1,32 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Interfaces; + using System; + + /// + /// Abstract base attribute used to signify a method to call whenever the derivative event is invoked for the decorated member. + /// + /// + /// The method must be a member of the same class. + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = true)] + public abstract class ModOptionEventAttribute : Attribute, IModOptionEventAttribute + { + /// + /// The name of the method to invoke. + /// + public string MethodName { get; } + + /// + /// Signifies a method to call whenever the derivative event is invoked for the decorated member. + /// + /// + /// The method must be a member of the same class. + /// + /// The name of the method within the same class to invoke. + public ModOptionEventAttribute(string methodName) + { + MethodName = methodName; + } + } +} diff --git a/SMLHelper/Options/Attributes/OnChangeAttribute.cs b/SMLHelper/Options/Attributes/OnChangeAttribute.cs new file mode 100644 index 00000000..ae0fa9da --- /dev/null +++ b/SMLHelper/Options/Attributes/OnChangeAttribute.cs @@ -0,0 +1,92 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Interfaces; + using Json; + using QModManager.Utility; + using System; + + /// + /// Attribute used to signify a method to call whenever the decorated member's value changes. + /// + /// + /// The method must be a member of the same class. Can be specified mutliple times to call multiple methods. + /// + /// The specified method can take the following parameters in any order:
+ /// - sender: The sender of the event
+ /// - eventArgs: The generalized event arguments of the event
+ /// - choiceChangedEventArgs: Only when the member corresponds to a + ///
+ /// - keybindChangedEventArgs: Only when the member correspends to a + ///
+ /// - sliderChangedEventArgs: Only when the member corresponds to a + ///
+ /// - toggleChangedEventArgs: Only when the member corresponds to a + /// + ///
+ ///
+ /// + /// + /// using SMLHelper.V2.Interfaces; + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// using QModManager.Utility; + /// using UnityEngine; + /// + /// [Menu("SMLHelper Example Mod")] + /// public class Config : ConfigFile + /// { + /// [Toggle("My checkbox"), OnChange(nameof(MyCheckboxToggleEvent)), OnChange(nameof(MyGenericValueChangedEvent))] + /// public bool ToggleValue; + /// + /// public void MyCheckboxToggleEvent(ToggleChangedEventArgs e) + /// { + /// Logger.Log(Logger.Level.Info, "Checkbox value was changed!"); + /// Logger.Log(Logger.Level.Info, $"{e.Value}"); + /// } + /// + /// private void MyGenericValueChangedEvent(IModOptionEventArgs e) + /// { + /// Logger.Log(Logger.Level.Info, "Generic value changed!"); + /// Logger.Log(Logger.Level.Info, $"{e.Id}: {e.GetType()}"); + /// + /// switch (e) + /// { + /// case KeybindChangedEventArgs keybindChangedEventArgs: + /// Logger.Log(Logger.Level.Info, keybindChangedEventArgs.KeyName); + /// break; + /// case ChoiceChangedEventArgs choiceChangedEventArgs: + /// Logger.Log(Logger.Level.Info, choiceChangedEventArgs.Value); + /// break; + /// case SliderChangedEventArgs sliderChangedEventArgs: + /// Logger.Log(Logger.Level.Info, sliderChangedEventArgs.Value.ToString()); + /// break; + /// case ToggleChangedEventArgs toggleChangedEventArgs: + /// Logger.Log(Logger.Level.Info, toggleChangedEventArgs.Value.ToString()); + /// break; + /// } + /// } + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true)] + public sealed class OnChangeAttribute : ModOptionEventAttribute + { + /// + /// Signifies a method to call whenever the decorated member's value changes. + /// + /// + /// The method must be a member of the same class. + /// + /// The name of the method within the same class to invoke. + public OnChangeAttribute(string methodName) : base(methodName) { } + } +} diff --git a/SMLHelper/Options/Attributes/OnGameObjectCreatedAttribute.cs b/SMLHelper/Options/Attributes/OnGameObjectCreatedAttribute.cs new file mode 100644 index 00000000..134d1dee --- /dev/null +++ b/SMLHelper/Options/Attributes/OnGameObjectCreatedAttribute.cs @@ -0,0 +1,61 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Interfaces; + using System; + using QModManager.Utility; + + /// + /// Attribute used to signify a method to call whenever the for the + /// corresponding to the decorated member is created. + /// + /// + /// The method must be a member of the same class. Can be specified multiple times to call multiple methods. + /// + /// The specified method can optionally take the following parameters in any order:
+ /// - sender: The sender of the event
+ /// - eventArgs: The generalized event arguments of the event
+ /// - gameObjectCreatedEventArgs: The + /// for the event + ///
+ ///
+ /// + /// + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// using QModManager.Utility; + /// using UnityEngine; + /// + /// [Menu("SMLHelper Example Mod")] + /// public class Config : ConfigFile + /// { + /// [Toggle("My checkbox"), OnGameObjectCreated(nameof(MyGameObjectCreatedEvent))] + /// public bool ToggleValue; + /// + /// private void MyGameObjectCreatedEvent(GameObjectCreatedEventArgs e) + /// { + /// Logger.Log(Logger.Level.Info, "GameObject was created"); + /// Logger.Log(Logger.Level.Info, $"{e.Id}: {e.GameObject}"); + /// } + /// } + /// + /// + /// + /// + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = true)] + public sealed class OnGameObjectCreatedAttribute : ModOptionEventAttribute + { + /// + /// Signifies a method to call whenever the for the + /// corresponding to the decorated member is created. + /// + /// + /// The method must be a member of the same class. + /// + /// The name of the method within the same class to invoke. + public OnGameObjectCreatedAttribute(string methodName) : base(methodName) { } + } +} diff --git a/SMLHelper/Options/Attributes/OptionsMenuBuilder.cs b/SMLHelper/Options/Attributes/OptionsMenuBuilder.cs new file mode 100644 index 00000000..6ba8104e --- /dev/null +++ b/SMLHelper/Options/Attributes/OptionsMenuBuilder.cs @@ -0,0 +1,242 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System; + using System.Collections; + using System.Collections.Generic; + using System.Linq; + using UnityEngine; + using Logger = Logger; + + /// + /// An internal derivative of for use in auto-generating a menu based on attributes + /// declared in a . + /// + /// The type of the class derived from to use for + /// loading to/saving from disk. + internal class OptionsMenuBuilder : ModOptions where T : ConfigFile, new() + { + public ConfigFileMetadata ConfigFileMetadata { get; } = new ConfigFileMetadata(); + + /// + /// Instantiates a new , generating s by parsing the fields, + /// properties and methods declared in the class. + /// + public OptionsMenuBuilder() : base(null) + { + BindEvents(); + + ConfigFileMetadata.ProcessMetadata(); + + Name = ConfigFileMetadata.MenuAttribute.Name; + + // Conditionally load the config + if (ConfigFileMetadata.MenuAttribute.LoadOn.HasFlag(MenuAttribute.LoadEvents.MenuRegistered)) + ConfigFileMetadata.Config.Load(); + } + + private void BindEvents() + { + ConfigFileMetadata.BindEvents(); + + ButtonClicked += EventHandler; + ButtonClicked += EventHandler; + ChoiceChanged += EventHandler; + KeybindChanged += EventHandler; + SliderChanged += EventHandler; + ToggleChanged += EventHandler; + GameObjectCreated += EventHandler; + } + + private void EventHandler(object sender, EventArgs e) + { + if (!ConfigFileMetadata.Registered) + { + // if we haven't marked the options menu as being registered yet, its too soon to fire the events, + // so run a coroutine that waits until the first frame where Registered == true + // before routing the event + UWE.CoroutineHost.StartCoroutine(DeferredEventHandlerRoutine(sender, e)); + } + else + { + // otherwise, route the event immediately + RouteEventHandler(sender, e); + } + } + + private IEnumerator DeferredEventHandlerRoutine(object sender, EventArgs e) + { + yield return new WaitUntil(() => ConfigFileMetadata.Registered); + RouteEventHandler(sender, e); + } + + private void RouteEventHandler(object sender, EventArgs e) + { + switch (e) + { + case ButtonClickedEventArgs buttonClickedEventArgs: + ConfigFileMetadata.HandleButtonClick(sender, buttonClickedEventArgs); + break; + case ChoiceChangedEventArgs choiceChangedEventArgs: + ConfigFileMetadata.HandleChoiceChanged(sender, choiceChangedEventArgs); + break; + case KeybindChangedEventArgs keybindChangedEventArgs: + ConfigFileMetadata.HandleKeybindChanged(sender, keybindChangedEventArgs); + break; + case SliderChangedEventArgs sliderChangedEventArgs: + ConfigFileMetadata.HandleSliderChanged(sender, sliderChangedEventArgs); + break; + case ToggleChangedEventArgs toggleChangedEventArgs: + ConfigFileMetadata.HandleToggleChanged(sender, toggleChangedEventArgs); + break; + case GameObjectCreatedEventArgs gameObjectCreatedEventArgs: + ConfigFileMetadata.HandleGameObjectCreated(sender, gameObjectCreatedEventArgs); + break; + } + } + + #region Build ModOptions Menu + /// + /// Adds options to the menu based on the . + /// + public override void BuildModOptions() + { + // Conditionally load the config + if (ConfigFileMetadata.MenuAttribute.LoadOn.HasFlag(MenuAttribute.LoadEvents.MenuOpened)) + ConfigFileMetadata.Config.Load(); + + foreach (KeyValuePair> entry in ConfigFileMetadata.ModOptionAttributesMetadata + .OrderBy(x => x.Value.ModOptionAttribute.Order) + .ThenBy(x => x.Value.MemberInfoMetadata.Name)) + { + string id = entry.Key; + ModOptionAttributeMetadata modOptionMetadata = entry.Value; + + string label = modOptionMetadata.ModOptionAttribute.Label; + if (Language.main.TryGet(modOptionMetadata.ModOptionAttribute.LabelLanguageId, out string languageLabel)) + label = languageLabel; + + Logger.Debug($"[{ConfigFileMetadata.QMod.DisplayName}] [{typeof(T).Name}] {modOptionMetadata.MemberInfoMetadata.Name}: " + + $"{modOptionMetadata.ModOptionAttribute.GetType().Name}"); + Logger.Debug($"[{ConfigFileMetadata.QMod.DisplayName}] [{typeof(T).Name}] Label: {label}"); + + + switch (modOptionMetadata.ModOptionAttribute) + { + case ButtonAttribute _: + BuildModButtonOption(id, label); + break; + case ChoiceAttribute choiceAttribute: + BuildModChoiceOption(id, label, modOptionMetadata.MemberInfoMetadata, choiceAttribute); + break; + case KeybindAttribute _: + BuildModKeybindOption(id, label, modOptionMetadata.MemberInfoMetadata); + break; + case SliderAttribute sliderAttribute: + BuildModSliderOption(id, label, modOptionMetadata.MemberInfoMetadata, sliderAttribute); + break; + case ToggleAttribute _: + BuildModToggleOption(id, label, modOptionMetadata.MemberInfoMetadata); + break; + } + } + } + + /// + /// Adds a to the menu. + /// + /// + /// + private void BuildModButtonOption(string id, string label) + { + AddButtonOption(id, label); + } + + /// + /// Adds a to the menu. + /// + /// + /// + /// The metadata of the corresponding member. + /// The defined or generated of the member. + private void BuildModChoiceOption(string id, string label, + MemberInfoMetadata memberInfoMetadata, ChoiceAttribute choiceAttribute) + { + if (memberInfoMetadata.ValueType.IsEnum && (choiceAttribute.Options == null || !choiceAttribute.Options.Any())) + { + // Enum-based choice where the values are parsed from the enum type + string[] options = Enum.GetNames(memberInfoMetadata.ValueType); + string value = memberInfoMetadata.GetValue(ConfigFileMetadata.Config).ToString(); + AddChoiceOption(id, label, options, value); + } + else if (memberInfoMetadata.ValueType.IsEnum) + { + // Enum-based choice where the values are defined as custom strings + string[] options = choiceAttribute.Options; + string name = memberInfoMetadata.GetValue(ConfigFileMetadata.Config).ToString(); + int index = Math.Max(Array.IndexOf(Enum.GetNames(memberInfoMetadata.ValueType), name), 0); + AddChoiceOption(id, label, options, index); + } + else if (memberInfoMetadata.ValueType == typeof(string)) + { + // string-based choice value + string[] options = choiceAttribute.Options; + string value = memberInfoMetadata.GetValue(ConfigFileMetadata.Config); + AddChoiceOption(id, label, options, value); + } + else if (memberInfoMetadata.ValueType == typeof(int)) + { + // index-based choice value + string[] options = choiceAttribute.Options; + int index = memberInfoMetadata.GetValue(ConfigFileMetadata.Config); + AddChoiceOption(id, label, options, index); + } + } + + /// + /// Adds a to the menu. + /// + /// + /// + /// The metadata of the corresponding member. + private void BuildModKeybindOption(string id, string label, MemberInfoMetadata memberInfoMetadata) + { + KeyCode value = memberInfoMetadata.GetValue(ConfigFileMetadata.Config); + AddKeybindOption(id, label, GameInput.Device.Keyboard, value); + } + + /// + /// Adds a to the menu. + /// + /// + /// + /// The metadata of the corresponding member. + /// The defined or generated of the member. + private void BuildModSliderOption(string id, string label, + MemberInfoMetadata memberInfoMetadata, SliderAttribute sliderAttribute) + { + float value = Convert.ToSingle(memberInfoMetadata.GetValue(ConfigFileMetadata.Config)); + + float step = sliderAttribute.Step; + if (memberInfoMetadata.ValueType == typeof(int)) + step = Mathf.CeilToInt(step); + + AddSliderOption(id, label, sliderAttribute.Min, sliderAttribute.Max, + Convert.ToSingle(value), sliderAttribute.DefaultValue, + sliderAttribute.Format, step); + } + + /// + /// Adds a to the menu. + /// + /// + /// + /// The metadata of the corresponding member. + private void BuildModToggleOption(string id, string label, MemberInfoMetadata memberInfoMetadata) + { + bool value = memberInfoMetadata.GetValue(ConfigFileMetadata.Config); + AddToggleOption(id, label, value); + } + #endregion + } +} diff --git a/SMLHelper/Options/Attributes/SliderAttribute.cs b/SMLHelper/Options/Attributes/SliderAttribute.cs new file mode 100644 index 00000000..5298c47d --- /dev/null +++ b/SMLHelper/Options/Attributes/SliderAttribute.cs @@ -0,0 +1,87 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System; + + /// + /// Attribute used to signify the specified , or should be represented + /// in the mod's option menu as a . + /// + /// + /// + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// + /// [Menu("My Options Menu")] + /// public class Config : ConfigFile + /// { + /// [Slider("My Slider", 0, 50, DefaultValue = 25, Format = "{0:F2}")] + /// public float MySlider; + /// } + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] + public sealed class SliderAttribute : ModOptionAttribute + { + /// + /// The minimum value of the slider. + /// + public float Min { get; set; } = 0; + + /// + /// The maximum value of the slider. + /// + public float Max { get; set; } = 100; + + /// + /// The default value of the slider. + /// + public float DefaultValue { get; set; } + + /// + /// The format to use when displaying the value, e.g. "{0:F2}" or "{0:F0} %" + /// + public string Format { get; set; } = "{0:F0}"; + + /// + /// The step to apply to the slider (ie. round to nearest) + /// + public float Step { get; set; } = 0.05f; + + /// + /// Signifies the specified , or should be represented in the mod's + /// options menu as a . + /// + /// The label for the slider. If none is set, the name of the method will be used. + /// The minimum value of the slider. + /// The maximum value of the slider. + public SliderAttribute(string label, float min, float max) : base(label) + { + Min = min; + Max = max; + } + + /// + /// Signifies the specified , or should be represented in the mod's + /// options menu as a . + /// + /// The minimum value of the slider. + /// The maximum value of the slider. + public SliderAttribute(float min, float max) : this(null, min, max) { } + + /// + /// Signifies the specified , or should be represented in the mod's + /// options menu as a . + /// + /// The label for the slider. If none is set, the name of the method will be used. + public SliderAttribute(string label = null) : base(label) { } + + /// + /// Signifies the specified , or should be represented in the mod's + /// options menu as a . + /// + public SliderAttribute() { } + } +} diff --git a/SMLHelper/Options/Attributes/ToggleAttribute.cs b/SMLHelper/Options/Attributes/ToggleAttribute.cs new file mode 100644 index 00000000..01f4338c --- /dev/null +++ b/SMLHelper/Options/Attributes/ToggleAttribute.cs @@ -0,0 +1,41 @@ +namespace SMLHelper.V2.Options.Attributes +{ + using Json; + using System; + + /// + /// Attribute used to signify the decorated should be represented in the mod's + /// option menu as a . + /// + /// + /// + /// using SMLHelper.V2.Json; + /// using SMLHelper.V2.Options; + /// + /// [Menu("My Options Menu")] + /// public class Config : ConfigFile + /// { + /// [Toggle("My Toggle")] + /// public bool MyToggle; + /// } + /// + /// + /// + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] + public sealed class ToggleAttribute : ModOptionAttribute + { + /// + /// Signifies the decorated should be represented in the mod's option menu + /// as a . + /// + /// The label for the toggle. + public ToggleAttribute(string label = null) : base(label) { } + + /// + /// Signifies the decorated should be represented in the mod's option menu + /// as a . + /// + public ToggleAttribute() { } + } +} diff --git a/SMLHelper/Options/ButtonModOption.cs b/SMLHelper/Options/ButtonModOption.cs new file mode 100644 index 00000000..ad0d0628 --- /dev/null +++ b/SMLHelper/Options/ButtonModOption.cs @@ -0,0 +1,81 @@ +namespace SMLHelper.V2.Options +{ + using Interfaces; + using System; + using UnityEngine.Events; + using UnityEngine.UI; + + /// + /// Contains all the information about a button click event. + /// + public class ButtonClickedEventArgs : EventArgs, IModOptionEventArgs + { + /// + /// The ID of the that was clicked. + /// + public string Id { get; } + + /// + /// Constructs a new . + /// + /// The ID of the that was clicked. + public ButtonClickedEventArgs(string id) { this.Id = id; } + } + + public abstract partial class ModOptions + { + /// + /// The event that is called whenever a button is clicked. Subscribe to this in the constructor. + /// + protected event EventHandler ButtonClicked; + + /// + /// Notifies button click to all subscribed event handlers. + /// + /// The internal ID for the button option. + internal void OnButtonClicked(string id) => ButtonClicked(this, new ButtonClickedEventArgs(id)); + + /// + /// Adds a new to this instance. + /// + /// The internal ID for the button option. + /// The display text to use in the in-game menu. + protected void AddButtonOption(string id, string label) => AddOption(new ModButtonOption(id, label)); + } + + /// + /// A mod option class for handling a button that can be clicked. + /// + public class ModButtonOption : ModOption + { + internal override void AddToPanel(uGUI_TabbedControlsPanel panel, int tabIndex) + { + // Add button to GUI + Button componentInChildren = panel.AddItem(tabIndex, panel.buttonPrefab, Label).GetComponentInChildren