diff --git a/#CMI.iss b/#CMI.iss index d9fb91e..cf01727 100644 --- a/#CMI.iss +++ b/#CMI.iss @@ -2,10 +2,10 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "COM Modular Installer" -#define MyAppVersion "2.5.7" +#define MyAppVersion "2.5.11" #define MyAppURL "https://github.com/krypto5863/COM-Modular-Installer" #define MinimumVersion 20900 -#define CRStartVersion 30900 +#define CRStartVersion 31300 #define CRMinimumVersion 30100 @@ -127,7 +127,11 @@ Name:"none"; Description:{cm:TypeNone}; Name: Loader; Description: {cm:ModLoader}; Types: full compact; Name: Loader/bepinEX; Description: {cm:BepinEx}; Types: full notr compact eng pic self hen; Flags:Exclusive checkablealone + Name: Loader/bepinEX/addyot; Description: AddYotogiSliderSE2; Types: Full compact eng notr hen self; + Name: Loader/bepinEX/AdvMatMod; Description: AdvancedMaterialModifier; Types: self; Flags: dontinheritcheck; + + Name: Loader/bepinEX/autosave; Description: AutoSave; Types: Full eng notr hen self; Name: Loader/bepinEX/cameracon; Description:CameraControlEx; Types:full pic eng notr self; @@ -150,6 +154,8 @@ Name: Loader; Description: {cm:ModLoader}; Types: full compact; Name: Loader/bepinEX/FPSCount; Description: FPSCounter; Types: self; Flags: dontinheritcheck; Name: Loader/bepinEX/FPSUn; Description: FPSUnlock; Types: self; Flags: dontinheritcheck; + + Name: Loader/bepinEX/GearFix; Description: GearMenuFix; Types:full notr compact eng pic self hen; Flags: dontinheritcheck; Name: Loader/bepinEX/InBlock; Description: InputHotkeyBlock; Types: full notr compact eng pic self hen; Flags: dontinheritcheck; @@ -165,9 +171,17 @@ Name: Loader; Description: {cm:ModLoader}; Types: full compact; Name: Loader/bepinEX/scriptloader; Description: ScriptLoader; Types: Full notr compact eng pic self hen; Flags: dontinheritcheck; Name: Loader/bepinEX/scriptloader/oldsubs; Description: Add Subs to Old Yotogi Script; Flags: dontinheritcheck; Name: Loader/bepinEX/scriptloader/allprivate; Description: All Maids In Private Mode Script; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/charactersortredux; Description: Character Edit Sort Redux Script; Types: Full notr eng self hen; Flags: dontinheritcheck; Name: Loader/bepinEX/scriptloader/dumpinfo; Description: DumpGameInfo Script; Types: Full notr compact eng pic self hen; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/blinkstop; Description: EditBlinkStop Script; Types: Full notr eng pic self hen; Flags: dontinheritcheck; Name: Loader/bepinEX/scriptloader/editname; Description: EditableNames Script; Types: Full notr compact eng pic self hen; Flags: dontinheritcheck; - Name: Loader/bepinEX/scriptloader/enascout; Description: Enable Scout Mode Script; Types: Full notr eng pic self hen; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/enascout; Description: Enable Scout Mode Script; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/fastfade; Description: FastFade Script; Types: Full notr eng pic self hen; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/forceschedule; Description: ForceScheduleEvents Script; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/unlockmemories; Description: MemoriesModeUnlock Script; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/nameext; Description: NameExtender Script; Types: Full compact eng notr pic self hen; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/savesettings; Description: SaveSettingsInGame Script; Types: Full compact eng notr pic self hen; Flags: dontinheritcheck; + Name: Loader/bepinEX/scriptloader/skiplogo; Description: SkipStartLogo Script; Types: Full notr compact eng pic self hen; Flags: dontinheritcheck; Name: Loader/bepinEX/scriptloader/thumbs; Description: Load Small Thumbs Script; Flags: dontinheritcheck; Name: Loader/bepinEX/scriptloader/quickedit; Description: Quick Edit Scene Script; Flags: dontinheritcheck; Name: Loader/bepinEX/scriptloader/redupe; Description: Report Dupes Script; Types: Full compact eng notr pic self hen; Flags: dontinheritcheck; @@ -186,23 +200,25 @@ Name: Loader; Description: {cm:ModLoader}; Types: full compact; Name: Loader/bepinEX/OptIMGUI; Description: OptimizeIMGUI; Types: Full notr compact eng pic self hen; Flags: dontinheritcheck; - Name: Loader/Sybaris; Description:{cm:Sybaris} ;Flags: Exclusive checkablealone + Name: Loader/bepinEX/UndressUtil; Description: UndressUtil; Types: Full notr compact eng pic self hen; Flags: dontinheritcheck; + + ;Name: Loader/Sybaris; Description:{cm:Sybaris} ;Flags: Exclusive checkablealone - Name: Loader/Sybaris/Translations; Description:{cm:TranslationPlugs} (Syb); Flags: dontinheritcheck + ;Name: Loader/Sybaris/Translations; Description:{cm:TranslationPlugs} (Syb); Flags: dontinheritcheck //Name: Loader/Sybaris/Translations/i18nEx; Description: i18nEx (Syb); //Name:Loader/Sybaris/Translations/i18nEx/extrans; Description:{cm:ExtraTrans} (Syb); Flags: dontinheritcheck; - Name: Loader/Sybaris/Translations/xuat; Description: XUnity AutoTranslator (Syb); - Name: Loader/Sybaris/cacheedit; Description: CacheEditMenu; - Name: Loader/Sybaris/CCfix; Description: CreatorSaveFix; - Name: Loader/Sybaris/quickedit; Description: QuickEditStart; + ;Name: Loader/Sybaris/Translations/xuat; Description: XUnity AutoTranslator (Syb); + ;Name: Loader/Sybaris/cacheedit; Description: CacheEditMenu; + ;Name: Loader/Sybaris/CCfix; Description: CreatorSaveFix; + ;Name: Loader/Sybaris/quickedit; Description: QuickEditStart; Name: Patchers; Description: Patchers; types: full compact eng pic self hen; - Name: Patchers/addscreen; Description: AddScreenSize; Types: full eng notr self ; + ;Name: Patchers/addscreen; Description: AddScreenSize; Types: full eng notr self ; Name: Patchers/autocon; Description: AutoConverter; Types: full compact eng notr pic self hen; Name: Patchers/bodycat; Description: BodyCategoryAdd; Types: full compact eng notr pic self hen; - Name: Patchers/blinkstop; Description: EditBlinkStop; Types: full eng notr pic self hen; + //Name: Patchers/blinkstop; Description: EditBlinkStop; Types: full eng notr pic self hen; Name: Patchers/extsave; Description: ExternalSaveData; Types: Full self pic eng notr hen; Flags: checkablealone; Name: Patchers/extsave/vibemaid; Description:VibeYourMaid; Name: Patchers/extsave/maidvoice; Description: MaidVoicePitch; Types: full self pic eng notr hen; Flags: checkablealone; @@ -211,22 +227,21 @@ Name: Patchers; Description: Patchers; types: full compact eng pic self hen; Name: Patchers/extsave/maidvoice/addmod/eyelashesalpha; Description:EyelashesAlpha; Types:; Flags: checkablealone; Name: Patchers/extsave/maidvoice/addmod/seperateeye; Description:SeperateEyeParams; Types:full self pic eng notr hen; Flags: checkablealone; Name: Patchers/facetype; Description: FaceType; Types:full compact self pic eng notr hen; - Name: Patchers/fastfade; Description: FastFade; Types: self pic; + //Name: Patchers/fastfade; Description: FastFade; Types: self pic; Name: Patchers/imgui; Description: IMGUITranslationLoader; types: full compact eng pic hen; Flags: checkablealone; Name:Patchers/imgui/translations; Description: {cm:IMGUITrans}; Types:full compact eng pic self hen; Name: Patchers/modloader; Description: ModLoader; types: full compact eng notr pic self hen; - Name: Patchers/namext; Description: NameExtender; Types: full compact self pic eng notr hen; + //Name: Patchers/namext; Description: NameExtender; Types: full compact self pic eng notr hen; Name: Patchers/neighuncen; Description: NeighUncensor; Types: full compact eng notr pic self hen; Name: Patchers/ntrlight; Description: NTRLight; Types:; Name: Patchers/rgbpal; Description: RGBPalette; - Name: Patchers/saveset; Description: SaveSettingsInGame; Types: full compact self pic eng notr hen; + //Name: Patchers/saveset; Description: SaveSettingsInGame; Types: full compact self pic eng notr hen; Name: plugins; Description: Unityinjector Plugins; Types: full compact; - Name: plugins/addyot; Description: AddYotogiSliderSE; Types: Full compact eng notr hen self; Name: plugins/accex; Description: AlwaysColorChangeEX; Types: full self pic eng notr hen; Name: plugins/eraseout; Description: AutoEraseOutline; types: full pic eng notr hen; Name: plugins/camerautil; Description: CameraUtility; Types: Full pic self eng notr hen; - Name: plugins/hudclock; Description:ClockHud; + ;Name: plugins/hudclock; Description:ClockHud; Name: plugins/colorhelp; Description: ColorPaletteHelper; Types:full self pic eng notr hen; Name: plugins/conwindow; Description:ConsistentWindowPosition; Types:full self pic eng notr hen; Name: plugins/nyou; Description:CustomNyou(Why...); @@ -240,8 +255,8 @@ Name: plugins; Description: Unityinjector Plugins; Types: full compact; Name: plugins/emoears/mod; Description:{cm:EmoEarsMod}; Types:self; Flags:dontinheritcheck Name: plugins/extendrender; Description:ExtendRenderingRange; Types:full eng notr self pic; Name: plugins/extendrender/config; Description:x10 Extend Config; Types:self; Flags:dontinheritcheck - Name: plugins/facecon; Description:FaceControl; Types:pic; - Name: plugins/freedress; Description:FreeModeDressKeeper; Types:full self eng notr hen; + ;Name: plugins/facecon; Description:FaceControl; Types:pic; + ;Name: plugins/freedress; Description:FreeModeDressKeeper; Types:full self eng notr hen; Name: plugins/inout; Description:InOutAnimation; Types:full eng notr self hen; Name: plugins/mirror; Description:Mirror Props; Types:full eng notr; Name: plugins/mtacc; Description: MtAccelerator; @@ -256,7 +271,7 @@ Name: plugins; Description: Unityinjector Plugins; Types: full compact; Name: plugins/personaledit; Description:PersonalizedEditSceneSettings; Types:full pic self eng notr hen; Name: plugins/plugmanage; Description:PluginManager; Types:full pic eng notr; Name: plugins/PluginExt; Description:{cm:PluginExt}; Types:full compact pic self eng notr compact; - Name: plugins/PluginExt/freeapp; Description:FreeModeApp; Types:full self eng notr hen; Flags:dontinheritcheck + //Name: plugins/PluginExt/freeapp; Description:FreeModeApp; Types:full self eng notr hen; Flags:dontinheritcheck Name: plugins/PluginExt/halfundress; Description:HalfUnDressing; Types:full eng notr hen; Flags:dontinheritcheck; Name: plugins/PluginExt/lookmaid; Description:LookAtYourMaid; Flags:dontinheritcheck Name: plugins/PluginExt/lookmaster; Description:LookAtYourMaster; Flags:dontinheritcheck diff --git a/AssetDownloadHandler.iss b/AssetDownloadHandler.iss index c5aef4e..4846487 100644 --- a/AssetDownloadHandler.iss +++ b/AssetDownloadHandler.iss @@ -49,19 +49,22 @@ var suf : WideString; dlink: WideString; links: TListOfAssets; - I: integer; + I: integer; + downloadDone: boolean; begin DownloadPage.Clear(); //These have more conditions and require version specific links and care. AddToListOfAssets(links , 'Loader/bepinEX/MuteBack', 'BepInEx/BepInEx.Utility', '' ,'MuteInBackground.zip', true, 'MuteInBackground', ''); AddToListOfAssets(links , 'Loader/bepinEX/RunUniEdit', 'ManlyMarco/RuntimeUnityEditor', '' ,'RuntimeUnityEditor.zip', true, 'RuntimeUnityEditor', ''); - AddToListOfAssets(links , 'Loader/bepinEX/OptIMGUI', 'BepInEx/BepInEx.Utility', '' ,' BepInEx.OptimizeIMGUI.v1.0.zip', true, 'OptimizeIMGUI', ''); + AddToListOfAssets(links , 'Loader/bepinEX/OptIMGUI', 'BepInEx/BepInEx.Utility', '' ,'BepInEx.OptimizeIMGUI.v1.0.zip', true, 'OptimizeIMGUI', ''); #if LMMT == false AddToListOfAssets(links , 'Loader/bepinEX/COM3D2API', 'DeathWeasel1337/COM3D2_Plugins', '' ,'COM3D2.API.v1.0.zip', true, 'COM3D2.API', ''); AddToListOfAssets(links , 'Loader/bepinEX/CM3D2Toolkit', 'JustAGuest4168/CM3D2.Toolkit', 'BepInEx\plugins\' ,'CM3D2.Toolkit.Guest4168Branch.dll', true, 'CM3D2.Toolkit', ''); AddToListOfAssets(links , 'Loader/bepinEX/InBlock', 'DeathWeasel1337/COM3D2_Plugins', '' ,'InputHotkeyBlock.zip', true, 'InputHotkeyBlock', ''); AddToListOfAssets(links , 'Loader/bepinEX/FixEyeMov', '01010101lzy/gettapped/releases', '' ,'FixEyeMov.zip', true, 'FixEyeMov', ''); //These can be fetched straight from the latest releases. + AddToListOfAssets(links , 'Loader/bepinEX/addyot', 'Vin-meido/COM3D2.AddYotogiSliderSE.Plugin', '' ,'COM3D2.AddYotogiSliderSE2.Plugin.zip', false, 'COM3D2.AddYotogiSliderSE2.Plugin.zip', ''); + AddToListOfAssets(links , 'Loader/bepinEX/autosave', 'Pain-Brioche/COM3D2.AutoSave', 'BepInEx\plugins\' ,'COM3D2.AutoSave.dll', false, '', ''); AddToListOfAssets(links , 'Loader/bepinEX/ConfigMan', 'BepInEx/BepInEx.ConfigurationManager', '' ,'ConfigManager.zip', false, '', ''); AddToListOfAssets(links , 'Loader/bepinEX/FPSCount', 'ManlyMarco/FPSCounter', '' ,'FPSCounter.zip', false, '', ''); AddToListOfAssets(links , 'Loader/bepinEX/ShiftClick', 'krypto5863/COM3D2.ShiftClickExplorer', 'BepInEx\plugins\' ,'COM3D2.ShiftClickExplorer.dll', false, '', ''); @@ -70,8 +73,10 @@ begin AddToListOfAssets(links , 'Loader/bepinEX/CM3D2Toolkit/ShortVanilla', 'krypto5863/COM3D2.ShortMenuVanillaDatabase', '' ,'ShortMenuVanillaDatabase.zip', false, '', ''); AddToListOfAssets(links , 'Loader/bepinEX/ExErrorHandle', 'krypto5863/COM3D2.ExtendedErrorHandling', 'BepInEx\plugins\' ,'COM3D2.ExtendedErrorHandling.dll', false, '', ''); AddToListOfAssets(links , 'Loader/bepinEX/ExPresetMan', 'krypto5863/COM3D2.ExtendedPresetManagement', 'BepInEx\plugins\' ,'COM3D2.ExtendedPresetManagement.dll', false, '', ''); + AddToListOfAssets(links , 'Loader/bepinEX/UndressUtil', 'Vin-meido/COM3D2.UndressUtil', '' ,'COM3D2.UndressUtil.zip', false, 'COM3D2.UndressUtil.zip', ''); AddToListOfAssets(links , 'ext/dlccheck', 'krypto5863/COM3D2_DLC_Checker', '' ,'COM3D2 DLC Checker.exe', false, '', ''); AddToListOfAssets(links , 'ext/maidfiddle', 'denikson/COM3D2.MaidFiddler', '' ,'MFInstall.exe', false, '', ''); + if IsCR then begin @@ -93,7 +98,7 @@ begin end else begin - FetchLRelease(links[i].Link, links[i].SearchString , dlink); + FetchDRelease(links[i].Link, links[i].SearchString, '' , dlink); end; DownloadPage.Add(dlink, links[i].Output + links[i].File, ''); @@ -101,16 +106,27 @@ begin end; DownloadPage.Show; - try - try - DownloadPage.Download; - except - MsgBox(CustomMessage('AssetDownloadFailed'), mbInformation, MB_OK); - //SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbCriticalError, MB_OK, IDOK); - end; - finally - DownloadPage.Hide; - end; + + while downloadDone = false do + begin + try + try + DownloadPage.Download; + DownloadDone := true + except + if SuppressibleMsgBox(CustomMessage('AssetDownloadFailed'), mbError, MB_YESNO, IDNO) = IDNO then + begin + DownloadDone := true + end + else + begin + DownloadDone := false + end + end; + finally + DownloadPage.Hide; + end + end; for i := 0 to GetArrayLength(links) - 1 do begin diff --git a/CMI/CMIExclusive.iss b/CMI/CMIExclusive.iss index a6ca083..b628f02 100644 --- a/CMI/CMIExclusive.iss +++ b/CMI/CMIExclusive.iss @@ -37,6 +37,7 @@ Function FixComponents(): Boolean; var NonCR: Array of string; NonEng: Array of string; + CRComps: Array of string; I: Integer; begin //If english version is detected, run the below code. @@ -76,15 +77,17 @@ begin CustomMessage('EmoEarsAhoge'), 'EmotionalEars(and tails)', 'EditSceneUndo', - 'SaveSettingsInGame', 'VibeYourMaid', 'BodyCategoryAdd', 'Wrap Mode Extend Script', 'Error Texture Placeholder Script', 'MeidoPhotoStudio', '1900 Poses for MPS', - 'ExtendedErrorHandling', - 'ShapekeyMaster' + //'ExtendedErrorHandling', + //'ShapekeyMaster', + //'ShortMenuLoader', + 'AlwaysColorChangeEX', + 'AdvancedMaterialModifier' ]; for I := 0 to GetArrayLength(NonCR)-1 do @@ -94,7 +97,18 @@ begin if (Wizardform.ComponentsList.Checked[GetComponentIndex('ShapeAnimator')]) then Wizardform.ComponentsList.CheckItem(GetComponentIndex('Standard SA'), coCheck); - end + end + else//Not CR + begin + CRComps := [ + 'GearMenuFix' + ]; + + for I := 0 to GetArrayLength(CRComps)-1 do + begin + RemoveComponent(CRComps[I]); + end; + end end; Function HandleSer(const GamePath: String): Boolean; diff --git a/CMI/Messages/English.isl b/CMI/Messages/English.isl index 5b8ccd7..9381e56 100644 --- a/CMI/Messages/English.isl +++ b/CMI/Messages/English.isl @@ -70,7 +70,7 @@ TypeEng=Non-Japanese Localizations AIO-Like TypeNoTr=No Translations AIO-Like TypePic=I just take pictures TypeHen=I just play, I don't take pictures -TypeSelf=My Selections +TypeSelf=Doc's Selections TypeCustom=Okay, make your own choices TypePreset=Custom Preset TypeNone=I want nothing! @@ -112,7 +112,7 @@ MoveOldExcep=An exception was tossed while trying to move the old installation t MoveOldModExcep=An exception was tossed while trying to move the old mods to the old folder! Ensure that no game application is open and that none of the files or folders are open anywhere!! We are quitting to keep your data safe! Refer to the readme for troubleshooting steps!!! CannotRenameOld=The OldInstall folder could not be renamed but the installation is already complete. As a result, we will not abort as the error is harmless. It should be automatically renamed the next time CMI is run. -AssetDownloadFailed=We failed to download files for some of the components selected. Please ensure that you are connected to the internet and have a functioning connection before trying again. Otherwise, you can continue the installation, the missing assets simply will not be installed. +AssetDownloadFailed=We failed to download files for some of the components selected. Please ensure that you are connected to the internet and have a functioning connection before trying again. Select YES to re-attempt the download. Otherwise press no and you can continue the installation, the missing assets simply will not be installed. SerializePrompt=We noticed you have a file that causes save data to be placed in the user Documents directory (serialize_storage_config.cfg). Normally this is removed, but it does not hurt to leave it. Shall we remove this file and place your savedata back in the game folder?' SerializeDeleteFail=Failed to delete the file at %1\serialize_storage_config.cfg for an unknown reason! diff --git a/CMI/Messages/English.isl.bak b/CMI/Messages/English.isl.bak new file mode 100644 index 0000000..2fef6ea --- /dev/null +++ b/CMI/Messages/English.isl.bak @@ -0,0 +1,124 @@ +; *** 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). + +; %1-%9: These are parameters that are replaced when loaded. +; %n: New line character. +[Messages] + +WizardSelectDir=Select Game Location +SelectDirLabel3=Please select your COM3D2 install directory below! Example: C:\KISS\COM3D2 +SelectDirDesc=Where is your game located? + +[CustomMessages] + +;Startup Messages +IsGameCR=Is this version of COM to which we are installing today 3.0 or higher? In other words, is it a CR-Edit version(COM3D2.5)?%n%nEnglish versions are never 3.0 and are incompatible at versions 1.09 and below. +GameIsCRWarning=Keep in mind, CR-Edit versions (AKA 3.0+ versions, AKA COM3D2.5) have diminished mod and plugin support. You may find several plugins are unavailable on these versions that are available on none CR-Edit versions and you may even find bugs that have not yet been corrected by plugin devs. You have been warned! + +ScamWarning=If you paid for CMI or downloaded it from anywhere that is not the official GitHub page, then you have been scammed or misled! +StorageSpaceLow=We detected that your AppData containing partition(Typically your C drive) does not have enough free space for cache. Please clear a minimum of 5 GiBs to install CMI. You Have %1MBs +StorageSpaceLow2=The drive holding the path you have selected does not contain enough space to safely install CMI. Please clear a minimum of 5 GiBs to install CMI to this directory: You have %1MBs +OutdatedInstaller=This installer is outdated and likely incompatible with new assets/versions! You may continue the installation but you continue at your own risk! +ReadmeRead=Did you read the readme? Failure to read it will void you any chance of receiving support +ReadmeExit=Go back and read it before installing CMI + +EnglishVersionAlert=If you are not on an English version of the game quit the install right now and refer to the readme!!%n%nEnglish version was found!! Be advised, English versions are not as feature full or as supported as the Japanese version! +EnglishVersionCompatibility=Translation plugins and related components can be harmful or incompatible to your English game.%n%nShould we disable these components in order to keep you safe? (Recommended) +CRVersionAlert=If you are not on a CR (COM3D2.5) version of the game quit the install right now and refer to the readme!!%n%nCR version was found!! Be advised, CR versions are not as feature full or as supported as the standard version! Some components will be disabled for your safety! + +CMDetected=This is CM3D2 not COM3D2! CMI was not made for CM3D2! For CM3D2, please use Legacy Meido Modular Toolbox (LMMT) +NotaGameDir=This does not appear to be a COM3d2 Directory! We can still continue the installation but you may be installing to the wrong directory, some functions will also be rendered ineffectual. Do we continue anyways? +ImproperUpdate=We have detected that this game instance was updated improperly!(Usually by a drag and drop process) This is completely unsafe and WILL break your game.%n%nDue to this CMI will not install as you may encounter further errors and bugs if we continue. Please reinstall your game and update CORRECTLY (By placing the update/DLC files in an empty directory and using the provided update.exe or selector.exe) to continue. +IsInDownload=It seems your game is located in the Downloads directory, this can cause issues with UAC and lead to improper CMI installs! Please move it somewhere safer (Example: C:/KISS/COM3D2) +IsInProgramFiles=It seems your game is located in the Program Files directory, this can cause issues with UAC and lead to improper CMI installs! Please move it somewhere safer (Example: C:/KISS/COM3D2) +IsINM=We have detected INM! INM is not supported by CMI due to technical differences.%n%nTo use CMI, please install the R18/Adult Content Supplement Patch.%n%nIf your are not actually on an INM version of the game, then you have likely installed Eng DLC/files into your japanese game. Please refer to the readme on repair instructions. + +GameOutdated=Your game is outdated! Please update it immediately.%n%nMinimum Version: %1%n%nFound Version: %2 +GameUpdateNotSupported=We cannot update CR-edit versions of the game via the installer because it requires extra steps. Please update your game manually. + +MissingUpdateLst=While this appears to be a game folder, there is no Update.lst file! This is very bad!%n%nPlease update your game immediately and ensure that your game is functioning before attempting to install CMI again. +VersionFetchLoadFail=Could not load strings from %1 +VersionFetchNoVersion=While we managed to find the Update.lst file, the line containing: %1 could not be found! If you are on the Japanese version, this is can be a real problem! Please update immediately! +VersionFetchLineCleanFail=Could not clean the line containing the version we need in order to parse... Please update your game and try again. Otherwise, report this to the dev with your update.lst file' +VersionFetchParseFail=An error occurred while parsing the version number... Please update your game and try again. Otherwise, report this to the dev. + +UpdatePrompt=Would you like us to try to download the latest update and run the updater? This generally is not recommended, as it can be unstable. You will still need to follow the instructions in the installer that shows up, and this way of updating is not as safe or as reliable as manually updating.%n%nThe update may take a while to download as the download itself can be around 3GBs in size and Kiss servers can be VERY slow so be patient.%n%nPressing no will open the update download website. +UpdateFetchFail=Either you are already on the latest version available to you and you need to wait for a new game update(English Users) or we failed to fetch updates.%n%nIt is recommended you manually update your game instead if you believe that you are not on the latest available version for your game. + +DownloadFinish=Performing download finished tasks. Standby... +DownloadWPercent=%1 MBs of %2 MBs done = %3%% +DownloadNoPercent=%1 MBs done +ExtractingCaption=Now extracting %1. Please standby... + +EnsureGameClosed=Please ensure no game folders or game instances are open or you will have a bad install! + +GameTypeChangedExit=Due to changes made to the installer when disabling components, the installer needs to be restarted in order to revert these changes and allow you to safely use previous pages. Would you like to quit the installer now? + +CannotLoadPreset=Failed to load preset file at %1 +ConfirmPresetSave=It appears you already have a preset here for your component selections. Should we overwrite it with your current selection? Whatever you selected will still be applied, the selection simply will not be saved for the next time + +TypeCompact=Basic Install +TypeFull=Similar to Noctsoul's AIO +TypeEng=Non-Japanese Localizations AIO-Like +TypeNoTr=No Translations AIO-Like +TypePic=I just take pictures +TypeHen=I just play, I don't take pictures +TypeSelf=Doc's Selections +TypeCustom=Okay, make your own choices +TypePreset=Custom Preset +TypeNone=I want nothing! + +ModLoader=Mod Loader (Required for just about everything) +BepinEx=BepInEX (Recommended) +Sybaris=Sybaris 2.1 (Not Recommended, JUST DON'T USE IT) +TranslationPlugs=Translation Plugins +ExtraTrans=Extra Translations +IMGUITrans=Plugin Translations +EmoEarsAhoge=Ahoge meshes +EmoEarsMod=Ear and tail meshes +NPRLightConfig=Lightweight Config +PluginExt=PluginExt (Required by a few other plugins. Recommended) +PNGPlaceExtraPNG=More PNGs +MiscFiles=Miscelleanous Files +StudioPoses=1900+ Poses for Studio Mode +AddMoreBG=Add More Game BGs to Photo Mode(And MM) +Uncensor=Uncensored Vanilla Textures +UncensorMale=Male Penis Replacer +ExtraUncensorMale=More Penis Variants +BodyReplacers=Body Replacers +ExternalFiles=External Files +MaidFiddler=Maid Fiddler (Dangerous!) + +FixRegistry=Fix Registry Directory +Clean=Cleaning Tasks +CleanGroup=Cleaning tasks to execute before installing +MoveOld=Move old installations to old folder +MoveOldMods=Also move installer installed Mods (This will also move any saved MM poses) +PlaceConfigBack=Place configurations back (Warning! This can overwrite updated configs. Not suggested) +DeleteOld=Delete previous installations (WARNING: VERY DESTRUCTIVE, YOU WILL LOSE ANY SYBARIS OR BEPINEX FOLDERS) +DeleteOldMods=Delete any mods installed by the Installer too(This will delete all of your saved MM Poses too) +DeleteOldInstalls=Delete any old installs aswell +RemoveReadOnly=Remove Read-Only Flag On All Files +RemoveReadOnlyGroup=Many users experience issues thanks to irroneously set Read-Only flags by the system. This tries to fix that, though due to permissions, UAC or other factors, it may not always work. It can always be done manually, however + +MoveOldExcep=An exception was tossed while trying to move the old installation to the old folder! Ensure that no game application is open and that none of the files or folders are open anywhere!! We are quitting to keep your data safe! Refer to the readme for troubleshooting steps!!! +MoveOldModExcep=An exception was tossed while trying to move the old mods to the old folder! Ensure that no game application is open and that none of the files or folders are open anywhere!! We are quitting to keep your data safe! Refer to the readme for troubleshooting steps!!! +CannotRenameOld=The OldInstall folder could not be renamed but the installation is already complete. As a result, we will not abort as the error is harmless. It should be automatically renamed the next time CMI is run. + +AssetDownloadFailed=We failed to download files for some of the components selected. Please ensure that you are connected to the internet and have a functioning connection before trying again. Select YES to reattempt the download. Otherwise press no and you can continue the installation, the missing assets simply will not be installed. + +SerializePrompt=We noticed you have a file that causes save data to be placed in the user Documents directory (serialize_storage_config.cfg). Normally this is removed, but it does not hurt to leave it. Shall we remove this file and place your savedata back in the game folder?' +SerializeDeleteFail=Failed to delete the file at %1\serialize_storage_config.cfg for an unknown reason! +SerializeCopyFail=Failed to copy the files at %1 for an unknown reason! + +MFInstall=Waiting for Maid Fiddler installer to finish... (Users must follow the installer that opens!) + +Survey=Open the Feedback Survey for CMI +OfficialPage=Open the Official CMI Download Site \ No newline at end of file diff --git a/CMI/files.iss b/CMI/files.iss index 08675eb..88ea3d8 100644 --- a/CMI/files.iss +++ b/CMI/files.iss @@ -1,5 +1,6 @@ #define bep "{app}\bepinEx" #define bepp "{app}\bepinEx\plugins" +#define beppa "{app}\bepinEx\patchers" #define syb "{app}\Sybaris" #define plug "{app}\Sybaris\UnityInjector" #define ucfg "{app}\Sybaris\UnityInjector\config" @@ -17,7 +18,11 @@ //Loader Section Source: "{#ibep}\Core\*"; DestDir: "{app}"; Components: Loader/bepinEX; Flags: ignoreversion recursesubdirs createallsubdirs; + Source: "{tmp}\BepInEx\plugins\COM3D2.AddYotogiSliderSE2.Plugin.dll"; DestDir: "{#bepp}"; Components: Loader/bepinEX/addyot; Flags: external + Source: "{tmp}\BepInEx\plugins\COM3d2.AdvancedMaterialModifier.Plugin.dll"; DestDir: "{#bepp}"; Components: Loader/bepinEX/AdvMatMod; Flags: external + + Source: "{tmp}\BepInEx\plugins\COM3D2.AutoSave.dll"; DestDir: "{#bepp}"; Components: Loader/bepinEX/autosave; Flags: external Source: "{#ibep}\CamConEx\*"; DestDir: "{#bepp}"; Components: Loader/bepinEX/cameracon; Flags: ignoreversion recursesubdirs createallsubdirs @@ -57,13 +62,20 @@ Source: "{#ibep}\Core\*"; DestDir: "{app}"; Components: Loader/bepinEX; Flags: i Source: "{#ibep}\ScriptLoader\Core\ScriptLoader.dll"; DestDir: "{#bepp}"; Components: Loader/bepinEX/scriptloader; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\all_maids_in_private_mode.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/allprivate; Flags: ignoreversion recursesubdirs createallsubdirs - Source: "{#ibep}\ScriptLoader\Scripts\add_subs_to_old_yotogi.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/oldsubs; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\add_subs_to_old_yotogi.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/oldsubs; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\CharacterEditSortRedux.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/charactersortredux; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\dump_game_info.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/dumpinfo; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\editable_names.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/editname; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\editBlinkStop.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/blinkstop; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\enable_scout_mode.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/enascout; Flags: ignoreversion recursesubdirs createallsubdirs - //Source: "{#ibep}\ScriptLoader\Scripts\error_texture_placeholder.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/errtex; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\fastFade.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/fastfade; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\ForceScheduleEvents.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/ForceSchedule; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\load_small_thumbs.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/thumbs; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\MemoriesModeUnlock.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/unlockmemories; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\nameExtender.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/nameext; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\quick_edit_scene.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/quickedit; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\saveSettingsInGame.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/savesettings; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{#ibep}\ScriptLoader\Scripts\skipStartLogo.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/skiplogo; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\report_dupes.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/redupe; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\unlock_all_skills.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/unlockskills; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\ScriptLoader\Scripts\wrap_mode_extend.cs"; DestDir: "{app}\scripts"; Components: Loader/bepinEX/scriptloader/wrapmode; Flags: ignoreversion recursesubdirs createallsubdirs @@ -76,19 +88,21 @@ Source: "{#ibep}\Core\*"; DestDir: "{app}"; Components: Loader/bepinEX; Flags: i Source: "{#ibep}\ResourceRedirector\*"; DestDir: "{#bep}"; Components: Loader/bepinEX/Translations/Resredir; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#ibep}\Xuat\*"; DestDir: "{#bepp}"; Components: Loader/bepinEX/Translations/resredir/xuat; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#isyb}\Core\*"; DestDir: "{app}"; Components: Loader/Sybaris; Flags: ignoreversion recursesubdirs createallsubdirs + Source: "{tmp}\BepInEx\plugins\COM3D2.UndressUtil.dll"; DestDir: "{#bepp}"; Components: Loader/bepinEX/UndressUtil; Flags: external + +//Source: "{#isyb}\Core\*"; DestDir: "{app}"; Components: Loader/Sybaris; Flags: ignoreversion recursesubdirs createallsubdirs //Source: "{#isyb}\i18nEx\*"; DestDir: "{app}"; Components: Loader/Sybaris/Translations/i18nEx; Flags: ignoreversion recursesubdirs createallsubdirs //Source: "{#iloader}\extratranslations\*"; DestDir: "{app}"; Components: Loader/Sybaris/Translations/i18nEx/extrans; Flags: ignoreversion recursesubdirs createallsubdirs - Source: "{#isyb}\Xuat\*"; DestDir: "{#plug}"; Components: Loader/Sybaris/Translations/xuat; Flags: ignoreversion recursesubdirs createallsubdirs - Source: "{#isyb}\QuickEdit\*"; DestDir: "{#syb}"; Components: Loader/Sybaris/QuickEdit; Flags: ignoreversion recursesubdirs createallsubdirs - Source: "{#isyb}\CacheEdit\*"; DestDir: "{#syb}"; Components: Loader/Sybaris/cacheedit; Flags: ignoreversion recursesubdirs createallsubdirs - Source: "{#isyb}\ccfix\*"; DestDir: "{#syb}"; Components: Loader/Sybaris/ccfix; Flags: ignoreversion recursesubdirs createallsubdirs + //Source: "{#isyb}\Xuat\*"; DestDir: "{#plug}"; Components: Loader/Sybaris/Translations/xuat; Flags: ignoreversion recursesubdirs createallsubdirs + //Source: "{#isyb}\QuickEdit\*"; DestDir: "{#syb}"; Components: Loader/Sybaris/QuickEdit; Flags: ignoreversion recursesubdirs createallsubdirs + //Source: "{#isyb}\CacheEdit\*"; DestDir: "{#syb}"; Components: Loader/Sybaris/cacheedit; Flags: ignoreversion recursesubdirs createallsubdirs + //Source: "{#isyb}\ccfix\*"; DestDir: "{#syb}"; Components: Loader/Sybaris/ccfix; Flags: ignoreversion recursesubdirs createallsubdirs ;Patchers -Source: "{#IPatch}\addscreen\*"; DestDir: "{#syb}"; Components: Patchers/addscreen; Flags: ignoreversion recursesubdirs createallsubdirs +//Source: "{#IPatch}\addscreen\*"; DestDir: "{#syb}"; Components: Patchers/addscreen; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\AutoConverter\*"; DestDir: "{#syb}"; Components: Patchers/autocon; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\BodyCategoryAdd\*"; DestDir: "{#syb}"; Components: Patchers/bodycat; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#IPatch}\blinkstop\*"; DestDir: "{#syb}"; Components: Patchers/blinkstop; Flags: ignoreversion recursesubdirs createallsubdirs +//Source: "{#IPatch}\blinkstop\*"; DestDir: "{#syb}"; Components: Patchers/blinkstop; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\ExternalSave\*"; DestDir: "{#syb}"; Components: Patchers/extsave; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\pluginext\*"; DestDir: "{#syb}"; Components: Patchers/extsave/vibemaid; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\vibemaid\*"; DestDir: "{#syb}"; Components: Patchers/extsave/vibemaid; Flags: ignoreversion recursesubdirs createallsubdirs @@ -98,24 +112,24 @@ Source: "{#IPatch}\ExternalSave\*"; DestDir: "{#syb}"; Components: Patchers/exts Source: "{#IPlugin}\Seperateeye\*"; DestDir: "{#syb}"; Components: Patchers/extsave/maidvoice/addmod/seperateeye; Flags: ignoreversion recursesubdirs Source: "{#IPlugin}\distortcorrect\*"; DestDir: "{#syb}"; Components: Patchers/extsave/maidvoice/addmod/distort; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\FaceType\*"; DestDir: "{#syb}"; Components: Patchers/facetype; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#IPatch}\FastFade\*"; DestDir: "{#syb}"; Components: Patchers/fastfade; Flags: ignoreversion recursesubdirs createallsubdirs +//Source: "{#IPatch}\FastFade\*"; DestDir: "{#syb}"; Components: Patchers/fastfade; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\IMGUITranslator\Sybaris\*"; DestDir: "{#syb}"; Components: Patchers/imgui; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\IMGUITranslator\IMGUITranslationLoader\*"; DestDir: "{app}\IMGUITranslationLoader"; Components: Patchers/imgui/translations; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\ModLoader\Sybaris\*"; DestDir: "{#syb}"; Components: Patchers/modloader; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\ModLoader\Mod\*"; DestDir: "{#mod}"; Components: Patchers/modloader; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#IPatch}\NameExt\*"; DestDir: "{#syb}"; Components: Patchers/namext; Flags: ignoreversion recursesubdirs createallsubdirs +//Source: "{#IPatch}\NameExt\*"; DestDir: "{#syb}"; Components: Patchers/namext; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\NeighUnce\*"; DestDir: "{#syb}"; Components: Patchers/neighuncen; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\ntrlight\*"; DestDir: "{#syb}"; Components: Patchers/ntrlight; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPatch}\rgbpal\*"; DestDir: "{#syb}"; Components: Patchers/rgbpal; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#IPatch}\saveset\*"; DestDir: "{#syb}"; Components: Patchers/saveset; Flags: ignoreversion recursesubdirs createallsubdirs +//Source: "{#IPatch}\saveset\*"; DestDir: "{#syb}"; Components: Patchers/saveset; Flags: ignoreversion recursesubdirs createallsubdirs ;Plugins -Source: "{#IPlugin}\addyot\*"; DestDir: "{#syb}"; Components: plugins/addyot; Flags: ignoreversion recursesubdirs createallsubdirs +//Source: "{#IPlugin}\addyot\*"; DestDir: "{#syb}"; Components: plugins/addyot; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\ACCex\*"; DestDir: "{#syb}"; Components: plugins/accex; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\eraseout\*"; DestDir: "{#syb}"; Components: plugins/eraseout; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\camerautil\*"; DestDir: "{#syb}"; Components: plugins/camerautil; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#IPlugin}\hudclock\*"; DestDir: "{#plug}"; Components: plugins/hudclock; Flags: ignoreversion recursesubdirs createallsubdirs +;Source: "{#IPlugin}\hudclock\*"; DestDir: "{#plug}"; Components: plugins/hudclock; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\colorhelp\*"; DestDir: "{#syb}"; Components: plugins/colorhelp; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\conwindow\*"; DestDir: "{#syb}"; Components: plugins/conwindow; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\nyou\*"; DestDir: "{#syb}"; Components: plugins/nyou; Flags: ignoreversion recursesubdirs createallsubdirs @@ -129,8 +143,8 @@ Source: "{#IPlugin}\emoears\norm\Core\*"; DestDir: "{#plug}"; Components: plugin Source: "{#IPlugin}\emoears\norm\Mod\*"; DestDir: "{#mod}\EmotionalEars"; Components: plugins/emoears/mod; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\extendrender\norm\*"; DestDir: "{#syb}"; Components: plugins/extendrender; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\extendrender\optional\*"; DestDir: "{#ucfg}"; Components: plugins/extendrender/config; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#IPlugin}\facecon\*"; DestDir: "{#syb}"; Components: plugins/facecon; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#IPlugin}\freedress\*"; DestDir: "{#syb}"; Components: plugins/freedress; Flags: ignoreversion recursesubdirs createallsubdirs +;Source: "{#IPlugin}\facecon\*"; DestDir: "{#syb}"; Components: plugins/facecon; Flags: ignoreversion recursesubdirs createallsubdirs +;Source: "{#IPlugin}\freedress\*"; DestDir: "{#syb}"; Components: plugins/freedress; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\InOut\*"; DestDir: "{#syb}"; Components: plugins/inout; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\mirrorprops\Sybaris\*"; DestDir: "{#syb}"; Components: plugins/mirror; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\mirrorprops\Mod\*"; DestDir: "{#mod}"; Components: plugins/mirror; Flags: ignoreversion recursesubdirs createallsubdirs @@ -145,7 +159,7 @@ Source: "{#IPlugin}\partsedit\*"; DestDir: "{#syb}"; Components: plugins/partsed Source: "{#IPlugin}\personaledit\*"; DestDir: "{#syb}"; Components: plugins/personaledit; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\plugmanage\*"; DestDir: "{#syb}"; Components: plugins/plugmanage; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\pluginext\*"; DestDir: "{#syb}"; Components: plugins/pluginext; Flags: ignoreversion recursesubdirs createallsubdirs - Source: "{#IPlugin}\freeapp\*"; DestDir: "{#syb}"; Components: plugins/pluginext/freeapp; Flags: ignoreversion recursesubdirs createallsubdirs + //Source: "{#IPlugin}\freeapp\*"; DestDir: "{#syb}"; Components: plugins/pluginext/freeapp; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\halfundress\*"; DestDir: "{#syb}"; Components: plugins/pluginext/halfundress; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\lookmaid\*"; DestDir: "{#syb}"; Components: plugins/pluginext/lookmaid; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#IPlugin}\lookmaster\*"; DestDir: "{#syb}"; Components: plugins/pluginext/lookmaster; Flags: ignoreversion recursesubdirs createallsubdirs diff --git a/Utility/CMI Helper DLL/CMIHelper.cs b/Utility/CMI Helper DLL/CMIHelper.cs index 56dc2bb..ccd5096 100644 --- a/Utility/CMI Helper DLL/CMIHelper.cs +++ b/Utility/CMI Helper DLL/CMIHelper.cs @@ -8,6 +8,7 @@ using System.Net; using System.Reflection; using System.Runtime.InteropServices; +using System.Threading; using System.Windows.Forms; namespace CMIHelper @@ -79,7 +80,7 @@ public static bool FindFile([MarshalAs(UnmanagedType.BStr)] string file, [Marsha path = files[0]; return true; } - else + else { path = null; return false; @@ -163,42 +164,89 @@ public static void FetchLatestGHVersion([MarshalAs(UnmanagedType.BStr)] string s } } - [DllExport("CMIHelperFLR", CallingConvention = CallingConvention.StdCall)] - public static void FetchLatestGHRelease([MarshalAs(UnmanagedType.BStr)] string site, [MarshalAs(UnmanagedType.BStr)] string searchString, [MarshalAs(UnmanagedType.BStr)] out string downloadLink) + [DllExport("CMIHelperGHRF", CallingConvention = CallingConvention.StdCall)] + public static void GHReleaseFetch([MarshalAs(UnmanagedType.BStr)] string site, [MarshalAs(UnmanagedType.BStr)] string searchString, [MarshalAs(UnmanagedType.BStr)] string version, [MarshalAs(UnmanagedType.BStr)] out string downloadLink) { - var url = "https://api.github.com/repos/" + site + "/releases/latest"; - - downloadLink = ""; + downloadLink = string.Empty; try { - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - WebClient webClient = new WebClient(); - webClient.Headers.Add("User-Agent: Other"); + Uri myUri = new Uri($"https://github.com/{site}/releases" + + (String.IsNullOrEmpty(version) ? "" : $"/tag/{version}")); - var Release = JsonConvert.DeserializeObject(webClient.DownloadString(url)); + var engine = EngineBuilder.New() + .Build(); // Builds the Optimus engine. + + //Request the web page. + var page = engine.OpenUrl(myUri.AbsoluteUri); + page.Wait(); + //Get the document + var document = page.Result.Document; - foreach (var Asset in Release.assets) + var ReleaseCards = document + .GetElementsByTagName("div") + .Where(t => t.HasAttribute("data-test-selector") && t.GetAttribute("data-test-selector").Equals("release-card")); + + foreach (var ReleaseCard in ReleaseCards) { - if (String.IsNullOrWhiteSpace(searchString) || Asset.name.ToLower().Contains(searchString.ToLower())) + var assetsSection = ReleaseCard + .GetElementsByTagName("div") + .LastOrDefault(a => a.TextContent.Contains("Assets")); + + var AssetLinks = assetsSection + .GetElementsByTagName("a") + .Where(tl => tl.HasAttribute("href") && !tl.GetAttribute("href").Contains("/archive/refs/")); + + if (AssetLinks.Count() <= 0) + { + continue; + } + + var DLLink = ""; + + if (!String.IsNullOrEmpty(searchString)) + { + var linkNode = AssetLinks + .FirstOrDefault(lt => lt.TextContent.Trim().Contains(searchString)); + + if (linkNode != null) + { + DLLink = "https://" + myUri.Host + linkNode.GetAttribute("href"); + } + } + else + { + DLLink = AssetLinks + .First() + .GetAttribute("href"); + + DLLink = "https://" + myUri.Host + DLLink; + } + + if (!String.IsNullOrEmpty(DLLink)) { - downloadLink = Asset.browser_download_url; + downloadLink = DLLink; return; } } } catch (Exception e) { - System.Windows.Forms.MessageBox.Show(e.ToString(), "Error", MessageBoxButtons.OK); + Console.WriteLine("\nThe following Exception was raised trying to crawl GitHub. Will fallback to official API : {0}", e.Message); + } + + if (String.IsNullOrEmpty(downloadLink)) + { + DynaFetchGHRelease(site, searchString, version, out downloadLink); } } - [DllExport("CMIHelperDF", CallingConvention = CallingConvention.StdCall)] + //Left as a fallback in the case we fail to return a proper result or something, we'll go with the proper implementation. public static void DynaFetchGHRelease([MarshalAs(UnmanagedType.BStr)] string site, [MarshalAs(UnmanagedType.BStr)] string searchString, [MarshalAs(UnmanagedType.BStr)] string version, [MarshalAs(UnmanagedType.BStr)] out string downloadLink) { var url = "https://api.github.com/repos/" + site + "/releases"; - downloadLink = ""; + downloadLink = String.Empty; try { diff --git a/Utility/CMI Helper DLL/CMIHelper.csproj b/Utility/CMI Helper DLL/CMIHelper.csproj index a20b84c..b3ff46c 100644 --- a/Utility/CMI Helper DLL/CMIHelper.csproj +++ b/Utility/CMI Helper DLL/CMIHelper.csproj @@ -66,12 +66,16 @@ 5.7.0 - runtime; build; native; contentfiles; analyzers; buildtransitive all 1.7.4 + + 6.6.0 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + 3.0.1 diff --git a/helper.iss b/helper.iss index d594828..a416f1a 100644 --- a/helper.iss +++ b/helper.iss @@ -34,15 +34,14 @@ //function IsInstallerOld(const tpath: WideString; const version: WideString): Boolean; //external 'CMIHelperCI@files:CMIHelper.dll stdcall delayload'; //Gets the latest game file from the update site. + procedure InitHelper(); + external 'CMIHelperInit@files:CMIHelper.dll stdcall delayload'; procedure FetchUpdateFile(const site: WideString; out file: WideString); external 'CMIHelperGLU@files:CMIHelper.dll stdcall delayload'; - //Gets the latest release only, returns the first assets link that matches a given string if the string isn't empty. - procedure FetchLRelease(const site: WideString; const searchString: WideString; out dlink: WideString); - external 'CMIHelperFLR@files:CMIHelper.dll stdcall delayload'; - //Attempts to dynamically fetch a file given a search string, some modders use non-standard names. This goes through several releases, not just the latest. + //Attempts to dynamically fetch a file given a search string, some modders use non-standard names. This goes through several releases, not just the latest. If the version string is empty though, just goes through the latest procedure FetchDRelease(const site: WideString; const searchString: WideString; const version: WideString; out dlink: WideString); - external 'CMIHelperDF@files:CMIHelper.dll stdcall delayload'; + external 'CMIHelperGHRF@files:CMIHelper.dll stdcall delayload'; //Tries to fetch the latest version of a repo. Used for CMI update checking. procedure FetchLVersion(const site: WideString; out version: WideString); external 'CMIHelperFLV@files:CMIHelper.dll stdcall delayload';