├── Resource ├── Win10.wav ├── Win11.wav ├── MenuBG.jpg ├── TopBar.jpg ├── Win_XP.wav ├── InttFont.ttf ├── MainFont.ttf ├── MenuFont.ttf ├── MenuItemBG.jpg ├── ResCFont.ttf ├── SmiteIcon.ico ├── Win7_Win8.wav ├── ChooseResBG.jpg ├── DebugFooter.jpg ├── DonateBanner.jpg ├── EGSBtnActive.jpg ├── HelpHoverBG.jpg ├── HoverMenuBG.jpg ├── MenuSelector.jpg ├── ScanFilesBG.jpg ├── Splash_Loop.gif ├── Splash_Start.gif ├── CloseActivate.jpg ├── CloseNoActivate.jpg ├── DebugIconActive.jpg ├── EGSBtnInActive.jpg ├── FixesIconActive.jpg ├── HelpIconActive.jpg ├── HelpText │ ├── Bloom.jpg │ ├── Desired_FPS.jpg │ ├── DetailMode.gif │ ├── DirectX_11.jpg │ ├── Disable_Fog.jpg │ ├── Distortion.jpg │ ├── Fog_Volumes.jpg │ ├── Lensflares.jpg │ ├── NPC_Quality.jpg │ ├── Reflections.jpg │ ├── Resolution.jpg │ ├── Sky_Quality.jpg │ ├── Window_Type.jpg │ ├── Anti_Aliasing.jpg │ ├── Decals_Simple.jpg │ ├── Drop_Shadows.jpg │ ├── Light_Shafts.jpg │ ├── Static_Decals.jpg │ ├── World_Quality.jpg │ ├── Audio_Channels.jpg │ ├── Disable_Jumping.jpg │ ├── Dominant_Shadows.jpg │ ├── Dynamic_Decals.jpg │ ├── Dynamic_Lights.jpg │ ├── Dynamic_Shadows.jpg │ ├── Effects_Quality.jpg │ ├── Particle_Quality.jpg │ ├── Ragdoll_Physics.gif │ ├── Resolution_Scale.jpg │ ├── Shadow_Quality.jpg │ ├── SpeedTree_Fronds.jpg │ ├── SpeedTree_Leaves.jpg │ ├── SpeedTree_Wind.jpg │ ├── Terrain_Quality.jpg │ ├── Unbatched_Decals.jpg │ ├── Vehicle_Quality.jpg │ ├── Weapon_Quality.jpg │ ├── Character_Quality.jpg │ ├── SpeedTree_LOD_Bias.jpg │ ├── Anisotropic_Filtering.jpg │ ├── Filtered_Distortion.jpg │ ├── SH_Secondary_Lighting.jpg │ ├── Shadow_Quality_Simple.jpg │ ├── Uncompressed_Textures.jpg │ ├── World_Quality_Simple.jpg │ ├── Effects_Quality_Simple.jpg │ ├── Character_Quality_Simple.jpg │ ├── Composite_Dynamic_Lights.jpg │ ├── Conservative_Shadow_Bounds.jpg │ ├── Dynamic_Lights_and_Shadows.jpg │ ├── Light_Environment_Shadows.jpg │ └── Vertical_Synchronisation.jpg ├── HomeIconActive.jpg ├── LegacyBtnActive.jpg ├── MoreOptionsBG.jpg ├── NotificationBG.jpg ├── SteamBtnActive.jpg ├── ASearchBtnActive.jpg ├── DebugIconInActive.jpg ├── DiscordIconActive.jpg ├── DonateIconActive.jpg ├── FixesIconInActive.jpg ├── HelpIconInActive.jpg ├── HomeIconInactive.jpg ├── LegacyBtnInActive.jpg ├── MSearchBtnActive.jpg ├── Maximize1Activate.jpg ├── Maximize2Activate.jpg ├── MinimizeActivate.jpg ├── SteamBtnInActive.jpg ├── ASearchBtnInActive.jpg ├── ChangelogIconActive.jpg ├── CopyrightIconActive.jpg ├── DiscordIconInActive.jpg ├── DonateIconInActive.jpg ├── MSearchBtnInActive.jpg ├── Maximize1NoActivate.jpg ├── Maximize2NoActivate.jpg ├── MinimizeNoActivate.jpg ├── SMITEOptimizerIcon.ico ├── SMITEOptimizerIcon.jpg ├── ChangelogIconInActive.jpg ├── CopyrightFooterBGLeft.jpg ├── CopyrightFooterBGRight.jpg ├── CopyrightIconInActive.jpg ├── MenuSelectorHorizontal.jpg ├── RestoreConfigsIconActive.jpg ├── RestoreConfigsIconInActive.jpg ├── AutoIt_License.txt ├── CommonIssues.txt └── GPL-3.0_License.txt ├── DevTools ├── DevSettings.reg ├── ResetOptimizer.exe ├── Template_Pics.xcf ├── Template_Text_Compact.xcf ├── FontColors.txt ├── ResetRegistry.au3 ├── MakeAppendList.au3 ├── INIToAutoItHive.au3 └── ExtractBase.au3 ├── upx_compresser.bat ├── .github └── FUNDING.yml ├── Includes ├── SOCtrlButtons.au3 ├── GIFExtended.au3 └── _Zip.au3 ├── README.md ├── Changelog.txt └── LICENSE /Resource/Win10.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Win10.wav -------------------------------------------------------------------------------- /Resource/Win11.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Win11.wav -------------------------------------------------------------------------------- /Resource/MenuBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MenuBG.jpg -------------------------------------------------------------------------------- /Resource/TopBar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/TopBar.jpg -------------------------------------------------------------------------------- /Resource/Win_XP.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Win_XP.wav -------------------------------------------------------------------------------- /Resource/InttFont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/InttFont.ttf -------------------------------------------------------------------------------- /Resource/MainFont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MainFont.ttf -------------------------------------------------------------------------------- /Resource/MenuFont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MenuFont.ttf -------------------------------------------------------------------------------- /Resource/MenuItemBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MenuItemBG.jpg -------------------------------------------------------------------------------- /Resource/ResCFont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/ResCFont.ttf -------------------------------------------------------------------------------- /Resource/SmiteIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/SmiteIcon.ico -------------------------------------------------------------------------------- /Resource/Win7_Win8.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Win7_Win8.wav -------------------------------------------------------------------------------- /DevTools/DevSettings.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/DevTools/DevSettings.reg -------------------------------------------------------------------------------- /Resource/ChooseResBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/ChooseResBG.jpg -------------------------------------------------------------------------------- /Resource/DebugFooter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/DebugFooter.jpg -------------------------------------------------------------------------------- /Resource/DonateBanner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/DonateBanner.jpg -------------------------------------------------------------------------------- /Resource/EGSBtnActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/EGSBtnActive.jpg -------------------------------------------------------------------------------- /Resource/HelpHoverBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpHoverBG.jpg -------------------------------------------------------------------------------- /Resource/HoverMenuBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HoverMenuBG.jpg -------------------------------------------------------------------------------- /Resource/MenuSelector.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MenuSelector.jpg -------------------------------------------------------------------------------- /Resource/ScanFilesBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/ScanFilesBG.jpg -------------------------------------------------------------------------------- /Resource/Splash_Loop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Splash_Loop.gif -------------------------------------------------------------------------------- /Resource/Splash_Start.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Splash_Start.gif -------------------------------------------------------------------------------- /DevTools/ResetOptimizer.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/DevTools/ResetOptimizer.exe -------------------------------------------------------------------------------- /DevTools/Template_Pics.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/DevTools/Template_Pics.xcf -------------------------------------------------------------------------------- /Resource/CloseActivate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/CloseActivate.jpg -------------------------------------------------------------------------------- /Resource/CloseNoActivate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/CloseNoActivate.jpg -------------------------------------------------------------------------------- /Resource/DebugIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/DebugIconActive.jpg -------------------------------------------------------------------------------- /Resource/EGSBtnInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/EGSBtnInActive.jpg -------------------------------------------------------------------------------- /Resource/FixesIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/FixesIconActive.jpg -------------------------------------------------------------------------------- /Resource/HelpIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpIconActive.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Bloom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Bloom.jpg -------------------------------------------------------------------------------- /Resource/HomeIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HomeIconActive.jpg -------------------------------------------------------------------------------- /Resource/LegacyBtnActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/LegacyBtnActive.jpg -------------------------------------------------------------------------------- /Resource/MoreOptionsBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MoreOptionsBG.jpg -------------------------------------------------------------------------------- /Resource/NotificationBG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/NotificationBG.jpg -------------------------------------------------------------------------------- /Resource/SteamBtnActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/SteamBtnActive.jpg -------------------------------------------------------------------------------- /Resource/ASearchBtnActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/ASearchBtnActive.jpg -------------------------------------------------------------------------------- /Resource/DebugIconInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/DebugIconInActive.jpg -------------------------------------------------------------------------------- /Resource/DiscordIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/DiscordIconActive.jpg -------------------------------------------------------------------------------- /Resource/DonateIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/DonateIconActive.jpg -------------------------------------------------------------------------------- /Resource/FixesIconInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/FixesIconInActive.jpg -------------------------------------------------------------------------------- /Resource/HelpIconInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpIconInActive.jpg -------------------------------------------------------------------------------- /Resource/HomeIconInactive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HomeIconInactive.jpg -------------------------------------------------------------------------------- /Resource/LegacyBtnInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/LegacyBtnInActive.jpg -------------------------------------------------------------------------------- /Resource/MSearchBtnActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MSearchBtnActive.jpg -------------------------------------------------------------------------------- /Resource/Maximize1Activate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Maximize1Activate.jpg -------------------------------------------------------------------------------- /Resource/Maximize2Activate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Maximize2Activate.jpg -------------------------------------------------------------------------------- /Resource/MinimizeActivate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MinimizeActivate.jpg -------------------------------------------------------------------------------- /Resource/SteamBtnInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/SteamBtnInActive.jpg -------------------------------------------------------------------------------- /Resource/ASearchBtnInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/ASearchBtnInActive.jpg -------------------------------------------------------------------------------- /Resource/ChangelogIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/ChangelogIconActive.jpg -------------------------------------------------------------------------------- /Resource/CopyrightIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/CopyrightIconActive.jpg -------------------------------------------------------------------------------- /Resource/DiscordIconInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/DiscordIconInActive.jpg -------------------------------------------------------------------------------- /Resource/DonateIconInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/DonateIconInActive.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Desired_FPS.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Desired_FPS.jpg -------------------------------------------------------------------------------- /Resource/HelpText/DetailMode.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/DetailMode.gif -------------------------------------------------------------------------------- /Resource/HelpText/DirectX_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/DirectX_11.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Disable_Fog.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Disable_Fog.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Distortion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Distortion.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Fog_Volumes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Fog_Volumes.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Lensflares.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Lensflares.jpg -------------------------------------------------------------------------------- /Resource/HelpText/NPC_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/NPC_Quality.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Reflections.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Reflections.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Resolution.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Resolution.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Sky_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Sky_Quality.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Window_Type.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Window_Type.jpg -------------------------------------------------------------------------------- /Resource/MSearchBtnInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MSearchBtnInActive.jpg -------------------------------------------------------------------------------- /Resource/Maximize1NoActivate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Maximize1NoActivate.jpg -------------------------------------------------------------------------------- /Resource/Maximize2NoActivate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/Maximize2NoActivate.jpg -------------------------------------------------------------------------------- /Resource/MinimizeNoActivate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MinimizeNoActivate.jpg -------------------------------------------------------------------------------- /Resource/SMITEOptimizerIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/SMITEOptimizerIcon.ico -------------------------------------------------------------------------------- /Resource/SMITEOptimizerIcon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/SMITEOptimizerIcon.jpg -------------------------------------------------------------------------------- /DevTools/Template_Text_Compact.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/DevTools/Template_Text_Compact.xcf -------------------------------------------------------------------------------- /Resource/ChangelogIconInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/ChangelogIconInActive.jpg -------------------------------------------------------------------------------- /Resource/CopyrightFooterBGLeft.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/CopyrightFooterBGLeft.jpg -------------------------------------------------------------------------------- /Resource/CopyrightFooterBGRight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/CopyrightFooterBGRight.jpg -------------------------------------------------------------------------------- /Resource/CopyrightIconInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/CopyrightIconInActive.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Anti_Aliasing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Anti_Aliasing.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Decals_Simple.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Decals_Simple.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Drop_Shadows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Drop_Shadows.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Light_Shafts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Light_Shafts.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Static_Decals.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Static_Decals.jpg -------------------------------------------------------------------------------- /Resource/HelpText/World_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/World_Quality.jpg -------------------------------------------------------------------------------- /Resource/MenuSelectorHorizontal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/MenuSelectorHorizontal.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Audio_Channels.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Audio_Channels.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Disable_Jumping.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Disable_Jumping.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Dominant_Shadows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Dominant_Shadows.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Dynamic_Decals.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Dynamic_Decals.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Dynamic_Lights.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Dynamic_Lights.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Dynamic_Shadows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Dynamic_Shadows.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Effects_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Effects_Quality.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Particle_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Particle_Quality.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Ragdoll_Physics.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Ragdoll_Physics.gif -------------------------------------------------------------------------------- /Resource/HelpText/Resolution_Scale.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Resolution_Scale.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Shadow_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Shadow_Quality.jpg -------------------------------------------------------------------------------- /Resource/HelpText/SpeedTree_Fronds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/SpeedTree_Fronds.jpg -------------------------------------------------------------------------------- /Resource/HelpText/SpeedTree_Leaves.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/SpeedTree_Leaves.jpg -------------------------------------------------------------------------------- /Resource/HelpText/SpeedTree_Wind.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/SpeedTree_Wind.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Terrain_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Terrain_Quality.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Unbatched_Decals.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Unbatched_Decals.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Vehicle_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Vehicle_Quality.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Weapon_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Weapon_Quality.jpg -------------------------------------------------------------------------------- /Resource/RestoreConfigsIconActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/RestoreConfigsIconActive.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Character_Quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Character_Quality.jpg -------------------------------------------------------------------------------- /Resource/HelpText/SpeedTree_LOD_Bias.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/SpeedTree_LOD_Bias.jpg -------------------------------------------------------------------------------- /Resource/RestoreConfigsIconInActive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/RestoreConfigsIconInActive.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Anisotropic_Filtering.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Anisotropic_Filtering.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Filtered_Distortion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Filtered_Distortion.jpg -------------------------------------------------------------------------------- /Resource/HelpText/SH_Secondary_Lighting.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/SH_Secondary_Lighting.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Shadow_Quality_Simple.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Shadow_Quality_Simple.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Uncompressed_Textures.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Uncompressed_Textures.jpg -------------------------------------------------------------------------------- /Resource/HelpText/World_Quality_Simple.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/World_Quality_Simple.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Effects_Quality_Simple.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Effects_Quality_Simple.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Character_Quality_Simple.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Character_Quality_Simple.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Composite_Dynamic_Lights.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Composite_Dynamic_Lights.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Conservative_Shadow_Bounds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Conservative_Shadow_Bounds.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Dynamic_Lights_and_Shadows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Dynamic_Lights_and_Shadows.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Light_Environment_Shadows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Light_Environment_Shadows.jpg -------------------------------------------------------------------------------- /Resource/HelpText/Vertical_Synchronisation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MeteorTheLizard/SMITE-Optimizer/HEAD/Resource/HelpText/Vertical_Synchronisation.jpg -------------------------------------------------------------------------------- /upx_compresser.bat: -------------------------------------------------------------------------------- 1 | upx "SMITE Optimizer 32Bit.exe" -o "SMITE Optimizer 32Bit_upx.exe" --ultra-brute 2 | upx "SMITE Optimizer 64Bit.exe" -o "SMITE Optimizer 64Bit_upx.exe" --ultra-brute -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: MeteorTheLizard 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: meteorthelizard 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: https://www.paypal.com/paypalme/MeteorTheLizard 13 | -------------------------------------------------------------------------------- /DevTools/FontColors.txt: -------------------------------------------------------------------------------- 1 | 400 x 350 2 | 3 | All Text is centered. 4 | Title - "Penumbra HalfSerif Std Bold" 20px (5px Y distance from top border) 5 | Default - Recommended - "Coolvetica" 15px (7px Y distance from title text) 6 | Description - "Sans-serif" 15px (15px Y distance from "Default - Recommended" text) 7 | 8 | 2Pics - 3Pics Hints: 9 | Description2 - "Sans-serif" 15px (Centered between Description and example pictures) 10 | 11 | Best: 2870d6 12 | High: 00b5ff 13 | Medium: ff3f00 14 | Low: 00bf00 15 | Min: bf0000 16 | Lowest Possible: 7a00ff 17 | Native: d1ff00 18 | Percentage or Number: 00ff8c 19 | Fullscreen: a900ff 20 | Borderless Window: ce6cff 21 | Windowed: e7b9ff 22 | Preference: 22ff00 23 | On: 0005ff 24 | Off: ff0087 25 | Varies: ffe600 26 | Gamemode: ff00be 27 | Numbers: 01ff8d 28 | 29 | Really bad: ff0000 30 | 31 | Disclaimer: e1ff00 (Only in disclaimer and only on important things) 32 | Keyword: ff9f00 (Character Quality, Bloom, Unreal Engine 3, etc..) 33 | 34 | 345 x 300 (Text_Compact) 35 | Height depends on amount of text but is never above 300. 36 | The bottom should fit with the last line of text with a 5px margin. -------------------------------------------------------------------------------- /DevTools/ResetRegistry.au3: -------------------------------------------------------------------------------- 1 | #NoTrayIcon 2 | #Region ;**** Directives created by AutoIt3Wrapper_GUI **** 3 | #AutoIt3Wrapper_Icon=..\Resource\SMITEOptimizerIcon.ico 4 | #AutoIt3Wrapper_Outfile=ResetOptimizer.exe 5 | #AutoIt3Wrapper_Compression=4 6 | #AutoIt3Wrapper_UseUpx=y 7 | #AutoIt3Wrapper_Run_AU3Check=n 8 | #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** 9 | 10 | 11 | 12 | #comments-start 13 | 14 | This script is part of the SMITE Optimizer and licensed under the GPL-3.0 License. 15 | Copyright (C) 2023 - Mario "Meteor Thuri" Schien. 16 | 17 | Contact: MrRangerLP (at) gmx.de 18 | License: https://www.gnu.org/licenses/gpl-3.0.en.html 19 | 20 | 21 | This DevTool wipes all SMITE-Optimizer related registry entries to perform a full-reset! 22 | 23 | #comments-end 24 | 25 | 26 | 27 | RegDelete("HKCU\Software\SMITE Optimizer\") 28 | 29 | If @Error Then 30 | MsgBox(0,"Error","Could not delete registry entries for the SMITE Optimizer." & @CRLF & "Try to launch the reset tool as an administrator." & @CRLF & "The registry entries might also just not exist.") 31 | Else 32 | MsgBox(0,"Success","Successfully reset the registry entries of the SMITE Optimizer!") 33 | EndIf -------------------------------------------------------------------------------- /DevTools/MakeAppendList.au3: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #comments-start 5 | 6 | This script is part of the SMITE Optimizer and licensed under the GPL-3.0 License. 7 | Copyright (C) 2024 - Mario "Meteor Thuri" Schien. 8 | 9 | Contact: MrRangerLP (at) gmx.de 10 | License: https://www.gnu.org/licenses/gpl-3.0.en.html 11 | 12 | 13 | This script creates a resource append list. 14 | The code is rather meh but it works for my use case so whatever. 15 | 16 | #comments-end 17 | 18 | 19 | 20 | #NoTrayIcon 21 | #Include 22 | #Include 23 | 24 | HotKeySet("{F5}","_END") 25 | Func _END() 26 | Exit 27 | EndFunc 28 | 29 | Global Const $TrimmedPaths[1] = ["HelpText\"] 30 | Global Const $TrimmedExts[6] = ["jpg","jpeg","gif","wav","mp3","txt"] 31 | Global Const $MainResourcePath = "" ;- Path to Resource folder. 32 | 33 | Local $RetStr = "" 34 | Local $Files = _FileListToArrayRec($MainResourcePath,"*",0,1,0,1) 35 | _ArrayDelete($Files,0) ;- Remove count. 36 | 37 | For $I = 0 To uBound($Files) - 1 Step 1 38 | Local $NewStr 39 | 40 | For $B = 0 To 5 Step 1 41 | If StringRight($Files[$I],StringLen($TrimmedExts[$B])) = $TrimmedExts[$B] Then 42 | $NewStr = StringTrimRight($Files[$I],StringLen($TrimmedExts[$B])+1) 43 | ExitLoop 44 | EndIf 45 | Next 46 | 47 | For $B = 0 To 0 Step 1 48 | If StringLeft($NewStr,StringLen($TrimmedPaths[$B])) = $TrimmedPaths[$B] Then 49 | $NewStr = StringTrimLeft($NewStr,StringLen($TrimmedPaths[$B])) 50 | ExitLoop 51 | EndIf 52 | Next 53 | 54 | $RetStr = $RetStr & "#AutoIt3Wrapper_Res_File_Add=" & $Files[$I] & ", RT_RCDATA, "&$NewStr&", 0" & @CRLF 55 | Next 56 | 57 | ConsoleWrite($RetStr&@CRLF) ;- Return -------------------------------------------------------------------------------- /Includes/SOCtrlButtons.au3: -------------------------------------------------------------------------------- 1 | ;- This script is part of the SMITE Optimizer, which is licensed under the GNU General Public License v3.0. 2 | ;- Certain conditions apply for using this script in your work. Read the license linked below. 3 | ;- https://github.com/MeteorTheLizard/SMITE-Optimizer/blob/master/LICENSE 4 | ;- Made by MeteorTheLizard (C) 2023. 5 | 6 | 7 | #Include-once 8 | #Include 9 | 10 | 11 | OnAutoItExitRegister("__SOCtrlButtons_ShutDown") 12 | 13 | Func __SOCtrlButtons_ShutDown() 14 | _GDIPlus_Shutdown() 15 | EndFunc 16 | 17 | 18 | Local $bGDIStarted = False 19 | 20 | 21 | Func _SOCtrlButtons_Create($GUI,$sText,$iLeft,$iTop,$iWidth,$iHeight,$obj_BGColor,$obj_FontC,$sFont = "Segoe UI",$iFontsize = 10,$iFontStyle = 1,$obj_Color = "0xFFFFFF") 22 | 23 | If Not $bGDIStarted Then 24 | $bGDIStarted = True 25 | 26 | _GDIPlus_Startup() 27 | EndIf 28 | 29 | 30 | $obj_BGColor = "0xFF" & Hex($obj_BGColor,6) 31 | $obj_FontC = "0xFF" & Hex($obj_FontC,6) 32 | $obj_Color = "0xFF" & Hex($obj_Color,6) 33 | 34 | 35 | Local $obj_Graphic1 = _GDIPlus_BitmapCreateFromScan0($iWidth,$iHeight,$GDIP_PXF32ARGB) 36 | Local $obj_Graphic0 = _GDIPlus_ImageGetGraphicsContext($obj_Graphic1) 37 | 38 | Local $obj_Family = _GDIPlus_FontFamilyCreate($sFont) 39 | 40 | Local $obj_Format = _GDIPlus_StringFormatCreate() 41 | 42 | _GDIPlus_StringFormatSetAlign($obj_Format,1) 43 | _GDIPlus_StringFormatSetLineAlign($obj_Format,1) 44 | 45 | 46 | Local $cFontColor = _GDIPlus_BrushCreateSolid($obj_FontC) 47 | Local $cFrameColor = _GDIPlus_PenCreate($obj_Color,2) 48 | Local $cBGColor = _GDIPlus_BrushCreateSolid($obj_BGColor) 49 | 50 | 51 | Local $obj_Font = _GDIPlus_FontCreate($obj_Family,$iFontsize,$iFontStyle) 52 | Local $obj_Layout = _GDIPlus_RectFCreate(0,0,$iWidth,$iHeight) 53 | 54 | _GDIPlus_GraphicsFillRect($obj_Graphic0,0,0,$iWidth,$iHeight,$cBGColor) 55 | _GDIPlus_GraphicsDrawRect($obj_Graphic0,0,0,$iWidth,$iHeight,$cFrameColor) 56 | _GDIPlus_GraphicsDrawStringEx($obj_Graphic0,$sText,$obj_Font,$obj_Layout,$obj_Format,$cFontColor) 57 | 58 | 59 | Local $obj_Button = GUICtrlCreatePic($sEmpty,$iLeft,$iTop,$iWidth,$iHeight) 60 | 61 | _WinAPI_DeleteObject(GUICtrlSendMsg($obj_Button,0x0172,0, _GDIPlus_BitmapCreateHBITMAPFromBitmap($obj_Graphic1) )) 62 | 63 | GUICtrlSetResizing($obj_Button,$GUI_DOCKSIZE) 64 | 65 | 66 | _GDIPlus_FontDispose($obj_Font) 67 | _GDIPlus_FontFamilyDispose($obj_Family) 68 | _GDIPlus_StringFormatDispose($obj_Format) 69 | _GDIPlus_BrushDispose($cFontColor) 70 | _GDIPlus_BrushDispose($cBGColor) 71 | _GDIPlus_PenDispose($cFrameColor) 72 | _GDIPlus_GraphicsDispose($obj_Graphic0) 73 | _GDIPlus_BitmapDispose($obj_Graphic1) 74 | 75 | 76 | Return $obj_Button 77 | 78 | EndFunc -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |

GitHub release (latest by date) GitHub all releases GitHub GitHub repo size GitHub code size in bytes

6 | 7 |

End of Life

8 | 9 |
10 | 11 |

A modern and powerful program to easily change the configuration files for SMITE on PC (Windows).

12 | 13 |

https://meteorthelizard.com/projects/smite-optimizer

14 | 15 |
16 | 17 |

18 | 19 |

20 |

21 | 22 |

23 | 24 |
25 | 26 |

An "outstanding contribution" to the community

27 | 28 |

The program is officially recognized by Hi-Rez Studios and considered an "outstanding contribution"

29 | 30 |

https://ibb.co/album/bbLhkQ

31 | 32 |

33 | 34 |

35 | 36 |
37 | 38 |

Bug Reporting

39 | 40 | You may create an issue on the issues page to report a bug. 41 | 42 | It is recommended to create a debug dump and attach the output .zip file to the issue. You can create a debug dump by going into the debug tab in the SMITE Optimizer and then clicking on the "Create debug dump" text. The program will freeze while it is working. 43 | 44 | ## License 45 | 46 | This program is licensed under the GNU General Public License v3.0. (Link to license) 47 | 48 | Earlier versions than v1.3 are subject to a different license and copyright and may not be copied, shared, modified, or distributed. 49 | 50 | Contact: contact@meteorthelizard.com 51 | 52 | ## Contributing to the project and modifying and compiling the source 53 | 54 | [Get AutoIt Here](https://www.autoitscript.com/site/autoit/downloads/) - [Get SciTe Here](https://www.autoitscript.com/site/autoit-script-editor/downloads/) 55 | 56 | Install AutoIt normally. We recommend using SciTe as it is easier to set up, as AutoIt is meant to be used with it. 57 | 58 | From the "Get SciTe Here" page, you might need to install Tidy and Au3Stripper manually. 59 | 60 | Remember to read the license before making changes to the script or publishing your changes. 61 | 62 | [Pull Request documentation](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) -------------------------------------------------------------------------------- /Resource/AutoIt_License.txt: -------------------------------------------------------------------------------- 1 | Software License 2 | 3 | AutoIt 4 | 5 | Author : Jonathan Bennett and the AutoIt Team 6 | WWW : https://www.autoitscript.com/site/autoit/ 7 | Email : support at autoitscript dot com 8 | ________________________________________________________ 9 | 10 | END-USER LICENSE AGREEMENT FOR THIS SOFTWARE 11 | 12 | This End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and the mentioned author of this Software for the software product identified above, which includes computer software and may include associated media, printed materials, and "online" or electronic documentation ("SOFTWARE PRODUCT"). By installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. If you do not agree to the terms of this EULA, do not install or use the SOFTWARE PRODUCT. 13 | 14 | 15 | 16 | SOFTWARE PRODUCT LICENSE 17 | 18 | The SOFTWARE PRODUCT is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not sold. 19 | 20 | The definition of SOFTWARE PRODUCT does not includes any files generated by the SOFTWARE PRODUCT, such as compiled script files in the form of standalone executables. 21 | 22 | 1. GRANT OF LICENSE 23 | 24 | This EULA grants you the following rights: 25 | 26 | Installation and Use. You may install and use an unlimited number of copies of the SOFTWARE PRODUCT. 27 | 28 | Reproduction and Distribution. You may reproduce and distribute an unlimited number of copies of the SOFTWARE PRODUCT either in whole or in part; each copy should include all copyright and trademark notices, and shall be accompanied by a copy of this EULA. Copies of the SOFTWARE PRODUCT may be distributed as a standalone product or included with your own product. 29 | 30 | Commercial Use. You may use the SOFTWARE PRODUCT for commercial purposes. You may sell for profit and freely distribute scripts and/or compiled scripts that were created with the SOFTWARE PRODUCT. 31 | 32 | Reverse engineering. You may not reverse engineer or disassemble the SOFTWARE PRODUCT. 33 | 34 | 2. COPYRIGHT 35 | 36 | All title and copyrights in and to the SOFTWARE PRODUCT (including but not limited to any images, photographs, animations, video, audio, music, text, and "applets" incorporated into the SOFTWARE PRODUCT), the accompanying printed materials, and any copies of the SOFTWARE PRODUCT are owned by the Author of this Software. The SOFTWARE PRODUCT is protected by copyright laws and international treaty provisions. Therefore, you must treat the SOFTWARE PRODUCT like any other copyrighted material. 37 | 38 | 39 | 40 | MISCELLANEOUS 41 | 42 | If you acquired this product in the United Kingdom, this EULA is governed by the laws of the United Kingdom. If this product was acquired outside the United Kingdom, then local law may apply. 43 | 44 | Should you have any questions concerning this EULA, or if you desire to contact the author of this Software for any reason, please contact him/her at the email address mentioned at the top of this EULA. 45 | 46 | 47 | 48 | LIMITED WARRANTY 49 | 50 | 1. NO WARRANTIES 51 | 52 | The Author of this Software expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT and any related documentation is provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or non-infringement. The entire risk arising out of use or performance of the SOFTWARE PRODUCT remains with you. 53 | 54 | 2. NO LIABILITY FOR DAMAGES 55 | 56 | In no event shall the author of this Software be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if the Author of this Software has been advised of the possibility of such damages. Because some states/jurisdictions do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you. 57 | 58 | 59 | 60 | [END OF LICENSE] -------------------------------------------------------------------------------- /DevTools/INIToAutoItHive.au3: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #comments-start 5 | 6 | ;- DEPRECATED -; 7 | 8 | 9 | This script is part of the SMITE Optimizer and licensed under the GPL-3.0 License. 10 | Copyright (C) 2024 - Mario "Meteor Thuri" Schien. 11 | 12 | Contact: MrRangerLP (at) gmx.de 13 | License: https://www.gnu.org/licenses/gpl-3.0.en.html 14 | 15 | 16 | This devtool allows you to format a .ini file into a nicely formatted AutoIt array "Hive". 17 | It requires a perfectly formatted .ini as a base. Any comments "//" "--" and ";" ";;" as well as "#" need to be removed! 18 | Anything else that might break the AutoIt syntax that has not been accounted for needs to be removed as well. 19 | After every group, there needs to be at least one empty line. (Except for the last group) 20 | Empty groups need to be removed as well as they WILL cause formatting problems! 21 | 22 | Issues: 23 | It does not respect the Line length limit that AutoIt has, meaning some lines might have to be split with an underscore when AutoIt throws an "unterminated string" error. 24 | ^ This Issue is especially annoying when formatting the SystemSettings file as you WILL have to split several lines manually. 25 | On the very last line before the second last bracket, it puts three ' instead of one. 26 | 27 | #comments-end 28 | 29 | 30 | 31 | #NoTrayIcon 32 | #Include 33 | 34 | HotKeySet("{F5}","_END") ;- Gotta be able to abort y'know? 35 | Func _END() 36 | Exit 37 | EndFunc 38 | 39 | ;- Path to the INI that should be used as reference 40 | Global $EngineSettings = "C:\Path\To\Ini.ini" 41 | 42 | ;- Some vars 43 | Global $EngineSettingsRead = FileReadToArray($EngineSettings) 44 | Global $Bounds = uBound($EngineSettingsRead) - 1 ;- Speed yo 45 | Global $OutputAr[0][0] 46 | Global $1DSize = 0 47 | Global $2DSize = 0 48 | Global $1DStep = 0 49 | Global $2DStep = 0 50 | Global $I = 0 51 | Global $B = 1 52 | 53 | ;- Make the Array have proper dimensions. 54 | 55 | While ($I < $Bounds) 56 | Local $VarCount = 0 57 | 58 | If StringLeft($EngineSettingsRead[$I],1) = "[" and StringRight($EngineSettingsRead[$I],1) = "]" Then 59 | $1DSize = $1DSize + 1 60 | $I = $I + 1 61 | 62 | While StringInStr($EngineSettingsRead[$I],"=") and ($I < $Bounds) 63 | $I = $I + 1 64 | $VarCount = $VarCount + 1 65 | WEnd 66 | 67 | If $2DSize < $VarCount Then 68 | $2DSize = $VarCount 69 | EndIf 70 | 71 | $VarCount = 0 72 | EndIf 73 | 74 | $I = $I + 1 75 | WEnd 76 | 77 | ReDim $OutputAr[$1DSize][$2DSize+1] 78 | 79 | ; ----- ----- ----- ----- ----- 80 | 81 | ;- Convert INI to 2D Array. 82 | 83 | $I = 0 84 | 85 | While ($I < $Bounds) 86 | If StringLeft($EngineSettingsRead[$I],1) = "[" and StringRight($EngineSettingsRead[$I],1) = "]" Then 87 | $OutputAr[$1DStep][$2DStep] = $EngineSettingsRead[$I] 88 | $2DStep = $2DStep + 1 89 | $I = $I + 1 90 | 91 | While StringInStr($EngineSettingsRead[$I],"=") and ($I <= $Bounds) 92 | $OutputAr[$1DStep][$2DStep] = $EngineSettingsRead[$I] 93 | $2DStep = $2DStep + 1 94 | 95 | If $I = $Bounds Then ExitLoop 96 | $I = $I + 1 97 | WEnd 98 | 99 | $1DStep = $1DStep + 1 100 | $2DStep = 0 101 | EndIf 102 | 103 | $I = $I + 1 104 | WEnd 105 | 106 | ; ----- ----- ----- ----- ----- 107 | 108 | ;- Output the Array in AutoIt Code. (Array) 109 | 110 | $I = 0 111 | 112 | ConsoleWrite("Global Const $EngineSettingsClearHive["&$1DSize&"]["&$2DSize + 1&"] = [ _"&@CRLF&@TAB&"[") ;- Initial line. 113 | 114 | While ($I < $1DSize) 115 | ConsoleWrite("'"&$OutputAr[$I][0]&"',") 116 | 117 | While ($B <= $2DSize) 118 | If $B = $2DSize Then 119 | If $I = $1DSize-1 Then 120 | ConsoleWrite("'"&$OutputAr[$I][$B]&"'] _"&@CRLF&"]"&@CRLF) 121 | Else 122 | If $OutputAr[$I][$B] = "" Then 123 | ConsoleWrite("], _"&@CRLF&@TAB&"[") 124 | ExitLoop 125 | EndIf 126 | 127 | ConsoleWrite("'"&$OutputAr[$I][$B]&"'], _"&@CRLF&@TAB&"[") 128 | EndIf 129 | 130 | ExitLoop 131 | Else 132 | If $OutputAr[$I][$B] <> "" Then 133 | If $OutputAr[$I][$B+1] = "" Then 134 | ConsoleWrite("'"&$OutputAr[$I][$B]&"'") 135 | Else 136 | ConsoleWrite("'"&$OutputAr[$I][$B]&"',") 137 | EndIf 138 | EndIf 139 | 140 | $B = $B + 1 141 | EndIf 142 | WEnd 143 | 144 | $B = 1 145 | $I = $I + 1 146 | WEnd 147 | 148 | ; ----- ----- ----- ----- ----- -------------------------------------------------------------------------------- /Includes/GIFExtended.au3: -------------------------------------------------------------------------------- 1 | ;- This script is part of the SMITE Optimizer, which is licensed under the GNU General Public License v3.0. 2 | ;- Certain conditions apply for using this script in your work. Read the license linked below. 3 | ;- https://github.com/MeteorTheLizard/SMITE-Optimizer/blob/master/LICENSE 4 | ;- Made by MeteorTheLizard (C) 2023. 5 | 6 | 7 | #Include-once 8 | #Include 9 | 10 | 11 | OnAutoItExitRegister("__GIFExtended_ShutDown") 12 | 13 | Func __GIFExtended_ShutDown() 14 | AdlibUnRegister(__GIFExtended_Internal_Draw) 15 | _GDIPlus_Shutdown() 16 | EndFunc 17 | 18 | 19 | Local $iArraySize = 15 20 | Global $__g_GIFExtended_aStoreCache[0][$iArraySize] 21 | 22 | Local $bGDIStarted = False 23 | Local $iLastIndex = 0 24 | 25 | 26 | Func GUICtrlCreateGIF($obj_Source,$iLeft,$iTop,$iWidth,$iHeight,$iFrameCount,$iDelay,$bResource = False) 27 | 28 | If Not $bGDIStarted Then 29 | $bGDIStarted = True 30 | 31 | _GDIPlus_Startup() 32 | EndIf 33 | 34 | 35 | ReDim $__g_GIFExtended_aStoreCache[$iLastIndex + 1][$iArraySize] 36 | 37 | $__g_GIFExtended_aStoreCache[$iLastIndex][0] = $iLeft 38 | $__g_GIFExtended_aStoreCache[$iLastIndex][1] = $iTop 39 | $__g_GIFExtended_aStoreCache[$iLastIndex][2] = $iWidth 40 | $__g_GIFExtended_aStoreCache[$iLastIndex][3] = $iHeight 41 | $__g_GIFExtended_aStoreCache[$iLastIndex][4] = $iFrameCount 42 | $__g_GIFExtended_aStoreCache[$iLastIndex][5] = $iDelay 43 | $__g_GIFExtended_aStoreCache[$iLastIndex][6] = $bResource 44 | $__g_GIFExtended_aStoreCache[$iLastIndex][7] = False 45 | 46 | 47 | Local $ctrlDummy = GUICtrlCreatePic($sEmpty,$iLeft,$iTop,$iWidth,$iHeight) 48 | 49 | Local $obj_Image = $bResource ? $obj_Source : _GDIPlus_ImageLoadFromFile($obj_Source) 50 | $__g_GIFExtended_aStoreCache[$iLastIndex][8] = $obj_Image 51 | 52 | $__g_GIFExtended_aStoreCache[$iLastIndex][9] = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($ctrlDummy)) 53 | $__g_GIFExtended_aStoreCache[$iLastIndex][10] = _GDIPlus_BitmapCreateFromGraphics($iWidth,$iHeight,$__g_GIFExtended_aStoreCache[$iLastIndex][9]) 54 | $__g_GIFExtended_aStoreCache[$iLastIndex][11] = _GDIPlus_ImageGetGraphicsContext($__g_GIFExtended_aStoreCache[$iLastIndex][10]) 55 | $__g_GIFExtended_aStoreCache[$iLastIndex][12] = $ctrlDummy 56 | $__g_GIFExtended_aStoreCache[$iLastIndex][13] = 0 57 | $__g_GIFExtended_aStoreCache[$iLastIndex][14] = TimerInit() 58 | 59 | 60 | AdlibRegister(__GIFExtended_Internal_Draw,10) 61 | 62 | 63 | Local $Ret[2] = [$ctrlDummy,$iLastIndex] 64 | 65 | $iLastIndex = $iLastIndex + 1 66 | 67 | Return $Ret 68 | 69 | EndFunc 70 | 71 | 72 | Func GUICtrlDeleteGIF($ctrl) 73 | For $I = 0 To $iLastIndex - 1 Step 1 74 | If $__g_GIFExtended_aStoreCache[$I][12] = $ctrl Then 75 | $__g_GIFExtended_aStoreCache[$I][7] = True 76 | ExitLoop 77 | EndIf 78 | Next 79 | EndFunc 80 | 81 | 82 | Func __GIFExtended_Internal_Draw() 83 | 84 | 85 | For $I = 0 To $iLastIndex - 1 Step 1 86 | If $__g_GIFExtended_aStoreCache[$I][7] Then ;- Leak. Array is not being cleared. 87 | $__g_GIFExtended_aStoreCache[$I][7] = False 88 | 89 | _GDIPlus_ImageDispose($__g_GIFExtended_aStoreCache[$I][8]) 90 | _GDIPlus_GraphicsDispose($__g_GIFExtended_aStoreCache[$I][9]) 91 | _GDIPlus_GraphicsDispose($__g_GIFExtended_aStoreCache[$I][11]) 92 | _GDIPlus_BitmapDispose($__g_GIFExtended_aStoreCache[$I][10]) 93 | 94 | GUICtrlDelete($__g_GIFExtended_aStoreCache[$I][12]) 95 | 96 | 97 | For $B = 0 To $iArraySize - 1 Step 1 98 | If $B = 7 Then ContinueLoop 99 | 100 | $__g_GIFExtended_aStoreCache[$I][$B] = NULL 101 | Next 102 | 103 | 104 | $__g_GIFExtended_aStoreCache[$I][12] = False 105 | 106 | EndIf 107 | Next 108 | 109 | 110 | For $I = 0 To $iLastIndex - 1 Step 1 111 | If $__g_GIFExtended_aStoreCache[$I][12] = False Then ContinueLoop 112 | 113 | 114 | If TimerDiff($__g_GIFExtended_aStoreCache[$I][14]) >= $__g_GIFExtended_aStoreCache[$I][5] Then 115 | 116 | _GDIPlus_ImageSelectActiveFrame($__g_GIFExtended_aStoreCache[$I][8],$GDIP_FRAMEDIMENSION_TIME,$__g_GIFExtended_aStoreCache[$I][13]) 117 | _GDIPlus_GraphicsDrawImageRect($__g_GIFExtended_aStoreCache[$I][9],$__g_GIFExtended_aStoreCache[$I][8],0,0,$__g_GIFExtended_aStoreCache[$I][2],$__g_GIFExtended_aStoreCache[$I][3]) 118 | 119 | 120 | $__g_GIFExtended_aStoreCache[$I][13] = $__g_GIFExtended_aStoreCache[$I][13] + 1 121 | 122 | If $__g_GIFExtended_aStoreCache[$I][13] > $__g_GIFExtended_aStoreCache[$I][4] Then 123 | $__g_GIFExtended_aStoreCache[$I][13] = 1 124 | EndIf 125 | 126 | 127 | $__g_GIFExtended_aStoreCache[$I][14] = TimerInit() 128 | 129 | EndIf 130 | Next 131 | 132 | EndFunc -------------------------------------------------------------------------------- /DevTools/ExtractBase.au3: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #comments-start 5 | 6 | This script is part of the SMITE Optimizer and licensed under the GPL-3.0 License. 7 | Copyright (C) 2024 - Mario "Meteor Thuri" Schien. 8 | 9 | Contact: MrRangerLP (at) gmx.de 10 | License: https://www.gnu.org/licenses/gpl-3.0.en.html 11 | 12 | 13 | This devtool extracts groups and keynames from freshly generated .ini files and puts them in a list that is then used to generate a base array which acts as a hive replacement. 14 | The base array is used to restore values in the check integrity process to ensure the smite optimizer can change the values that it needs to change. 15 | I'm not gonna win any awards with this script, too tired. -Meteor 16 | 17 | 18 | Issues: 19 | The output isn't perfect. Empty group lines have to be removed and the row count needs to be adjusted accordingly. 20 | This script was made in a rush to fix a program-breaking bug. 21 | TEXTUREGROUP_ settings are only relevant for [SystemSettings] and can be removed from all other groups. 22 | 23 | #comments-end 24 | 25 | 26 | 27 | #NoTrayIcon 28 | #Include 29 | #Include 30 | 31 | Local $iSettingsCount = 88 + 7 ;- I'm too tired to figure out why this is needed. 32 | Local $aModifiers[$iSettingsCount] = [ _ 33 | "AllowD3D11", _ 34 | "AllowImageReflections", _ 35 | "AllowImageReflectionShadowing", _ 36 | "bAllowDropShadows", _ 37 | "bAllowHighQualityMaterials", _ 38 | "bAllowLightShafts", _ 39 | "bAllowRagdolling", _ 40 | "bAllowWholeSceneDominantShadows", _ 41 | "bJumpEnabled", _ 42 | "Bloom", _ 43 | "Borderless", _ 44 | "bSmoothFrameRate", _ 45 | "bUseConservativeShadowBounds", _ 46 | "bUseLowQualMaterials", _ 47 | "CompositeDynamicLights", _ 48 | "DepthOfField", _ 49 | "DetailMode", _ 50 | "DirectionalLightmaps", _ 51 | "Distortion", _ 52 | "DropParticleDistortion", _ 53 | "DynamicDecals", _ 54 | "DynamicLights", _ 55 | "DynamicShadows", _ 56 | "FilteredDistortion", _ 57 | "FogVolumes", _ 58 | "Fullscreen", _ 59 | "FullscreenWindowed", _ 60 | "FXAAQuality", _ 61 | "LensFlares", _ 62 | "LightEnvironmentShadows", _ 63 | "LoadMapTimeLimit", _ 64 | "MaxActiveDecals", _ 65 | "MaxAnisotropy", _ 66 | "MaxChannels", _ 67 | "MaxFilterBlurSampleCount", _ 68 | "MaximumPoolSize", _ 69 | "MaxSmoothedFrameRate", _ 70 | "MinDesiredFrameRate", _ 71 | "MinimumPoolSize", _ 72 | "MinSmoothedFrameRate", _ 73 | "MotionBlur", _ 74 | "MotionBlurPause", _ 75 | "MotionBlurSkinning", _ 76 | "ParticleLODBias", _ 77 | "PerfScalingBias", _ 78 | "PreferD3D11", _ 79 | "ResX", _ 80 | "ResY", _ 81 | "ScreenPercentage", _ 82 | "SHSecondaryLighting", _ 83 | "SpeedTreeFronds", _ 84 | "SpeedTreeLeaves", _ 85 | "SpeedTreeLODBias", _ 86 | "SpeedTreeWind", _ 87 | "StaticDecals", _ 88 | "TargetFrameRate", _ 89 | "TEXTUREGROUP_Bokeh", _ 90 | "TEXTUREGROUP_Character", _ 91 | "TEXTUREGROUP_CharacterNormalMap", _ 92 | "TEXTUREGROUP_CharacterSpecular", _ 93 | "TEXTUREGROUP_Effects", _ 94 | "TEXTUREGROUP_EffectsNotFiltered", _ 95 | "TEXTUREGROUP_ImageBasedReflection", _ 96 | "TEXTUREGROUP_Lightmap", _ 97 | "TEXTUREGROUP_NPC", _ 98 | "TEXTUREGROUP_NPCNormalMap", _ 99 | "TEXTUREGROUP_NPCSpecular", _ 100 | "TEXTUREGROUP_Shadowmap", _ 101 | "TEXTUREGROUP_Skybox", _ 102 | "TEXTUREGROUP_Terrain_Heightmap", _ 103 | "TEXTUREGROUP_Terrain_Weightmap", _ 104 | "TEXTUREGROUP_Vehicle", _ 105 | "TEXTUREGROUP_VehicleNormalMap", _ 106 | "TEXTUREGROUP_VehicleSpecular", _ 107 | "TEXTUREGROUP_Weapon", _ 108 | "TEXTUREGROUP_WeaponNormalMap", _ 109 | "TEXTUREGROUP_WeaponSpecular", _ 110 | "TEXTUREGROUP_World", _ 111 | "TEXTUREGROUP_WorldDetail", _ 112 | "TEXTUREGROUP_WorldNormalMap", _ 113 | "TEXTUREGROUP_WorldSpecular", _ 114 | "UnbatchedDecals", _ 115 | "UpscaleScreenPercentage", _ 116 | "UseD3D11Beta", _ 117 | "UseDX11", _ 118 | "UseDynamicStreaming", _ 119 | "UseVsync", _ 120 | "VsyncPresentInterval" _ 121 | ] 122 | 123 | 124 | Local $sBaseSystemSettings = "C:\Users\RX1500x-METEOR\Desktop\BattleSystemSettings.ini" 125 | Local $sBaseEngineSettings = "C:\Users\RX1500x-METEOR\Desktop\BattleEngine.ini" 126 | Local $sBaseGameSettings = "C:\Users\RX1500x-METEOR\Desktop\BattleGame.ini" 127 | 128 | 129 | ;- SystemSettings 130 | 131 | Local $aReadArray[0] 132 | _FileReadToArray($sBaseGameSettings,$aReadArray,$FRTA_NOCOUNT) 133 | 134 | 135 | Local $aReturnTable[1][$iSettingsCount] 136 | 137 | ;- Retrieve all existing groups 138 | 139 | Local $iSize = 1 140 | 141 | For $I = 0 To uBound($aReadArray) - 1 Step 1 142 | If StringLeft($aReadArray[$I],1) = "[" Then 143 | 144 | If $I >= uBound($aReturnTable,1) Then 145 | $iSize = $iSize + 1 146 | ReDim $aReturnTable[$iSize][$iSettingsCount] 147 | EndIf 148 | 149 | $aReturnTable[$iSize - 1][0] = $aReadArray[$I] 150 | 151 | EndIf 152 | Next 153 | 154 | 155 | ;- Iterate through all the keys and find its groups, add the keys to the appropriate rows 156 | 157 | For $I = 0 To $iSettingsCount - 1 Step 1 158 | 159 | Local $iLen = StringLen($aModifiers[$I]) 160 | 161 | For $A = uBound($aReadArray) - 1 To 0 Step -1 162 | 163 | If StringLeft($aReadArray[$A],$iLen) = $aModifiers[$I] Then ;- We found the KeyName in the file 164 | 165 | 166 | ;- We found it so we keep going until we hit a group 167 | 168 | For $B = $A To 0 Step -1 169 | 170 | If StringLeft($aReadArray[$B],1) = "[" Then ;- We hit the group it belongs to 171 | 172 | For $C = 0 To uBound($aReturnTable,1) - 1 Step 1 ;- Find the row from the ReturnTable that the group belongs to 173 | 174 | If $aReturnTable[$C][0] = $aReadArray[$B] Then ;- Row found 175 | 176 | For $D = 1 To $iSettingsCount - 1 Step 1 ;- Find free column to fill in KeyName 177 | If $aReturnTable[$C][$D] = "" Then 178 | $aReturnTable[$C][$D] = $aModifiers[$I] 179 | ExitLoop(3) 180 | EndIf 181 | Next 182 | EndIf 183 | Next 184 | 185 | 186 | ExitLoop 187 | 188 | EndIf 189 | Next 190 | EndIf 191 | Next 192 | Next 193 | 194 | ; ----- ----- ----- ----- ----- 195 | 196 | ;- Output the Array in AutoIt Code. (Array) 197 | 198 | $I = 0 199 | Local $1DSize = uBound($aReturnTable,1) - 1 200 | Local $2DSize = uBound($aReturnTable,2) - 1 201 | 202 | ConsoleWrite("Global Const $GameSettingsClearHive["&$1DSize&"]["&$2DSize + 1&"] = [ _"&@CRLF&@TAB&"[") ;- Initial line. 203 | 204 | While ($I < $1DSize) 205 | ConsoleWrite("'"&$aReturnTable[$I][0]&"',") 206 | 207 | While ($B <= $2DSize) 208 | If $B = $2DSize Then 209 | If $I = $1DSize-1 Then 210 | ConsoleWrite("'"&$aReturnTable[$I][$B]&"'] _"&@CRLF&"]"&@CRLF) 211 | Else 212 | If $aReturnTable[$I][$B] = "" Then 213 | ConsoleWrite("], _"&@CRLF&@TAB&"[") 214 | ExitLoop 215 | EndIf 216 | 217 | ConsoleWrite("'"&$aReturnTable[$I][$B]&"'], _"&@CRLF&@TAB&"[") 218 | EndIf 219 | 220 | ExitLoop 221 | Else 222 | If $aReturnTable[$I][$B] <> "" Then 223 | If $aReturnTable[$I][$B+1] = "" Then 224 | ConsoleWrite("'"&$aReturnTable[$I][$B]&"'") 225 | Else 226 | ConsoleWrite("'"&$aReturnTable[$I][$B]&"',") 227 | EndIf 228 | EndIf 229 | 230 | $B = $B + 1 231 | EndIf 232 | WEnd 233 | 234 | $B = 1 235 | $I = $I + 1 236 | WEnd 237 | 238 | ; ----- ----- ----- ----- ----- 239 | -------------------------------------------------------------------------------- /Resource/CommonIssues.txt: -------------------------------------------------------------------------------- 1 | - Common Issues 2 | 3 | 4 | IF YOU REQUIRE HELP OR SUPPORT, JOIN OUR OFFICIAL DISCORD SERVER. 5 | We are happy to help with any technical problem you might encounter, as long as it is SMITE-Optimizer or SMITE-PC-related. 6 | Click the discord logo next to the close button of the SMITE-Optimizer to join our discord! 7 | 8 | 9 | 10 | When you have one of the problems listed below, it is recommended to try each solution one by one. 11 | 12 | 13 | If your issue is not listed here, we recommend opening an issue on GitHub. 14 | > Make sure to explain the problem as detailed as possible. 15 | > Explain what you did step by step and include a screenshot of the error. 16 | > When possible attach a debug dump which you can create through the debug tab. 17 | > > https://github.com/MeteorTheLizard/SMITE-Optimizer/issues/ 18 | 19 | 20 | You can also report bugs on our Discord server in the #report-a-bug channel. 21 | 22 | 23 | -- ----- ----- ----- ----- 24 | 25 | Problem: The SMITE Optimizer tells me the configuration files are located in the "/OneDrive/" path. -Community Contribution 26 | 27 | This means that OneDrive took control over the Documents folder of your system, which could potentially break the SMITE Optimizer as well as the game SMITE itself. 28 | If you are able to apply settings and you notice the changes in-game, then you're good and don't need to do anything. 29 | 30 | 31 | If you don't see any changes, you can try doing the following: 32 | 33 | Press Windows key + r 34 | Type in: "regedit" 35 | Navigate to: "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" 36 | On the right, there should be an entry called "Personal" 37 | If it says something about OneDrive in the value field, double-click the value and change it to "%USERPROFILE%\Documents" 38 | This will reset your documents path back to what it should be. 39 | Launch the game, then close the game. This will make the game generate new configuration files. 40 | Open the SMITE Optimizer, navigate to the debug tab, and reset your configuration paths. 41 | Re-discover them. 42 | The SMITE Optimizer should now function correctly, and changes should be visible in-game. 43 | 44 | -- ----- ----- ----- ----- 45 | 46 | Problem: The SMITE Optimizer cannot find my configuration files no matter what button I press during the setup phase. 47 | 48 | Solution: Make sure SMITE was launched at least once on your system before. 49 | Solution4: Launch the SMITE Optimizer as Admin. 50 | Solution2: Verify the game files through Steam or Epic Game Store. 51 | Solution3: Make sure your antivirus does not interfere with the SMITE Optimizer. 52 | Solution5: Head into the debug tab and reset your configuration paths. When selecting the new paths, click on "More options" and then "Manual Search". Go into your Documents folder (Default: C:\Users\ (USER) \Documents\My Games\SMITE\BattleGame\Config) and select BattleEngine.ini .. Then BattleSystemSettings.ini .. Then BattleGame.ini - If these files do not exist after following the steps above, then you should open an issue on GitHub for further help. 53 | 54 | -- ----- ----- ----- ----- 55 | 56 | Problem: The SMITE Optimizer crashes when I apply the changes or verify and repair the integrity of the configuration files. 57 | 58 | Solution: Disable the automatic repair / verification check in the debug tab. (Uncheck verify/integrity in the debug tab) 59 | Extra: If you encounter this error, please report it on GitHub! > https://github.com/MeteorTheLizard/SMITE-Optimizer/issues/ 60 | 61 | -- ----- ----- ----- ----- 62 | 63 | Problem: The SMITE Optimizer does not detect my screen resolution! 64 | 65 | Solution: Set your main monitor as your primary display device. 66 | Solution2: Make sure your primary display device supports your requested screen resolution. 67 | 68 | -- ----- ----- ----- ----- 69 | 70 | Problem: The SMITE Optimizer started to crash suddenly when I apply the changes made even though it worked before! 71 | 72 | Solution: Your configuration files are corrupt. Restore a backup through the "Restore configuration" tab, or head into the debug tab and follow the path to your configuration files and delete them. Open smite, close it, and then try again. Deleting your configuration files will reset your in-game settings. 73 | 74 | -- ----- ----- ----- ----- 75 | 76 | Problem: I applied the settings, but now my game is in Fullscreen at a low resolution! 77 | 78 | Solution: The SMITE Optimizer does not read existing configuration files on first launch and uses your primary display device resolution when possible. Make sure to set the Window Type and Resolution and apply the changes again. 79 | 80 | -- ----- ----- ----- ----- 81 | 82 | Problem: I applied the settings a while ago, but some of the settings are gone now! 83 | 84 | Solution: The game received an update which partially reset your configuration files. Re-apply the SMITE Optimizer to fix it. 85 | 86 | -- ----- ----- ----- ----- 87 | 88 | Problem: The SMITE Optimizer said it found my Steam installation, but it is invalid. -Community Contribution 89 | 90 | Solution: Press windows key + r 91 | Type "regedit" 92 | Navigate to "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 386360\" 93 | Make sure "InstallLocation" is not empty and points to the SMITE folder. 94 | To find out where SMITE was installed, go into your Steam library, right-click on SMITE > Properties > Installed Files > Browse 95 | This will open a new Explorer window. You can copy the path and paste it into the InstallLocation data field in regedit. 96 | 97 | > We are happy to help. Join our official Discord server by clicking the Discord icon next to the close button. 98 | 99 | -- ----- ----- ----- ----- 100 | 101 | Problem: I'm trying to create a QuickLaunch Bypass, but the SMITE Optimizer cannot find my game. 102 | 103 | Solution: Verify the game files through Steam or Epic Game Store. 104 | Solution2: Uninstall the game and install it again (This re-creates the registry entries, which verifying does not do! These are required!) 105 | 106 | -- ----- ----- ----- ----- 107 | 108 | Problem: When I start the game, it says "Version Mismatch" in the login screen! 109 | 110 | Solution: You're using the QuickLaunch Bypass. You have to manually update the game whenever there was a patch. You do this through Steam or Epic Game Store. 111 | 112 | -- ----- ----- ----- ----- 113 | 114 | Problem: I changed my settings to be very low overall, but my FPS didn't get better! 115 | 116 | Solution: Newer hardware does not benefit from lower settings. It is recommended to bump the settings up higher as that will force your CPU and GPU to work harder, which CAN result in higher FPS. If you have a decent PC I recommend using my settings which can be found on GitHub in the screenshots. (Resolution scale should be 100% !!) 117 | 118 | -- ----- ----- ----- ----- 119 | 120 | Problem: The game crashes for no reason even without using the SMITE Optimizer! 121 | 122 | Solution: Re-install your graphics drivers as well as all the redistributables for the game. You can find the in the game folder (Steam > \Steam\steamapps\common\SMITE\Binaries\Redist) 123 | Solution2: Re/Install your Chipset drivers for your motherboard. 124 | Solution3: Make sure your hardware and operating system is supported. 125 | 126 | -- ----- ----- ----- ----- -------------------------------------------------------------------------------- /Changelog.txt: -------------------------------------------------------------------------------- 1 | SMITE Optimizer Version 1.3.8.0 - End of Life 2 | 3 | I am officially deprecating the SMITE Optimizer. Despite the thousands of dollars my passion project generated for Hi-Rez Studios, Inc. and Titan Forge Games, and the significant reduction in support tickets it provided, I have been treated with complete disregard and disrespect. My efforts were aimed at improving the community and enhancing the game, but their response has been nothing short of disheartening. As a result, I can no longer justify maintaining this tool. Thank you to everyone who supported my work. 4 | 5 | This will be the last official version of the SMITE Optimizer. This update prepares the program for the imminent shutdown of the update and metrics servers. 6 | You can continue using the program as normal. It can be acquired here: https://github.com/MeteorTheLizard/SMITE-Optimizer going forward, however no more updates will be released. 7 | 8 | - Updated discord button to redirect to the rebranded SMITE-Optimizer discord server. 9 | - Completely removed automatic update functionality. 10 | - Completely removed metrics functionality. 11 | - Updated copyright tab to reflect end of life changes. 12 | 13 | - Fixed incorrect use of the "DisplayErrorMessage" function when fixing EasyAntiCheat and no installation files could be found. 14 | - Removed buttons "Create quicklaunch bypass" and "Install legacy launcher" from the fixes tab. 15 | - Repositioned button "Repair EasyAntiCheat" 16 | 17 | 18 | 19 | 20 | 21 | SMITE Optimizer Version 1.3.7.9 22 | - Updated HelpText for DirectX 11. (Community Contribution) 23 | - Updated fix EasyAntiCheat now uninstalling it first before installing it. (Community Contribution) 24 | - Updated E-Mail address in the copyright tab. 25 | 26 | 27 | 28 | 29 | 30 | SMITE Optimizer Version 1.3.7.8 31 | 32 | Starting note: 33 | Hi-Rez Studios has modernized SMITE drastically with patch 11.4. They have merged both the Steam version and the Epic Game Store version of the game into one repository. Both integrations are loaded now if you have both Steam and Epic Game Store installed on your system. The "-nosteam" and "-noepic" parameter were removed, and the log-in functionality of the game has been restricted to only authenticate when launching through Steam or Epic Game Store. This broke the Quicklaunch Bypass and Legacy Launcher of the SMITE Optimizer. It is possible to still launch the game without any integrations with some small tweaks to the shortcut that is created by the SMITE Optimizer, but you are not able to log in. It will always give you an error. On top of this, Hi-Rez is no longer supporting Windows 7, 8, and 8.1. This includes DirectX9 and 32-Bit support. 34 | > TL;DR: DirectX11 and 64-Bit is now mandatory. Quicklaunch Bypass is broken forever. 35 | 36 | - Removed "Quicklaunch Bypass" feature. (See starting note.) 37 | - Removed "Install Legacy Launcher" feature. (See starting note.) 38 | - DirectX11 and 64-Bit are now mandatory and forced to be enabled wherever applicable. (See starting note.) 39 | 40 | - Fixed and updated the "Repair EasyAntiCheat" feature. (Community Contribution - Testing - Research) 41 | - The donation tab now redirects to https://donate.meteorthelizard.com when clicked. 42 | > All other donation tab code and resources were removed. 43 | 44 | - Added new metrics: "error_fixes_eac_nosetup_eos", "error_fixes_eac_nosetup_both", and "action_donate_mtl_pressed" 45 | - Metrics "error_fixes_eac_nosetup", "error_oldlauncher_installfailed", "error_quickbypass_code17", "error_quickbypass_code18", "error_quickbypass_noegsfound", "error_quickbypass_nosteamfound", "error_quickbypass_nosteamfound_path", "event_oldlauncher_installsuccess", "event_quickbypass_successegs", "event_quickbypass_successsteam", "action_kofi_pressed", "action_patreon_pressed", and "action_paypal_pressed" are now marked as deprecated and no longer used. 46 | 47 | 48 | 49 | 50 | 51 | SMITE Optimizer Version 1.3.7.7 52 | - Added new setting "Disable Fog" to the fixes tab. 53 | - Improved replacing of login information from the debug dump feature for improved security. 54 | - Made some slight improvements to the "Common Issues" file. 55 | - Fixed one-time crash on the first launch that happened on rare occasion. 56 | - Implemented a new algorithm to verify configuration file integrity, faster speed and higher reliability. 57 | > It is no longer possible to disable the verification step, as it is required for the optimizer to function. 58 | > Removed "Check integrity/repair" from the Debug tab. 59 | > "Buckets" are no longer modified by the program. Only the group that stores our active settings is modified. 60 | - Metrics "action_automatic_repair_disabled" and "action_automatic_repair_enabled" are now marked as deprecated and no longer used. 61 | - Made creating steam quicklaunch bypasses slightly more reliable by checking for the default installation path. (Community Contribution) 62 | > If you experience errors, join the official Discord server. We're happy to help out. 63 | 64 | 65 | 66 | Developer note: 67 | Hi-Rez has added many new options to the .ini that could be changed to improve visuals or FPS even further. 68 | Some values include TAA (Better antialiasing), optimizing tower/titan crumble physics, disabling SDKs (Logitech RGB, etc.), per-frame bias, and more. 69 | There are currently no plans to add these to the SMITE Optimizer, but if demand is high enough, I'll consider it. 70 | 71 | 72 | 73 | 74 | 75 | SMITE Optimizer Version 1.3.7.6 76 | - Updated copyright information. Happy new year! 77 | - Added a new button to the "Fixes" tab that repairs EasyAntiCheat. (This requires administrator privileges.) 78 | - Added new metrics: "action_fixes_eac", "error_fixes_eac_filedel", "error_fixes_eac_nogame", "error_fixes_eac_nosetup", "action_fixes_eac_success" 79 | - Fixed blue pixels in some borders of the help tips. 80 | - Updated DevTools "Template_Pics.xcf", "Template_Text_Compact.xcf", and "DevSettings.reg" 81 | 82 | 83 | 84 | 85 | 86 | SMITE Optimizer Version 1.3.7.5 87 | - Updated fonts for combo and input controls. 88 | - Ensured to call NoTheme on input controls. 89 | - Fixed style inconsistencies with the quicklaunch bypass popups. 90 | - Added a new error message when trying to create a quicklaunch bypass for Steam, but the registry entries are invalid. (Community Contribution) 91 | -> Added a new section to the CommonIssues.txt explaining what to do when the registry entries are invalid. 92 | - Added new metrics: "error_quickbypass_nosteamfound_path", "error_font_code21", "error_font_code22", "error_updater_mtl_failed", "action_paypal_pressed" 93 | - Made the donation reminder banner less intrusive by making it undraw properly when moving the window. 94 | - Resolved various issues with the GIF in the copyright tab. 95 | - Re-instated the PayPal button in the donation tab due to recent policy changes on their end. 96 | - Fixed position of the "Perform Update" button in the debug tab. 97 | - Added SMITE-Optimizer registry values to the "Create debug dump" feature. 98 | - Implemented an UpdateProvider registry entry which will also be exported through the above change. This key stores the last provider from which an updated version was downloaded. 99 | - Updated the splash-screen to show which update provider is being contacted in real time. 100 | 101 | - Fixed a bug with the resolution selector when an unavailable resolution was loaded. This usually happens when the display configuration changed. 102 | - Metric "error_failed_screen_resolutions" is now marked as deprecated and is no longer used. 103 | - Overhauled how resolutions are selected. Instead of relying on winmgmts which is limited to Full HD and often fails for no reason, you can now choose from a list of common resolutions or create a custom one! 104 | - Implemented logic for custom resolutions. Selecting "Custom" in the resolution combo will now prompt you to input a resolution. Limited to: 800x600 - 15360x8640. The game does not support lower or higher settings. 105 | > Please note that the game defaults to the nearest valid resolution to preserve a compatible aspect-ratio. "Random" resolutions such as "2100x1181" will not work. 106 | 107 | - Added new update provider server, "update-so.meteorthelizard.com", for retrieving the .ini and .exe update files. 108 | 109 | 110 | 111 | 112 | 113 | SMITE Optimizer Version 1.3.7.4 114 | - Minor style changes. 115 | - Minor compatibility changes regarding code-workflow. 116 | - Now properly checking for the BattleGame.ini settings path at various locations. 117 | - Potentially resolved an issue with OneDrive. 118 | - Added a new section to the 'Common Issues' file, explaining how to resolve issues caused by OneDrive. (Community Contribution) 119 | - Now mentioning the discord server in the 'Common Issues' file. 120 | 121 | 122 | 123 | 124 | 125 | SMITE Optimizer Version 1.3.7.3 126 | - Removed fallback paths for configuration discovery. The files it was pointing to have not been working as a fallback for a long time and have caused all sorts of issues. Begone! 127 | - Fixed the AutoIt debugger reporting incorrect lines when encountering an error or crash. 128 | - Added a DevTool that can be used to reset the registry entries for the SMITE optimizer to fully reset the program. 129 | - Added a .reg file to the DevTools that contains my personal settings. 130 | - Updated AutoIt Copyright. 131 | 132 | - Added metrics to the SMITE Optimizer. 133 | > Added new clickable URLs to the Copyright tab, Privacy Policy, GDPR, and 'View SO-Metrics Online'. 134 | > Privacy is our top priority. Specific actions, events, and errors in the SMITE Optimizer cause it to access a path on metrics-so.meteorthelizard.com. 135 | > This increases the count for that action, event, or error by 1. When the SMITE Optimizer does that, it transmits your IP address, which is stored for a maximum of 1 week for security reasons. 136 | > No other information is collected, and your IP address is not being shared. Learn more in the Privacy Policy / GDPR statement in the Copyright tab. 137 | > All data that we collect and store can be viewed publicly by visiting: metrics-so.meteorthelizard.com, except for IP addresses. 138 | > > Why collect metrics? - A: to potentially identify issues with the SMITE Optimizer and resolve them to improve the user experience. 139 | 140 | 141 | 142 | 143 | 144 | SMITE Optimizer Version 1.3.7.2 145 | - Updated help tips for "World Quality", and "Effects Quality", to better reflect what they affect in-game. (Community Contribution) 146 | - Updated the recommended setting for "Effects Quality" from Minimum to Low; the recommended settings button was already setting this to Low. (Community Contribution) 147 | - Updated settings wheel for the "TEXTUREGROUP_ImageBasedReflection" texture group. 148 | - Integrated settings wheel for the "TEXTUREGROUP_Bokeh" texture group. It is now part of the shadows. 149 | > The following texture groups remain unable to be changed: 150 | > > TEXTUREGROUP_Cinematic 151 | > > TEXTUREGROUP_UI 152 | > > TEXTUREGROUP_RenderTarget 153 | > > TEXTUREGROUP_MobileFlattened 154 | > > TEXTUREGROUP_ProcBuilding_Face 155 | > > TEXTUREGROUP_ProcBuilding_LightMap 156 | > > TEXTUREGROUP_ColorLookupTable 157 | > > TEXTUREGROUP_TitleScreenPreview 158 | > > TEXTUREGROUP_UIStreamable 159 | 160 | - Updated reference hives for the integrity verification algorithm. 161 | 162 | 163 | 164 | 165 | 166 | SMITE Optimizer Version 1.3.7.1 167 | - Fixed a bug that would remove the 800x600 resolution from the list. (Community Contribution) 168 | - Fixed a bug with the new buttons not having any text on Windows Vista, Windows 7, Windows 8, and Windows 8.1. (Community Contribution) 169 | 170 | 171 | 172 | 173 | 174 | SMITE Optimizer Version 1.3.7 175 | - Updated overall brand design, which includes a new theme, color changes, visual updates, and more. 176 | > Changed the default colors, which also now accesses a global variable, so that they can be changed more easily. 177 | > New modern buttons and a new GIF library for faster loading times, smoother animations, and better stability. 178 | > Fixed spacing for several brand-related GUI objects. 179 | > Updated the design of quick-action popups. 180 | > Updated CommonIssues.txt to reflect new changes. 181 | > Moved the MenuHover popups to a separate GUI so that they can be displayed over animations. 182 | > The logo in the copyright tab is now always animated. 183 | > > Added a button to the title bar that links to the official SMITE Optimizer Discord support server! 184 | > > Added an alert system. If an important message needs to be sent to all users, it will now be displayed after the launch of the SMITE Optimizer. 185 | 186 | - The resolution setting now defaults to the native screen resolution on the first start of the program. 187 | - Improved sorting for screen resolutions and made it, so your native monitor resolution always shows up. 188 | > There is currently a limitation that makes it so that resolutions higher than 1080p (FULL HD) are not added to the list. 189 | > This is due to the way screen resolutions are retrieved. (Help wanted!) 190 | 191 | - Changed the welcome text. 192 | - Removed labels from the donation tab. 193 | - Modified splash text from "Loading.." to "Initializing.." 194 | - Updated copyright information and moved the logo copyright information into the copyright tab. 195 | - Updated labels in the debug tab that display paths to use a different font on Windows 10 and Windows 11. 196 | - Updated labels in the restore configuration tab to be more clear about the timestamps. 197 | - Updated error text when available screen resolutions could not be obtained. 198 | - Removed invalid resource "Resource\HelpText" 199 | - Fixed the "Cancel" button from the Export HUD settings feature. 200 | - Fixed an issue where the program would sometimes lock up on startup. 201 | - Fixed a bug with the legacy launcher installation, displaying a second "SMITE Optimizer" block in the taskbar. 202 | - Removed resources that are no longer needed. 203 | - Drastically reduced the overall file size. 204 | - Massively improved the sorting of the restore backup file list. 205 | - Added partial support for Windows 11, some issues may occur. 206 | - Ran every comment, label, and string through a spell-checker. 207 | 208 | 209 | 210 | 211 | 212 | SMITE Optimizer Version 1.3.6 213 | - Added a new feature under "Fixes" that allows users to export their classic and new HUD settings as well as import them. 214 | > This makes sharing HUD settings possible! 215 | > Note: Selecting a valid Exported HUD file during import will immediately apply it to your configuration files. 216 | 217 | - Updated Text that is displayed in the EngineGame.ini file when creating a debug dump that replaces the login information. 218 | 219 | 220 | 221 | 222 | 223 | SMITE Optimizer Version 1.3.5.2 224 | - Updated copyright information 225 | 226 | 227 | 228 | 229 | 230 | SMITE Optimizer Version 1.3.5.1 231 | - Fixed the Ko-Fi and Patreon button not being clickable in some spots due to the background taking priority. 232 | - Made the text in the copyright tab more readable by using the new menu font instead of using the main font. 233 | 234 | 235 | 236 | 237 | 238 | SMITE Optimizer Version 1.3.5 239 | - Updated reference hives for the integrity verification algorithm. 240 | - Updated Browser Agent for the automatic updater. 241 | - Updated AutoIt Product Version from 3.3.14.5 to 3.3.16.1 - Modified ResourcesEx to be compatible with the newest AutoIt version. 242 | - Updated AutoIt License. 243 | - Added a message box that tells the user to disable the integrity check when the SMITE Optimizer crashed while applying the settings. 244 | - Added a 'common issues' button in the debug tab that opens a document that provides help for common issues. 245 | - Manual Search now defaults to the "../Documents/My Games/SMITE/" folder. 246 | - Vehicle Quality now defaults to "Best" since it affects the targeters. 247 | - Decals now defaults to "On" as they are very cheap to draw. 248 | 249 | - Made countless improvements to the overall design. 250 | > Changed the Menu Font to Montserrat. 251 | > Changed the accent color to match the color of the Buttons. 252 | > Moved the Ko-Fi and Patreon buttons in the donate tab slightly lower. 253 | > Changed the font of the "Welcome!" text to the new menu font. 254 | > Changed the hover contrast color to something less insane. 255 | > Added a heart to the background of the donation tab. 256 | 257 | - Drastically improved the help tips. 258 | > Changed the font to something more readable. 259 | > Updated the text for all help tips. 260 | > Fixed various typos and grammar. 261 | > Ran everything through a spell-checker. 262 | 263 | 264 | 265 | 266 | 267 | SMITE Optimizer Version 1.3.4.5 268 | - Removed PayPal as a donation option. 269 | 270 | 271 | 272 | 273 | 274 | SMITE Optimizer Version 1.3.4.4 275 | - For whatever reason Hi-Rez decided it is a good idea to store login information and the access token in the BattleGame.ini file, which I discovered today. 276 | > This behavior is unacceptable as this file is packed when creating a debug dump. 277 | > Steps have been implemented to ensure that this critical information is filtered out so that it is NOT being stored and sent. 278 | > We are not interested in this information and it is a massive security risk as debug dumps usually get posted publicly. 279 | > Critical information like this should NEVER be stored as plain-text. The fact Hi-Rez does this is laughable. It is highly recommended to NOT stay logged in to improve security. 280 | > All of this only applies to users that are making use of the launcher bypass or the in-game log-in form. 281 | 282 | 283 | 284 | 285 | 286 | SMITE Optimizer Version 1.3.4.3 287 | - Fixed a bug with the Desired FPS (Uncap) option always using the simple tab input even when in advanced mode. 288 | > This made it so that changing the FPS uncap option in the advanced tab had no effect. Whoops. 289 | 290 | - Changed error code 004 - 005 - 013 to be more descriptive. These errors happen when the optimizer could not write to the config files. Usually this happens when they're set to read-only mode. 291 | - Changed error code 001 - 002 - 012 to be more descriptive. These errors happen when individual files of the config backup fail being copied. It now includes which file failed. 292 | - Changed error code 003 to be more descriptive. This error happens when an internal error occurred during the config backup routine. 293 | - Updated the system information box in the debug tab to be a bit larger to allow longer motherboard names to be displayed correctly. Thanks MSI and other manufacturers that do this! 294 | - Added a checkbox to the debug tab that allows users to disable the integrity / repair routine. This never caused problems, but it can't hurt to have this option available. 295 | - Updated reference hives for the integrity verification algorithm. 296 | - Fixed an issue with the DevTool 'INIToAutoItHive.au3' 297 | - Fixed spelling mistakes in the changelog. 298 | 299 | 300 | 301 | 302 | 303 | SMITE Optimizer Version 1.3.4.2 304 | - Fixed a bug with the Ko-fi button in the 'Donation' tab 305 | 306 | 307 | 308 | 309 | 310 | SMITE Optimizer Version 1.3.4.1 311 | - Removed a few lines of unused code. 312 | - Updated 'Donate' tab to include Ko-fi and removed the logo copyright notices as they were not needed legally. 313 | 314 | 315 | 316 | 317 | 318 | SMITE Optimizer Version 1.3.4 319 | - Slight code optimizations 320 | - Added error handler when you try to apply fixes before completing the configuration discovery process. 321 | - The fixes tab will now remember your settings. Wow! 322 | - Fixed configuration discovery for the Epic Game Store. (They made updates to how things work.) 323 | - Implemented a new feature: Create Quicklaunch! (See next note) 324 | 325 | - Updated Legacy Launcher installer notices (again) 326 | > The legacy launcher still works at the time of writing this, installing it will download 9.3 when launching it. 327 | > You can then copy Steam or Epic Game Store files over to the legacy install to update it to 9.4 and then launch the game normally. 328 | > Eventually the legacy launcher will be completely shut down, meaning this method won't work anymore. 329 | > It is recommended to use the new Quicklaunch bypass instead which launches the Steam or Epic Game Store version like the legacy launcher meaning you still have all the benefits. 330 | > Additionally, since it uses official methods only, it is 100% 'legal' as in; Not violating the Terms of Service. 331 | 332 | 333 | 334 | 335 | 336 | SMITE Optimizer Version 1.3.3 337 | - Updated information boxes when trying to install the Legacy Launcher. It is no longer officially supported by Hi-Rez Studios, but I'm not going to restrict users from installing it if they wish to do so. 338 | - Added Website to Copyright tab. 339 | - Changed update checkbox label "Perform Automatic Updates" > "Automatic Updates" 340 | - Added a cheap status label to the Debug tab when creating a Debug Dump to let the user know what it is working on. 341 | 342 | 343 | 344 | 345 | 346 | SMITE Optimizer Version 1.3.2.1 347 | - Added a notice when first launching the program when the standard path to the configuration files is invalid to tell the user to launch the game on their system at least once before doing anything with the program 348 | - Added "paths" to the debug dump feature. This should have been there right from the start! 349 | - Updated copyright information 350 | 351 | 352 | 353 | 354 | 355 | SMITE Optimizer Version 1.3.2 356 | - Added a new tab: Fixes. In this tab, you can apply fixes for common issues. Applying fixes are separate from other settings, allowing you to apply them without changing other graphics settings. 357 | > New fix: Sounds cutting off (MaxChannels) 358 | > New shortcut: FPS. You can set the FPS cap in the fixes tab now so that you don't have to make changes to other settings if all you want is a higher FPS cap. (QoL) 359 | > New: Install Legacy Launcher Button. You heard right, the SMITE Optimizer now has a feature that allows you to install the old Legacy Launcher on your system. This feature is experimental and may not always work. Additionally, you will have to re-download the whole game through the launcher. 360 | > (The downloaded files are from HiRez and are shipped to players through the Steam version (Steam\steamapps\common\SMITE\Binaries\Redist), they're official and 100% safe. ) 361 | 362 | - Updated the Vehicle Quality help popup as this option affects the Distance Line, Reticle, and Ground Target now. (Previously: Unused) - Reported by: WarpBurger 363 | 364 | - Added the BattleGame / DefaultGame configuration files (This change requires ALL users to re-discover the configuration files) 365 | > This file was added as there are more useful settings inside, one of them is required for the Fixes tab. 366 | > Due to this file being added, previous configuration backups can no longer be restored and won't show up in the SMITE Optimizer. 367 | 368 | Misc: 369 | - Fixed spacing of menu item text 370 | - Fixed spacing of "(Click to Continue)" text when applying the changes 371 | - Fixed spacing of "Processing index of drive: (Drive letter)" text when using the automatic file discovery feature 372 | - Fixed the spacing of the steam logo in the steam discovery button in the discovery tab 373 | - Updated the DevTools/FontColors.txt to include the "Really bad" color 374 | - Updated the Changelog.txt to fix formatting inconsistencies. 375 | 376 | 377 | 378 | 379 | 380 | SMITE Optimizer Version 1.3.1.52 381 | - Made even more improvements to the update routine. 382 | > The progress display is now fixed, no idea how I messed that up so badly. (Also made it display more information) 383 | > The update.ini it downloads from GitHub or Pastebin is now 100% guaranteed to be up-to-date. 384 | 385 | 386 | 387 | 388 | 389 | SMITE Optimizer Version 1.3.1.51 390 | - Made some Improvements to the automatic updater. 391 | > Whenever the program was launched, the update information was downloaded from the internet (GitHub or pastebin). 392 | > However, that information was then cached out of my control and whenever the program was launched again, instead of downloading the information fresh from the internet, it loaded the information from cache which was causing problems. 393 | > The cached information was usually deleted on a proper shutdown of the system but due to Windows 10 not actually shutting down on a shut down, this cache was never reset until windows 10 did a full shutdown. 394 | > (I'm so tired of windows, ngl.), this issue is now fixed. 395 | 396 | 397 | 398 | 399 | 400 | SMITE Optimizer Version 1.3.1.5 401 | - Potentially fixed a crashing issue on launch when in Steam Mode. 402 | > https://github.com/MeteorTheLizard/SMITE-Optimizer/issues/8#issuecomment-860125326 403 | 404 | - Fixed the system information box in the debug tab not resizing properly. 405 | - Added a label button to the debug tab that retrieves useful debugging information, this should help with future issues. 406 | - Added support for custom document folder paths to the config discovery process. 407 | - Fixed invalid file exist checks for OneDrive specific configuration discovery methods. 408 | > (When OneDrive is installed, the configuration files may be stored inside of the OneDrive folder which causes problems, the check for the files whether they exist or not was erroneous but is now fixed.) 409 | 410 | 411 | 412 | 413 | 414 | SMITE Optimizer Version 1.3.1.4 415 | - Fixed a bug with the file integrity check routine that caused the program to crash when trying to apply changes to empty files. The program is supposed to add everything that is missing, which can be EVERYTHING if the file is empty. 416 | 417 | 418 | 419 | 420 | 421 | SMITE Optimizer Version 1.3.1.3 422 | - Updated Copyright information. 423 | 424 | 425 | 426 | 427 | 428 | SMITE Optimizer Version 1.3.1.2 429 | - Fixed discoloration of the window menu buttons (Close, Maximize, Minimize) 430 | 431 | 432 | 433 | 434 | 435 | SMITE Optimizer Version 1.3.1.1 436 | - Fixed 'Whole Scene Dominant Shadows' label in Advanced mode being cut-off. 437 | - Fixed 'Verifying and repairing integrity' label in the apply changes progress window, being wrapped to the next line. 438 | 439 | 440 | 441 | 442 | 443 | SMITE Optimizer Version 1.3.1 444 | - This update introduces new fonts loaded from memory to prevent version incompatibilities. 445 | > Previously, the program was loading system fonts that varied between Windows versions which caused spacing and label sizing issues. 446 | > This update addressed this issue, fixing all cut-off text by changing the fonts for new ones. 447 | 448 | 449 | 450 | 451 | 452 | SMITE Optimizer Version 1.3 (Code name: "The Future is here") 453 | 454 | Compatible Operating Systems: Windows 7, Windows 8, Windows 8.1 and Windows 10. 455 | Please note that the program might still work perfectly fine on Windows XP and Windows Vista, however it was not tested, and they won't be officially supported. Expect bugs! 456 | 457 | Most important changes: 458 | The program is now open source and available on GitHub! (https://github.com/MeteorTheLizard/SMITE-Optimizer) 459 | Version 1.3 and upcoming versions are licensed under the GPL-3.0 License. 460 | Anyone may contribute to the code-base by creating a fork of the master branch and making changes to it. Once you are done, open a pull request. 461 | Older versions than 1.3 are available on GitHub as well. Keep in mind that these versions are licensed differently. 462 | 463 | Since the code of every version of the SMITE Optimizer ever released is now publicly available, there is no need for security concerns anymore. 464 | The SMITE Optimizer always was virus-free and always will be. 465 | 466 | 467 | Over the past few years from the point this project initially started, I have improved immensely in terms of writing efficient, understandable, and GOOD code. 468 | The current state of the program and its code reflects my current coding skills, compared to V1.2.2, it is a massive difference and a re-write was desperately needed. 469 | A re-write was also needed not just because the code was simply bad, but because the upcoming SMITE patch (7.8) will remove an option from the configuration files (bAllowFog) as it will now be enforced to always be true due to recent changes in HiRez' Terms of Service. V1.2.2 was not made with that in mind and will stop functioning once the patch goes live. 470 | 471 | Do note that you're still allowed to tweak and make changes to the .ini (configuration files) as you please, which is all this program does. 472 | The program is no longer capable of making changes to the (bAllowFog) variable to ensure that no one gets banned, even though re-adding that variable and changing it has no effect in-game. 473 | 474 | For the past 3 weeks (It is currently the 9th of August 2020) I have been working on this rewrite, having spent at least 8 hours a day on it. 475 | It is safe to say that it was an absurd amount of work and took a lot of dedication, time, sweat, blood, and stamina. 476 | 477 | As previously mentioned, this version is a complete re-write of the SMITE Optimizer and features an overhauled and modern UI. 478 | The SMITE Optimizer is now much more efficient in terms of code as well as optimizing the configuration files as I discovered new ways to efficiently optimize the game by tweaking settings. 479 | The program is now able to detect corrupted configuration files, being able to fix almost any error or problem by itself as well as filling in missing settings. (bAllowFog excluded.) 480 | The only thing it can't fix are settings that are set to malformed or incorrect values. 481 | 482 | 483 | List of changes: 484 | - Complete Code re-write. 485 | - New modern UI with animations! 486 | - Improved user friendliness as well as making things a lot easier to understand. 487 | - Added Help tips for every single option that fades in when hovering over, explaining in detail what exactly it is and what effects it has on performance. 488 | - Simple and Advanced mode, making it easier for people that don't know anything about game development. 489 | - Added an animated splash-screen. 490 | - New update routine that is a lot more efficient. 491 | - Added an algorithm to find errors in the configuration files and repair them. 492 | - More efficient way of applying the changes. 493 | - More efficient and user-friendly way to restore backups. 494 | - Updated Debug tab. 495 | - Updates are now downloaded and applied automatically. (To disable automatic updates, you will now have to go into the debug tab) 496 | 497 | 498 | The program and this update is free of charge. 499 | If you are interested in supporting this project, please check out the "Donate" tab. Thank you! -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /Resource/GPL-3.0_License.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /Includes/_Zip.au3: -------------------------------------------------------------------------------- 1 | #include-once 2 | 3 | ; =============================================================================================================== 4 | ; 5 | ; Description: ZIP Functions 6 | ; Author: wraithdu 7 | ; Date: 2013-05-28 8 | ; Credits: PsaltyDS for the original idea on which this UDF is based. 9 | ; torels for the basic framework on which this UDF is based. 10 | ; 11 | ; NOTES: 12 | ; This UDF attempts to register a COM error handler if one does not exist. This is done to prevent 13 | ; any fatal COM errors. If you have implemented your own COM error handler, this WILL NOT replace it. 14 | ; 15 | ; The Shell object does not have a delete method, so some workarounds have been implemented. The 16 | ; options are either an interactive method (as in right-click -> Delete) or a slower method (slow for 17 | ; large files). The interactive method is the main function, while the slow method is in the internal 18 | ; function section near the bottom. 19 | ; 20 | ; When adding a file item to a ZIP archive, if the file exists and the overwrite flag is set, the slower 21 | ; internal delete method is used. This is the only way to make this step non-interactive. It will be 22 | ; slow for large files. 23 | ; 24 | ; WINDOWS XP NOTE: This internal delete method does not work in Windows XP, it will fail with an error. 25 | ; 26 | ; As a result, adding files directly to a subdirectory will not work. So please don't try it. As a 27 | ; workaround, create the directory structure that holds your files in a temporary location, and add the 28 | ; root directory to the root of the zip file. 29 | ; 30 | ; For example, to add 'file.ext' to the path 'some\sub\path', first create 'some\sub\path\file.ext' 31 | ; in a temporary location, then add the entire 'some' directory to the root of your zip file. 32 | ; 33 | ; The zipfldr library does not allow overwriting or merging of folders in a ZIP archive. That means 34 | ; if you try to add a folder and a folder with that name already exists, it will simply fail. Period. 35 | ; As such, I've disabled that functionality. 36 | ; 37 | ; I've also removed the AddFolderContents function. There are too many pitfalls with that scenario, not 38 | ; the least of which being the above restriction. 39 | ; 40 | ; =============================================================================================================== 41 | 42 | ;;; Start COM error Handler 43 | ;===== 44 | ; if a COM error handler does not already exist, assign one 45 | If Not ObjEvent("AutoIt.Error") Then 46 | ; MUST assign this to a variable 47 | Global Const $_Zip_COMErrorHandler = ObjEvent("AutoIt.Error", "_Zip_COMErrorFunc") 48 | EndIf 49 | 50 | 51 | ; #FUNCTION# ==================================================================================================== 52 | ; Name...........: _Zip_AddItem 53 | ; Description....: Add a file or folder to a ZIP archive 54 | ; Syntax.........: _Zip_AddItem($sZipFile, $sItem[, $sDestDir = ""[, $iFlag = 21]]) 55 | ; Parameters.....: $sZipFile - Full path to ZIP file 56 | ; $sItem - Full path to item to add 57 | ; $sDestDir - [Optional] Destination subdirectory in which to place the item 58 | ; + Directory must be formatted similarly: "some\sub\dir" 59 | ; $iFlag - [Optional] File copy flags (Default = 1+4+16) 60 | ; | 1 - Overwrite destination file if it exists 61 | ; | 4 - No progress box 62 | ; | 8 - Rename the file if a file of the same name already exists 63 | ; | 16 - Respond "Yes to All" for any dialog that is displayed 64 | ; | 64 - Preserve undo information, if possible 65 | ; | 256 - Display a progress dialog box but do not show the file names 66 | ; | 512 - Do not confirm the creation of a new directory if the operation requires one to be created 67 | ; |1024 - Do not display a user interface if an error occurs 68 | ; |2048 - Version 4.71. Do not copy the security attributes of the file 69 | ; |4096 - Only operate in the local directory, don't operate recursively into subdirectories 70 | ; |8192 - Version 5.0. Do not copy connected files as a group, only copy the specified files 71 | ; 72 | ; Return values..: Success - 1 73 | ; Failure - 0 and sets @error 74 | ; | 1 - zipfldr.dll does not exist 75 | ; | 2 - Library not installed 76 | ; | 3 - Destination ZIP file not a full path 77 | ; | 4 - Item to add not a full path 78 | ; | 5 - Item to add does not exist 79 | ; | 6 - Destination subdirectory cannot be a full path 80 | ; | 7 - Destination ZIP file or sub path does not exist 81 | ; | 8 - Destination item exists and is a folder (see Remarks) 82 | ; | 9 - Destination item exists and overwrite flag not set 83 | ; |10 - Destination item exists and failed to overwrite 84 | ; |11 - Failed to create internal directory structure 85 | ; 86 | ; Author.........: wraithdu 87 | ; Modified.......: 88 | ; Remarks........: Destination folders CANNOT be overwritten or merged. They must be manually deleted first. 89 | ; Related........: 90 | ; Link...........: 91 | ; Example........: 92 | ; =============================================================================================================== 93 | Func _Zip_AddItem($sZipFile, $sItem, $sDestDir = "", $iFlag = 21) 94 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 95 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 96 | If Not _IsFullPath($sItem) Then Return SetError(4, 0, 0) 97 | If Not FileExists($sItem) Then Return SetError(5, 0, 0) 98 | If _IsFullPath($sDestDir) Then Return SetError(6, 0, 0) 99 | ; clean paths 100 | $sItem = _Zip_PathStripSlash($sItem) 101 | $sDestDir = _Zip_PathStripSlash($sDestDir) 102 | Local $sNameOnly = _Zip_PathNameOnly($sItem) 103 | ; process overwrite flag 104 | Local $iOverwrite = 0 105 | If BitAND($iFlag, 1) Then 106 | $iOverwrite = 1 107 | $iFlag -= 1 108 | EndIf 109 | ; check for overwrite, if target exists... 110 | Local $sTest = $sNameOnly 111 | If $sDestDir <> "" Then $sTest = $sDestDir & "\" & $sNameOnly 112 | Local $itemExists = _Zip_ItemExists($sZipFile, $sTest) 113 | If @error Then Return SetError(7, 0, 0) 114 | If $itemExists Then 115 | If @extended Then 116 | ; get out, cannot overwrite folders... AT ALL 117 | Return SetError(8, 0, 0) 118 | Else 119 | If $iOverwrite Then 120 | _Zip_InternalDelete($sZipFile, $sTest) 121 | If @error Then Return SetError(10, 0, 0) 122 | Else 123 | Return SetError(9, 0, 0) 124 | EndIf 125 | EndIf 126 | EndIf 127 | Local $sTempFile = "" 128 | If $sDestDir <> "" Then 129 | $sTempFile = _Zip_AddPath($sZipFile, $sDestDir) 130 | If @error Then Return SetError(11, 0, 0) 131 | EndIf 132 | Local $oNS = _Zip_GetNameSpace($sZipFile, $sDestDir) 133 | ; copy the item(s) 134 | $oNS.CopyHere($sItem, $iFlag) 135 | Do 136 | Sleep(250) 137 | Until IsObj($oNS.ParseName($sNameOnly)) 138 | If $sTempFile <> "" Then 139 | _Zip_InternalDelete($sZipFile, $sDestDir & "\" & $sTempFile) 140 | If @error Then Return SetError(12, 0, 0) 141 | EndIf 142 | Return 1 143 | EndFunc ;==>_Zip_AddItem 144 | 145 | Func _Zip_COMErrorFunc() 146 | EndFunc ;==>_Zip_COMErrorFunc 147 | 148 | ; #FUNCTION# ==================================================================================================== 149 | ; Name...........: _Zip_Count 150 | ; Description....: Count items in the root of a ZIP archive (not recursive) 151 | ; Syntax.........: _Zip_Count($sZipFile) 152 | ; Parameters.....: $sZipFile - Full path to ZIP file 153 | ; 154 | ; Return values..: Success - Item count 155 | ; Failure - 0 and sets @error 156 | ; | 1 - zipfldr.dll does not exist 157 | ; | 2 - Library not installed 158 | ; | 3 - Not a full path 159 | ; | 4 - ZIP file does not exist 160 | ; Author.........: wraithdu, torels 161 | ; Modified.......: 162 | ; Remarks........: 163 | ; Related........: 164 | ; Link...........: 165 | ; Example........: 166 | ; =============================================================================================================== 167 | Func _Zip_Count($sZipFile) 168 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 169 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 170 | Local $oNS = _Zip_GetNameSpace($sZipFile) 171 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 172 | Return $oNS.Items().Count 173 | EndFunc ;==>_Zip_Count 174 | 175 | ; #FUNCTION# ==================================================================================================== 176 | ; Name...........: _Zip_CountAll 177 | ; Description....: Recursively count items contained in a ZIP archive 178 | ; Syntax.........: _Zip_CountAll($sZipFile) 179 | ; Parameters.....: $sZipFile - Full path to ZIP file 180 | ; $sSub - [Internal] 181 | ; $iFileCount - [Internal] 182 | ; $iFolderCount - [Internal] 183 | ; 184 | ; Return values..: Success - Array with file and folder count 185 | ; [0] - File count 186 | ; [1] - Folder count 187 | ; Failure - 0 and sets @error 188 | ; | 1 - zipfldr.dll does not exist 189 | ; | 2 - Library not installed 190 | ; | 3 - Not a full path 191 | ; | 4 - ZIP file does not exist 192 | ; Author.........: wraithdu 193 | ; Modified.......: 194 | ; Remarks........: 195 | ; Related........: 196 | ; Link...........: 197 | ; Example........: 198 | ; =============================================================================================================== 199 | Func _Zip_CountAll($sZipFile, $sSub = "", $iFileCount = 0, $iFolderCount = 0) 200 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 201 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 202 | Local $oNS = _Zip_GetNameSpace($sZipFile, $sSub) 203 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 204 | Local $oItems = $oNS.Items(), $aCount, $sSub2 205 | For $oItem In $oItems 206 | ; reset subdir so recursion doesn't break 207 | $sSub2 = $sSub 208 | If $oItem.IsFolder Then 209 | ; folder, recurse 210 | $iFolderCount += 1 211 | If $sSub2 = "" Then 212 | $sSub2 = $oItem.Name 213 | Else 214 | $sSub2 &= "\" & $oItem.Name 215 | EndIf 216 | $aCount = _Zip_CountAll($sZipFile, $sSub2, $iFileCount, $iFolderCount) 217 | $iFileCount = $aCount[0] 218 | $iFolderCount = $aCount[1] 219 | Else 220 | $iFileCount += 1 221 | EndIf 222 | Next 223 | Dim $aCount[2] = [$iFileCount, $iFolderCount] 224 | Return $aCount 225 | EndFunc ;==>_Zip_CountAll 226 | 227 | ; #FUNCTION# ==================================================================================================== 228 | ; Name...........: _Zip_Create 229 | ; Description....: Create empty ZIP archive 230 | ; Syntax.........: _Zip_Create($sFileName[, $iOverwrite = 0]) 231 | ; Parameters.....: $sFileName - Name of new ZIP file 232 | ; $iOverwrite - [Optional] Overwrite flag (Default = 0) 233 | ; | 0 - Do not overwrite the file if it exists 234 | ; | 1 - Overwrite the file if it exists 235 | ; 236 | ; Return values..: Success - Name of the new file 237 | ; Failure - 0 and sets @error 238 | ; | 1 - A file with that name already exists and $iOverwrite flag is not set 239 | ; | 2 - Failed to create new file 240 | ; Author.........: wraithdu, torels 241 | ; Modified.......: 242 | ; Remarks........: 243 | ; Related........: 244 | ; Link...........: 245 | ; Example........: 246 | ; =============================================================================================================== 247 | Func _Zip_Create($sFileName, $iOverwrite = 0) 248 | If FileExists($sFileName) And Not $iOverwrite Then Return SetError(1, 0, 0) 249 | Local $hFp = FileOpen($sFileName, 2 + 8 + 16) 250 | If $hFp = -1 Then Return SetError(2, 0, 0) 251 | FileWrite($hFp, Binary("0x504B0506000000000000000000000000000000000000")) 252 | FileClose($hFp) 253 | Return $sFileName 254 | EndFunc ;==>_Zip_Create 255 | 256 | ; #FUNCTION# ==================================================================================================== 257 | ; Name...........: _Zip_DeleteItem 258 | ; Description....: Delete a file or folder from a ZIP archive 259 | ; Syntax.........: _Zip_DeleteItem($sZipFile, $sFileName) 260 | ; Parameters.....: $sZipFile - Full path to the ZIP file 261 | ; $sFileName - Name of the item in the ZIP file 262 | ; 263 | ; Return values..: Success - 1 264 | ; Failure - 0 and sets @error 265 | ; | 1 - zipfldr.dll does not exist 266 | ; | 2 - Library not installed 267 | ; | 3 - Not a full path 268 | ; | 4 - ZIP file or sub path does not exist 269 | ; | 5 - Item not found in ZIP file 270 | ; | 6 - Failed to get list of verbs 271 | ; | 7 - Failed to delete item 272 | ; | 8 - User cancelled delete operation or operation failed 273 | ; Author.........: wraithdu 274 | ; Modified.......: 275 | ; Remarks........: $sFileName may be a path to an item from the root of the ZIP archive. 276 | ; For example, some ZIP file 'test.zip' has a subpath 'some\dir\file.ext'. Do not include a leading or trailing '\'. 277 | ; Related........: 278 | ; Link...........: 279 | ; Example........: 280 | ; =============================================================================================================== 281 | Func _Zip_DeleteItem($sZipFile, $sFileName) 282 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 283 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 284 | ; parse filename 285 | Local $sPath = "" 286 | $sFileName = _Zip_PathStripSlash($sFileName) 287 | If StringInStr($sFileName, "\") Then 288 | ; subdirectory, parse out path and filename 289 | $sPath = _Zip_PathPathOnly($sFileName) 290 | $sFileName = _Zip_PathNameOnly($sFileName) 291 | EndIf 292 | Local $oNS = _Zip_GetNameSpace($sZipFile, $sPath) 293 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 294 | Local $oFolderItem = $oNS.ParseName($sFileName) 295 | If Not IsObj($oFolderItem) Then Return SetError(5, 0, 0) 296 | Local $oVerbs = $oFolderItem.Verbs() 297 | If Not IsObj($oVerbs) Then Return SetError(6, 0, 0) 298 | For $oVerb In $oVerbs 299 | If StringReplace($oVerb.Name, "&", "") = "delete" Then 300 | $oVerb.DoIt() 301 | If IsObj($oNS.ParseName($sFileName)) Then 302 | Return SetError(8, 0, 0) 303 | Else 304 | Return 1 305 | EndIf 306 | EndIf 307 | Next 308 | Return SetError(7, 0, 0) 309 | EndFunc ;==>_Zip_DeleteItem 310 | 311 | ; #FUNCTION# ==================================================================================================== 312 | ; Name...........: _Zip_ItemExists 313 | ; Description....: Determines if an item exists in a ZIP file 314 | ; Syntax.........: _Zip_ItemExists($sZipFile, $sItem) 315 | ; Parameters.....: $sZipFile - Full path to ZIP file 316 | ; $sItem - Name of item 317 | ; 318 | ; Return values..: Success - 1 319 | ; @extended is set to 1 if the item is a folder, 0 if a file 320 | ; Failure - 0 and sets @error 321 | ; | 1 - zipfldr.dll does not exist 322 | ; | 2 - Library not installed 323 | ; | 3 - Not a full path 324 | ; | 4 - ZIP file or sub path does not exist 325 | ; Author.........: wraithdu 326 | ; Modified.......: 327 | ; Remarks........: $sItem may be a path to an item from the root of the ZIP archive. 328 | ; For example, some ZIP file 'test.zip' has a subpath 'some\dir\file.ext'. Do not include a leading or trailing '\'. 329 | ; Related........: 330 | ; Link...........: 331 | ; Example........: 332 | ; =============================================================================================================== 333 | Func _Zip_ItemExists($sZipFile, $sItem) 334 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 335 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 336 | Local $sPath = "" 337 | $sItem = _Zip_PathStripSlash($sItem) 338 | If StringInStr($sItem, "\") Then 339 | ; subfolder 340 | $sPath = _Zip_PathPathOnly($sItem) 341 | $sItem = _Zip_PathNameOnly($sItem) 342 | EndIf 343 | Local $oNS = _Zip_GetNameSpace($sZipFile, $sPath) 344 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 345 | Local $oItem = $oNS.ParseName($sItem) 346 | ; @extended holds whether item is a file (0) or folder (1) 347 | If IsObj($oItem) Then Return SetExtended(Number($oItem.IsFolder), 1) 348 | Return 0 349 | EndFunc ;==>_Zip_ItemExists 350 | 351 | ; #FUNCTION# ==================================================================================================== 352 | ; Name...........: _Zip_List 353 | ; Description....: List items in the root of a ZIP archive (not recursive) 354 | ; Syntax.........: _Zip_List($sZipFile) 355 | ; Parameters.....: $sZipFile - Full path to ZIP file 356 | ; 357 | ; Return values..: Success - Array of items 358 | ; Failure - 0 and sets @error 359 | ; | 1 - zipfldr.dll does not exist 360 | ; | 2 - Library not installed 361 | ; | 3 - Not a full path 362 | ; | 4 - ZIP file does not exist 363 | ; Author.........: wraithdu, torels 364 | ; Modified.......: 365 | ; Remarks........: Item count is returned in array[0]. 366 | ; Related........: 367 | ; Link...........: 368 | ; Example........: 369 | ; =============================================================================================================== 370 | Func _Zip_List($sZipFile) 371 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 372 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 373 | Local $oNS = _Zip_GetNameSpace($sZipFile) 374 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 375 | Local $aArray[1] = [0] 376 | Local $oList = $oNS.Items() 377 | For $oItem In $oList 378 | $aArray[0] += 1 379 | ReDim $aArray[$aArray[0] + 1] 380 | $aArray[$aArray[0]] = $oItem.Name 381 | Next 382 | Return $aArray 383 | EndFunc ;==>_Zip_List 384 | 385 | ; #FUNCTION# ==================================================================================================== 386 | ; Name...........: _Zip_ListAll 387 | ; Description....: List all files inside a ZIP archive 388 | ; Syntax.........: _Zip_ListAll($sZipFile[, $iFullPath = 1]) 389 | ; Parameters.....: $sZipFile - Full path to ZIP file 390 | ; $iFullPath - [Optional] Path flag (Default = 1) 391 | ; | 0 - Return file names only 392 | ; | 1 - Return full paths of files from the archive root 393 | ; 394 | ; Return values..: Success - Array of file names / paths 395 | ; Failure - 0 and sets @error 396 | ; | 1 - zipfldr.dll does not exist 397 | ; | 2 - Library not installed 398 | ; | 3 - Not a full path 399 | ; | 4 - ZIP file does not exist 400 | ; Author.........: wraithdu 401 | ; Modified.......: 402 | ; Remarks........: File count is returned in array[0], does not list folders. 403 | ; Related........: 404 | ; Link...........: 405 | ; Example........: 406 | ; =============================================================================================================== 407 | Func _Zip_ListAll($sZipFile, $iFullPath = 1) 408 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 409 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 410 | Local $aArray[1] = [0] 411 | _Zip_ListAll_Internal($sZipFile, "", $aArray, $iFullPath) 412 | If @error Then 413 | Return SetError(@error, 0, 0) 414 | Else 415 | Return $aArray 416 | EndIf 417 | EndFunc ;==>_Zip_ListAll 418 | 419 | ; #FUNCTION# ==================================================================================================== 420 | ; Name...........: _Zip_Search 421 | ; Description....: Search for files in a ZIP archive 422 | ; Syntax.........: _Zip_Search($sZipFile, $sSearchString) 423 | ; Parameters.....: $sZipFile - Full path to ZIP file 424 | ; $sSearchString - Substring to search 425 | ; 426 | ; Return values..: Success - Array of matching file paths from the root of the archive 427 | ; Failure - 0 and sets @error 428 | ; | 1 - zipfldr.dll does not exist 429 | ; | 2 - Library not installed 430 | ; | 3 - Not a full path 431 | ; | 4 - ZIP file does not exist 432 | ; | 5 - No matching files found 433 | ; Author.........: wraithdu 434 | ; Modified.......: 435 | ; Remarks........: Found file count is returned in array[0]. 436 | ; Related........: 437 | ; Link...........: 438 | ; Example........: 439 | ; =============================================================================================================== 440 | Func _Zip_Search($sZipFile, $sSearchString) 441 | Local $aList = _Zip_ListAll($sZipFile) 442 | If @error Then Return SetError(@error, 0, 0) 443 | Local $aArray[1] = [0], $sName 444 | For $i = 1 To $aList[0] 445 | $sName = $aList[$i] 446 | If StringInStr($sName, "\") Then 447 | ; subdirectory, isolate file name 448 | $sName = _Zip_PathNameOnly($sName) 449 | EndIf 450 | If StringInStr($sName, $sSearchString) Then 451 | $aArray[0] += 1 452 | ReDim $aArray[$aArray[0] + 1] 453 | $aArray[$aArray[0]] = $aList[$i] 454 | EndIf 455 | Next 456 | If $aArray[0] = 0 Then 457 | ; no files found 458 | Return SetError(5, 0, 0) 459 | Else 460 | Return $aArray 461 | EndIf 462 | EndFunc ;==>_Zip_Search 463 | 464 | ; #FUNCTION# ==================================================================================================== 465 | ; Name...........: _Zip_SearchInFile 466 | ; Description....: Search file contents of files in a ZIP archive 467 | ; Syntax.........: _Zip_SearchInFile($sZipFile, $sSearchString) 468 | ; Parameters.....: $sZipFile - Full path to ZIP file 469 | ; $sSearchString - Substring to search 470 | ; 471 | ; Return values..: Success - Array of matching file paths from the root of the archive 472 | ; Failure - 0 and sets @error 473 | ; | 1 - zipfldr.dll does not exist 474 | ; | 2 - Library not installed 475 | ; | 3 - Not a full path 476 | ; | 4 - ZIP file does not exist 477 | ; | 5 - Failed to create temporary directory 478 | ; | 6 - Failed to extract ZIP file to temporary directory 479 | ; | 7 - No matching files found 480 | ; Author.........: wraithdu 481 | ; Modified.......: 482 | ; Remarks........: Found file count is returned in array[0]. 483 | ; Related........: 484 | ; Link...........: 485 | ; Example........: 486 | ; =============================================================================================================== 487 | Func _Zip_SearchInFile($sZipFile, $sSearchString) 488 | Local $aList = _Zip_ListAll($sZipFile) 489 | If @error Then Return SetError(@error, 0, 0) 490 | Local $sTempDir = _Zip_CreateTempDir() 491 | If @error Then Return SetError(5, 0, 0) 492 | _Zip_UnzipAll($sZipFile, $sTempDir) ; flag = 20 -> no dialog, yes to all 493 | If @error Then 494 | DirRemove($sTempDir, 1) 495 | Return SetError(6, 0, 0) 496 | EndIf 497 | Local $aArray[1] = [0], $sData 498 | For $i = 1 To $aList[0] 499 | $sData = FileRead($sTempDir & "\" & $aList[$i]) 500 | If StringInStr($sData, $sSearchString) Then 501 | $aArray[0] += 1 502 | ReDim $aArray[$aArray[0] + 1] 503 | $aArray[$aArray[0]] = $aList[$i] 504 | EndIf 505 | Next 506 | DirRemove($sTempDir, 1) 507 | If $aArray[0] = 0 Then 508 | ; no files found 509 | Return SetError(7, 0, 0) 510 | Else 511 | Return $aArray 512 | EndIf 513 | EndFunc ;==>_Zip_SearchInFile 514 | 515 | ; #FUNCTION# ==================================================================================================== 516 | ; Name...........: _Zip_Unzip 517 | ; Description....: Extract a single item from a ZIP archive 518 | ; Syntax.........: _Zip_Unzip($sZipFile, $sFileName, $sDestPath[, $iFlag = 21]) 519 | ; Parameters.....: $sZipFile - Full path to ZIP file 520 | ; $sFileName - Name of the item in the ZIP file 521 | ; $sDestPath - Full path to the destination 522 | ; $iFlag - [Optional] File copy flags (Default = 1+4+16) 523 | ; | 1 - Overwrite destination file if it exists 524 | ; | 4 - No progress box 525 | ; | 8 - Rename the file if a file of the same name already exists 526 | ; | 16 - Respond "Yes to All" for any dialog that is displayed 527 | ; | 64 - Preserve undo information, if possible 528 | ; | 256 - Display a progress dialog box but do not show the file names 529 | ; | 512 - Do not confirm the creation of a new directory if the operation requires one to be created 530 | ; |1024 - Do not display a user interface if an error occurs 531 | ; |2048 - Version 4.71. Do not copy the security attributes of the file 532 | ; |4096 - Only operate in the local directory, don't operate recursively into subdirectories 533 | ; |8192 - Version 5.0. Do not copy connected files as a group, only copy the specified files 534 | ; 535 | ; Return values..: Success - 1 536 | ; Failure - 0 and sets @error 537 | ; | 1 - zipfldr.dll does not exist 538 | ; | 2 - Library not installed 539 | ; | 3 - Not a full path 540 | ; | 4 - ZIP file or sub path does not exist 541 | ; | 5 - Item not found in ZIP file 542 | ; | 6 - Failed to create destination (if necessary) 543 | ; | 7 - Failed to open destination 544 | ; | 8 - Failed to delete destination file / folder for overwriting 545 | ; | 9 - Destination exists and overwrite flag not set 546 | ; |10 - Failed to extract file 547 | ; Author.........: wraithdu, torels 548 | ; Modified.......: 549 | ; Remarks........: $sFileName may be a path to an item from the root of the ZIP archive. 550 | ; For example, some ZIP file 'test.zip' has a subpath 'some\dir\file.ext'. Do not include a leading or trailing '\'. 551 | ; If the overwrite flag is not set and the destination file / folder exists, overwriting is controlled 552 | ; by the remaining file copy flags ($iFlag) and/or user interaction. 553 | ; Related........: 554 | ; Link...........: 555 | ; Example........: 556 | ; =============================================================================================================== 557 | Func _Zip_Unzip($sZipFile, $sFileName, $sDestPath, $iFlag = 21) 558 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 559 | If Not _IsFullPath($sZipFile) Or Not _IsFullPath($sDestPath) Then Return SetError(3, 0, 0) 560 | ; get temp directory created by Windows 561 | Local $sTempDir = _Zip_TempDirName($sZipFile) 562 | ; parse filename 563 | Local $sPath = "" 564 | $sFileName = _Zip_PathStripSlash($sFileName) 565 | If StringInStr($sFileName, "\") Then 566 | ; subdirectory, parse out path and filename 567 | $sPath = _Zip_PathPathOnly($sFileName) 568 | $sFileName = _Zip_PathNameOnly($sFileName) 569 | EndIf 570 | Local $oNS = _Zip_GetNameSpace($sZipFile, $sPath) 571 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 572 | Local $oFolderItem = $oNS.ParseName($sFileName) 573 | If Not IsObj($oFolderItem) Then Return SetError(5, 0, 0) 574 | $sDestPath = _Zip_PathStripSlash($sDestPath) 575 | If Not FileExists($sDestPath) Then 576 | DirCreate($sDestPath) 577 | If @error Then Return SetError(6, 0, 0) 578 | EndIf 579 | Local $oNS2 = _Zip_GetNameSpace($sDestPath) 580 | If Not IsObj($oNS2) Then Return SetError(7, 0, 0) 581 | ; process overwrite flag 582 | Local $iOverwrite = 0 583 | If BitAND($iFlag, 1) Then 584 | $iOverwrite = 1 585 | $iFlag -= 1 586 | EndIf 587 | Local $sDestFullPath = $sDestPath & "\" & $sFileName 588 | If FileExists($sDestFullPath) Then 589 | ; destination file exists 590 | If $iOverwrite Then 591 | If StringInStr(FileGetAttrib($sDestFullPath), "D") Then 592 | ; folder 593 | If Not DirRemove($sDestFullPath, 1) Then Return SetError(8, 0, 0) 594 | Else 595 | If Not FileDelete($sDestFullPath) Then Return SetError(8, 0, 0) 596 | EndIf 597 | Else 598 | Return SetError(9, 0, 0) 599 | EndIf 600 | EndIf 601 | $oNS2.CopyHere($oFolderItem, $iFlag) 602 | ; remove temp dir created by Windows 603 | DirRemove($sTempDir, 1) 604 | If FileExists($sDestFullPath) Then 605 | ; success 606 | Return 1 607 | Else 608 | ; failure 609 | Return SetError(10, 0, 0) 610 | EndIf 611 | EndFunc ;==>_Zip_Unzip 612 | 613 | ; #FUNCTION# ==================================================================================================== 614 | ; Name...........: _Zip_UnzipAll 615 | ; Description....: Extract all files contained in a ZIP archive 616 | ; Syntax.........: _Zip_UnzipAll($sZipFile, $sDestPath[, $iFlag = 20]) 617 | ; Parameters.....: $sZipFile - Full path to ZIP file 618 | ; $sDestPath - Full path to the destination 619 | ; $iFlag - [Optional] File copy flags (Default = 4+16) 620 | ; | 4 - No progress box 621 | ; | 8 - Rename the file if a file of the same name already exists 622 | ; | 16 - Respond "Yes to All" for any dialog that is displayed 623 | ; | 64 - Preserve undo information, if possible 624 | ; | 256 - Display a progress dialog box but do not show the file names 625 | ; | 512 - Do not confirm the creation of a new directory if the operation requires one to be created 626 | ; |1024 - Do not display a user interface if an error occurs 627 | ; |2048 - Version 4.71. Do not copy the security attributes of the file 628 | ; |4096 - Only operate in the local directory, don't operate recursively into subdirectories 629 | ; |8192 - Version 5.0. Do not copy connected files as a group, only copy the specified files 630 | ; 631 | ; Return values..: Success - 1 632 | ; Failure - 0 and sets @error 633 | ; | 1 - zipfldr.dll does not exist 634 | ; | 2 - Library not installed 635 | ; | 3 - Not a full path 636 | ; | 4 - ZIP file does not exist 637 | ; | 5 - Failed to create destination (if necessary) 638 | ; | 6 - Failed to open destination 639 | ; | 7 - Failed to extract file(s) 640 | ; Author.........: wraithdu, torels 641 | ; Modified.......: 642 | ; Remarks........: Overwriting of destination files is controlled solely by the file copy flags (ie $iFlag = 1 is NOT valid). 643 | ; Related........: 644 | ; Link...........: 645 | ; Example........: 646 | ; =============================================================================================================== 647 | Func _Zip_UnzipAll($sZipFile, $sDestPath, $iFlag = 20) 648 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 649 | If Not _IsFullPath($sZipFile) Or Not _IsFullPath($sDestPath) Then Return SetError(3, 0, 0) 650 | ; get temp dir created by Windows 651 | Local $sTempDir = _Zip_TempDirName($sZipFile) 652 | Local $oNS = _Zip_GetNameSpace($sZipFile) 653 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 654 | $sDestPath = _Zip_PathStripSlash($sDestPath) 655 | If Not FileExists($sDestPath) Then 656 | DirCreate($sDestPath) 657 | If @error Then Return SetError(5, 0, 0) 658 | EndIf 659 | Local $oNS2 = _Zip_GetNameSpace($sDestPath) 660 | If Not IsObj($oNS2) Then Return SetError(6, 0, 0) 661 | $oNS2.CopyHere($oNS.Items(), $iFlag) 662 | ; remove temp dir created by WIndows 663 | DirRemove($sTempDir, 1) 664 | If FileExists($sDestPath & "\" & $oNS.Items().Item($oNS.Items().Count - 1).Name) Then 665 | ; success... most likely 666 | ; checks for existence of last item from source in destination 667 | Return 1 668 | Else 669 | ; failure 670 | Return SetError(7, 0, 0) 671 | EndIf 672 | EndFunc ;==>_Zip_UnzipAll 673 | 674 | #region INTERNAL FUNCTIONS 675 | ; #FUNCTION# ==================================================================================================== 676 | ; Name...........: _IsFullPath 677 | ; Description....: Determines if a given path is a fully qualified path (well, roughly...) 678 | ; Syntax.........: _IsFullPath($sPath) 679 | ; Parameters.....: $sPath - Path to check 680 | ; 681 | ; Return values..: Success - True 682 | ; Failure - False 683 | ; Author.........: torels 684 | ; Modified.......: 685 | ; Remarks........: 686 | ; Related........: 687 | ; Link...........: 688 | ; Example........: 689 | ; =============================================================================================================== 690 | Func _IsFullPath($sPath) 691 | If StringInStr($sPath, ":\") Then 692 | Return True 693 | Else 694 | Return False 695 | EndIf 696 | EndFunc ;==>_IsFullPath 697 | 698 | ; #FUNCTION# ==================================================================================================== 699 | ; Name...........: _Zip_AddPath 700 | ; Description....: INTERNAL FUNCTION 701 | ; Author.........: wraithdu 702 | ; =============================================================================================================== 703 | Func _Zip_AddPath($sZipFile, $sPath) 704 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 705 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 706 | Local $oNS = _Zip_GetNameSpace($sZipFile) 707 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 708 | ; check and create directory structure 709 | $sPath = _Zip_PathStripSlash($sPath) 710 | Local $sNewPath = "", $sFileName = "" 711 | If $sPath <> "" Then 712 | Local $aDir = StringSplit($sPath, "\"), $oTest 713 | For $i = 1 To $aDir[0] 714 | ; check if item already exists 715 | $oTest = $oNS.ParseName($aDir[$i]) 716 | If IsObj($oTest) Then 717 | ; check if folder 718 | If Not $oTest.IsFolder Then Return SetError(5, 0, 0) 719 | ; get next namespace level 720 | $oNS = $oTest.GetFolder 721 | Else 722 | ; create temp dir 723 | Local $sTempDir = _Zip_CreateTempDir() 724 | If @error Then Return SetError(6, 0, 0) 725 | Local $oTemp = _Zip_GetNameSpace($sTempDir) 726 | ; create the directory structure 727 | For $i = $i To $aDir[0] 728 | $sNewPath &= $aDir[$i] & "\" 729 | Next 730 | DirCreate($sTempDir & "\" & $sNewPath) 731 | $sFileName = _Zip_CreateTempName() 732 | $sNewPath &= $sFileName 733 | FileClose(FileOpen($sTempDir & "\" & $sNewPath, 2 + 8)) 734 | $oNS.CopyHere($oTemp.Items()) 735 | ; wait for file 736 | Do 737 | Sleep(250) 738 | Until _Zip_ItemExists($sZipFile, $sNewPath) 739 | DirRemove($sTempDir, 1) 740 | ExitLoop 741 | EndIf 742 | Next 743 | EndIf 744 | Return $sFileName 745 | EndFunc ;==>_Zip_AddPath 746 | 747 | ; #FUNCTION# ==================================================================================================== 748 | ; Name...........: _Zip_CreateTempDir 749 | ; Description....: INTERNAL FUNCTION 750 | ; Author.........: wraithdu 751 | ; =============================================================================================================== 752 | Func _Zip_CreateTempDir() 753 | Local $s_TempName 754 | Do 755 | $s_TempName = "" 756 | While StringLen($s_TempName) < 7 757 | $s_TempName &= Chr(Random(97, 122, 1)) 758 | WEnd 759 | $s_TempName = @TempDir & "\~" & $s_TempName & ".tmp" 760 | Until Not FileExists($s_TempName) 761 | If Not DirCreate($s_TempName) Then Return SetError(1, 0, 0) 762 | Return $s_TempName 763 | EndFunc ;==>_Zip_CreateTempDir 764 | 765 | ; #FUNCTION# ==================================================================================================== 766 | ; Name...........: _Zip_CreateTempName 767 | ; Description....: INTERNAL FUNCTION 768 | ; Author.........: wraithdu 769 | ; =============================================================================================================== 770 | Func _Zip_CreateTempName() 771 | Local $GUID = DllStructCreate("dword Data1;word Data2;word Data3;byte Data4[8]") 772 | DllCall("ole32.dll", "int", "CoCreateGuid", "ptr", DllStructGetPtr($GUID)) 773 | Local $ret = DllCall("ole32.dll", "int", "StringFromGUID2", "ptr", DllStructGetPtr($GUID), "wstr", "", "int", 40) 774 | If @error Then Return SetError(1, 0, "") 775 | Return StringRegExpReplace($ret[2], "[}{-]", "") 776 | EndFunc ;==>_Zip_CreateTempName 777 | 778 | ; #FUNCTION# ==================================================================================================== 779 | ; Name...........: _Zip_DllChk 780 | ; Description....: Checks if the zipfldr library is installed 781 | ; Syntax.........: _Zip_DllChk() 782 | ; Parameters.....: None. 783 | ; Return values..: Success - 1 784 | ; Failure - 0 and sets @error 785 | ; | 1 - zipfldr.dll not found 786 | ; | 2 - Library not installed 787 | ; Author.........: wraithdu, torels 788 | ; Modified.......: 789 | ; Remarks........: 790 | ; Related........: 791 | ; Link...........: 792 | ; Example........: 793 | ; =============================================================================================================== 794 | Func _Zip_DllChk() 795 | If Not FileExists(@SystemDir & "\zipfldr.dll") Then Return SetError(1, 0, 0) 796 | If Not RegRead("HKEY_CLASSES_ROOT\CLSID\{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}", "") Then Return SetError(2, 0, 0) 797 | Return 1 798 | EndFunc ;==>_Zip_DllChk 799 | 800 | ; #FUNCTION# ==================================================================================================== 801 | ; Name...........: _Zip_GetNameSpace 802 | ; Description....: INTERNAL FUNCTION 803 | ; Author.........: wraithdu 804 | ; =============================================================================================================== 805 | Func _Zip_GetNameSpace($sZipFile, $sPath = "") 806 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 807 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 808 | Local $oApp = ObjCreate("Shell.Application") 809 | Local $oNS = $oApp.NameSpace($sZipFile) 810 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 811 | If $sPath <> "" Then 812 | ; subfolder 813 | Local $aPath = StringSplit($sPath, "\") 814 | Local $oItem 815 | For $i = 1 To $aPath[0] 816 | $oItem = $oNS.ParseName($aPath[$i]) 817 | If Not IsObj($oItem) Then Return SetError(5, 0, 0) 818 | $oNS = $oItem.GetFolder 819 | If Not IsObj($oNS) Then Return SetError(6, 0, 0) 820 | Next 821 | EndIf 822 | Return $oNS 823 | EndFunc ;==>_Zip_GetNameSpace 824 | 825 | ; #FUNCTION# ==================================================================================================== 826 | ; Name...........: _Zip_InternalDelete 827 | ; Description....: INTERNAL FUNCTION 828 | ; Author.........: wraithdu 829 | ; =============================================================================================================== 830 | Func _Zip_InternalDelete($sZipFile, $sFileName) 831 | If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) 832 | If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) 833 | ; parse filename 834 | Local $sPath = "" 835 | $sFileName = _Zip_PathStripSlash($sFileName) 836 | If StringInStr($sFileName, "\") Then 837 | ; subdirectory, parse out path and filename 838 | $sPath = _Zip_PathPathOnly($sFileName) 839 | $sFileName = _Zip_PathNameOnly($sFileName) 840 | EndIf 841 | Local $oNS = _Zip_GetNameSpace($sZipFile, $sPath) 842 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 843 | Local $oFolderItem = $oNS.ParseName($sFileName) 844 | If Not IsObj($oFolderItem) Then Return SetError(5, 0, 0) 845 | ; ## Ugh, this was ultimately a bad solution 846 | ; move file to a temp directory and remove the directory 847 | Local $sTempDir = _Zip_CreateTempDir() 848 | If @error Then Return SetError(6, 0, 0) 849 | Local $oApp = ObjCreate("Shell.Application") 850 | $oApp.NameSpace($sTempDir).MoveHere($oFolderItem, 20) 851 | DirRemove($sTempDir, 1) 852 | $oFolderItem = $oNS.ParseName($sFileName) 853 | If IsObj($oFolderItem) Then 854 | ; failure 855 | Return SetError(7, 0, 0) 856 | Else 857 | Return 1 858 | EndIf 859 | EndFunc ;==>_Zip_InternalDelete 860 | 861 | ; #FUNCTION# ==================================================================================================== 862 | ; Name...........: _Zip_ListAll_Internal 863 | ; Description....: INTERNAL FUNCTION 864 | ; Author.........: wraithdu 865 | ; =============================================================================================================== 866 | Func _Zip_ListAll_Internal($sZipFile, $sSub, ByRef $aArray, $iFullPath, $sPrefix = "") 867 | Local $oNS = _Zip_GetNameSpace($sZipFile, $sSub) 868 | If Not IsObj($oNS) Then Return SetError(4, 0, 0) 869 | Local $oList = $oNS.Items(), $sSub2 870 | For $oItem In $oList 871 | ; reset subdir so recursion doesn't break 872 | $sSub2 = $sSub 873 | If $oItem.IsFolder Then 874 | If $sSub2 = "" Then 875 | $sSub2 = $oItem.Name 876 | Else 877 | $sSub2 &= "\" & $oItem.Name 878 | EndIf 879 | ; folder, recurse 880 | If $iFullPath Then 881 | ; build path from root of zip 882 | _Zip_ListAll_Internal($sZipFile, $sSub2, $aArray, $iFullPath, $sSub2 & "\") 883 | If @error Then Return SetError(4) 884 | Else 885 | ; just filenames 886 | _Zip_ListAll_Internal($sZipFile, $sSub2, $aArray, $iFullPath, "") 887 | If @error Then Return SetError(4) 888 | EndIf 889 | Else 890 | $aArray[0] += 1 891 | ReDim $aArray[$aArray[0] + 1] 892 | $aArray[$aArray[0]] = $sPrefix & $oItem.Name 893 | EndIf 894 | Next 895 | EndFunc ;==>_Zip_ListAll_Internal 896 | 897 | ; #FUNCTION# ==================================================================================================== 898 | ; Name...........: _Zip_PathNameOnly 899 | ; Description....: INTERNAL FUNCTION 900 | ; Author.........: wraithdu 901 | ; =============================================================================================================== 902 | Func _Zip_PathNameOnly($sPath) 903 | Return StringRegExpReplace($sPath, ".*\\", "") 904 | EndFunc ;==>_Zip_PathNameOnly 905 | 906 | ; #FUNCTION# ==================================================================================================== 907 | ; Name...........: _Zip_PathPathOnly 908 | ; Description....: INTERNAL FUNCTION 909 | ; Author.........: wraithdu 910 | ; =============================================================================================================== 911 | Func _Zip_PathPathOnly($sPath) 912 | Return StringRegExpReplace($sPath, "^(.*)\\.*?$", "${1}") 913 | EndFunc ;==>_Zip_PathPathOnly 914 | 915 | ; #FUNCTION# ==================================================================================================== 916 | ; Name...........: _Zip_PathStripSlash 917 | ; Description....: INTERNAL FUNCTION 918 | ; Author.........: wraithdu 919 | ; =============================================================================================================== 920 | Func _Zip_PathStripSlash($sString) 921 | Return StringRegExpReplace($sString, "(^\\+|\\+$)", "") 922 | EndFunc ;==>_Zip_PathStripSlash 923 | 924 | ; #FUNCTION# ==================================================================================================== 925 | ; Name...........: _Zip_TempDirName 926 | ; Description....: INTERNAL FUNCTION 927 | ; Author.........: wraithdu, trancexxx 928 | ; =============================================================================================================== 929 | Func _Zip_TempDirName($sZipFile) 930 | Local $i = 0, $sTemp, $sName = _Zip_PathNameOnly($sZipFile) 931 | Do 932 | $i += 1 933 | $sTemp = @TempDir & "\Temporary Directory " & $i & " for " & $sName 934 | Until Not FileExists($sTemp) ; this folder will be created during extraction 935 | Return $sTemp 936 | EndFunc ;==>_Zip_TempDirName 937 | #endregion INTERNAL FUNCTIONS 938 | --------------------------------------------------------------------------------