Function processtext: Unterschied zwischen den Versionen

Aus Sternenschweif Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Die Funktion "processtext" wird dafür verwendet, Platzhalter in Textkeys zu ersetzen. Beispiel: <syntaxhighlight lang="javascript"> function processtext(whi…“)
 
 
(10 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
Die Funktion "processtext" wird dafür verwendet, Platzhalter in Textkeys zu ersetzen.
+
Die Funktion "processtext" ist ein sog. [[Dialog-Callback]] und wird verwendet, um Platzhalter in Textkeys zu ersetzen.
  
 
Beispiel:
 
Beispiel:
Zeile 18: Zeile 18:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
In dieser Funktion wird zunächst ein zufälliger Schaden (Variable "dmg") ermittelt und anschließend per Funktion dealdamage "ausgeteilt".
+
In dieser Funktion wird zunächst ein zufälliger Schaden (Variable "dmg") ermittelt und anschließend per Funktion "dealDamage" "ausgeteilt".
 +
 
 +
Die Funktion processtext durchläuft nacheinander die Textkeys der entsprechenden Dialog-ID, d.h. den "request" und die "responses". Der "request" entspricht dabei "which" = 0, die responses "which" = 1 usw. fortlaufend.
 +
 
 +
Der Eintrag
 +
 
 +
<syntaxhighlight lang="javascript">
 +
 
 +
  if( which != 0 ) return text;
 +
 +
</syntaxhighlight>
 +
 
 +
bewirkt also, dass alle "responses" unverändert wiedergegeben werden, da "which" ungleich 0 ist bei den "responses". Somit bezieht sich der folgende Teil der Funktion nur noch auf den "request" (da hier "which" = 0):
 +
 
  
Für den Textkey sind wohl der Name des Chars ({0}) als auch die Höhe des Schadens ({1}) erforderlich. Das Ersetzen erfolgt durch die Einträge:
 
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Zeile 26: Zeile 38:
 
text = text.replace( "{1}", dmg);
 
text = text.replace( "{1}", dmg);
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Für den "request" wird also der Platzhalter {0} durch den Namen des Chars, der in der Variable "currentid" definiert wurde, sowie der Platzhalter {1} durch den Schaden (Variable "dmg") ersetzt.
 +
 +
Es ist auch möglich, mehrmals denselben Platzhalter automatisch in einem Text zu ersetzen (wenn z.B. der Name des Helden mehrfach im Text vorkommt):
 +
 +
<syntaxhighlight lang="javascript">
 +
text = text.replace( /{0}/g, getName(0) );
 +
</syntaxhighlight>
 +
 +
Um ein Partymitglied in der dritten Person (oder mit anderen Personalpronomen) zu ersetzen, gibt es bereits feste Definitionen. Nachfolgend ein kleines Beispiel dazu wobei
 +
 +
{0} der Platzhalter für den Namen
 +
 +
{1} der Platzhalter für er/ sie
 +
 +
{2} der Platzhalter für sein/ihr
 +
 +
{3} der Platzhalter für ihn/ihr
 +
 +
{4} der Platzhalter für ihn/sie
 +
 +
ist.
 +
 +
<syntaxhighlight lang="javascript">
 +
function processtext(which, text) {
 +
if (which != 0) return text;
 +
text = text.replace ( /{0}/g, getName(definierterChar));
 +
text = text.replace ( /{1}/g, getLangString("text_3rdperson_"+getGender(definierterChar),[]));
 +
text = text.replace ( /{2}/g, getLangString("text_pp_"+getGender(definierterChar),[]));
 +
text = text.replace ( /{3}/g, getLangString("text_pp3_"+getGender(definierterChar),[]));
 +
text = text.replace ( /{4}/g, getLangString("text_pp2_"+getGender(definierterChar),[]));
 +
return text;
 +
}
 +
</syntaxhighlight>
 +
--lunatic 09:41, 13. Mär. 2014 (CET)
 +
[[Category:NLTScript Referenz]]

Aktuelle Version vom 16. März 2015, 21:04 Uhr

Die Funktion "processtext" ist ein sog. Dialog-Callback und wird verwendet, um Platzhalter in Textkeys zu ersetzen.

Beispiel:

function processtext(which,text) {
  if( which != 0 ) return text;
  var dmg = rollRandom(3,9);
  dealDamage({"who":currentid,"amount":dmg,"mandatory":true,"type":"ignorers","reason":"drop"});
  text = text.replace( "{0}", getName(currentid) );
  text = text.replace( "{1}", dmg);
  return text;
}
<text key="KK_neg">{0} kommt zu Fall und verliert durch den heftigen Aufprall {1} LE.</text>

In dieser Funktion wird zunächst ein zufälliger Schaden (Variable "dmg") ermittelt und anschließend per Funktion "dealDamage" "ausgeteilt".

Die Funktion processtext durchläuft nacheinander die Textkeys der entsprechenden Dialog-ID, d.h. den "request" und die "responses". Der "request" entspricht dabei "which" = 0, die responses "which" = 1 usw. fortlaufend.

Der Eintrag

  if( which != 0 ) return text;

bewirkt also, dass alle "responses" unverändert wiedergegeben werden, da "which" ungleich 0 ist bei den "responses". Somit bezieht sich der folgende Teil der Funktion nur noch auf den "request" (da hier "which" = 0):


text = text.replace( "{0}", getName(currentid) );
text = text.replace( "{1}", dmg);

Für den "request" wird also der Platzhalter {0} durch den Namen des Chars, der in der Variable "currentid" definiert wurde, sowie der Platzhalter {1} durch den Schaden (Variable "dmg") ersetzt.

Es ist auch möglich, mehrmals denselben Platzhalter automatisch in einem Text zu ersetzen (wenn z.B. der Name des Helden mehrfach im Text vorkommt):

text = text.replace( /{0}/g, getName(0) );

Um ein Partymitglied in der dritten Person (oder mit anderen Personalpronomen) zu ersetzen, gibt es bereits feste Definitionen. Nachfolgend ein kleines Beispiel dazu wobei

{0} der Platzhalter für den Namen

{1} der Platzhalter für er/ sie

{2} der Platzhalter für sein/ihr

{3} der Platzhalter für ihn/ihr

{4} der Platzhalter für ihn/sie

ist.

function processtext(which, text) {
if (which != 0) return text;
text = text.replace ( /{0}/g, getName(definierterChar));
text = text.replace ( /{1}/g, getLangString("text_3rdperson_"+getGender(definierterChar),[]));
text = text.replace ( /{2}/g, getLangString("text_pp_"+getGender(definierterChar),[]));
text = text.replace ( /{3}/g, getLangString("text_pp3_"+getGender(definierterChar),[]));
text = text.replace ( /{4}/g, getLangString("text_pp2_"+getGender(definierterChar),[]));
return text;
}

--lunatic 09:41, 13. Mär. 2014 (CET)