[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Моддинг » W3DMapEditor by Alexbond (Уроки, Вопросы) » Расширенные возможности W4MapPackEditor (Нужны некоторые основы Pascal)
Расширенные возможности W4MapPackEditor
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Ну я всё же программист, поэтому хочу поделиться некторой информацией.

Итак, что делает мой W4MapPackEditor? Пользователь вводит список карт и список необходимых файлов. После этого после нажатия на "Создать пак карт" программа генерирует в папке C:\Program Files\W4MapPackEditor\iscc\maplists\ файл *.mpl с именем пака карт. Вот примеры(дальше будем рассмтривать только второй):

Пример 1:

Code
[english]=Demo
[htmlenglish]=Demo\demo.htm
[russian]=Демо пак карт
[htmlrussian]=Demo\demo rus.htm
{
[text]=Black
[image]=black black.tga
[scripts]=stdvs,wormpot
[map]=black black
[textures]=ThemeBuilding\ThemeBuilding.txt
[texture1]=C01
[texture2]=C03
[textrussian]=Black
}
{
[text]=Basketball
[image]=rcdd basketball.tga
[scripts]=stdvs,wormpot
[map]=rcdd basketball
[textures]=ThemeBuilding\ThemeBuilding.txt
[texture1]=C01
[texture2]=C03
[textrussian]=Баскетбол
}
{
[text]=Cubos 3
[image]=Cubos3.tga
[scripts]=stdvs,wormpot
[map]=Cubos3
[textures]=cubos3.txt
[texture1]=C01
[texture2]=C03
[textrussian]=Cubos 3
}

Пример 2:

Code
[english]=InvisibleCubes
[htmlenglish]=Info_en.htm
[russian]=InvisibleCubes - смотрите не запутайтесь!
[htmlrussian]=Info_rus.htm
{
[text]=InvisibleCubes
[image]=InvisibleCubes.tga
[scripts]=stdvs,wormpot
[map]=InvisibleCubes
[textures]=ThemeBuilding\ThemeBuilding.txt
[texture1]=C01
[texture2]=C03
[textrussian]=InvisibleCubes - смотрите не запутайтесь!
}

Как видите тут хранится информация о свойствах пак карт и список карт с их свойствами. Это файл нужен для W4MapPackLauncher, именно по нему она понимает структуру пака карт. Также W4MapPackEditor создаёт файл C:\Program Files\W4MapPackEditor\iscc\maplists\setup.iss
Вот его код:
Code
[Setup]
AppName=InvisibleCubes
AppVerName=InvisibleCubes 1.0
AppPublisher=Gerich
AppPublisherURL=http://w4tweaks.ucoz.ru/
AppSupportURL=http://w4tweaks.ucoz.ru/
AppUpdatesURL=http://w4tweaks.ucoz.ru/
DisableDirPage=yes
DisableProgramGroupPage=yes
DefaultDirName={pf}\W4MapPackLauncher\installed\InvisibleCubes
DefaultGroupName=W4MapPac kLauncher\Maplists\InvisibleCubes
OutputDir=C:\Documents and Settings\Администратор\Рабочий стол
OutputBaseFilename=InvisibleCubes
SetupIconFile=C:\Program Files\W4MapPackEditor\iscc\setup.ico
Compression=lzma
SolidCompression=yes

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\russian.isl"
Name: "english"; MessagesFile: "compiler:Default.isl"

[CustomMessages]
CopyingFiles = Copying files to Worms 4 Mayhem directory
CopyingFilesLong = All needed files will be copyed to Worms 4 Mayhem directory and to W4MapPackLauncher.
Backup = Select files to copy and backup
BackupLong = If you have some changed files, you should select to replace these files with standart files. You can also backup them
WormsNotFound = Worms 4 Mayhem not found
LauncherNotFound = W4MapPackLauncher not found. Visit http://w4tweaks.ucoz.ru/index/0-6
Progress = Copying file

[Icons]
Name: "{group}\{cm:ProgramOnTheWeb,InvisibleCubes}"; Filename: "http://w4tweaks.ucoz.ru/"
Name: "{group}\{cm:UninstallProgram,InvisibleCubes}"; Filename: "{uninstallexe}"

[Files]
Source: "C:\Program Files\W4MapPackEditor\iscc\maplists\InvisibleCubes.mpl"; DestName:"1.tmp"; Flags: dontcopy
Source: "C:\Documents and Settings\Администратор\Рабочий стол\1.JPG"; DestName:"2.tmp"; Flags: dontcopy
Source: "C:\Documents and Settings\Администратор\Рабочий стол\2.JPG"; DestName:"3.tmp"; Flags: dontcopy
Source: "C:\Documents and Settings\Администратор\Рабочий стол\3.JPG"; DestName:"4.tmp"; Flags: dontcopy
Source: "C:\Documents and Settings\Администратор\Рабочий стол\Info_rus.htm"; DestName:"5.tmp"; Flags: dontcopy
Source: "C:\Documents and Settings\Администратор\Рабочий стол\Info_en.htm"; DestName:"6.tmp"; Flags: dontcopy
Source: "C:\Documents and Settings\Администратор\Рабочий стол\InvisibleCubes2.xan"; DestName:"8.tmp"; Flags: dontcopy
Source: "D:\SG\GAMES\Worms 4 Mayhem\data\Maps\CarpetCapers.hmp"; DestName:"10.tmp"; Flags: dontcopy
Source: "C:\Documents and Settings\Администратор\Рабочий стол\icon.tga"; DestName:"12.tmp"; Flags: dontcopy

[UninstallDelete]
Type: filesandordirs; Name: "{code:getLauncherDir}\maplists\InvisibleCubes.mpl"

[Code]
var
   CountToCopy:integer;
   LauncherDir,WormsDir: String;
   CopyingFiles: TOutputProgressWizardPage;
   FilesCopyed:integer;

procedure InitializeWizard();
begin
   CopyingFiles:=CreateOutputProgressPage(ExpandConstant('{cm:CopyingFiles}'), ExpandConstant('{cm:CopyingFilesLong}'));
end;

function InitializeUninstall(): Boolean;
begin
   RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Gerich\W4MapPackLauncher','AppDir', LauncherDir);
   RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Gerich\W4MapPackLauncher', 'WormsDir', WormsDir);
   result:=true;
end;

function getLauncherDir(Param: String): String;
begin
   result:=LauncherDir;
end;

procedure CopyToWorms(FileToExtract:string;Where:string;realname:string);
var
   Dest:string;
begin
   CopyingFiles.SetText(ExpandConstant('{cm:Progress}'),FileToExtract);
   Dest:=WormsDir+Where+realname;
   ExtractTemporaryFile(FileToExtract);
   if FileExists(Dest) then
   begin
     if not DirExists(WormsDir+Where+'backup\') then
       CreateDir(WormsDir+Where+'backup\');
     FileCopy(Dest,WormsDir+Where+'backup\'+FileToExtract,true);
   end;
   FileCopy(ExpandConstant('{tmp}\')+FileToExtract,Dest,false);
   FilesCopyed:=FilesCopyed+1;
   CopyingFiles.SetProgress(FilesCopyed,CountToCopy);
end;

procedure CopyToMaplists(FileToExtract:string;Where:string;realname:string);
var
   Dest:string;
begin
   CopyingFiles.SetText(ExpandConstant('{cm:Progress}'),FileToExtract);
   Dest:=LauncherDir+'maplists\'+Where+realname;
   ExtractTemporaryFile(FileToExtract);
   if FileExists(Dest) then
   begin
     if not DirExists(LauncherDir+'maplists\'+Where+'backup\') then
       CreateDir(LauncherDir+'maplists\'+Where+'backup\');
     FileCopy(Dest,LauncherDir+'maplists\'+Where+'backup\'+realname,true);
   end;
   FileCopy(ExpandConstant('{tmp}\')+FileToExtract,Dest,false);
   FilesCopyed:=FilesCopyed+1;
   CopyingFiles.SetProgress(FilesCopyed,CountToCopy);
end;

procedure CreateSubDir(dir:string;Where:string);
begin
   if DirExists(LauncherDir+'maplists\'+Where) then
     CreateDir(LauncherDir+'maplists\'+Where+dir);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
   Result:=True;
   case CurPageID of
     wpReady:
     begin
       if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Gerich\W4MapPackLauncher','AppDir', LauncherDir) then
       begin
         if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Gerich\W4MapPackLauncher', 'WormsDir', WormsDir) then
         begin
           if not DirExists(LauncherDir+'maplists\') then
             CreateDir(LauncherDir+'maplists\')
         end
         else
         begin
           MsgBox(ExpandConstant('{cm:WormsNotFound}'), mbInformation, MB_OK);
           Result := False;
           exit;
         end;
       end
       else
       begin
         MsgBox(ExpandConstant('{cm:LauncherNotFound}'), mbInformation, MB_OK);
         Result := False;
         exit;
       end;
       try
         begin
           FilesCopyed:=0;
           CountToCopy:=9;
           CopyingFiles.Show;
           CopyToMaplists('1.tmp','','InvisibleCubes.mpl');
           CopyToMaplists('2.tmp','','1.JPG');
           CopyToMaplists('3.tmp','','2.JPG');
           CopyToMaplists('4.tmp','','3.JPG');
           CopyToMaplists('5.tmp','','Info_rus.htm');
           CopyToMaplists('6.tmp','','Info_en.htm');
           CopyToWorms('8.tmp','data\maps\','InvisibleCubes.xan');
           CopyToWorms('10.tmp','data\maps\','InvisibleCubes.hmp');
           CopyToWorms('12.tmp','data\frontend\levels\','InvisibleCubes.tga');
         end;
       finally
         CopyingFiles.Hide;
       end;
     end;
   end;
end;

как видите этот код(код на языке Inno Setup Script) состоит из нескольких секций(каждая начинается с [имя секции])

Вот в секции [Files] содержатся имена устанавливаемых файлов и их временные имена (например 1.tmp). В секции [code] содержится код установочной программы. Он основан на паскале, так что разобраться в нём не составит особых усилий тем, кто хотя бы с ним знаком. В самом конце кода есть функция NextButtonClick

нас интересует следующий фрагмент кода:

Code
        begin
           FilesCopyed:=0;
           CountToCopy:=9;
           CopyingFiles.Show;
           CopyToMaplists('1.tmp','','InvisibleCubes.mpl');
           CopyToMaplists('2.tmp','','1.JPG');
           CopyToMaplists('3.tmp','','2.JPG');
           CopyToMaplists('4.tmp','','3.JPG');
           CopyToMaplists('5.tmp','','Info_rus.htm');
           CopyToMaplists('6.tmp','','Info_en.htm');
           CopyToWorms('8.tmp','data\maps\','InvisibleCubes.xan');
           CopyToWorms('10.tmp','data\maps\','InvisibleCubes.hmp');
           CopyToWorms('12.tmp','data\frontend\levels\','InvisibleCubes.tga');
         end;

Как видите тут копируются файлы из временной папки в папку на компе пользователя. CopyToMaplists-в папку со списками карт, CopyToWorms-в вормс.

Ну так вот, к чему я всё это написал? А к тому, что вы можете делать "супер"-паки карт, где будут реализованы настройки графики и т.п. вы можете копировать любые файлы, делать что угодно.

Почитайте это http://www.google.ru/url?sa=....feWX8qg для понимания InnoSetup, скачайте его если хотите. А вообще всё что надо у вас есть. Это консольный InnoSetup - C:\Program Files\W4MapPackEditor\iscc\ISCC.exe. С его помощью вы можете создавать готовые exe файлы!

Всё, дальше разбирайтесь сами, а я спать хочу)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Форум » Моддинг » W3DMapEditor by Alexbond (Уроки, Вопросы) » Расширенные возможности W4MapPackEditor (Нужны некоторые основы Pascal)
  • Страница 1 из 1
  • 1
Поиск: