[Release] Client-Interface {"illumina"}

03/16/2016 15:39 xCPx#136
Quote:
Originally Posted by ʟυɢıα View Post
FormatFactory kann man ganze Ordner konvertieren^^
Ja nur lad ich mir ungern wegen iwas iwelche Programme runter. Wenns jemand hat kann er ja so lieb sein und es convertieren, dann code ich das teil die Tage.
03/16/2016 16:16 profialla1#137
Allein, dass du jedes Icon neu gemacht hast du crazy dude...
Super Arbeit! Hoffentlich bald auch ingame zu bestaunen
03/16/2016 17:33 Mr. 'Avenue™#138
Quote:
Originally Posted by xCPx View Post
Ja nur lad ich mir ungern wegen iwas iwelche Programme runter. Wenns jemand hat kann er ja so lieb sein und es convertieren, dann code ich das teil die Tage.
habs mal gemacht
03/16/2016 17:43 xCPx#139
Quote:
Originally Posted by Mr. 'Avenue™ View Post
habs mal gemacht
Danke dir. Mal schauen wie lange es dauert ^^
Ich tipp so auf Anfang nächste Woche, da ich nicht sonderlich viel zeit hab :/
Die Tga's haben n kleines Problem---> Man sieht nen rand beim übergang.

Und die Schatten fallen halt komplett raus, da TGA sowas scheinbar ned unterstützt. Zumindest die die Avenue gemacht hat.
03/16/2016 18:58 King Sora#140
Quote:
Originally Posted by xCPx View Post
Danke dir. Mal schauen wie lange es dauert ^^
Ich tipp so auf Anfang nächste Woche, da ich nicht sonderlich viel zeit hab :/
Die Tga's haben n kleines Problem---> Man sieht nen rand beim übergang.

Und die Schatten fallen halt komplett raus, da TGA sowas scheinbar ned unterstützt. Zumindest die die Avenue gemacht hat.
Oh cool, da bin ich ja mal richtig gespannt :)
Hoffentlich findet unser Yiv dann auch Zeit deinen code etwas unter die Lupe zu nehmen und ihn in die illumina lib (Projekt auf Github) einzubauen.
Falls du wirklich motiviert bist, würde ich dich bitten unser Repo herunterzuladen und das schon als Basis zu nutzen.
Das Ziel ist es ja ein "komplett neues" Design zu schreiben. Es soll am Ende einmal die illumina Controls geben und einmal die normalen Metin2 Controls, wenn du verstehst was ich meine.

Achja und meines Wissenstandes nach untestützt das TGA Format Transparenz, auch in Metin2. Ich habe mir auch das Archiv von Avenue heruntergeladen und es scheint alles zu stimmen.

Lg. (ein extrem gespannter) Sora
03/16/2016 19:08 xCPx#141
Quote:
Originally Posted by King Sora View Post
Oh cool, da bin ich ja mal richtig gespannt :)
Hoffentlich findet unser Yiv dann auch Zeit deinen code etwas unter die Lupe zu nehmen und ihn in die illumina lib (Projekt auf Github) einzubauen.
Falls du wirklich motiviert bist, würde ich dich bitten unser Repo herunterzuladen und das schon als Basis zu nutzen.
Das Ziel ist es ja ein "komplett neues" Design zu schreiben. Es soll am Ende einmal die illumina Controls geben und einmal die normalen Metin2 Controls, wenn du verstehst was ich meine.

Achja und meines Wissenstandes nach untestützt das TGA Format Transparenz, auch in Metin2. Ich habe mir auch das Archiv von Avenue heruntergeladen und es scheint alles zu stimmen.

Lg. (ein extrem gespannter) Sora
Naja, leider wurde dann der Schatten falsch convertiert.
sobald ich ihn einfüge ist er Ingame nurnoch schwarz, und auch Photoshop zeigt ihn mir so an (CS6 extended).

Nunja bisher schreib ich es auf Basis des "alten" Metin2 Designs um, d.h. ich schreibe die bisherigen Klassen in der ui.py um.

Kann es gern als eigenständige Lib schreiben, allerdings kann ich jetzt schon sagen, dass ich definitiv nicht auf Basis des Git Repositories arbeiten werde, da ich mit Yiv`s Programmierstil 0 übereinstimme und wir uns somit nur in der Quere kommen würden.



Aktuell mache ich es nach dem Muster die ui.py neu zu schreiben.
kann diese dann gern yiv zur Verfügung stellen, wenn er dies wünscht.
Allerdings wie gesagt ich kann seinen Programmierstil nicht abhaben und schreib darum wenn dann ne eigenständige Lib.
03/17/2016 14:08 Yiv#142
Quote:
Originally Posted by xCPx View Post
Naja, leider wurde dann der Schatten falsch convertiert.
sobald ich ihn einfüge ist er Ingame nurnoch schwarz, und auch Photoshop zeigt ihn mir so an (CS6 extended).

Nunja bisher schreib ich es auf Basis des "alten" Metin2 Designs um, d.h. ich schreibe die bisherigen Klassen in der ui.py um.

Kann es gern als eigenständige Lib schreiben, allerdings kann ich jetzt schon sagen, dass ich definitiv nicht auf Basis des Git Repositories arbeiten werde, da ich mit Yiv`s Programmierstil 0 übereinstimme und wir uns somit nur in der Quere kommen würden.



Aktuell mache ich es nach dem Muster die ui.py neu zu schreiben.
kann diese dann gern yiv zur Verfügung stellen, wenn er dies wünscht.
Allerdings wie gesagt ich kann seinen Programmierstil nicht abhaben und schreib darum wenn dann ne eigenständige Lib.
Hööööh, warum magst du meinen Stil nicht (bitte ehrlich beantworten :)) :o
Aber gut, ist letztendlich ja deine Sache, wie du es machst, am Ende freuen sie sich trzdm. :D Aber wenn du was eigenes machst, dann solltest du das auch selber zur Verfügung stellen :)

MfG
03/17/2016 15:34 xCPx#143
Quote:
Originally Posted by Yiv View Post
Hööööh, warum magst du meinen Stil nicht (bitte ehrlich beantworten :)) :o
Aber gut, ist letztendlich ja deine Sache, wie du es machst, am Ende freuen sie sich trzdm. :D Aber wenn du was eigenes machst, dann solltest du das auch selber zur Verfügung stellen :)

MfG
Geht mir prinzipiell um die zu weit gestreuten Programmcodes, ich selbst krieg die Krise wenn ich nur um was zu basteln komplett in 50 Dateien suchen muss.

Ich hab nichts gegen Objektorientiert, allerdings setze ich solche Dinge meist in um einiges weniger Klassen / Dateien um wie du.

Soll nicht heissen, dass du schlecht Programmierst, für aufeinander Aufbauende Grundmodule programmierst du sicherlich besser, jedoch ist es für mich anderst einfach leichter.

Und um ehrlich zu sein bin ich recht faul was das einlesen in fremde Libraries etc angeht :D
Bevor ich mir durchles wie welches Modul etc funktioniert bau ich es mir notfalls lieber selbst ^^


und @[Only registered and activated users can see links. Click Here To Register...]:
Finde deinen Kommentar nur witzig, immerhin redest du hier mit der Person die damals als erster ein komplett neues Interface umgesetzt hat. (Illirea Interface zsm wo ich Raicon Py beigebracht habe)
03/17/2016 17:57 #Metho#144
Quote:
Originally Posted by .K0rí View Post
Stimmt weil du mit Variablen arbeitest die sonst immer micha heißen stimmts? Oder hat sich das geändert?


Ich glaube nicht daran das du es fertig bekommst Sorry soll nicht böse sein
Weil er Variabeln mit "micha" als Präfix defniert, soll er nun nicht in der Lage sein dieses Design zu coden? :handsdown: #Bitchpls

Versuchst du nun seine Kenntnisse in Python schlecht zu reden :rolleyes:.
Ich kenne dich eigentlich als nette Person, aber kommt schon ein bisschen rau rüber, auch wenn du's vielleicht nicht so meinst... ist dies trotzdem relativ überheblich und an den Haaren herbeigezogen.
03/17/2016 18:01 xCPx#145
Also ich bräuchte den HP / MP gauge jeweils als 100 einzelbilder mit foranschreitendem verlauf und bestenfalls statt mit schwarzem inneren transparent...
Ebenso den Recover Effekt.

Sonst sieht das schlussendlich einfach nicht gut aus...
03/17/2016 20:01 King Sora#146
Quote:
Originally Posted by xCPx View Post
Also ich bräuchte den HP / MP gauge jeweils als 100 einzelbilder mit foranschreitendem verlauf und bestenfalls statt mit schwarzem inneren transparent...
Ebenso den Recover Effekt.

Sonst sieht das schlussendlich einfach nicht gut aus...
Oi oi!

Ich habe für dich Beispiele angefertigt wie du die slices zu managen hast, bzw. managen solltest. Ich finde diese "Einzelbilderlogik" wirklich richtig schlecht, ich musste mich schon überwinden es bei der MP-Bar so zu slicen.

Im Anhang findest du Beispiele (Video, Photoshop Datei und ein Bild) wie du die Controls anordnen solltest und eine kleine Projektmappe (C#) wie man am besten die HP-Bar umsetzen sollte. - Ich kann leider nur C# und kein Python xD

Hier der Code ohne die Projektmappe:

Lg. Sora
03/17/2016 22:05 #Metho#147
@[Only registered and activated users can see links. Click Here To Register...], leider gibts keine solche leichte Rotate etc. Möglichkeit, er müsste gebenenfalls ein Image mit (.rotate, .paste, .crop) Zuschneiden / Drehen / Zuschneiden / Zurückdrehen bearbeiten.

Verstehe aber ohnehin zuwenig C# um deine Methode genau nachvollziehen zu können
03/17/2016 22:37 Yiv#148
Quote:
Originally Posted by Lord Metho View Post
@[Only registered and activated users can see links. Click Here To Register...], leider gibts keine solche leichte Rotate etc. Möglichkeit, er müsste gebenenfalls ein Image mit (.rotate, .paste, .crop) Zuschneiden / Drehen / Zuschneiden / Zurückdrehen bearbeiten.

Verstehe aber ohnehin zuwenig C# um deine Methode genau nachvollziehen zu können
Also Poccix hatte diese TP-Anzeige mit den Bildern bereits umsetzen können. Er hatte mit dem Interface ja bereits mal angefangen, der Code ist inzw. aber verschollen, vlt. findet er ihn ja nochmal, dann kann er ihn mit euch teilen.

MfG
03/17/2016 22:49 xCPx#149
Quote:
Originally Posted by King Sora View Post
Oi oi!

Ich habe für dich Beispiele angefertigt wie du die slices zu managen hast, bzw. managen solltest. Ich finde diese "Einzelbilderlogik" wirklich richtig schlecht, ich musste mich schon überwinden es bei der MP-Bar so zu slicen.

Im Anhang findest du Beispiele (Video, Photoshop Datei und ein Bild) wie du die Controls anordnen solltest und eine kleine Projektmappe (C#) wie man am besten die HP-Bar umsetzen sollte. - Ich kann leider nur C# und kein Python xD

Lg. Sora
In C# / C++ ist das kein Problem, das weis ich selbst zu gut.
Jedoch ist es in der bestehenden Metin2 Funktionalität bisher leider nicht bzw kaum ohne grössere Performance Verluste möglich (Es sei denn der Code soll auch n C++ Part fürn Source beinhalten, dann ist das wiederum recht einfach)


Glaub mir freiwillig mach ichs auch nicht mit Bildern ^^


Ich sag nur gleich vorneweg: Das Tool von Avenue hat das ganze komisch convertiert.
z.B. haben die einzelnen Bilder immer einen minimalistischen "Rand" also ein Bereich der nicht vollkommen Transparent ist, das beeinträchtigt das Gesamtbild, allerdings hab ich grade nichts anderes, daher werd ich evtl später nochmal ein paar feinjustierungen machen.

Aktueller aufbau:

eine Art 2. ui.py in der z.B. die Taskbar als ganzes Vertreten ist, in dieser Klasse jedoch aufgeteilt.
z.B. Minimap: illumina.TaskBar.MiniMap


# Edit hab mich soeben entschlossen die Teile des Codes immer wieder zu posten, schliesslich bin ich schon länger aus Python raus und evtl findet jemand was, was man besser machen könnte:
Meine Bisherige Taskbar:

[Only registered and activated users can see links. Click Here To Register...]
Code:
class TaskBar(Window):

	class MiniMap(Window):
		class MapTextToolTip(Window):
			def __init__(self):			
				ui.Window.__init__(self)

				textLine = ui.TextLine()
				textLine.SetParent(self)
				textLine.SetHorizontalAlignCenter()
				textLine.SetOutline()
				textLine.SetHorizontalAlignRight()
				textLine.Show()
				self.textLine = textLine

			def __del__(self):			
				ui.Window.__del__(self)

			def SetText(self, text):
				self.textLine.SetText(text)

			def SetTooltipPosition(self, PosX, PosY):
				if localeInfo.IsARABIC():
					w, h = self.textLine.GetTextSize()
					self.textLine.SetPosition(PosX - w - 5, PosY)
				else:
					self.textLine.SetPosition(PosX - 5, PosY)

			def SetTextColor(self, TextColor):
				self.textLine.SetPackedFontColor(TextColor)

			def GetTextSize(self):
				return self.textLine.GetTextSize()
		def __init__(self):
			ui.Window.__init__(self)
			self.AddFlag("not_pick")
			self.tooltipInfo = None
			self.btnAtlas = None
			self.Show()


		def OnUpdate(self):
			miniMap.UpdateAtlas()
			self.UpdateMiniMapToolTip()

		def UpdateMiniMapToolTip(self):
			(mouseX, mouseY) = wndMgr.GetMousePosition()
			if self.tooltipInfo:
				if True == CustomIsIn(mouseX, mouseY, self):
					(bFind, sName, iPosX, iPosY, dwTextColor) = miniMap.GetInfo(mouseX, mouseY)
					if bFind == 0:
						self.tooltipInfo.Hide()
					elif not self.CanSeeInfo:
						self.tooltipInfo.SetText("%s(%s)" % (sName, localeInfo.UI_POS_UNKNOWN))
						self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY)
						self.tooltipInfo.SetTextColor(dwTextColor)
						self.tooltipInfo.Show()
					else:
						if localeInfo.IsARABIC() and sName[-1].isalnum():
							self.tooltipInfo.SetText("(%s)%d, %d" % (sName, iPosX, iPosY))
						else:
							self.tooltipInfo.SetText("%s(%d, %d)" % (sName, iPosX, iPosY))
						self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY)
						self.tooltipInfo.SetTextColor(dwTextColor)
						self.tooltipInfo.Show()
				else:
					self.tooltipInfo.Hide()
		def AddToolTip(self, parent):
			self.tooltipInfo = self.MapTextToolTip()
			self.tooltipInfo.SetParent(parent)
			self.tooltipInfo.Hide()

		def OnRender(self):
			(x, y) = self.GetGlobalPosition()
			fx = float(x)
			fy = float(y)
			miniMap.Render(fx, fy)

		def HideAtlas(self):
			miniMap.HideAtlas()
		def BuildButtons(self, parent):
			self.btnAtlas = Button()
			self.btnAtlas.SetParent(parent)
			self.btnAtlas.SetUpVisual("illumina/controls/special/taskbar/btn_atlas_01_normal.tga")
			self.btnAtlas.SetOverVisual("illumina/controls/special/taskbar/btn_atlas_02_hover.tga")
			self.btnAtlas.SetDownVisual("illumina/controls/special/taskbar/btn_atlas_03_active.tga")
			self.btnAtlas.SetToolTipText(localeInfo.MINIMAP_SHOW_AREAMAP, 0, -25)
			self.btnAtlas.SetEvent(ui.__mem_func__(self.ShowAtlas))
			self.btnAtlas.SetPosition(191, 19)
			self.btnAtlas.Show()
		def ShowAtlas(self):
			miniMap.ShowAtlas()

		def CanSeeInfo(self):
			return True

		def GetMapsUnallowed(self):
			return {
		"metin2_map_monkeydungeon" : FALSE,
		"metin2_map_monkeydungeon_02" : FALSE,
		"metin2_map_monkeydungeon_03" : FALSE,
		"metin2_map_devilsCatacomb" : FALSE,
		}
	
	class ExpBar(Window):
		image = None
		class TextToolTip(ui.Window):
			def __init__(self):
				ui.Window.__init__(self, "TOP_MOST")

				textLine = ui.TextLine()
				textLine.SetParent(self)
				textLine.SetHorizontalAlignCenter()
				textLine.SetOutline()
				textLine.Show()
				self.textLine = textLine

			def __del__(self):
				ui.Window.__del__(self)

			def SetText(self, text):
				self.textLine.SetText(text)

			def OnRender(self):
				(mouseX, mouseY) = wndMgr.GetMousePosition()
				self.textLine.SetPosition(mouseX, mouseY - 15)
		def __init__(self):
			Window.__init__(self)
			self.image = ExpandedImageBox()
			self.image.AddFlag("not_pick")
			self.image.LoadImage("illumina/controls/special/taskbar/progress_exp_full.tga")
			self.image.SetParent(self)
			self.image.Show()
			self.SetSize(self.image.GetWidth(), self.image.GetHeight())
			self.SetPosition(241, 89)
			self.Show()
			

		def __del__(self):
			self.Hide()
			Window.__del__(self)
		def AddToolTip(self, parent):
			self.tooltipInfo = self.TextToolTip()
			self.tooltipInfo.SetParent(parent)
			self.tooltipInfo.Hide()
		def OnUpdate(self):
			import player
			curEXP = unsigned32(player.GetStatus(player.EXP))
			nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP))
			Percentage = -1 + float(curEXP)/float(nextEXP)

			self.image.SetRenderingRect(0.0, Percentage, 0.0, 0.0)
			(mouseX, mouseY) = wndMgr.GetMousePosition()
			if self.tooltipInfo:
				if True == CustomIsIn(mouseX, mouseY, self):
					self.tooltipInfo.Show()
					self.tooltipInfo.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curEXP) / max(1, float(nextEXP)) * 100))
				else:
					self.tooltipInfo.Hide()


	def __init__(self):
		Window.__init__(self)
		self.path = "illumina/controls/special/taskbar/"
		self.width = max(1280, wndMgr.GetScreenWidth())
		self.height = 158
		self.repeat = 220
		self.bar = None
		self.atlas = None
		self.exp_Bar = None
		self.BuildMiniMap()

		self.BuildBar()
		self.BuildExpBar()
		self.BuildButtons()
		
		
		self.SetPosition( (wndMgr.GetScreenWidth() - self.width )/2,wndMgr.GetScreenHeight()-self.height)
		self.SetSize(self.width, self.height)
		self.Show()
		self.BuildToolTips()
	def __del__(self):
		self.Hide()
		Window.__del__(self)

	

	def BuildBar(self):
		self.bar = []
		files = ["bar_" +dir+".tga" for dir in ("repeat","left", "middle", "right", ) ]
		for x in files:
			part = ExpandedImageBox()
			part.AddFlag("not_pick")
			part.LoadImage("illumina/controls/special/taskbar/" + x)
			part.SetParent(self)
			part.Show()
			self.bar.append(part)
		self.bar[0].SetPosition(self.bar[1].GetWidth()  ,self.height - self.bar[0].GetHeight())
		self.bar[0].SetPercentage(float(self.width) - float(self.bar[1].GetWidth()) - float(self.bar[3].GetWidth()), float(self.repeat))
		self.bar[1].SetPosition(0,self.height -124)
		self.bar[2].SetPosition( (self.width - self.bar[2].GetWidth()) / 2 , self.height - self.bar[2].GetHeight())
		self.bar[3].SetPosition(self.width -  self.bar[3].GetWidth(),0)

	def BuildMiniMap(self):
		miniMap.Create()
		miniMap.SetScale(2.0)
		miniMap.RegisterAtlasWindow(self)
		self.Atlas = self.MiniMap()
		self.Atlas.SetParent(self)
		self.Atlas.SetSize(128, 128)
		self.Atlas.SetPosition(self.width - 280, 15)
		self.Atlas.Show()
	def BuildExpBar(self):
		self.exp_Bar = self.ExpBar()
		self.exp_Bar.SetParent(self.bar[1])
	def BuildButtons(self):
		self.Atlas.BuildButtons(self.bar[3])
	def BuildToolTips(self):		
		self.Atlas.AddToolTip(self)
		self.exp_Bar.AddToolTip(self)
Falls interesse besteht kann ich auch mal mein LiveDevelopement Script rausgeben.
03/18/2016 02:31 #Metho#150
Ich habe nun die mal meinen alten Converter ausgegraben und den so umgeschrieben, dass er komplette Verzeichnisstrukturierungen konvertieren kann.

Ich habe xCPx die Dateien bereits geschickt und es sollte das Ganze nun ohne Fehler anzeigen.