Przy obecnym stanie i ilości dodatków, instalowanie paczek jest kłopotliwe. Nie będę wnikać w przyczyny, chcę poradzić sobie ze skutkami za pomocą stworzonego przeze mnie automatu.
Problemy z paczkami pojawiają się następujące:
- paczka jest niepełna (brakuje jakiś plików do kompletu, bo autor zapomniał),
- paczka bazuje na zawartości innej paczki (np. sceneria korzysta z budynków innej scenerii),
- struktura katalogów w paczce nie odpowiada strukturze Symulatora.
Może przykład. Pojawiła się sceneria wąskotorowa. Potrzebna do niej jest lokomotywa Lxd2. Załóżmy, że program ładujący (Starter) stwierdza, że tej lokomotywy nie da się zastąpić inną, ale można ją pobrać z serwera. Paczka z tą lokomotywą jest pod adresem
http://mamut.mysza.eu.org/~krzysiek626/Lxd2.rar. Załóżmy że Starter pobiera sobie paczkę do podkatalogu
download.
To, co dalej może zrobić, to rozpakować ją do podkatalogu tymczasowego
temp programem
7-Zip, wykonując polecenie
7z.exe x download\Lxd2.rar -otemp
Powstaje coś takiego:
7-Zip 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06
Processing archive: download\Lxd2.rar
Extracting Lxd2\kabina.t3d
Extracting Lxd2\Lxd2-2.tga
Extracting Lxd2\Lxd2.t3d
Extracting Lxd2\motor-Lxd2.wav
Extracting Lxd2\wózek4.tga
Extracting Lxd2\zderzak1.tga
Extracting Lxd2\Lxd2.mmd
Extracting Lxd2\lxd2.tga
Extracting Lxd2\Lxd2.chk
Extracting Lxd2\t.chk
Extracting Lxd2
Everything is Ok
Folders: 1
Files: 10
Size: 3388331
Compressed: 443718
No i teraz zaczyna się problem, bo coś trzeba zrobić z tymi plikami i program musi wiedzieć dokładnie co. Otóż, trzeba w podkatalogu
dynamic\pkp utworzyć katalog
Lxd2, do niego przekopiować wszystkie pliki, oprócz
motor-Lxd2.wav, który powinien się znaleźć w
sounds.
Aby program poradził sobie z tą paczką, przydało by się napisać skrypt (plik) instalacyjny. W wersji MS-DOS, wyglądał by on tak:
rem Instalator paczki typu BAT
md dynamic\pkp\Lxd2
move temp\Lxd2\kabina.t3d dynamic\pkp\Lxd2
move temp\Lxd2\Lxd2-2.tga dynamic\pkp\Lxd2
move temp\Lxd2\Lxd2.t3d dynamic\pkp\Lxd2
move temp\Lxd2\motor-Lxd2.wav sounds
move temp\Lxd2\wózek4.tga dynamic\pkp\Lxd2
move temp\Lxd2\zderzak1.tga dynamic\pkp\Lxd2
move temp\Lxd2\Lxd2.mmd dynamic\pkp\Lxd2
move temp\Lxd2\lxd2.tga dynamic\pkp\Lxd2
move temp\Lxd2\Lxd2.chk dynamic\pkp\Lxd2
del temp\Lxd2\*.*
rd temp\Lxd2
Problemy w tym przypadku są następujące:
- nie jest określone, co ma się dziać w przypadku nadpisywania istniejącego pliku - program powinien o to zapytać użytkownika, albo serwer,
- nie da się określić, czy instalacja przebiegła poprawnie (tzn. zweryfikować, czy odpowiednie pliki znalazły się w odpowiednich miejscach),
- nie bardzo jest jak sprawdzić, czy lokomotywa jest kompletna (nie jest, brakuje pliku
ignition-Lxd2.wav - trzeba by jakoś zaznaczyć, że trzeba go dociągnąć osobno).
Wniosek mój jest taki, że pliki BAT nie bardzo nadają się na skrypty instalacyjne. Inna metoda, to plik INI, np. taki:
[VERIFY]
dynamic/PKP/Lxd2/kabina.t3d=198599,C7CD260F,2005-06-10 14:44:30
dynamic/PKP/Lxd2/Lxd2-2.tga=786450,F792CE94,2004-10-12 22:42:48
dynamic/PKP/Lxd2/Lxd2.t3d=976726,1182F075,2004-10-13 10:13:16
dynamic/PKP/Lxd2/wózek4.tga=262162,39ED61AB,2004-09-01 15:13:56
dynamic/PKP/Lxd2/zderzak1.tga=262162,915E6E51,2004-09-29 21:07:40
dynamic/PKP/Lxd2/Lxd2.mmd=4599,B2E41CBF,2005-04-01 10:57:44
dynamic/PKP/Lxd2/lxd2.tga=786450,78729DE9,2004-10-04 22:09:32
dynamic/PKP/Lxd2/Lxd2.chk=2029,3542AC81,2005-09-30 22:43:58
sounds/motor-Lxd2.wav=107114,C1DADB0A,2004-08-29 23:15:40
sounds/ignition-lxd2.wav=58510,B5600DC5,*
[ARCHIVES]
Lxd2.rar=443718,71587B90,2005-09-30 22:43:58
ignition-lxd2.wav=58510,B5600DC5,*
[DOWNLOAD]
Lxd2.rar=http://mamut.mysza.eu.org/~krzysiek626/Lxd2.rar
ignition-lxd2.wav=http://members.lycos.co.uk/drezyna/Wmc/ignition-lxd2.wav
[Lxd2.rar]
dynamic\pkp\Lxd2\kabina.t3d=Lxd2\kabina.t3d
dynamic\pkp\Lxd2\Lxd2-2.tga=Lxd2\Lxd2-2.tga
dynamic\pkp\Lxd2\Lxd2.t3d=Lxd2\Lxd2.t3d
dynamic\pkp\Lxd2\wózek4.tga=Lxd2\wózek4.tga
dynamic\pkp\Lxd2\zderzak1.tga=Lxd2\zderzak1.tga
dynamic\pkp\Lxd2\Lxd2.mmd=Lxd2\Lxd2.mmd
dynamic\pkp\Lxd2\lxd2.tga=Lxd2\lxd2.tga
dynamic\pkp\Lxd2\Lxd2.chk=Lxd2\Lxd2.chk
sounds\motor-Lxd2.wav=Lxd2\motor-Lxd2.wav
[ignition-lxd2.wav]
sounds\ignition-lxd2.wav=ignition-lxd2.wav
Jak widać daje to już większe możliwości. Jest możliwość weryfikacji poprawności istniejących plików, kompletności instalacji, wskazania powiązanych archiwów oraz linków do nich. Można by jeszcze pomyśleć, jak dodać opcje na pliki (np. w sytuacji, gdy istnieje kilka równych jakościowo dźwięków, żeby można sobie było wybrać któryś z nich).
Nie piszę na razie o XML - chciałbym unikać tego póki się da, bo jego przetwarzanie jest dużo bardziej skomplikowane, niż podzielenie pliku tekstowego na linie. Poza tym, na obecnym etapie rozwoju Instalatora, bardziej chodzi o określenie funkcjonalności takiego skryptu, niż o format jego zapisu.
Jest jeszcze taka możliwość, żeby połączyć skrypty instalacyjne ze
skryptami poprawek, o których pisałem wcześniej. Wtedy skrypt instalacyjny po rozpakowaniu archiwów i dociągnięciu brakujących plików, byłby w stanie skorygować zauważone błędy. Jednak miałoby to pewną wadę - plik instalacyjny do paczki powinien być tylko jeden, natomiast plików poprawkowych może być wiele i mogą pełnić one różne funkcje.
Chodzi też o to, żeby autor paczki potrafił sam napisać taki plik instalacyjny.