Hey,
Der Questhintergrund ist das standard implementierte "thinboard".
Öffne pack/uiscript/questdialog.py, dort siehst du sowas:
Code:
{
"name" : "board",
"type" : "thinboard",
"style" : ("attach", "ignore_size",),
"x" : 0,
"y" : 0,
"horizontal_align" : "center",
"vertical_align" : "center",
"width" : 350,
"height" : 300,
},
Die ThinBoard Klasse sieht so aus:
Code:
class ThinBoard(Window):
CORNER_WIDTH = 16
CORNER_HEIGHT = 16
LINE_WIDTH = 16
LINE_HEIGHT = 16
BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)
LT = 0
LB = 1
RT = 2
RB = 3
L = 0
R = 1
T = 2
B = 3
def __init__(self, layer = "UI"):
Window.__init__(self, layer)
CornerFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
LineFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Line_"+dir+".tga" for dir in ["Left","Right","Top","Bottom"] ]
self.Corners = []
for fileName in CornerFileNames:
Corner = ExpandedImageBox()
Corner.AddFlag("attach")
Corner.AddFlag("not_pick")
Corner.LoadImage(fileName)
Corner.SetParent(self)
Corner.SetPosition(0, 0)
Corner.Show()
self.Corners.append(Corner)
self.Lines = []
for fileName in LineFileNames:
Line = ExpandedImageBox()
Line.AddFlag("attach")
Line.AddFlag("not_pick")
Line.LoadImage(fileName)
Line.SetParent(self)
Line.SetPosition(0, 0)
Line.Show()
self.Lines.append(Line)
Base = Bar()
Base.SetParent(self)
Base.AddFlag("attach")
Base.AddFlag("not_pick")
Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
Base.SetColor(self.BOARD_COLOR)
Base.Show()
self.Base = Base
self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
def __del__(self):
Window.__del__(self)
def SetSize(self, width, height):
width = max(self.CORNER_WIDTH*2, width)
height = max(self.CORNER_HEIGHT*2, height)
Window.SetSize(self, width, height)
self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)
def ShowInternal(self):
self.Base.Show()
for wnd in self.Lines:
wnd.Show()
for wnd in self.Corners:
wnd.Show()
def HideInternal(self):
self.Base.Hide()
for wnd in self.Lines:
wnd.Hide()
for wnd in self.Corners:
wnd.Hide()
Das für dich Relevante ist:
Code:
CornerFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
LineFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Line_"+dir+".tga" for dir in ["Left","Right","Top","Bottom"] ]
Nun zum Guide:
Öffne die root und such die ui.py und öffne sie.
Änder in der ThinBoard Klasse:
Code:
def __init__(self, layer = "UI"):
zu:
Code:
def __init__(self, layer = "UI", path = "d:/ymir work/ui/pattern/ThinBoard_Corner_"):
und:
Code:
CornerFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
LineFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Line_"+dir+".tga" for dir in ["Left","Right","Top","Bottom"] ]
zu:
Code:
CornerFileNames = [ path+dir+".tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
LineFileNames = [ path+dir+".tga" for dir in ["Left","Right","Top","Bottom"] ]
dann fügst du am Ende der Klasse folgende Funktion hinzu:
Code:
def SetNewBaseColor(self, color):
self.Base.SetColor(color)
Nun suchst du :
Code:
elif Type == "thinboard":
parent.Children[Index] = ThinBoard()
parent.Children[Index].SetParent(parent)
self.LoadElementThinBoard(parent.Children[Index], ElementValue, parent)
und schreibst darunter (ACHTUNG! DEN PFAD & COLOR ANPASSEN!):
Code:
elif Type = "questboard":
parent.Children[Index] = ThinBoard("UI","d:/dein/neuer/pfad/ThinBoard_Corner_")
parent.Children[Index].SetParent(parent)
parent.Children[Index].SetNewBaseColor(DEINE_COLOR)
self.LoadElementThinBoard(parent.Children[Index], ElementValue, parent)
Nun wieder in die questdialog.py (uiscript):
Änder:
Code:
"type" : "thinboard",
zu:
Code:
"type" : "questboard",
Pack wieder die root & die uiscript.
Fertig.
Deine tga's müssen dabei natürlich die Vorgaben einhalten:
"LeftTop","LeftBottom","RightTop","RightBottom "
"Left","Right","Top","Bottom"
Kleines Beispiel:
Code:
elif Type = "questboard":
parent.Children[Index] = ThinBoard("UI","d:/ymir work/ui/questboard/questboard_")
parent.Children[Index].SetParent(parent)
color = grp.GenerateColor(0.0, 0.0, 1.0, 0.50)
parent.Children[Index].SetNewBaseColor(color)
self.LoadElementThinBoard(parent.Children[Index], ElementValue, parent)
Die tga's müssten dann so heißen:
questboard_LeftTop, questboard_LeftBottom usw.
___________________________________________
Ist nicht getestet, sollte aber gehen.
MfG, .Various
EDIT:
Ich sehe grade, du willst ein komplettes Bild als Hintergrund machen... Naja, ich lasse es mal so stehen.
Bei meiner Änderung kannst du halt neue Lines/Corners & die Base (Mitte) des Hintergrund erstellen.
Ein ganzes Bild wäre bei deinem Vorhaben meines Erachtens auch unvorteilhaft weil du das Bild ja je nach Größe des Questfensters skalieren müsstest.. Das würde das Bild verzerren.
Wenn du fragen hast, schreib sie einfach hier :)