Symulator EU07 (i nie tylko) > Na warsztacie
Pliki poprawek do scenerii (dla instalatora)
Ra:
Sprawdzanie, czy pliki od dynamic istnieją, to już jest dawno, tylko że nie były od razu raportowane jako brakujące pliki. Sprawdzanie składów będzie tylko lokalnie, bez angażowania serwera. Podmienianie pojazdów na posiadane jednym przyciskiem jest w planach (nawet przycisk już jest).
Nie pisałem o PHP, tylko o przykładzie phpBB (aplikacji PHP do tworzenia forum), do której są modyfikacje instalowane w sprytny sposób. http://www.phpbb.com/mods/db/
XML w zasadzie nic nie daje, jedynie komplikuje przetwarzanie danych. Jako zwolennik efektywnie działających programów zdecydowanie wolę format oparty na liniach tekstu (które można wygodnie przetwarzać przez TStringList), niż na znacznikach.
Modyfikację torów trzeba będzie zrobić dwukierunkowo - albo modyfikujemy tylko eventy (chyba częściej - zmiana działania), albo tylko długości (poprawa wyglądu i usunięcie nulltrack). Komórki pamięci na ogół są definiowane w plikach .inc, więc z tym problemu nie będzie.
Można by przyjąć tak:
# - umieszczony na początku linii oznacza początek lub koniec treści wpisu
#TITLE.PL - nazwa (wyświetlana w spisie) po polsku
#TITLE.EN - nazwa po angielsku
#VERSION - data modyfikcji i numer wersji
#SCREENS - linki do obrazków modyfikacji
#AUTHOR - informacje o autorze
#DESCR.PL - opis po polsku
#DESCR.EN - opis po angielsku
#OPEN - otwarcie wskazanego dalej pliku
#FIND - wyszukanie wpisu zamieszczonego dalej
#DELETE - usunięcie wyszukanego wpisu
#REPLACE - zastąpienie wyszukanego wpisu następującym dalej
#APPEND - dopisanie wpisu na końcu
#EVENTS - zmiana eventów w znalezionym node...track na podane dalej
Wyszukiwane i zamieniane byłyby całe wpisy. Przy zmianie eventów, jeśli po event0, event1 itd. nie jest podana nazwa, oznacza to usunięcie eventu z toru (w tym przypadku nie będzie możliwe przywrócenie stanu przed zmianą, bo nie będzie tu zapisane, co ma być usunięte).
Mariusz1970:
Co do eventów w inc, zdarza się np w linii546.
Ja nie kumam o co chodzi, np. mam trasę Quarka ze zmienionymi eventami. Na serwerze jest też Quark, poprawione tory, dodne domki, ale zupełnie inne eventy, składy itp.
Chciałbym, aby program poprawił mi tylko tory i dodał domki, ale żeby nie ruszał eventów. Zresztą Ty masz pojęcie co robisz, ja tylko sygnalizuję sytuacje mogące się pojawić.
El Mecánico:
@Ra: ciekawa propozycja, podoba mi się, ale proponuję drobną modernicją:
--- Kod: ---#keyword1
dane
dane
dane
#end
#keyword2
dane
dane
#end
.
.
.
--- Koniec kodu ---
Ra:
Hm, uruchomiłem do testów serwer z poprawkami do scenerii. Aktualnie umie pobrać brakujące pliki lub podmienić błędne.
Jednak przy Quarku natknąłem się na następujący problem. Analizator składni pokazuje brak plików scenery/bud/0dombale03.inc oraz textures\conrete1.tga. Jak się temu przyjrzałem dokładnie, to okazało się, że pierwszy plik jest w innym katalogu - scenery/mc/0dombale03.inc, a drugi ma błędną nazwę - powinno być textures\concrete1.tga (to wynika z innych wpisów o podobnej treści). I teraz możliwe są dwa rozwiązania.
Pierwsze: mogę skopiować odpowiednie pliki w inne miejsca i poinstruować program, aby je pobrał. Załatwi to sprawę na amen, również jeśli powstanie kolejny klon Quarka z tymi samymi błędami. Jest to proste w realizacji, bo wystarczy pobrać krótkie pliki (kilkaset bajtów do kilkudziesięciu kilobajtów) i zapisać je w odpowiednim miejscu. Wadą tego rozwiązania jest redundancja plików i mnożący się bałagan w plikach.
Drugie: poprawić wpisy w scenerii. Dzięki temu robi się porządek, bo wszystkie scenerie mogą korzystać (po poprawkach) z tego samego zbioru plików. Nadmiarowe (powtórzone) pliki można pousuwać. Można np. wymienić błędne modele na poprawione (np. semaforów, mostów, trakcji), a jeśli sceneria wymaga jakiegoś szczególnie nieudanego obiektu do poprawnego działania - można utworzyć specjalny katalog dla niej i tam to wrzucić. Problemem w tym przypadku jest przetwarzanie bardzo dużych plików (kilka do kilkunastu megabajtów). Mogą się pojawić błędy wynikające z poziomu trudności np. wyszukania wpisów, które powinny być zmienione. Bo np. już ktoś wprowadził do nich zmiany, chociażby zmienił widoczność z -1 na 800.
Ponadto jest kwestia: czy modyfikować pliki scenerii w trybie tekstowym, wczytując te megabajty do okna edytora tekstowego, czy też w trybie binarnym, zastępując błędne wpisy spacjami, a dopisując poprawne na końcu (tzn. bez potrzeby zapisywania ponownie całego pliku - tylko zmodyfikowane fragmenty były by zapisywane)?
A może by na początek dać te pliki do pobrania i niech się powtarzają? A dopiero jak już zostanie opanowane to, gdzie w sceneriach są błędy i jak powinny być poprawione - usuwać pliki z nadmiarowych lokacji i modyfikować dobrze rozpoznane błędne wpisy?
Ra:
Postanowiłem pójść w kierunku XML. Jednak format plików poprawek będzie miał dodatkowe wymogi w zakresie formatowania, takie jak:
- jeden znacznik w jednej linii tekstu,
- brak obsługi UTF-8 (w zasadzie tylko windows-1250),
- brak obsługi encji,
- znaczniki pisane wielkimi literami.
Przykładowy plik, na którym będę testował program:
--- Kod: ---<?xml version="1.0" encoding="windows-1250"?>
<FIX>
<INFO>
<REM>
poprawki błędów w sceneriach Quark
wykonywane dla pliku include o nazwie quark*.scm
- usunięcie pustego toru
- usunięcie przerwy w torze
poprawki nie zmieniają działania scenerii
</REM>
<AUTHOR name="Ra" date="2008"/>
</INFO>
<OPEN file="quark*.scm">
<REM>
usunięcie pustego toru, linia 1150
</REM>
<FINDITEM>
node -1 0 none track normal 20.0 1.435 0.15 25.0 20 0 flat vis
Rail_screw_used1 4 TpBpS-new2.tex 0.2 0.5 1.1
1110.14 0.200012 -19468.7 0.0 //point 1
0.0 0.0 0.00195313 //control vector 1
0.0 0.0 -0.00195313 //control vector 2
1110.14 0.200012 -19468.7 0.0 //point 2
0
endtrack
</FINDITEM>
<IFFOUND>
<DELETE/>
</IFFOUND>
<REM>
usunięcie zdublowanego fragmentu rzeki, linia 8451
(mountain jest źle, powinno być canyon, ale i tak nie ma statków)
</REM>
<FINDITEM>
node -1 0 none track river 100.0 15.0 0.5 100 5 0 mountain vis
RiverMnt1.bmp 6.0 RiverMnt1bank.bmp 0.5 0.5 2.0
373.355 -4.0 -7961.2 0.0 //point 1
-6.10831 0.0 15.5068 //control vector 1
6.10831 0.0 -15.5068 //control vector 2
355.03 -4.0 -7914.68 0.0 //point 2
0
velocity 1.0
endtrack
</FINDITEM>
<IFFOUND>
<DELETE/>
</IFFOUND>
<REM>
usunięcie przerwy w torze 0.1mm, 24380
</REM>
<FINDTEXT>
-20.9707 0.200012 228.834 0.0 //point 1
0.0 0.0 0.0 //control vector 1
0.0 0.0 0.0 //control vector 2
-20.9718 0.200012 318.834 0.0 //point 2
</FINDTEXT>
<IFFOUND>
<FINDTEXT text="-20.9707">
<IFFOUND>
<REPLACE with="-20.9706"/>
</IFFOUND>
</FINDTEXT>
</IFFOUND>
<SAVE/>
</OPEN>
<SETDATE>
quarkmc28.scm;22C4FD7F;5906225=2008-01-19 14:03:02
</SETDATE>
</FIX>
--- Koniec kodu ---
Nawigacja
[#] Następna strona
Idź do wersji pełnej