Mir ist bewusst das es nichts besonderes ist aber vielleicht erspart es einigen etwas Zeit.
Einzufügen wie in der Rar angegebene Ordner, einfach noch die uimapnameshower.py anpassen. Bevor ihr etwas an euren Clienten ändert
solltet ihr aber eine Sicherheitskopie von locale_de.eix/epk und root.eix/epk machen.
In der Rar enthaltene Mapschilder von:
Affendungeon Leicht, Mittel, Schwer
Berg der Finsternis
Blaues, Gelbes und Rotes Reich Map1 und Map2
Burgschlacht
Dämonenturm und Stöcke
Devils Catacomb
Donnerberge
Drachenraum
Duellmap
Eisland und Eisland2
Farmmap
Feuerland und Feuerland2
Gautamakliff
Geisterwald
Gildenzone
Grafschaft
Grotte der Verbannung 1 und 2
Hwang Tempel
Kap des Drachenfeuers
Land der Riesen
Nephritbucht
Orktal
Reichschlacht
Roter Wald
Schlangenfeld
Spider Dungeon 1 und 2 & Bruthöhle
Wüste von Ascaban
Yongbi Wüste
Templates
Berg der Finsternis
Blaues, Gelbes und Rotes Reich Map1 und Map2
Burgschlacht
Dämonenturm und Stöcke
Devils Catacomb
Donnerberge
Drachenraum
Duellmap
Eisland und Eisland2
Farmmap
Feuerland und Feuerland2
Gautamakliff
Geisterwald
Gildenzone
Grafschaft
Grotte der Verbannung 1 und 2
Hwang Tempel
Kap des Drachenfeuers
Land der Riesen
Nephritbucht
Orktal
Reichschlacht
Roter Wald
Schlangenfeld
Spider Dungeon 1 und 2 & Bruthöhle
Wüste von Ascaban
Yongbi Wüste
Templates
ein paar Bilder:
Auszug der uimapnameshower.py: (Achtung: dient nur zur Vorlage da diese an meine Bedürfnisse angepasst ist!)
Code:
import app import ui import uiScriptLocale import locale LOCALE_PATH = uiScriptLocale.MAPNAME_PATH class MapNameShower(ui.ExpandedImageBox): MAP_NAME_IMAGE = {} STATE_HIDE = 0 STATE_FADE_IN = 1 STATE_SHOW = 2 STATE_FADE_OUT = 3 def __init__(self): if locale.IsARABIC(): self.MAP_NAME_IMAGE = { "metin2_map_a1" : LOCALE_PATH+"rotesreichmap1.tga", "map_a2" : LOCALE_PATH+"orktal.tga", "season2/metin2_map_a2_1": LOCALE_PATH+"a2_2.tga", "metin2_map_a3" : LOCALE_PATH+"rotesreichmap2.tga", "metin2_map_b1" : LOCALE_PATH+"gelbesreichmap1.tga", "metin2_map_b3" : LOCALE_PATH+"gelbesreichmap2.tga", "metin2_map_c1" : LOCALE_PATH+"blauesreichmap1.tga", "metin2_map_c3" : LOCALE_PATH+"blauesreichmap2.tga", "metin2_map_deviltower1" : LOCALE_PATH+"daemonenturm.tga", "metin2_map_n_desert_01" : LOCALE_PATH+"yongbiwueste.tga", "season2/metin2_map_n_desert_02": LOCALE_PATH+"yongbiwueste.tga", "metin2_map_n_flame_01" : LOCALE_PATH+"feuerland1.tga", "season2/metin2_map_n_flame_02": LOCALE_PATH+"feuerland2.tga", "metin2_map_milgyo" : LOCALE_PATH+"hwangtempel.tga", "season2/metin2_map_milgyo_a": LOCALE_PATH+"hwangtempel.tga", "metin2_map_monkeydungeon" : LOCALE_PATH+"affendungeonleicht.tga", "metin2_map_monkeydungeon_02" : LOCALE_PATH+"affendungeonmittel.tga", "metin2_map_monkeydungeon_03" : LOCALE_PATH+"affendungeonschwer.tga", "metin2_map_guild_01" : LOCALE_PATH+"gildenzone.tga", "metin2_map_guild_02" : LOCALE_PATH+"gildenzone.tga", "metin2_map_guild_03" : LOCALE_PATH+"gildenzone.tga", "season2/metin2_map_skipia_dungeon_01": LOCALE_PATH+"grottederverbannung.tga", "season2/metin2_map_skipia_dungeon_02": LOCALE_PATH+"grottederverbannung.tga", "map_n_snowm_01" : LOCALE_PATH+"eisland1.tga", "season2/map_n_snowm_02": LOCALE_PATH+"eisland2.tga", "metin2_map_spiderdungeon" : LOCALE_PATH+"spiderdungeon1.tga", "metin2_map_trent" : LOCALE_PATH+"geisterwald.tga", "metin2_map_trent02" : LOCALE_PATH+"roterwald.tga", "season2/metin2_map_trent_a": LOCALE_PATH+"trent_a.tga", "season2/metin2_map_trent02_a": LOCALE_PATH+"trent02_a.tga", "metin2_map_dd" : LOCALE_PATH+"devilcatacomb.tga", "metin2_map_devilsCatacomb" : LOCALE_PATH+"devilscatacomb.tga", "metin2_map_dd" : LOCALE_PATH+"devil_basement.tga", "season1/metin2_map_WL_01" : LOCALE_PATH+"schlangenfeld.tga", "season1/metin2_map_nusluck01": LOCALE_PATH+"landderriesen.tga", "gm_guild_build": LOCALE_PATH+"farmmap.tga", "metin2_duester_map": LOCALE_PATH+"wuestevonascaban.tga", "Metin2_map_CapeDragonHead": LOCALE_PATH+"kapdesdrachenfeuers.tga", "metin2_map_Mt_Thunder": LOCALE_PATH+"donnerberge.tga", "metin2_map_dawnmistwood": LOCALE_PATH+"gautamakliff.tga", "metin2_map_BayBlackSand": LOCALE_PATH+"nephritbucht.tga", "metin2_map_spiderdungeon_02": LOCALE_PATH+"spiderdungeon2.tga", "metin2_guild_village_01": LOCALE_PATH+"grafschaft.tga", "metin2_guild_village_02": LOCALE_PATH+"grafschaft.tga", "metin2_guild_village_03": LOCALE_PATH+"grafschaft.tga", "metin2_map_duel": LOCALE_PATH+"duel.tga", "season2/metin2_map_empirewar01": LOCALE_PATH+"burgschlacht.tga", "season2/metin2_map_empirewar02": LOCALE_PATH+"burgschlacht.tga", "season2/metin2_map_empirewar03": LOCALE_PATH+"burgschlacht.tga", "metin2_map_t2": LOCALE_PATH+"bergderfinsternis.tga", "metin2_map_skipia_dungeon_02": LOCALE_PATH+"grottederverbannung2.tga", "metin2_map_skipia_dungeon_boss": LOCALE_PATH+"drachenraum.tga", "season1/metin2_map_sungzi_snow": LOCALE_PATH+"reichsschlacht.tga", "metin2_map_spiderdungeon_03": LOCALE_PATH+"bruthoehle.tga", } else: self.MAP_NAME_IMAGE = { "metin2_map_a1" : LOCALE_PATH+"rotesreichmap1.tga", "map_a2" : LOCALE_PATH+"orktal.tga", "season2/metin2_map_a2_1": LOCALE_PATH+"a2_2.tga", "metin2_map_a3" : LOCALE_PATH+"rotesreichmap2.tga", "metin2_map_b1" : LOCALE_PATH+"gelbesreichmap1.tga", "metin2_map_b3" : LOCALE_PATH+"gelbesreichmap2.tga", "metin2_map_c1" : LOCALE_PATH+"blauesreichmap1.tga", "metin2_map_c3" : LOCALE_PATH+"blauesreichmap2.tga", "metin2_map_deviltower1" : LOCALE_PATH+"daemonenturm.tga", "metin2_map_n_desert_01" : LOCALE_PATH+"yongbiwueste.tga", "season2/metin2_map_n_desert_02": LOCALE_PATH+"yongbiwueste.tga", "metin2_map_n_flame_01" : LOCALE_PATH+"feuerland1.tga", "season2/metin2_map_n_flame_02": LOCALE_PATH+"feuerland2.tga", "metin2_map_milgyo" : LOCALE_PATH+"hwangtempel.tga", "season2/metin2_map_milgyo_a": LOCALE_PATH+"hwangtempel.tga", "metin2_map_monkeydungeon" : LOCALE_PATH+"affendungeonleicht.tga", "metin2_map_monkeydungeon_02" : LOCALE_PATH+"affendungeonmittel.tga", "metin2_map_monkeydungeon_03" : LOCALE_PATH+"affendungeonschwer.tga", "metin2_map_guild_01" : LOCALE_PATH+"gildenzone.tga", "metin2_map_guild_02" : LOCALE_PATH+"gildenzone.tga", "metin2_map_guild_03" : LOCALE_PATH+"gildenzone.tga", "season2/metin2_map_skipia_dungeon_01": LOCALE_PATH+"grottederverbannung.tga", "season2/metin2_map_skipia_dungeon_02": LOCALE_PATH+"grottederverbannung.tga", "map_n_snowm_01" : LOCALE_PATH+"eisland1.tga", "season2/map_n_snowm_02": LOCALE_PATH+"eisland2.tga", "metin2_map_spiderdungeon" : LOCALE_PATH+"spiderdungeon1.tga", "metin2_map_trent" : LOCALE_PATH+"geisterwald.tga", "metin2_map_trent02" : LOCALE_PATH+"roterwald.tga", "season2/metin2_map_trent_a": LOCALE_PATH+"trent_a.tga", "season2/metin2_map_trent02_a": LOCALE_PATH+"trent02_a.tga", "metin2_map_dd" : LOCALE_PATH+"devilcatacomb.tga", "metin2_map_devilsCatacomb" : LOCALE_PATH+"devilscatacomb.tga", "metin2_map_dd" : LOCALE_PATH+"devil_basement.tga", "season1/metin2_map_WL_01" : LOCALE_PATH+"schlangenfeld.tga", "season1/metin2_map_nusluck01": LOCALE_PATH+"landderriesen.tga", "gm_guild_build": LOCALE_PATH+"farmmap.tga", "metin2_duester_map": LOCALE_PATH+"wuestevonascaban.tga", "Metin2_map_CapeDragonHead": LOCALE_PATH+"kapdesdrachenfeuers.tga", "metin2_map_Mt_Thunder": LOCALE_PATH+"donnerberge.tga", "metin2_map_dawnmistwood": LOCALE_PATH+"gautamakliff.tga", "metin2_map_BayBlackSand": LOCALE_PATH+"nephritbucht.tga", "metin2_map_spiderdungeon_02": LOCALE_PATH+"spiderdungeon2.tga", "metin2_guild_village_01": LOCALE_PATH+"grafschaft.tga", "metin2_guild_village_02": LOCALE_PATH+"grafschaft.tga", "metin2_guild_village_03": LOCALE_PATH+"grafschaft.tga", "metin2_map_duel": LOCALE_PATH+"duel.tga", "season2/metin2_map_empirewar01": LOCALE_PATH+"burgschlacht.tga", "season2/metin2_map_empirewar02": LOCALE_PATH+"burgschlacht.tga", "season2/metin2_map_empirewar03": LOCALE_PATH+"burgschlacht.tga", "metin2_map_t2": LOCALE_PATH+"bergderfinsternis.tga", "metin2_map_skipia_dungeon_02": LOCALE_PATH+"grottederverbannung2.tga", "metin2_map_skipia_dungeon_boss": LOCALE_PATH+"drachenraum.tga", "season1/metin2_map_sungzi_snow": LOCALE_PATH+"reichsschlacht.tga", "metin2_map_spiderdungeon_03": LOCALE_PATH+"bruthoehle.tga", } ui.ExpandedImageBox.__init__(self, "TOP_MOST") self.AddFlag("not_pick") self.__Initialize() def __del__(self): ui.ExpandedImageBox.__del__(self) def __Initialize(self): self.floorImage = None self.objectiveImage = None self.fadeStartTime = 0 self.state = self.STATE_HIDE self.curAlpha = 0.0 self.SetAlpha(0.0) self.SetWindowHorizontalAlignCenter() self.SetPosition(0, 80) self.Hide() def __GetDevilTowerFloor(self, x, y): if x > 10000 and y > 58000 and x < 25000 and y < 72000: return 1 elif x > 10000 and y > 35000 and x < 25000 and y < 50000: return 2 elif x > 10000 and y > 10000 and x < 25000 and y < 25000: return 3 elif x > 35000 and y > 61000 and x < 43500 and y < 70500: return 4 elif x > 35000 and y > 38000 and x < 43500 and y < 48000: return 5 elif x > 14000 and y > 14000 and x < 43500 and y < 24500: return 6 elif x > 56000 and y > 60000 and x < 68000 and y < 73000: return 7 elif x > 56000 and y > 38000 and x < 68000 and y < 49000: return 8 elif x > 56000 and y > 13000 and x < 68000 and y < 23000: return 9 return 0 def __GetDevilBase(self, x, y): if x > 3000 and y > 4500 and x < 45000 and y < 45000: return 1 elif x > 54000 and y > 3900 and x < 100000 and y < 46200: return 2 elif x > 104800 and y > 3500 and x < 145500 and y < 45800: return 3 elif x > 3100 and y > 54100 and x < 56400 and y < 105800: return 4 elif x > 65000 and y > 54000 and x < 105000 and y < 95500: return 5 elif x > 117500 and y > 57600 and x < 142000 and y < 81000: return 6 elif x > 5000 and y > 104900 and x < 15000 and y < 122000: return 7 return 0 def ShowMapName(self, mapName, x, y): if not self.MAP_NAME_IMAGE.has_key(mapName): print " [ERROR] - There is no map name image", mapName return try: self.LoadImage(self.MAP_NAME_IMAGE[mapName]) except RuntimeError: return self.__Initialize() if mapName == "metin2_map_deviltower1": self.SetPosition(-60, 80) self.floorImage = ui.ExpandedImageBox() self.floorImage.AddFlag("not_pick") self.floorImage.SetWindowHorizontalAlignCenter() self.floorImage.SetPosition(240, 80) self.floorImage.SetAlpha(0.0) self.floorImage.Show() # ¸ÊÀ̸§ (ex: ¾Æ±Íµ¿±¼) À̹ÌÁö ·Îµù & Ç¥½Ã try: floor = self.__GetDevilTowerFloor(x, y) print x, y, floor self.floorImage.LoadImage(LOCALE_PATH+"devil1_%df.tga" % floor) except RuntimeError: self.SetPosition(0, 80) self.floorImage.Hide() self.floorImage = None if locale.IsYMIR() or locale.IsWE_KOREA(): self.objectiveImage = ui.ExpandedImageBox() self.objectiveImage.AddFlag("not_pick") self.objectiveImage.SetWindowHorizontalAlignCenter() self.objectiveImage.SetPosition(0, 200) self.objectiveImage.SetAlpha(0.0) self.objectiveImage.Show() # Ãþº° ¸ñÇ¥ À̹ÌÁö ·Îµù & Ç¥½Ã # ´øÀüÀº ÇöÀç ¸îÃþÀÎÁö ¾Ë¾Æ¿À´Â ºÎºÐ ¶§¹®¿¡ ÇϵåÄÚµùÀ» ÇÇÇϱⰡ Èûµé´Ù... try: floor = self.__GetDevilTowerFloor(x, y) print x, y, floor self.objectiveImage.LoadImage(LOCALE_PATH + mapName + "/obj_%02df.tga" % floor) except RuntimeError: self.SetPosition(0, 80) self.objectiveImage.Hide() self.objectiveImage = None if mapName == "metin2_map_devilsCatacomb": self.SetPosition(-60, 80) self.floorImage = ui.ExpandedImageBox() self.floorImage.AddFlag("not_pick") self.floorImage.SetWindowHorizontalAlignCenter() self.floorImage.SetPosition(240, 80) self.floorImage.SetAlpha(0.0) self.floorImage.Show() # ¸ÊÀ̸§ (ex: ¾Æ±Íµ¿±¼) À̹ÌÁö ·Îµù & Ç¥½Ã try: floor = self.__GetDevilBase(x, y) print x, y, floor self.floorImage.LoadImage(LOCALE_PATH+"devil1_%df.tga" % floor) except RuntimeError: self.SetPosition(0, 80) self.floorImage.Hide() self.floorImage = None if locale.IsYMIR() or locale.IsWE_KOREA(): self.objectiveImage = ui.ExpandedImageBox() self.objectiveImage.AddFlag("not_pick") self.objectiveImage.SetWindowHorizontalAlignCenter() self.objectiveImage.SetPosition(0, 200) self.objectiveImage.SetAlpha(0.0) self.objectiveImage.Show() # Ãþº° ¸ñÇ¥ À̹ÌÁö ·Îµù & Ç¥½Ã # ´øÀüÀº ÇöÀç ¸îÃþÀÎÁö ¾Ë¾Æ¿À´Â ºÎºÐ ¶§¹®¿¡ ÇϵåÄÚµùÀ» ÇÇÇϱⰡ Èûµé´Ù... try: floor = self.__GetDevilBase(x, y) print x, y, floor self.objectiveImage.LoadImage(LOCALE_PATH + mapName + "/obj_%02df.tga" % floor) except RuntimeError: self.SetPosition(0, 80) self.objectiveImage.Hide() self.objectiveImage = None self.state = self.STATE_FADE_IN self.fadeStartTime = app.GetTime() + 1.0 self.Show() def Update(self): self.SetAlpha(self.curAlpha) if self.floorImage: self.floorImage.SetAlpha(self.curAlpha) if self.objectiveImage: self.objectiveImage.SetAlpha(self.curAlpha) if self.STATE_FADE_IN == self.state: if app.GetTime() > self.fadeStartTime: self.curAlpha += 0.05 if self.curAlpha > 0.9: self.state = self.STATE_SHOW self.fadeStartTime = app.GetTime() + 5.0 elif self.STATE_SHOW == self.state: if app.GetTime() > self.fadeStartTime: self.state = self.STATE_FADE_OUT elif self.STATE_FADE_OUT == self.state: self.curAlpha -= 0.05 if self.curAlpha < 0.0001: self.Hide() if self.floorImage: self.floorImage.Hide() self.floorImage = None if self.objectiveImage: self.objectiveImage.Hide() self.objectiveImage = None return
Download:
Virustotal:
-------------------------------------------------------------------------
Neue Mapschilder:
In der Rar enthaltene Mapschilder wie Oben beschrieben.
Auch hier wieder Templates dabei für neue Maps.
Schriftart unten Angehängt: Zekton Dots
auch hier wieder paar Bilder:
Download:
Virustotal
Schriftart die ich benutzt habe Angehängt.
Virustotal von Blackwolf.rar
Virustotal von zektondo.rar