Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:umlaute

Einführung

Das Spiel erwartet, daß Texte UTF-8 kodiert übergeben werden. Dies hat zur Folge, daß Texte einfach abgeschnitten werden, sobald man normale Umlaute verwendet. Eigentlich möchte man sich aber mit solchen technischen Details nicht herumschlagen, sondern einfach nur normale Texte schreiben…

Lösung

Damit man die Texte weiter wie bisher schreiben kann, gibt es eine Funktion, welches die Texte automatisch vor der Verwendung durch das Spiel umwandelt.
Um normale Texte in (NPC)Briefings und Messages verwenden zu können, braucht man in der FirstMapAction() einfach nur diese Funktion aufzurufen:

AutoUmlaut()

Dies muss gemacht werden, bevor eigene Funktion aufgerufen (Briefings erstellt) werden.

Nun gibt es allerdings noch einige wenige Fälle, in denen man Text ausserhalb von Briefings und Messages verwendet. Frei erfundenes Beispiel:

Spaghetti( "Mit Käse" );
 
local tFarben = {
	normal = "Weiß",
	natur = "Grün"
};
Anpinseln( tFarben );

Hier würden die Umlaute nicht automatisch umgewandelt werden. Daher muss man eine Funktion aufrufen, damit dies gemacht wird:

Spaghetti( Umlaute( "Mit Käse" ) );
 
local tFarben = {
	normal = "Weiß",
	natur = "Grün"
};
Anpinseln( Umlaute( tFarben ) );

Durch diese Aufrufe werden die Texte, die Umlaute enthalten, auch in diesen Sonderfällen korrekt vom Spiel angezeigt.

Benötigte Funktionen

Da die zuvor demonstrierten Funktionen nicht im Spiel vorhanden sind, müssen sie ins Script kopiert werden:

function Umlaute( _text )
	local texttype = type( _text );
	if texttype == "string" then
		_text = string.gsub( _text, "ä", "\195\164" );
		_text = string.gsub( _text, "ö", "\195\182" );
		_text = string.gsub( _text, "ü", "\195\188" );
		_text = string.gsub( _text, "ß", "\195\159" );
		_text = string.gsub( _text, "Ä", "\195\132" );
		_text = string.gsub( _text, "Ö", "\195\150" );
		_text = string.gsub( _text, "Ü", "\195\156" );
		return _text;
	elseif texttype == "table" then
		for k,v in _text do
			_text[k] = Umlaute( v );
		end
		return _text;
	else
		return _text;
	end 
end
 
function AutoUmlaut()
	StartBriefingUmlauteOrig = StartBriefing;
	StartBriefing = function( _briefing )
		StartBriefingUmlauteOrig( Umlaute( _briefing ) );
	end
 
	CreateNPCUmlauteOrig = CreateNPC;
	CreateNPC = function( _npc )
		CreateNPCUmlauteOrig( Umlaute( _npc ) );
	end
 
	MessageUmlauteOrig = Message;
	Message = function( _text )
		MessageUmlauteOrig( Umlaute( tostring( _text ) ) );
	end 
end

FIXME Es fehlt ein Hinweis auf das einbinden von Umlauten per externen Editor und das sie sich auch in den Brifingserweiterungen befinden Ninobi

tutorials/umlaute.txt · Zuletzt geändert: 2021/09/18 19:16 (Externe Bearbeitung)