Jump to content
Korean Random

ventura69

User
  • Content Count

    247
  • Joined

  • Last visited

Posts posted by ventura69


  1. Kotyarko_O, решил проблему просто - откатил на предыдущую версию (которую выкладывал ранее). Сличил оба файла - одинаковые... Но все работает на старой версии и не мурмулит на новой. Или чудеса, или глаз замылился :-)

    А вопрос с выходам и допокнами буду решать. Спасибо за идею. Если получится - выложу для всеобщего пользования.


  2. Получает, если при этом, на странице выбора компонентов, ничего не выберет. Вот о чём я и говорю, что при выборе этого чекбокса желательно просто заблокировать страницы с выбором компонентов - в таком случае можно избежать вытекающих непоняток, типа: "выбрал восстановить сборку, а оно мне ещё моды поверх установило".

    Дадада! Это сейчас и пытаюсь сделать. Уже понял. :-)

    Уважаемые, да ну вообще бред получается... Не менял ни чего (только в блоке восстановления вписал Exit, потом удалил и сохранился). Вот код:

    function BackupCheck_2(): Boolean;

    begin

    If DeleteRadioButton.Checked then

    begin

    DelTree(ExpandConstant('{app}\res_mods'), True, True, True);

    ForceDirectories(ExpandConstant('{app}\res_mods\{#Patch}'));

    end;

    end;

    Отрабатывает только первую строку ( DelTree), а вторую (ForceDirectories) вдруг перестал брать. Может кто откомментировать сие чудо?


  3. Позвольте с вами обоими несколько не согласиться, уважаемые. Я хочу попробовать новую сборку, но при этом не потерять свою (вдруг новая не понравится). Потому, после выбора дирректории установки модов (папки с игрой), выбираю галку "сохранить свою сборку". После иду на окно выбора модов и выбираю нужные. Что происходит? Инсталлятор переименовывает мою папку res_mods в res_mods_old и создает пустую папку res_mods/0.9.1 (это на случай склероза, или отвлекли игрока: мама позвала кушать. Закрыл инсталлятор, убежал, потом забыл, что хотел сделать, вошел в игру, а она говорит, что "фиг тебе!"). После устанавливает моды, отмеченные по галочкам. Поиграли... Не понравилось. Запускаем инсталлятор и выбираем на этот раз "восстановить сборку". Инсталлятор удаляет папку res_mods, переименовывает папку res_mods_old в res_mods и игрок получает свою прежнюю сборку. Если сохранения не было, то ничего и не произойдет - инсталлятор просто перепрыгнет этот шаг. Хотя окошечек с предупреждениями стоит и добавить (спасибо, что подкинули идею!!!)

    Чем плохо? Или что-то недопонял?

    P.S. Надо бы, действительно, при выборе восстановки сборки сделать сразу выход из установщика. Как - пока не придумал. :-)


  4.  Чем же? Ведь даётся полноценный выбор..

    А вот теперь полноценный выбор. Дописал туда восстановление сохраненной сборки. Если сохраненка присутствует, то папка res_mods будет перезатерта и восстановлена сохраненка. Если сохранения не было, то шаг пропускается, чтобы не уродовать текущую сборку. Так же добавил {#Patch} для универсальности.

    Вот как-то так получилось :-)

    post-11632-0-48069700-1403884311_thumb.jpg

    claerkash-1.rar

    P.S. Правда, тут же родилась идея: а зачем хранить в клиенте все данные апдейтов клиента? Имело бы смысл за одно в очистку клиента воткнуть и очистку папки Updates? У меня она сейчас разрослась до 8 Гб.


  5. дело в том что удаление модов и резервное копирование у меня сделано отдельно, поэтому мне нужен код отдельной кнопки на очистку кэша...

    Так выкиньте все ненужное. Оставьте только одно это окошко с галкой. Я специально очистку кэш прописал на чекед с дефолтным умолчанием :-) А окошечко отличается от кнопки и привлекает внимание. Сразу в глаза будет бросаться. :-)


  6.  Чем же? Ведь даётся полноценный выбор..

    Ну, не совсем полноценный. Надо еще дописать восстановление сборки. При этом еще включить проверку наличия сохраненной сборки, чтобы не затирать случайно существующую.  


  7. Решение:

    1) Прописываешь, где-то в начале скрипта (вне всяких секций типа [setup], [Files] и т.д.) директиву, типа:

    #define Patch "0.9.1"
    

    2) В коде, где нужно подставить эту версию, вписываешь {#Patch}. В итоге, возвращаемое значение от вписанной директивы будет такое, какое ты прописал в 1-м шаге.

    Принял к сведению, вписал, проверил. Работает. Спасибо!!!


  8. Короче, ничего не понял. Зачем нужно удаление кэша? чем это помогает?

     

    Присоединяюсь к вопросу.

    Была проблема в свое время: вис у народа клиент, помогала очистка кэш. Точно уже не помню, было это пару патчей назад. И сейчас часто спрашивают, как его чистить. Зачем - не помню.

    По поводу решения моего вопроса. Плюнул я на создание окна с галочкой по очистке кэша и вот такое решение получилось... Комплексное. Вспомнил кое-что из Делфи.

    Блок делает: создает новое окно после выбора директории установки (чтобы запомнить путь установки и переброски файлов), создает 4 чека (удалить моды, создать копию своей сборки, отмена всех действий и отдельно очистка кэш). По умолчанию: не делать ничего. Можно еще добавить восстановление сборки из сохраненки. Из минусов: привязан к версии клиента 0.9.1 (решение для универсальности где-то попадалось, но пока не вспомнил где).

    Если кому надо - пользуйтесь на здоровье :-)

    claerkash.rar

    Ну и скрин для наглядности:

    post-11632-0-78370100-1403806170_thumb.jpg


  9. @ventura69, а с какого ты вот это: вписал в секцию Code?

     

    Просмотри внимательнее сообщение Юши. Всё это нужно вписывать в отдельную секцию [installDelete].

    Если тебе нужно сделать через секцию Code, с чекбоксом - то нужно делать по-другому, и конструкция не будет даже похожа не эту (кроме путей).

    Потому как я балбес невнимательный! Спасибо. Пошел снова штудировать справку.

    Уважаемые, а такой вариант? Не могу понять, почему не реагирует на галку в окошке.

    var

    Quick: TCheckBox;

     

    function MakeQuick: Boolean;

    begin

    Result:=Quick.Checked;

    DelTree(ExpandConstant('{userappdata}\wargaming.net\WorldOfTanks\account_caches'), True, True, True);

    DelTree(ExpandConstant('{userappdata}\wargaming.net\WorldOfTanks\battle_results'), True, True, True);

    DelTree(ExpandConstant('{userappdata}\wargaming.net\WorldOfTanks\custom_data'), True, True, True);

    DelTree(ExpandConstant('{userappdata}\wargaming.net\WorldOfTanks\dossier_cache'), True, True, True);

    DelTree(ExpandConstant('{userappdata}\wargaming.net\WorldOfTanks\tutorial_cache'), True, True, True);

    end;

     

    procedure InitializeWizard3;

    begin

    Quick := TCheckBox.Create(WizardForm);

    with Quick do

    begin

    Parent := WizardForm.SelectDirPage;

    Caption := 'Очистка кеш';

    Left := ScaleX(0);

    // Left := WizardForm.DirEdit.Top + 100;

    Top := WizardForm.DirEdit.Top + 117;

    Width := ScaleX(300);

    Height := ScaleY(15);

    TabOrder := 0;

    Checked := False;

    end;

    end;


  10. Просто если это действительно настройки игры, то вариант, предложенный @Yusha, будет делать это автоматом. Я, как пользователь, не хочу, чтобы мои настройки сбивались. По-этому, лучше это осуществить чекбоксом (где-то на странице с бекапом).

    Тогда встречный вопрос. Опять туплю. Я всегда чистил кеш скриптом, который выложил. Сейчас попытался прикрутить от Yusha кусок кода.

    Создал блок, вставил такое:

    var

    Quick: TCheckBox;

     

    function MakeQuick: Boolean;

    begin

    If Quick.Checked then

    begin

     

     

    //Очистка кеша

    Type: filesandordirs; Name: {userappdata}\wargaming.net\WorldOfTanks\account_caches

    Type: filesandordirs; Name: {userappdata}\wargaming.net\WorldOfTanks\battle_results

    Type: filesandordirs; Name: {userappdata}\wargaming.net\WorldOfTanks\custom_data

    Type: filesandordirs; Name: {userappdata}\wargaming.net\WorldOfTanks\dossier_cache

    Type: filesandordirs; Name: {userappdata}\wargaming.net\WorldOfTanks\tutorial_cache

    Checked := True;

    end else begin

    Checked := False;

    end;

    end;

     

    procedure InitializeWizard3;

    begin

    Quick := TCheckBox.Create(WizardForm);

    with Quick do

    begin

    Parent := WizardForm.SelectDirPage;

    Caption := Очистить кеш?';

    Left := ScaleX(0);

    // Left := WizardForm.DirEdit.Top + 100;

    Top := WizardForm.DirEdit.Top + 117;

    Width := ScaleX(300);

    Height := ScaleY(15);

    TabOrder := 0;

    Checked := False;

    end;

    end;

    Появилось окошко, в нем можно ставить галочку (до тех пор, пока не вписал реакцию на появившуюся галочку), но начало ругаться "Identifier expected" на строке 12, колонка 1. То есть на Type. Что ему не нравится, что я упустил?

     

    p.s. Вот чего не понимаю, так это подленьких минусов! К чему это? Форум создан для общения и помощи. На вопрос и просьбу о помощи какой-то придурок с раздутым самомнением ставит минус... И к чему это сделано? Я много не умею, но стремлюсь узнать... На минус плевать, а вот от отношения такого всякое желание отбивается... :-(

    • Downvote 1

  11.  Я так понял, что имеются ввиду настройки игры и т.д.

    Обычно настройки игры просят оставить.

    Такой вот скрипт, если я правильно понял:

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set WshShell = CreateObject("WScript.Shell")

    Set strFolder = fso.GetFolder(WshShell.ExpandEnvironmentStrings("%APPDATA%"))

    TempGameFolder = (strFolder & "\" & "Wargaming.net" & "\" & "WorldOfTanks")

    Set objFSO=Createobject("Scripting.Filesystemobject")

    Set objFolder=objFSO.GetFolder(TempGameFolder)

    Set objFiles=objFolder.Files

    For Each objFile In objFiles

    If objFile.Name <> "preferences.xml" Then

    objFSO.DeleteFile TempGameFolder & "\" & objFile.Name, True

    End if

    Next

    For Each objSubFolder In objFolder.SubFolders

    objFSO.DeleteFolder TempGameFolder & "\" & objSubFolder.Name

    Next

    MsgBox TempGameFolder & chr(13) & oFolder & chr(13) & TempSysFolder & chr(13) & chr(13) & chr(13) & " ----- ОЧИЩЕНО -----"


  12. Уважаемые! Алилуйя, я пляшу танец мумбы-юмбы!!! Разобрался я с музыкой и позиционированием кнопки к ней. Четыре дня башкой бился об монитор...

    Значит так, что я для себя (и окружающих) вынес:

    1. По поводу кнопочки logo. Я в скрипте из шапки себе переделал так:


    [Files]
    DestName: "WizardForm.BitmapImage1.bmp"; Source: "Files\logo.bmp"; Flags: dontcopy solidbreak

    procedure RedesignWizardForm;

    varBitmapImage1: TBitmapImage;

    beginBitmapImage1 := TBitmapImage.Create(WizardForm);

    with BitmapImage1 dobeginParent := WizardForm;

    Left := ScaleX(3);

    Top := ScaleY(319);

    Width := ScaleX(153);

    Height :=ScaleY(38);

    ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');

    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));

    Cursor:=crHand

    OnClick:=@logoOnClickend;

    Плюс в чем: кнопку прописал фиксировано и на разных разрешениях она не ползает.

    2. Кнопка вкл/выкл музыки. Переделал ее позиционирование по отношению к оригиналу так:

    SoundCtrlButton.Left := ScaleX(140);

    SoundCtrlButton.Top := ScaleY(325);

    SoundCtrlButton.Height:= ScaleY(25);

    SoundCtrlButton.Width := ScaleX(90);

    В оригинале было:    SoundCtrlButton.Top := 325;   соответственно, кнопка не цеплялась к общей системе координат и потому так же каталась по монитору, в зависимости от его разрешения.

    Darksoul, у Вас в скрипте рекомендую так же подправить, так как в Вашем инсталляторе кнопка подтверждения лицензии на разрешении 1920*1080 переползают к центру экрана. Скрин прилагаю (обвел в кружочек смещение). 

    post-11632-0-53065400-1403614443_thumb.jpg

    И огромнейшая благодарность Вам и Kotyarko_O за такую колоссальную помощь в наставлении меня на путь истинный! :-)

    P.S. Правда пришлось все начать с нуля и перепахать весь скрипт, но не жалею - самое главное, это наука! :-)


  13.  Напиши кусок кода, в котором задаётся BitmapImage1 (и в какой процедуре это).

    var

    BitmapImage1: TBitmapImage;

    BitmapImage2: TBitmapImage;

    NewButton1: TNewButton;

    Bevel2: TBevel;

    procedure LogoOnClick(Sender: TObject);

    var ResCode: Integer;

    begin

    ShellExec('', '{#MyAppURL}', '' , '', SW_SHOW, ewNoWait, ResCode)

    end;

    procedure NewButton1Click(Sender: TObject);

    var ResCode: Integer;

    begin

    ShellExec('', 'http://karopka.ru/catalog/tank/' '' , '', SW_SHOW, ewNoWait, ResCode)

    end;

    procedure CompOnMouseLeave(Sender: TObject); forward;

     

    procedure RedesignWizardForm;

    begin

    WizardForm.ClientWidth := ScaleX(830);

    WizardForm.Position := poDesktopCenter;

    WizardForm.CancelButton.Left := ScaleX(615);

    WizardForm.NextButton.Left := ScaleX(415);

    WizardForm.BackButton.Left := ScaleX(330);

    { Bevel2 }

    Bevel2 := TBevel.Create(WizardForm);

    with Bevel2 do

    begin

    Parent := WizardForm;

    Left := ScaleX(498);

    Top := ScaleY(0);

    Width := ScaleX(2);

    Height := ScaleY(314);

    end;

    { BitmapImage1 }

    BitmapImage1 := TBitmapImage.Create(WizardForm);

    with BitmapImage1 do

    begin

    Parent := WizardForm;

    Left := ScaleX(500);

    Top := ScaleY(1);

    Width := ScaleX(350);

    Height := ScaleY(350);

    ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');

    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));

    end;


  14.  

    Можно, только немного по-другому:

    SoundCtrlButton.Left := WizardForm.BitmapImage1.Width\Left\Top\Height + 20;
    

    выбирай, что нужно (Width\Left\Top\Height).

     

    Вообще, если я правильно понял, что тебе нужно (и BitmapImage1 должен быть слева от этой кнопки), то конструкция должна быть следующей:

    SoundCtrlButton.Left := WizardForm.BitmapImage1.Left + WizardForm.BitmapImage1.Width + 20;
    

    А вот ни фига!  Проверил сейчас - не работает. Пишет : блок bass не знает, что такое BitmapImage1


  15. В каком то посте выше встречал идею насчёт копирования из папки рес, а потом закидывания доп озвучки, и прописывалось это в один компонент, но в 2 строки, кто знает как сделать напишите плиз пример.

    Source: "{app}\res\audio\*"; DestDir: "{app}\res_mods\0.9.1\audio\"; Flags: external recursesubdirs skipifsourcedoesntexist; Components: SV\AW;

    Source: "MODS\zvuk_lampi\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: SV\AW

    зачем? посчитать же можно, и добавить парочку цыферок в координатах:)

    Не, не проходи такой вариант. Я затупил изначально: за основу взял одну из своих проб, а там такая каша... А переписывать - проще утопиться в ближайшей луже :-)

     

    Можно, только немного по-другому:

    SoundCtrlButton.Left := WizardForm.BitmapImage1.Width\Left\Top\Height + 20;
    

    выбирай, что нужно (Width\Left\Top\Height).

     

    Вообще, если я правильно понял, что тебе нужно (и BitmapImage1 должен быть слева от этой кнопки), то конструкция должна быть следующей:

    SoundCtrlButton.Left := WizardForm.BitmapImage1.Left + WizardForm.BitmapImage1.Width + 20;
    

    Да, я так и сделал, спасибо. Просто, когда писал тот пост, другой рукой на другом ноуте для работы очередной каталог составлял, в результате и там нахезал (пришлось переправлять) и сюда не то вписал :-)


  16. Кстати, насчёт этой ошибки, в процессе правки ошибся так же... Суть в том, что вы создавали кнопку и в мьюзик и в основном скрипте, все обращались к одинаковому адресу, но обе:)

    Не, ошибка у меня в другом была... А вот теперь проблема другая нарисовалась: та же, с координацией.  Можно как-то привязать 

    SoundCtrlButton.Left := 120;

    к соседнему элементу? К примеру так:

    SoundCtrlButton.Left := WizardForm.BitmapImage1+20;


  17. @ventura69, легче - просто воспользоваться более усовершенствованной библиотекой.

    Подкорректировал скрипт под неё (всё, что касается звука - находится в bass.iss, а подключается он в основном скрипте).. оставил коммент, если что:

    procedure InitializeWizard();
    begin
      RedesignWizardForm;
      InitializeWizard2(); {из bass.iss}
    end;
    

    attachicon.gifмузяка.rar

    Спасибо огромное! Второй день таблетки от головной боли пил, а ларчик просто открывался. Пытался изобрести велосипед... Хотел свое решение найти :-)

×
×
  • Create New...