-
Notifications
You must be signed in to change notification settings - Fork 0
textHandling
EN PL |
Introduction |
Ze względu na dość skomplikowaną obsługę tekstów w TTD jest to również nieco skomplikowane w m4nfo. W TTD, a co za tym idzie w m4nfo, teksty mogą pojawiać się w wielu różnych miejscach i w wielu różnych kontekstach. Po pierwsze, istnieją teksty pojawiające się w funkcjach własności, jak nazwy pojazdów, domów, stacji, obiektów, ... Po drugie, są teksty związane-z-newGRF, zarówno tymczasowe, jak i trwałe, i wreszcie są oryginalne teksty TTD, które mogą być zmieniony przez newGRF w TTDPatch.
Właściwości |
Funkcja tekstowa | Opis |
---|---|
defgrftext(<Text-ID>,<Language-ID>,{<String>}) | Definiuje teksty związane-z-newGRF |
grftext(<Text-ID>) | Tekst odniesienia jako wynik wywołania zwrotnego |
deftxt(<String>,{<Language-ID>,<String>}) | Przydziela tekst do użycia w funkcjach właściwości |
reftxt(<String>) / reftxtcb(<String>) | Odwołanie do przydzielonego tekstu jako text-ID lub callback |
makettdtext(<Text-ID>,<Language-ID>,{<String>}) | Ustawia oryginalne teksty TTD |
subtext(<Text-ID>) | Użycie przydzielonego tekstu jako podtekstu w innym tekście |
Opis |
Ta funkcja definiuje i przypisuje teksty związane-z-newGRF, takie jak teksty podtypów ładunków, teksty pomocy lokomotywy, komunikaty o błędach itp. Jej pierwszym parametrem musi być ID-tekstu , zaczynając od "0" , aby pierwszy zdefiniowany tekst był zdefiniowany. Więcej tekstów powinno zawierać kolejne ID.
Drugi parametr to ID-języka. W chwili obecnej można używać następujących ID-języków:
|
US | US English |
|
UK | British English |
|
D | German |
|
F | French |
|
E | Spanish | ||||
|
RUS | Russian |
|
SRB | Serbian |
|
NL | Dutch |
|
H | Hungarian |
|
I | Italian | ||||
|
S | Swedish |
|
PL | Polish |
|
HR | Croatian |
|
N | Norwegian |
|
CZ | Czech | ||||
ALL | default (usually English) |
Należy odnotować, że ta funkcja może używać tylko jednego języka, ale więcej niż jednego ciągu tekstowego. W rzeczywistości będziesz musiał użyć jednej funkcji defgrftext() na język.
Ta funkcja jest używana w połączeniu z grftext() i callbackami CB_TEXT (dodatkowy tekst w menu zakupu) i CB_TSFX (tekst pod-typu ładunku).
Przykład 1 (cargo sub-texts for piece goods): defgrftext(TSF_PGOOD,I, " (imballati)"," (container)", " (compensato)"," (liquido)", " (macchinari)"," (frigorifero)", " (automobili)"," (pallettizzata)", " (paglia)"," (birra)", " (vino)" )
Przykład 2 (error messages): define(ATT_OK,0x400) define(ATT_VAN,0x60) define(ATT_CAR,0x61) define(ATT_REQLDCAR,0x62) ... defgrftext(ATT_VAN,ALL, " (freight car cannot be attached)", " (coach cannot be attached)", " (long-distance cars required)", ... )
Ta funkcja odwołuje się do text-ID, zdefiniowanego przez defgrftext() i zwraca wynik wywołania zwrotnego. Powinien być używany w połączeniu z callbackami CB_TEXT i CB_TSFX (patrz wyżej). W wersji GRF 8 można zwrócić NONE, aby w ogóle nie wyświetlać tekstu.
Przykład (cargo sub-texts for piece goods): def(3) refitted( grftext(TSF_BRCK) if(0) // "bricks" grftext(TSF_PLYW) if(1) // "plywood" grftext(NONE) else // no text ) def(4) callback( ref(3) if(CB_TSFX) // cargo sub-texts ref(2) else // graphics )
Ta funkcja przydziela tekst do właściwości obiektów, takich jak 'nazwy' ( nazwa klasy , nazwa obiektu ) dla 'features' , takich jak obiekty i domy. Służy do zdefiniowania jednego ciągu tekstowego w wielu językach w połączeniu z reftxt() w celu zwrócenia text-ID lub reftxtcb() w celu zwrócenia wyniku wywołania zwrotnego w połączeniu z CB_TEXT.
Pierwszym parametrem tej funkcji jest etykieta, która jest używana wzajemnie przez jej inne funkcje reftxt() i reftxtcb(). Etykieta jest początkowo definiowana przez deftxt() i niezdefiniowana na końcu pliku źródłowego.
Przykład (object class and name): deftxt(molelight, US, "Mole lights", UK, "Mole lights", D, "Molenbefeuerung", F, UTF8 "Feux de jetée", E, "Luces de muelle", I, "Luci del molo" ) defineobject(_LIGHTS, ... objectname(molelight) climate(TEMPERATE, ARCTIC, TROPIC) size(1,1) price(80) timeframe(1.1.1880 .. 1.1.2050) ... )
W przypadku, gdy chcesz używać etykiet w rozproszonych plikach źródłowych, jest to możliwe w ograniczony sposób. Najpierw musisz zdefiniować wszystkie etykiety, do których chcesz uzyskać dostęp z kolejnego pliku, w poprzednim pliku. Po drugie, nie możesz już zdefiniować żadnych etykiet w jednym z następnych plików, z wyjątkiem wcześniejszego wywołania funkcji import() (raz na plik), w przeciwnym razie wszystkie nowo zdefiniowane ID-tekstowe pomieszałyby się z tymi już zdefiniowanymi w poprzednie pliki.
Przykład (preparing labels to be used in successive files): deftxt(molelight, US, "Mole lights", UK, "Mole lights", D, "Molenbefeuerung", F, UTF8 "Feux de jetée", E, "Luces de muelle", I, "Luci del molo" ) export({molelight}) Przykład (using labels in successive file): import() defineobject(_LIGHTS, ... objectname(molelight) climate(TEMPERATE, ARCTIC, TROPIC) size(1,1) price(80) timeframe(1.1.1880 .. 1.1.2050) ... )
Obie funkcje odwołują się do wcześniej zdefiniowanych ciągów tekstowych za pomocą etykiety. Pierwsza zwraca Text-ID, a druga zwraca wynik wywołania zwrotnego. W większości przypadków reftxt() jest używana tylko wewnętrznie. Np. W powyższym przykładzie jest używana przez funkcję objectname() .
Funkcja reftxtcb() jest bardzo podobna do grftext(), ale w przeciwieństwie do defgrftext()/grftext(), pojedynczy ciąg tekstowy zdefiniowany przez poprzednią deftxt() może składać się z wielu języków.
Przykład (error messages): deftxt(warn_coast, US, T_BLACK "Mole with stairs cannot be built on coast tiles.", UK, T_BLACK "Mole with stairs cannot be built on coast tiles.", D, UTF8 T_BLACK "Mole mit Treppe kann nicht auf Küstenfeldern gebaut werden.", F, UTF8 T_BLACK "Une jetée avec des escaliers ne peut pas être construite sur la côte.", E, T_BLACK "Muelle con las escaleras no se puede construir en la costa.", I, UTF8 T_BLACK "Non si puó costruire un molo con scale sulla costa." ) def(62) callback( reftxtcb(warn_coast) if(CB_TEXT) ref(61) else )
Ta funkcja służy do modyfikowania lub tłumaczenia oryginalnych ciągów tekstowych TTD podanych przez ich ID-tekstowe. Zobacz listę ID-tekstowych (lub link Text IDs ) w nfo/grf Technical Reference, aby uzyskać listę dostępnych ciągów. Należy odnotować, że modyfikowanie oryginalnych ciągów tekstowych nie działa w OpenTTD.
Przykład (modifying TTD strings, renaming "ship depot"): makettdtext(0x3806,ALL,"Floating dock") makettdtext(0x3806,D,"Schwimmdock") makettdtext(0x3806,F,"Dock flottante") makettdtext(0x3806,E,"Dique flotante")
Ta funkcja odwołuje się do ciągu tekstowego z poprzedniej defgrftext() i pozwala wstawić go do innej defgrftext(). Oszczędza to pamięć i ID-tekstowe, jeśli są odpowiednio rozmieszczone.
Przykład (use of sub-strings): defgrftext(0xAC,ALL, "Track class: ", " (branch line)", "ank locomotive", "freight service", "Axle scheme: ", "Builder: " ) define(_TRACK,subtext(0xAC)) // track class define(_DBNN,subtext(0xAD)) // (branch line) define(_TANK,subtext(0xAE)) // (t)ank engine define(_FRS,subtext(0xAF)) // freight service define(_AXLE,subtext(0xB0)) // Axle scheme: define(_BUILDER,subtext(0xB1)) // Builder defgrftext(TLH_BR92,ALL, T_BLACK _AXLE T_LORANGE "E " T_BLACK _BUILDER T_LORANGE "Union" CRLF T_BLACK _TRACK T_LORANGE "A/B" _DBNN CRLF CRLF T_LGREEN "Universal t" _TANK " for basic passenger and " _FRS "." )
Należy odnotować, jak użyto tutaj zwykłego makra, aby uniknąć wielokrotnego wstawiania prawidłowego wywołania funkcji subtext() i parametru do długich źródeł.
Oczywiście możliwe jest również wprowadzenie lokalnych makr do definiowania i odwoływania się do ciągów tekstowych:
Przykład (use of sub-strings): define(moreinfo,0xAC) ... defgrftext(moreinfo,ALL, "Track class: ", " (branch line)", "ank locomotive", "freight service", "Axle scheme: ", "Builder: " ) define(_TRACK,subtext(moreinfo)) // track class define(_DBNN,subtext(moreinfo + 1)) // (branch line) define(_TANK,subtext(moreinfo + 2)) // (t)ank engine define(_FRS,subtext(moreinfo + 3)) // freight service define(_AXLE,subtext(moreinfo + 4)) // Axle scheme: define(_BUILDER,subtext(moreinfo + 5)) // Builder