1. Pythonseitiger TextReader
hier hab ich einen kleinen TextReader in Python für euch, durch den ihr Textdateien aus dem Clienten auslesen könnt inkl. Formatierung (automatisches [ENTER] nach jeder Zeile) und 3 Befehlen (if, elseif & else). Außerdem können Keywords angegeben werden, die er mit einem gewünschten Wert ersetzt. Somit könnt ihr sehr einfach "Template-Dateien" einlesen & "übersetzen" lassen. Hier eine kleine Beispiel-Datei, die der Reader lesen könnte:
Code:
Sei gegrüßt, [PLAYER_NAME]! Ich habe dir den Auftrag gegeben, dass du mir [ITEM_MAX_COUNT] Items bringen sollst. [IF:[ITEM_COUNT]=0] Du hast mir noch keins gebracht. [ELSEIF:[ITEM_COUNT]=1] Du hast mir bisher eins gebracht. [ELSE] Du hast mir bisher [ITEM_COUNT] Items gebracht. [ENDIF] Bring mir noch [ITEM_NEED_COUNT] Items!
Code:
def GetTemplateText(fileName):
import uiTextReader
TextReader = uiTextReader.TextReader() # hier kann noch als Argument angegeben werden, ob nach jeder Zeile ein [ENTER] gemacht werden soll (TRUE = ja, FALSE = nein, standart: TRUE)
TextReader.AddKeyWord("[PLAYER_NAME]", player.GetName())
TextReader.AddKeyWord("[ITEM_NEED_COUNT]", 20)
TextReader.AddKeyWord("[ITEM_COUNT]", 3)
TextReader.LoadFile(fileName) # hier dateiname angeben (oder eben beim Funktionsaufruf wenn man es auf die Funktion bezieht, z.B.: "locale/de/template.txt")
return TextReader.GetText()
Code:
Sei gegrüßt, WieIchEbenHeiße! Ich habe dir den Auftrag gegeben, dass du mir 20 Items bringen sollst. Du hast mir bisher 3 Items gebracht. Bring mir noch 17 Items!
2. Pythonseitige TextLine mit erzwungenem Zeilenumbruch
außerdem, als kleine Anbindung um von der [ENTER]-Rückgabe vom PyTextReader gebrauch zu machen, hab ich hier noch eine kleine Klasse für euch: die MultiTextLine-Klasse. Sie lässt sich - sobald sie wie gleich gesagt wird eingebaut wird - in jeder uiscript-Datei (z.B. inventorywindow.py etc.) durch den "type" : "multi_text" benutzen (dabei muss eine max. Breite festlegt werden durch "width", ansonsten einfach wie gewohnt als TextLine behandeln).
HowTo Einbauen:
1. Ihr öffnet eure ui.py (und entpackt davor eure root-Dateien).
2. Ihr sucht nach
Code:
class TextLine(Window):
Code:
class MultiTextLine(Window): RETURN_STRING = "[ENTER]" LINE_HEIGHT = 17 def __init__(self): Window.__init__(self) self.lines = [] self.alignCenter = FALSE self.text = "" def __del__(self): Window.__init__(self) def SetWidth(self, width): self.SetSize(width, self.GetHeight()) self.SetText(self.GetText()) def NewTextLine(self): line = TextLine() line.SetParent(self) line.SetPosition(0, len(self.lines) * self.LINE_HEIGHT) if self.alignCenter == TRUE: line.SetWindowHorizontalAlignCenter() line.SetHorizontalAlignCenter() line.Show() self.lines.append(line) return self.lines[len(self.lines) - 1] def Clear(self): self.text = "" self.lines = [] def SetTextHorizontalAlignCenter(self): self.alignCenter = TRUE self.SetText(self.GetText()) def SetText(self, text): self.Clear() self.text = text line = self.NewTextLine() pos = 0 newStartPos = 0 while pos < len(text): line.SetText(text[:pos+1]) newLine = FALSE if len(text) >= pos + len(self.RETURN_STRING): if text[pos:pos+len(self.RETURN_STRING)] == self.RETURN_STRING: newLine = TRUE newStartPos = pos+len(self.RETURN_STRING) if newLine == FALSE and pos > 0: if line.GetTextWidth() > self.GetWidth(): newLine = TRUE newStartPos = pos if newLine == TRUE: line.SetText(text[:pos]) line = self.NewTextLine() text = text[newStartPos:] if text[:1] == " ": text = text[1:] pos = 0 else: pos += 1 self.SetSize(self.GetWidth(), len(self.lines) * self.LINE_HEIGHT) def GetText(self): return self.text
Code:
elif Type == "text":
Code:
elif Type == "multi_text": parent.Children[Index] = MultiTextLine() parent.Children[Index].SetParent(parent) self.LoadElementMultiText(parent.Children[Index], ElementValue)
Code:
def LoadElementText(self, window, value):
Code:
## MultiTextLine
def LoadElementMultiText(self, window, value):
if TRUE == value.has_key("width"):
window.SetWidth(int(value.get("width", 0)))
if TRUE == value.has_key("text_horizontal_align"):
if value["text_horizontal_align"] == "center":
window.SetTextHorizontalAlignCenter()
if TRUE == value.has_key("text"):
window.SetText(value["text"])
self.LoadDefaultData(window, value)
return TRUE
Wünsche euch viel Spaß damit,
Liebe Grüße,
Das Cureya Team.






