diff --git a/.gitignore b/.gitignore index 23b92f6..8a10172 100644 --- a/.gitignore +++ b/.gitignore @@ -26,10 +26,11 @@ *.exe *.out *.app +**/*.zip .idea **/.vs -/**/Release/ +**/Release/ **/*.vcxproj **/*.vcxproj.filters **/*.vcxproj.user diff --git a/Commons/D2Funcs.h b/Commons/D2Funcs.h index 4b35380..9c70ed4 100644 --- a/Commons/D2Funcs.h +++ b/Commons/D2Funcs.h @@ -21,7 +21,7 @@ //D2S(D2Common,11068, DWORD, D2InvAddItem, (Inventory* ptInventory, Unit* ptItem, DWORD posX, DWORD posY, DWORD vValueC, DWORD bIsClient, BYTE page));//ONLY 1.11b result : boolean 0=echec ; vValueC = 0 for Game.dll, 1 for Clientdll //D2S(D2Common,10250, DWORD, D2Common10250, (const char* file, DWORD line, Inventory* ptInventory, DWORD posX, DWORD posY, DWORD vValueC, DWORD bIsClient, BYTE page));// result : boolean 0=echec ; vValueC = 0 for Game.dll, 1 for Clientdll ////D2S(D2Common,10257, Unit*, D2GetItemFromBodyLoc, (Inventory* ptInventory, DWORD bodyloc)); -//D2S(D2Common,10273, DWORD, D2Common10273, (Inventory* ptInventory, void* unknow)); +//D2S(D2Common,10273, DWORD, D2Common10273, (Inventory* ptInventory, void* unknown)); //D2S(D2Common,10535, Unit*, D2InventoryGetFirstItem, (Inventory* ptInventory));//ONLY 1.11b //D2S(D2Common,11140, Unit*, D2UnitGetNextItem, (Unit* ptItem));//ONLY 1.11b //D2S(D2Common,10748, Unit*, D2GetRealItem, (Unit* ptUnit));//ONLY 1.11b @@ -160,7 +160,7 @@ F8(STD, D2Common,10243,10243,10243,10461,10827,10936,10646,10490, 23AD90, Unit* F8(STD, D2Common,10249,10249,10249,10880,11068,10436,11107,10963, 23BCC0, DWORD, D2InvAddItem, (Inventory* ptInventory, Unit* ptItem, DWORD posX, DWORD posY, DWORD vValueC, DWORD bIsClient, BYTE page));//result : boolean 0=echec ; vValueC = 0 for Game.dll, 1 for Clientdll F8(STD, D2Common,10250,10250,10250,00000,00000,00000,00000,00000, 00000, DWORD, D2Common10250, (const char* file, DWORD line, Inventory* ptInventory, DWORD posX, DWORD posY, DWORD vValueC, DWORD bIsClient, BYTE page));// result : boolean 0=echec ; vValueC = 0 for Game.dll, 1 for Clientdll //F7(STD, D2Common,10257,10257,10257,00000,00000,00000,00000,00000, Unit*, D2GetItemFromBodyLoc, (Inventory* ptInventory, DWORD bodyloc)); -F8(STD, D2Common,10273,10273,10273,00000,00000,00000,00000,00000, 00000, DWORD, D2Common10273, (Inventory* ptInventory, void* unknow)); +F8(STD, D2Common,10273,10273,10273,00000,00000,00000,00000,00000, 00000, DWORD, D2Common10273, (Inventory* ptInventory, void* unknown)); F8(STD, D2Common,10277,10277,10277,10402,10535,11151,10460,11040, 23B2C0, Unit*, D2InventoryGetFirstItem, (Inventory* ptInventory)); F8(STD, D2Common,10304,10304,10304,10934,11140,10770,10464,10879, 23DFA0, Unit*, D2UnitGetNextItem, (Unit* ptItem)); F8(STD, D2Common,10305,10305,10305,11095,10748,10852,11147,10897, 23DFD0, Unit*, D2GetRealItem, (Unit* ptUnit)); @@ -438,7 +438,7 @@ F8(STD, D2Net, 10006,10006,10006,10018,10018,10015,10002,10012, 12B330, DWORD, ////D2S(Fog,10127, DWORD, D2GetBitFieldSize, (saveBitField* data));//6FF536C0 ////D2S(Fog,10128, void, D2EncodeValue, (saveBitField* data, DWORD value, DWORD bitSize));//6FF536C0 ////D2S(Fog,10130, DWORD, D2DecodeValue, (saveBitField* data,DWORD readingSize));//6FF53840 -//D2S(Fog,10212, void, D2Fog10212, (DWORD unknow));//1.11b +//D2S(Fog,10212, void, D2Fog10212, (DWORD unknown));//1.11b ////D2S(Fog,10217, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840 //D2S(Fog,10265, int, D2GetInstructionPointer, ());//ONLY 1.11/1.11b NOT 1.10 @@ -458,7 +458,7 @@ F8(FAST, Fog, 10116,10116,10116,10116,10116,10116,10116,10116, 6BA0, void, D2Fo //F7(STD, Fog, 10127,10127,10127,10127,10127,10127,10127,10127, DWORD, D2GetBitFieldSize, (saveBitField* data));//6FF536C0 //F7(STD, Fog, 10128,10128,10128,10128,10128,10128,10128,10128, void, D2EncodeValue, (saveBitField* data, DWORD value, DWORD bitSize));//6FF536C0 //F7(STD, Fog, 10130,10130,10130,10130,10130,10130,10130,10130, DWORD, D2DecodeValue, (saveBitField* data,DWORD readingSize));//6FF53840 -F8(STD, Fog, 10212,10212,10212,10212,10212,10212,10212,10212, 2BD0B0, void, D2Fog10212, (DWORD unknow)); +F8(STD, Fog, 10212,10212,10212,10212,10212,10212,10212,10212, 2BD0B0, void, D2Fog10212, (DWORD unknown)); //F7(STD, Fog, 10217,10217,10217,10217,10217,10217,10217,10217, int, D2GetIDFromLookUpTable, (void* table, char* string, bool));//6FF53840 F8(STD, Fog, 00000,00000,00000,10265,10265,10265,10265,10265, 8090, int, D2GetInstructionPointer, ()); //Fog10213 getIndexFromLookupTable (&table,code,bool) diff --git a/Commons/D2UnitStruct.h b/Commons/D2UnitStruct.h index bbb127c..ee7eb79 100644 --- a/Commons/D2UnitStruct.h +++ b/Commons/D2UnitStruct.h @@ -132,7 +132,7 @@ struct Path //(8 dword) struct Inventory -{ //Offset from Code. Size: 30 40 +{ //Offset from Code. Size: 30 � 40 DWORD tag; //+00 = 0x01020304 BYTE uk1[0x04]; //+04 =? 0 Unit* ptChar; //+08 @@ -274,16 +274,16 @@ ITEMFLAG_TAGETING = 0x00000004, ITEMFLAG_UNIDENTIFIED = 0x00000010, ITEMFLAG_QUANTITY = 0x00000020, ITEMFLAG_Durability = 0x00000100, -ITEMFLAG_UNKNOWN2 = 0x00000400, +ITEMFLAG_UNKNOWN2 = 0x00000400, ITEMFLAG_SOCKETED = 0x00000800, ITEMFLAG_NON_SELLABLE = 0x00001000, ITEMFLAG_NEWITEM2 = 0x00002000, -ITEMFLAG_UNKNOWN3 = 0x00004000, +ITEMFLAG_UNKNOWN3 = 0x00004000, ITEMFLAG_CHECKSECPRICE = 0x00010000, ITEMFLAG_CHECKGAMBLEPRICE = 0x00020000, -ITEMFLAG_UNKNOWN4 = 0x00080000, +ITEMFLAG_UNKNOWN4 = 0x00080000, ITEMFLAG_INDESTRUCTIBLE(ETHERAL) = 0x00400000, -ITEMFLAG_UNKNOWN5 = 0x00800000, +ITEMFLAG_UNKNOWN5 = 0x00800000, ITEMFLAG_FROMPLAYER = 0x01000000, ITEMFLAG_RUNEWORD = 0x04000000 */ @@ -300,7 +300,7 @@ ITEMFLAG_RUNEWORD = 0x04000000 WORD prefix[3]; //+38 WORD suffix[3]; //+3E BYTE equipLoc; //+44 - /* emplacement si quip + /* emplacement si �quip� * 00 = noequip/inBelt * 01 = head * 02 = neck diff --git a/Commons/VersionInfo.cpp b/Commons/VersionInfo.cpp index 5c02ac0..ab9985d 100644 --- a/Commons/VersionInfo.cpp +++ b/Commons/VersionInfo.cpp @@ -15,21 +15,21 @@ const char* VersionStrings[16] = { "1.00","1.07","1.08","1.09","1.09b","1.09d"," const char* GetVersionString(int version) { if (version < 0 || version >= sizeof(VersionStrings)) - return "UNKNOW"; + return "UNKNOWN"; return VersionStrings[version]; } eGameVersion GetD2Version(LPCVOID pVersionResource) { - if (!pVersionResource) return UNKNOW; + if (!pVersionResource) return UNKNOWN; UINT uLen; VS_FIXEDFILEINFO* ptFixedFileInfo; if (!VerQueryValue(pVersionResource, "\\", (LPVOID*)&ptFixedFileInfo, &uLen)) - return UNKNOW; + return UNKNOWN; if (uLen == 0) - return UNKNOW; + return UNKNOWN; WORD major = HIWORD(ptFixedFileInfo->dwFileVersionMS); WORD minor = LOWORD(ptFixedFileInfo->dwFileVersionMS); @@ -37,7 +37,7 @@ eGameVersion GetD2Version(LPCVOID pVersionResource) WORD subrevision = LOWORD(ptFixedFileInfo->dwFileVersionLS); if (major != 1) - return UNKNOW; + return UNKNOWN; if (minor == 0 && revision == 7 && subrevision == 0) return V107; if (minor == 0 && revision == 8 && subrevision == 28) return V108; if (minor == 0 && revision == 9 && subrevision == 19) return V109; @@ -53,14 +53,14 @@ eGameVersion GetD2Version(LPCVOID pVersionResource) if (minor == 14 && revision == 1 && subrevision == 68) return V114b; if (minor == 14 && revision == 2 && subrevision == 70) return V114c; if (minor == 14 && revision == 3 && subrevision == 71) return V114d; - return UNKNOW; + return UNKNOWN; } eGameVersion GetD2Version(char* gameExe) { DWORD len = GetFileVersionInfoSize(gameExe, NULL); if (len == 0) - return UNKNOW; + return UNKNOWN; BYTE* pVersionResource = new BYTE[len]; GetFileVersionInfo(gameExe, NULL, len, pVersionResource); @@ -73,9 +73,9 @@ eGameVersion GetD2Version(char* gameExe) eGameVersion GetD2Version(HMODULE hModule) { HRSRC hResInfo = FindResource(hModule, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION); - if (!hResInfo) return UNKNOW; + if (!hResInfo) return UNKNOWN; HGLOBAL hResData = LoadResource(hModule, hResInfo); - if (!hResData) return UNKNOW; + if (!hResData) return UNKNOWN; LPVOID pVersionResource = LockResource(hResData); eGameVersion version = GetD2Version(pVersionResource); FreeResource(hResData); diff --git a/Commons/VersionInfo.h b/Commons/VersionInfo.h index 9033da6..9a237e9 100644 --- a/Commons/VersionInfo.h +++ b/Commons/VersionInfo.h @@ -10,7 +10,7 @@ enum eGameVersion { - UNKNOW = -1, + UNKNOWN = -1, V100 = 0, V107, V108, diff --git a/PlugY/D2wrapper.cpp b/PlugY/D2wrapper.cpp index c4c0092..c9e15a3 100644 --- a/PlugY/D2wrapper.cpp +++ b/PlugY/D2wrapper.cpp @@ -32,29 +32,29 @@ #include "interface_Stash.h" -int version_Game = UNKNOW; -//int version_binkw32 = UNKNOW; -//int version_Bnclient = UNKNOW; -int version_D2Client = UNKNOW; -int version_D2CMP = UNKNOW; -int version_D2Common = UNKNOW; -//int version_D2DDraw = UNKNOW; -//int version_D2Direct3D = UNKNOW; -int version_D2Game = UNKNOW; -//int version_D2Gdi = UNKNOW; -int version_D2gfx = UNKNOW; -//int version_D2Glide = UNKNOW; -int version_D2Lang = UNKNOW; -int version_D2Launch = UNKNOW; -//int version_D2MCPClient = UNKNOW; -//int version_D2Multi = UNKNOW; -int version_D2Net = UNKNOW; -//int version_D2sound = UNKNOW; -int version_D2Win = UNKNOW; -int version_Fog = UNKNOW; -//int version_ijl11 = UNKNOW; -//int version_SmackW32 = UNKNOW; -int version_Storm = UNKNOW; +int version_Game = UNKNOWN; +//int version_binkw32 = UNKNOWN; +//int version_Bnclient = UNKNOWN; +int version_D2Client = UNKNOWN; +int version_D2CMP = UNKNOWN; +int version_D2Common = UNKNOWN; +//int version_D2DDraw = UNKNOWN; +//int version_D2Direct3D = UNKNOWN; +int version_D2Game = UNKNOWN; +//int version_D2Gdi = UNKNOWN; +int version_D2gfx = UNKNOWN; +//int version_D2Glide = UNKNOWN; +int version_D2Lang = UNKNOWN; +int version_D2Launch = UNKNOWN; +//int version_D2MCPClient = UNKNOWN; +//int version_D2Multi = UNKNOWN; +int version_D2Net = UNKNOWN; +//int version_D2sound = UNKNOWN; +int version_D2Win = UNKNOWN; +int version_Fog = UNKNOWN; +//int version_ijl11 = UNKNOWN; +//int version_SmackW32 = UNKNOWN; +int version_Storm = UNKNOWN; DWORD offset_Game = NULL; //DWORD offset_binkw32 = NULL; @@ -299,7 +299,7 @@ void loadLibrary(LPCSTR libName, int* libVersion, DWORD* libOffset, int shift, D log_msg("%s loaded at:\t%08X (", libName, *libOffset); DWORD addr = *(DWORD*)(*libOffset + shift); - if (version_Game != UNKNOW && (version_Game <= V108 || version_Game >= V113d)) + if (version_Game != UNKNOWN && (version_Game <= V108 || version_Game >= V113d)) *libVersion = version_Game; else if (addr==v109b) *libVersion = V109b; @@ -316,8 +316,8 @@ void loadLibrary(LPCSTR libName, int* libVersion, DWORD* libOffset, int shift, D else if (addr==v113c) *libVersion = V113c; else { - *libVersion = version_Game != UNKNOW ? version_Game : V113d; - log_msg("unknow, try with "); + *libVersion = version_Game != UNKNOWN ? version_Game : V113d; + log_msg("unknown, try with "); } log_msg("%s)\n", GetVersionString(*libVersion)); } @@ -374,7 +374,7 @@ void initD2modules() GET_VERSION(D2Win, 1699, 88686F8C, 84686F8C, D094686F, F0030000, 001435E8, 8B088F44, 0013F5E8); //0x19000 0x6F8A0000 Already Loaded 0x1C000 GET_VERSION(Fog, 102, D0000006, 10000001, 00000006, 000042E6, 00004302, 0000483C, 00004B95); //0x20000 0x6FF50000 Already Loaded 0x1F000 GET_VERSION(Storm, 1190, 19E85082, 59E85082, 13C103F6, 0474F685, 8B000321, 3B1074C9, 0D896404); //0x30000 0x6FFB0000 Already Loaded - - if (version_Game == UNKNOW) + if (version_Game == UNKNOWN) version_Game = version_D2gfx; } // GET_VERSION(binkw32 000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000, 00000000); // diff --git a/PlugY/LoadPlayerData.cpp b/PlugY/LoadPlayerData.cpp index 8cc9ea4..737f63f 100644 --- a/PlugY/LoadPlayerData.cpp +++ b/PlugY/LoadPlayerData.cpp @@ -107,12 +107,12 @@ return value : 13:Unable to enter game, a normal character cannot join a game create an harcore character. 14:Unable to enter game, an harcore character cannot join a game create by a normal character. 15:A dead character cannot join or create any game -16:unknow failure +16:unknown failure 17:Unable to enter game. A D2 Character cannot join an expansion character 18:Expansion cannot join D2 19:Failures to join game 1A:Unable to enter game -1B:unknow failure +1B:unknown failure */ enum { TS_SAVE_PERSONAL=0, diff --git a/PlugYInstall/PlugYInstall.cpp b/PlugYInstall/PlugYInstall.cpp index 9fc2555..52643fe 100644 --- a/PlugYInstall/PlugYInstall.cpp +++ b/PlugYInstall/PlugYInstall.cpp @@ -265,7 +265,7 @@ int main(int argc, char * argv[]) { msgBox(boxName, MB_OK | MB_ICONEXCLAMATION, "Current version of LoD (%s) isn't compatible with PlugY.\n\n" - "Please, install a patch between 1.09 and 1.13d.", + "Please, install a patch between 1.09 and 1.13d or 1.14.", GetVersionString(version)); exit(0); } diff --git a/PlugYInstall/PlugYInstall.rc b/PlugYInstall/PlugYInstall.rc index 9d5b342..23e3a40 100644 --- a/PlugYInstall/PlugYInstall.rc +++ b/PlugYInstall/PlugYInstall.rc @@ -1,11 +1,11 @@ -//Script de ressources gnr par Microsoft Visual C++. +//Script de ressources g�n�r� par Microsoft Visual C++. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // -// Gnr partir de la ressource TEXTINCLUDE 2. +// G�n�r� � partir de la ressource TEXTINCLUDE 2. // #ifndef APSTUDIO_INVOKED #include "targetver.h" @@ -28,8 +28,8 @@ LANGUAGE LANG_FRENCH, SUBLANG_FRENCH // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,5,0 - PRODUCTVERSION 1,0,5,0 + FILEVERSION 1,0,6,0 + PRODUCTVERSION 1,0,6,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -46,11 +46,11 @@ BEGIN BEGIN VALUE "CompanyName", "Yohann Nicolas" VALUE "FileDescription", "PlugY patcher" - VALUE "FileVersion", "1.0.5.0" + VALUE "FileVersion", "1.0.6.0" VALUE "LegalCopyright", "Copyright (C) 2017" VALUE "OriginalFilename", "PlugYInstall.exe" VALUE "ProductName", "PlugY, The Survival Kit" - VALUE "ProductVersion", "11.02" + VALUE "ProductVersion", "12.00" END END BLOCK "VarFileInfo" diff --git a/PlugYInstaller/PlugY.nsi b/PlugYInstaller/PlugY.nsi index 3f5d8fc..e840920 100644 --- a/PlugYInstaller/PlugY.nsi +++ b/PlugYInstaller/PlugY.nsi @@ -66,10 +66,10 @@ LangString DESC_UNINSTALLER ${LANG_ENGLISH} "Create a Windows uninstall program. LangString DESC_UNINSTALLER ${LANG_GERMAN} "Erzeugt ein Deinstallationsprogramm.$\nWindows Registrierungseinträge werden erstellt." LangString DESC_UNINSTALLER ${LANG_FRENCH} "Crée un programme Windows de désinstallation.$\nAjoute des clés de registres dans Windows." LangString DESC_UNINSTALLER ${LANG_RUSSIAN} "Создать в Windows деинстллятор программы.$\nДобавляет ключи реестра в Windows." -;LangString DESC_PATCH_FILE ${LANG_ENGLISH} "Patcher to run PlugY without PlugY.exe. Before use it, you MUST read the readme." -;LangString DESC_PATCH_FILE ${LANG_ENGLISH} "Patcher um PlugY ohne PlugY.exe zu starten. Die LiesMich Datei MUSS vor benutzung gelesen werden." -;LangString DESC_PATCH_FILE ${LANG_FRENCH} "D2gfx.dll patcheur pour lancer PlugY sans PlugY.exe. Avant de l'utiliser, vous DEVEZ lire le LISEZ-MOI." -;LangString DESC_PATCH_FILE ${LANG_RUSSIAN} "Применить патч для запуска PlugY без PlugY.exe. Подробнее смотреть в файле Readme." +LangString DESC_PATCH_FILE ${LANG_ENGLISH} "Patcher to run PlugY without PlugY.exe. Before use it, you MUST read the readme." +LangString DESC_PATCH_FILE ${LANG_GERMAN} "Patcher um PlugY ohne PlugY.exe zu starten.$\nDie LiesMich-Datei MUSS vor Benutzung gelesen werden." +LangString DESC_PATCH_FILE ${LANG_FRENCH} "D2gfx.dll patcheur pour lancer PlugY sans PlugY.exe. Avant de l'utiliser, vous DEVEZ lire le LISEZ-MOI." +LangString DESC_PATCH_FILE ${LANG_RUSSIAN} "Применить патч для запуска PlugY без PlugY.exe. Подробнее смотреть в файле Readme." LangString SECTION_NAME_CORE ${LANG_ENGLISH} "${NAME} (required)" LangString SECTION_NAME_CORE ${LANG_GERMAN} "${NAME} (benötigt)" LangString SECTION_NAME_CORE ${LANG_FRENCH} "${NAME} (nécessaire)" @@ -86,10 +86,10 @@ LangString SECTION_NAME_UNINSTALLER ${LANG_ENGLISH} "Uninstaller (add keys regis LangString SECTION_NAME_UNINSTALLER ${LANG_GERMAN} "Deinstallationsprogramm (Fügt Windows Registrierungseinträge hinzu)" LangString SECTION_NAME_UNINSTALLER ${LANG_FRENCH} "Dé-installeur (ajoute clés de registre)" LangString SECTION_NAME_UNINSTALLER ${LANG_RUSSIAN} "Деинсталлятор (добавляет ключи реестра)" -;LangString SECTION_PATCH_FILE ${LANG_ENGLISH} "File Patcher (advanced user only)" -;LangString SECTION_PATCH_FILE ${LANG_GERMAN} "Datei Patcher (Für erfahrene Nutzer)" -;LangString SECTION_PATCH_FILE ${LANG_FRENCH} "Patcheur de D2gfx.dll (utilisateur avancé uniquement)" -;LangString SECTION_PATCH_FILE ${LANG_RUSSIAN} "Патч для Patcher (для опытных пользователей)" +LangString SECTION_PATCH_FILE ${LANG_ENGLISH} "File Patcher (advanced user only)" +LangString SECTION_PATCH_FILE ${LANG_GERMAN} "Datei Patcher (Für erfahrene Nutzer)" +LangString SECTION_PATCH_FILE ${LANG_FRENCH} "Patcheur de D2gfx.dll (utilisateur avancé uniquement)" +LangString SECTION_PATCH_FILE ${LANG_RUSSIAN} "Патч для Patcher (для опытных пользователей)" LangString README_FILENAME ${LANG_ENGLISH} "PlugY_The_Survival_Kit_-_Readme.txt" LangString README_FILENAME ${LANG_GERMAN} "PlugY_The_Survival_Kit_-_Liesmich.txt" @@ -203,11 +203,12 @@ Section $(SECTION_NAME_UNINSTALLER) Uninstaller WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "NoRepair" 1 SectionEnd -;Section $(SECTION_PATCH_FILE) PatchFile -; SetOutPath $D2Path -; File "${D2FILES}\PatchD2File.exe" -; File "${D2FILES}\RestoreD2File.exe" -;SectionEnd +Section $(SECTION_PATCH_FILE) PatchFile + SectionIn 1 + SetOutPath $D2Path + File "${D2FILES}\PatchD2File.exe" + File "${D2FILES}\RestoreD2File.exe" +SectionEnd ;-------------------------------- ; Uninstall @@ -223,8 +224,8 @@ Section "Uninstall" Uninstall ; Remove files and uninstaller Delete "$D2Path\PlugY.dll" -; Delete "$D2Path\PatchD2File.exe" -; Delete "$D2Path\RestoreD2File.exe" + Delete "$D2Path\PatchD2File.exe" + Delete "$D2Path\RestoreD2File.exe" Delete "$INSTDIR\PlugY.exe" Delete "$INSTDIR\PlugY.log" Delete "$INSTDIR\BnetLog.txt" @@ -252,7 +253,7 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT "${Core}" $(DESC_CORE) !insertmacro MUI_DESCRIPTION_TEXT "${DesktopShortcuts}" $(DESC_DESKTOP_SHORTCUTS) !insertmacro MUI_DESCRIPTION_TEXT "${MenuShortcuts}" $(DESC_MENU_SHORTCUTS) -; !insertmacro MUI_DESCRIPTION_TEXT "${PatchFile}" $(DESC_PATCH_FILE) + !insertmacro MUI_DESCRIPTION_TEXT "${PatchFile}" $(DESC_PATCH_FILE) !insertmacro MUI_DESCRIPTION_TEXT "${Uninstaller}" $(DESC_UNINSTALLER) !insertmacro MUI_FUNCTION_DESCRIPTION_END