wasp200486 0 #495384 Posted January 8, 2021 40 минут назад, Kotyarko_O сказал: Подразумевается использование готового проекта с таким видом или попытка повторить такое с нуля? Исходник этого скрипта нашел на просторах Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #495385 Posted January 8, 2021 1 minute ago, wasp200486 said: Исходник этого скрипта нашел на просторах Или он неполный, или неправильно его собираете Quote Share this post Link to post Short link Share on other sites
zloyfilya 0 #495524 Posted January 11, 2021 Помогите скиньте код этой минюшки и что и куда вставить чтобы работало пожалуйста если не сложно: или Quote Share this post Link to post Short link Share on other sites
hacker2021 0 #498165 Posted February 27, 2021 а как добавить моды в один пакет установщика например я добавил но когда установил выбрав одного мода из них установились все моды 19.11.2013 в 01:30, EvilAlex сказал: Доброго времени суток ! Видел пару раз темы, где люди искали программу или скрипт которые бы собирали моды в одну прогу и после этого могли их устанавливать на выбор ! Нашел на форумах одну вещицу так скажем! Сам скрипт + пара модов для теста: ScriptModPack.rar 54,3 МБ Программа с помощью которой собирается инсталлятор: InnoUltra.exe 54 МБ Скриншоты: Показать содержимое Что нового: Показать содержимое Ver. 2.4.124 - Упростил скрипт. - добавил определения папки установки если игра была установлена, если же скопирована инсталятор предлагает свой путь. - обновил Сообщения в инстоляторе. - внешний вид не менял. - добавил Лицензию и ФАК. Ver. 2.3 - Добавил в скрипт небольшое описание. - Добавил скрипт с Сообщениями иснтоллятора и выбор языка. - Вынес в отдельный скрипт компоненты - моды. - Внутри есть 2psd - Вместо ссылки на группу Кран'а теперь логотип нашего форума с сыллкой на негоже) Русская справка к версии 5.5.1, автор перевода BagIra, bugron ISetup.rar 1 MB · 1 565 скачиваний "Дополнительные скрипты " Показать содержимое Проверка папки установки: function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; case CurPageID of wpSelectDir: if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then begin MsgBox('Не верно указана папка World of Tanks!', mbError, MB_OK); Result := False; end; end; end; Набор скриптов, библиотек с их использованием (Автор: Kotyarko_O): Набор скриптов, библиот…нием.rar - 31,12 МБ Quote Share this post Link to post Short link Share on other sites
asterix93 9 #498184 Posted February 28, 2021 @hacker2021 Тык это чтобы научиться Либо от Kotyarko_OKMP Source Code MODER_MP Source Code 2 Quote Share this post Link to post Short link Share on other sites
Hacker_2021 0 #498240 Posted March 1, 2021 @asterix93 там просто популярные мододелы и всё а что за файлы ? 28.02.2021 в 15:35, asterix93 сказал: MODER_MP Source Code 28.02.2021 в 15:35, asterix93 сказал: KMP Source Code есть кто нибудь из вас из 2021? который может отвечать на мои вопросы ? мой вопрос в том, что я использовал эту программу < JMPACK > и собрал все моды в один пакет но они все устанавливаются сразу мне нужно чтобы они устанавливались отдельно от выбора фото доказательство, показанное выше https://koreanrandom.com/forum/uploads/monthly_2021_02/1138695088_(41).png.9e0c7b5c461ad1c6ab92350e7f47b152.png , обмен сообщениями по почте или в любой социальной сети, если это возможно ( на форуме неудобно совсем добавить ответ создать тему и так далее ).) Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #498243 Posted March 1, 2021 @Hacker_2021 , вам нужно искать профильную тему инструмента, который вы используете. Там и задавать вопросы. Quote Share this post Link to post Short link Share on other sites
Hacker_2021 0 #498244 Posted March 1, 2021 @Kotyarko_O типа справку ? если вы имели ввиду ее вот она JMPACK.chm Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #498245 Posted March 1, 2021 Just now, Hacker_2021 said: типа справку ? Типа тему. 1 Quote Share this post Link to post Short link Share on other sites
Hacker_2021 0 #498248 Posted March 1, 2021 его давно не было в сети посмотрю отписал напишет ли это уже неизвестно Quote Share this post Link to post Short link Share on other sites
hacker2021 0 #498254 Posted March 1, 2021 сделайте видеоурок я для вас оставлю ссылку как это работает в 2021 году под патч 1.12 вот исходники ( моды) backup_data (26.02.2021, 09-27-28).zip Quote Share this post Link to post Short link Share on other sites
DraugDM 17 #499367 Posted March 17, 2021 Можно ли сделать отображение на компах где нет русского языка читаемый шрифт? может шрифт какой прописать? ) Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #499368 Posted March 17, 2021 (edited) 27 минут назад, DraugDM сказал: Можно ли сделать отображение Название этих элементов нужно прописать в CustomMessages [Languages] Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl" Name: "eng"; MessagesFile: "compiler:Languages\English.isl" [CustomMessages] ; Russian rus.delete=Удалить установленные моды (рекомендуется) ; English eng.delete=Remove installed mods (recommended) В секции Code ExpandConstant('{cm:delete}') Edited March 17, 2021 by night_dragon_on Обновление ... 2 Quote Share this post Link to post Short link Share on other sites
DraugDM 17 #499370 Posted March 17, 2021 Только что, night_dragon_on сказал: Название этих элементов нужно прописать в CustomMessages [Languages] Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl" Name: "eng"; MessagesFile: "compiler:Languages\English.isl" [CustomMessages] ; Russian rus.delete=Удалить установленные моды (рекомендуется) ; English eng.delete=Remove installed mods (recommended) В секции Code ExpandConstant('{cm:delete}') что то у меня с этой секцией код какие то траблы при компелировании(( Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #499372 Posted March 17, 2021 @DraugDM строку: ExpandConstant('{cm:delete}') Нужно было не просто в секцию Code скопировать, а в то место где прописано наименование компонента который требуется перевести. Вписать взамен этого наименования. 1 Quote Share this post Link to post Short link Share on other sites
DraugDM 17 #499375 Posted March 17, 2021 Только что, night_dragon_on сказал: @DraugDM строку: ExpandConstant('{cm:delete}') Нужно было не просто в секцию Code скопировать, а в то место где прописано наименование компонента который требуется перевести. Вписать взамен этого наименования. Спасибо дружище! Заработало)) Quote Share this post Link to post Short link Share on other sites
ferrat 3 #499396 Posted March 18, 2021 приветствую гуру кодописания )) Кто то может подсобить с изменением кода. Вот есть код резервного копирования, может кто то изменить так что бы , если встречается еще один файл с таким же именем, то он бекапился на цифру больше, к примеру mmm_back, mmm_back_01, mmm_back_02 и тд и что бы они так же при деинсталляции восстанавливались. По логике первый бекап и есть оригинал, так что достаточно его и восстановить при деинсталяции остальное просто удалить или что бы не мудрить восстанавливать от последнего к первому. Ну или может у кого готовый рабочий есть под такую задачу, вдруг...:beer: procedure CreateBackup; var srcFile, destFile: string; begin srcFile:= ExpandConstant(CurrentFileName); destFile:= srcFile + '.gom_bak'; /// тут по умолчанию расширение ' .bak DeleteFile(destFile); RenameFile(srcFile, destFile); end; procedure RestoreBackup(backupDir: string); var srcFile, destFile: string; FSR, DSR: TFindRec; FindResult: Boolean; APath: string; begin APath := AddBackslash(backupDir); FindResult := FindFirst(APath + '*.gom_bak', FSR); /// тут по умолчанию расширение '*.bak try while FindResult do begin if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin srcFile:= APath + FSR.Name; destFile:= Copy(srcFile, 0, Length(srcFile)-8); ///тут указано количество символов удаляемых с названия при восстановлении оригинального файла. По умолчанию -4 DeleteFile(destFile); RenameFile(srcFile, destFile); end; FindResult := FindNext(FSR); end; FindResult := FindFirst(APath + '*.*', DSR); while FindResult do begin if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then {Recursion} RestoreBackup(APath + DSR.Name); FindResult := FindNext(DSR); end; finally FindClose(FSR); FindClose(DSR); end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep = usPostUninstall then begin RestoreBackup(ExpandConstant('{app}')) end; end; Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #499399 Posted March 18, 2021 27 minutes ago, ferrat said: Вот есть код резервного копирования, может кто то изменить так что бы , если встречается еще один файл с таким же именем, то он бекапился на цифру больше, к примеру mmm_back, mmm_back_01, mmm_back_02 и тд и что бы они так же при деинсталляции восстанавливались. По логике первый бекап и есть оригинал, так что достаточно его и восстановить при деинсталяции остальное просто удалить или что бы не мудрить восстанавливать от последнего к первому. А если пользователь не знает о существовании деинсталлятора и постоянно накатывает поверх того, что у него есть? Тогда индекс может достигнуть и 50, и 100, и больше. Нужна ли такая куча бекапов пользователю, пусть он и не знает о ней? В таком случае лучше хранить всегда один экземпляр бекапа - последний. Описанное вами реализовать не сложно. Вопрос в том, действительно ли такая реализация вам нужна) 1 Quote Share this post Link to post Short link Share on other sites
ferrat 3 #499401 Posted March 18, 2021 (edited) Цитата А если пользователь не знает о существовании деинсталлятора и постоянно накатывает поверх того, что у него есть? Тогда индекс может достигнуть и 50, и 100, и больше. Нужна ли такая куча бекапов пользователю, пусть он и не знает о ней? В таком случае лучше хранить всегда один экземпляр бекапа - последний. Описанное вами реализовать не сложно. Вопрос в том, действительно ли такая реализация вам нужна) Тогда его проблемы, если читать не умеет предостережения и инструкции при установке каких либо пакетов. Хотя даже при таком варианте это меня не спасает от остатка лишних файлов после деинсталляции. По сути нужно было такое: 1) есть игра 2) есть мод , который ставится на чистую игру. И так: Дабы не заниматься тратой времени и не сравнивать кучу файлов, инстал собирается с папок, выборочная установка. А значит, что в каждом выбранном пункте для установки может содержаться одинаковые но модифицированные файлы. И получается , что если бекапить при установке, то файлы которых нет в оригинальной игре но в нескольких копиях содержится в инсталляторе, будет добавлен, забекаплен раз или два к примеру, но при деинсталяции первая его копия останется в игре в виде лишних файлов, что не есть хорошо. И тут ситуация вопроса , как все сделать что бы игра после удаления мода приобрела свое перевальное состояние файлов и папок. Это либо делать полный лист перед установкой папки игры и копируя встречающиеся файлы игры раз бекапить а второй раз перезаписывать, но дополнительные файлы не входящие в созданный лист игры копировать но не бекапить и перезаписывать, тогда при удалении мода мы , если все верно, получим первоначальное состояние папки игры . Может немного сумбурно, но попробовал описать проблему ))) И теперь , если этот набор слов, был хоть как то понят, есть ли вариант это реализовать кодом ? И сложно ли это? Если нет, то возможно ли такое в вашем исполнении маэстро ? Edited March 18, 2021 by ferrat Quote Share this post Link to post Short link Share on other sites
F1nder 4 #500984 Posted April 27, 2021 Добрый день! Возникла у меня одна проблемка надеюсь кто-то поможет. Сделал я в модпаке отображение картинок казалось бы все работает. Но через некий промежуток времени они перестают отображаться и вешають весь инсталятор намертво. Плюс довольно долго запусаеться сам инсталятор. Вот кидаю код может поможете? [Code] #ifdef UNICODE #define A "W" #else #define A "A" #endif const UNDEF_INDEX = -777; ALPHA_BLEND_LEVEL = 255; // max=Byte=255 WS_EX_LAYERED = $80000; WS_EX_TRANSPARENT = $20; LWA_COLORKEY = 1; LWA_ALPHA = 2; GWL_EXSTYLE = (-20); var InfoPic: TBitmapImage; LastIndex: Integer; TempPath: String; PicForm: TForm; type COLORREF = DWORD; function GetCursorPos(var lpPoint: TPoint): BOOL; external '[email protected] stdcall'; function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; external '[email protected] stdcall'; function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall'; function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall'; function SetFocus(hWnd: HWND): HWND; external '[email protected] stdcall'; function MyDirName(S:String): String; var InsPath: String; er: boolean; myFile:String; begin Result:=ExpandConstant('C:\Games\World_of_Tanks\'); //если ключа нет то будем ставить сюда er := RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', InsPath); if er and (InsPath<>'') then //если ключ существует и там что-то записано begin Result := InsPath; end; end; procedure LogoOnClick(Sender: TObject); var ResCode: Integer; begin ShellExec('', '{#MyAppURL}', '' , '', SW_SHOW, ewNoWait, ResCode) end; procedure RedesignWizardForm; var i: integer; BtnPanel: TPanel; BtnImage: TBitmapImage; begin ExtractTemporaryFile('logo.bmp') BtnPanel:=TPanel.Create(WizardForm) with BtnPanel do begin Left:=0 Top:=315 Width:=179 Height:=46 Cursor:=crHand OnClick:=@logoOnClick Parent:=WizardForm end; BtnImage:=TBitmapImage.Create(WizardForm) with BtnImage do begin AutoSize:=True; Enabled:=False; Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\logo.bmp') Parent:=BtnPanel end; with WizardForm do begin Caption := ExpandConstant('{cm:Main}'); end; with WizardForm.WizardBitmapImage do begin Width := ScaleX(502); end; with WizardForm.WelcomeLabel2 do begin Visible := False; end; with WizardForm.WelcomeLabel1 do begin Visible := False; end; with WizardForm.WizardSmallBitmapImage do begin Left := ScaleX(0); Width := ScaleX(502); Height := ScaleY(70); end; with WizardForm.PageDescriptionLabel do begin Visible := False; end; with WizardForm.PageNameLabel do begin Visible := False; end; with WizardForm.WizardBitmapImage2 do begin Width := ScaleX(502); end; with WizardForm.FinishedLabel do begin Visible := False; end; with WizardForm.FinishedHeadingLabel do begin Visible := False; end; end; procedure ShowPicHint(const PicFilePath: String); var pt: TPoint; begin if not GetCursorPos(pt) then Exit; InfoPic.Bitmap.LoadFromFile(PicFilePath); try with PicForm do begin SetBounds(ScaleX(pt.x + 16), ScaleY(pt.y + 7), InfoPic.Width, InfoPic.Height); Show; end; finally SetFocus(WizardForm.Handle); end; end; procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea); var UndefPic: String; begin if Index = -1 then Exit; if Index = LastIndex then Exit; try case TNewCheckListBox(Sender).ItemCaption[Index] of 'Белые сбитые гусеницы': UndefPic := '1.bmp'; 'Белые трупы танов': UndefPic := '2.bmp'; 'Калькулятор WN8 в бою': UndefPic := '3.bmp'; 'Мод достижений в бою': UndefPic := '10.bmp'; 'Процент отметки в бою': UndefPic := '18.bmp'; 'Маркеры с отлетающим уроном': UndefPic := '12.bmp'; 'Калькулятор брони в ангаре': UndefPic := '4.bmp'; 'Просмотр попаданий в ангаре': UndefPic := '13.bmp'; 'Менеджер реплеев': UndefPic := '9.bmp'; 'Процент побед на танках в ангаре': UndefPic := '14.bmp'; else begin LastIndex := UNDEF_INDEX; PicForm.Hide; Exit; end; end; if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic); ShowPicHint(TempPath + UndefPic); finally LastIndex := Index; end; end; procedure CompOnMouseLeave(Sender: TObject); begin PicForm.Hide; LastIndex := -1; end; procedure InitInfo(); begin WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove; WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave; TempPath := AddBackslash(ExpandConstant('{tmp}')); LastIndex := UNDEF_INDEX; PicForm := TForm.Create(WizardForm) with PicForm do begin BorderStyle := bsNone; FormStyle := fsStayOnTop; InfoPic := TBitmapImage.Create(PicForm) with InfoPic do begin Parent := PicForm; AutoSize := True; end; end; SetWindowLong(PicForm.Handle, GWL_EXSTYLE, GetWindowLong(PicForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED); SetLayeredWindowAttributes(PicForm.Handle, 0, ALPHA_BLEND_LEVEL, LWA_ALPHA); end; procedure InitializeWizard(); begin InitInfo(); RedesignWizardForm; end; Quote Share this post Link to post Short link Share on other sites