- Mesaj
- 181
- Çözümler
- 3
- Beğeni
- 147
- Puan
- 764
- Ticaret Puanı
- 0
Selamlar UI uzmanları,
Dünya patronu sistemi ekliyorum ancak hizalamada büyük sorunlar yaşıyorum. Tam olarak hakim olmadığım ve yapay zekanında geri kaldığı bir konu maalesef. Bu sebeple sizlerden biraz yardım isteyeceğim.
Görselde gördüğünüz gibi hizalamalar kaymış durumda bunu tam olarak nasıl düzeltmeliyim? Aşağıya dosyaları bırakıyorum eğer bu konuda bilgisi olan varsa yardımcı olabilirse sevinirim.
Dünya patronu sistemi ekliyorum ancak hizalamada büyük sorunlar yaşıyorum. Tam olarak hakim olmadığım ve yapay zekanında geri kaldığı bir konu maalesef. Bu sebeple sizlerden biraz yardım isteyeceğim.
Görselde gördüğünüz gibi hizalamalar kaymış durumda bunu tam olarak nasıl düzeltmeliyim? Aşağıya dosyaları bırakıyorum eğer bu konuda bilgisi olan varsa yardımcı olabilirse sevinirim.
uiworldbossranking.py:
import ui
import uiScriptLocale
import localeInfo
import chat
import app
import player # Dummy veri ve oyuncu bilgisi için
# Test için dummy sıralama verisi
DUMMY_RANKING_DATA = [
{"rank": 1, "name": "Kahraman1", "guild": "Cesurlar", "empire_id": 1, "damage": 2500000},
{"rank": 2, "name": "SavasciX", "guild": "Aslanlar", "empire_id": 2, "damage": 2100500},
{"rank": 3, "name": "BuyucuYY", "guild": "Bilgeler", "empire_id": 3, "damage": 1980300},
{"rank": 4, "name": "NinjaZ", "guild": "Golgeler", "empire_id": 1, "damage": 1750000},
{"rank": 5, "name": "SamanABC", "guild": "Sifacilar", "empire_id": 2, "damage": 1600250},
{"rank": 6, "name": "SuraDEF", "guild": "Karanlik", "empire_id": 3, "damage": 1400000},
{"rank": 7, "name": "LycanGHI", "guild": "Vahsiler", "empire_id": 1, "damage": 1200750},
]
# UI Script'teki empire flag resim yolları (localeInfo veya constInfo'dan gelmesi daha iyi olur)
EMPIRE_FLAG_PATH_MAP = {
0: "d:/ymir work/ui/public/battle/empire_empty.sub", # Tarafsız/Yok
1: "d:/ymir work/ui/public/battle/empire_shinsu.sub", # Kırmızı bayrak yolu
2: "d:/ymir work/ui/public/battle/empire_chunjo.sub", # Sarı bayrak yolu
3: "d:/ymir work/ui/public/battle/empire_jinno.sub" # Mavi bayrak yolu
}
ROOT_PATH_RANKING = "d:/ymir work/ui/minigame/world_boss/"
# uiscript/worldbossrankingwindow.py içindeki güncel X ve W değerlerine göre:
# _RANK_ITEM_X_RANK = 5
# _RANK_ITEM_W_RANK = 30
# _RANK_ITEM_X_NAME = 40
# _RANK_ITEM_W_NAME = 100
# _RANK_ITEM_X_GUILD = 145
# _RANK_ITEM_W_GUILD = 80
# _RANK_ITEM_X_EMPIRE = 230
# _RANK_ITEM_W_EMPIRE = 26
# _RANK_ITEM_X_DAMAGE = 261
# _RANK_ITEM_W_DAMAGE = 107 (368 - 261)
# uiscript/worldbossrankingwindow.py dosyasındaki BAŞLIKLARIN pozisyon ve genişliklerine göre:
# (Referans: Eklentiler/GF-25.0.5.0/UIScript/WorldBossRankingWindow.py)
# Rütbe Başlığı: X=18, W=21 (ranking_menu_img'e göre)
# İsim Başlığı: X=101, W=22
# Lonca Başlığı: X=210, W=22
# Krallık Başlığı: X=281, W=23
# Tier/Hasar Başlığı: X=331, W=23
# RankingListItem içindeki elemanların X pozisyonları, başlıkların X'leri ile aynı olmalı
# (çünkü her ikisi de kendi parent'larına göre X=0'dan başlar gibi düşünülebilir,
# ya da aradaki farkı (15-13=2) hesaba katmalıyız. Şimdilik doğrudan eşitleyelim, gerekirse ayarlarız.)
# ListBoxEx item'ları (RankingListItem) X=0'dan başlar kendi içinde.
# Başlıklar ise ranking_menu_img (X=13 board'a göre) içinde pozisyonlanır.
# rank_item_list ise X=15 board'a göre pozisyonlanır.
# Bu nedenle, RankingListItem içindeki elemanların X'leri, başlıkların X'lerinden (15-13)=2px daha az olmalı gibi.
# Ya da daha basiti, RankingListItem içindeki elemanların X'lerini doğrudan BAŞLIKLARIN X'lerine göre değil,
# KENDİ SÜTUNLARINA göre (0'dan başlayarak) ve GENİŞLİKLERİNİ de BAŞLIKLARIN GENİŞLİKLERİNE göre ayarlayalım.
# YENİ YAKLAŞIM: UI Script'teki BAŞLIK X ve W değerlerini BURADA da kullanalım.
# RankingListItem'ın toplam genişliği (width parametresi) LIST_AREA_W (368) olacak.
# Bu 368px içinde sütunları yerleştireceğiz.
# Global sabit tanımlamalarını kaldırıyoruz, çünkü RankingListItem içindeki hesaplamalar
# __init__ metoduna gelen 'width' parametresine göre dinamik yapılıyor.
# _UI_HEADER_RANK_X = 18 ... vb. tanımlar silindi.
# _H_RANK_W = 30 ... vb. tanımlar silindi.
# uiscript/worldbossrankingwindow.py içindeki my_ranking_item elemanlarının
# X ve W değerlerini referans alarak yeni bir dağılım yapalım.
# my_ranking_item toplam genişliği 368 (LIST_AREA_W).
# Ref: my_rank_rank_window: x=6, W=42
# Ref: my_rank_name_window: x=55, W=113
# Ref: my_rank_guild_name_window: x=175, W=88
# Ref: my_rank_empire_img: x=279 (W ~26)
# Ref: my_rank_tier_window (Hasar): x=318, W=39 (Bu Hasar için çok dar, genişleteceğiz)
class RankingListItem(ui.ListBoxEx.Item):
def __init__(self, parent, width): # width = 368 veya 353 (UI script'e göre)
ui.ListBoxEx.Item.__init__(self)
self.width = width
self.height = 21
self.background = ui.ExpandedImageBox()
self.background.SetParent(self)
try:
self.background.LoadImage(ROOT_PATH_RANKING + "ranking_my_rank_item.sub")
except RuntimeError:
print "ERROR: RankingListItem - Arka plan resmi yüklenemedi: " + ROOT_PATH_RANKING + "ranking_my_rank_item.sub"
self.background.SetSize(width, self.height)
self.background.Show()
# UI Script'teki my_ranking_item pozisyonlarını ve kullanıcı isteklerini referans alarak hizalama:
# Rütbe (UI Script my_rank_rank_window: x=6, W=42) - Bu iyiydi.
rank_x = 6
rank_w = 42
self.rankTextWindow = self.__CreateWindow(rank_x, 4, rank_w, 11, self.background)
self.rankText = self.__CreateTextLine(rank_w - 2, 0, "", self.rankTextWindow)
# İsim (UI Script my_rank_name_window: x=55, W=113) - Biraz sola kaydırılacak.
# Başlangıç X'ini rütbeden sonraya ayarlayalım, genişliği koruyalım.
name_x = rank_x + rank_w + 5 # 6 + 42 + 5 = 53 (eskiden 55 idi, 2px sola)
name_w = 113
self.nameTextWindow = self.__CreateWindow(name_x, 4, name_w, 11, self.background)
self.nameText = self.__CreateTextLine(2, 0, "", self.nameTextWindow)
# Lonca (UI Script my_rank_guild_name_window: x=175, W=88) - Biraz sola kaydırılacak.
# Başlangıç X'ini isimden sonraya ayarlayalım, genişliği koruyalım.
guild_x = name_x + name_w + 5 # 53 + 113 + 5 = 171 (eskiden 175 idi, 4px sola)
guild_w = 88
self.guildTextWindow = self.__CreateWindow(guild_x, 4, guild_w, 11, self.background)
self.guildText = self.__CreateTextLine(2, 0, "", self.guildTextWindow)
# Krallık Bayrağı (UI Script my_rank_empire_img: x=279)
# Başlangıç X'ini loncadan sonraya ayarlayalım.
empire_x = guild_x + guild_w + 5 # 171 + 88 + 5 = 264 (eskiden 279 idi, başlıkla hizalamak için daha sola)
empire_w = 26 # Bayrağın kendi genişliği
self.empireImage = self.__CreateEmpireFlag(empire_x, 3, self.background)
# Hasar (UI Script my_rank_tier_window: x=318, W=39 -> Bu W çok dar)
# Hasar başlığı UI Script'te x=331, W=23 idi. Bizim Hasar başlığımız (uiscript/worldbossrankingwindow.py) DAMAGE_HEADER_X, DAMAGE_HEADER_W kullanıyor.
# _RANK_ITEM_X_DAMAGE = 261, _RANK_ITEM_W_DAMAGE = 107 idi bir önceki Python adımında.
# Bu X pozisyonunu Krallık'tan sonraya ayarlayalım ve kalan genişliği verelim.
damage_x = empire_x + empire_w + 5 # 264 + 26 + 5 = 295
damage_w = width - damage_x - 5 # Sağdan 5px boşluk bırakarak kalan alan.
if damage_w < 60: damage_w = 60 # Hasar için minimum genişlik
self.damageTextWindow = self.__CreateWindow(damage_x, 4, damage_w, 11, self.background)
self.damageText = self.__CreateTextLine(damage_w - 2, 0, "", self.damageTextWindow) # Sağa yaslı
def __CreateWindow(self, x, y, width, height, parent):
window = ui.Window()
window.SetParent(parent)
window.SetPosition(x,y)
window.SetSize(width, height)
# window.AddFlag("not_pick") # Gerekirse tıklamayı engelle
window.Show()
return window
def __CreateTextLine(self, x, y, text, parent, options=None):
textLine = ui.TextLine()
textLine.SetParent(parent)
textLine.SetPosition(x, y)
if options:
if "horizontal_align" in options: # textLine'ın KENDİ pozisyonu için (parent'a göre)
if options["horizontal_align"] == "center":
textLine.SetHorizontalAlignCenter()
# elif options["horizontal_align"] == "right":
# textLine.SetHorizontalAlignRight() # Bu metod TextLine'da olmayabilir
# else: textLine.SetHorizontalAlignLeft() varsayılan olabilir
# Metnin TextLine IICINDEKI hizalamasi icin SetTextHorizontalAlign... metodlari yok.
# Bu genellikle parent window'un genişliği ve TextLine'in X pozisyonu ile sağlanır.
# Veya TextLine'in kendi SetAlign metodu varsa (genellikle C++ tarafında olur)
# if "text_horizontal_align" in options:
# pass # Şimdilik bu kısmı boş bırakalım veya C++ karşılığına bakalım
textLine.SetText(text) # Başlangıç metni (SetData'da güncellenecek)
textLine.Show()
return textLine
def __CreateEmpireFlag(self, x, y, parent):
img = ui.ImageBox()
img.SetParent(parent)
img.SetPosition(x,y)
img.Show()
return img
def SetData(self, data):
self.rankText.SetText(str(data.get("rank", "-")))
self.nameText.SetText(data.get("name", "-"))
self.guildText.SetText(data.get("guild", "-"))
# Tier yerine damage göster
damage_value = data.get("damage", 0)
try:
# Sayıyı formatlayarak (örneğin binlik ayraçla) göstermek daha iyi olabilir
self.damageText.SetText(localeInfo.NumberToMoneyString(damage_value) if hasattr(localeInfo, "NumberToMoneyString") else "{:,}".format(damage_value).replace(",", "."))
except ValueError: # Eğer formatlama başarısız olursa (örn: None gelirse)
self.damageText.SetText(str(damage_value))
empire_id = data.get("empire_id", 0)
flag_path = EMPIRE_FLAG_PATH_MAP.get(empire_id, EMPIRE_FLAG_PATH_MAP[0])
self.empireImage.LoadImage(flag_path)
class WorldBossRankingWindow(ui.ScriptWindow):
MAX_RANK_ITEMS_PER_PAGE = 8 # Sayfa başına gösterilecek eleman sayısını deneyelim
def __init__(self):
ui.ScriptWindow.__init__(self)
self.SetWindowName("WorldBossRankingWindow")
self.isLoaded = 0
self.parentInterface = None
self.board = None
self.rank_item_list = None # ListBoxEx elemanı
self.page_buttons = {}
self.nav_buttons = {}
self.my_rank_widgets = {}
self.all_ranking_data = []
self.current_page_index = 0
self.total_pages = 0
self.empire_flag_map = EMPIRE_FLAG_PATH_MAP # __init__ içine taşıdık
print "DEBUG: WorldBossRankingWindow.__init__"
def __del__(self):
ui.ScriptWindow.__del__(self)
print "DEBUG: WorldBossRankingWindow.__del__"
def BindInterface(self, interface):
self.parentInterface = interface
print "DEBUG: WorldBossRankingWindow.BindInterface"
def LoadWindow(self):
if self.isLoaded == 1:
return
self.isLoaded = 0
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "uiscript/worldbossrankingwindow.py")
except:
import exception
exception.Abort("WorldBossRankingWindow.LoadWindow.LoadScript - uiscript/worldbossrankingwindow.py")
return
try:
self.board = self.GetChild("board")
self.rank_item_list = self.GetChild("rank_item_list") # Bu uiscript'teki ListBoxEx'in adı olmalı
if self.board:
self.board.SetCloseEvent(ui.__mem_func__(self.Close))
# Sayfa butonlarını al ve olayları bağla
page_button_names = ["page1_button", "page2_button", "page3_button", "page4_button", "page5_button"]
for i, btn_name in enumerate(page_button_names):
button = self.GetChild(btn_name)
if button:
self.page_buttons[i+1] = button
button.SetEvent(ui.__mem_func__(self.__OnClickPageButton), i) # Sayfa index'i 0'dan başlar
# Navigasyon butonlarını al ve olayları bağla
nav_button_map = {
"first_prev": (self.GetChild("first_prev_button"), self.__OnClickNavButton, "first"),
"prev": (self.GetChild("prev_button"), self.__OnClickNavButton, "prev"),
"next": (self.GetChild("next_button"), self.__OnClickNavButton, "next"),
"last_next": (self.GetChild("last_next_button"), self.__OnClickNavButton, "last"),
}
for key, (button, handler, arg) in nav_button_map.items():
if button:
self.nav_buttons[key] = button
button.SetEvent(ui.__mem_func__(handler), arg)
# Kişisel sıralama elemanlarını al (uiscript'teki isimlere göre)
self.my_rank_widgets["rank"] = getattr(self, "my_rank_rank_text", None)
self.my_rank_widgets["name"] = getattr(self, "my_rank_name_text", None)
self.my_rank_widgets["guild"] = getattr(self, "my_rank_guild_name_text", None)
self.my_rank_widgets["empire_img"] = getattr(self, "my_rank_empire_img", None)
# self.my_rank_widgets["tier"] = getattr(self, "my_rank_tier_text", None) # TIER KALKTI
# my_rank_damage_text adında bir eleman UI script'te olmalı
self.my_rank_widgets["damage"] = getattr(self, "my_rank_damage_text", None)
self.isLoaded = 1
print "DEBUG: WorldBossRankingWindow.LoadWindow - Loaded"
except Exception as e:
print "ERROR: WorldBossRankingWindow.LoadWindow.GetChild or other: %s" % str(e)
import dbg
dbg.TraceError("WorldBossRankingWindow.LoadWindow - Exception: %s" % str(e))
self.isLoaded = 0 # Hata durumunda yüklenmedi olarak işaretle
# return # return etmeyelim ki Open'da hata mesajı gösterilebilsin
def Destroy(self):
self.ClearDictionary() # ScriptWindow'dan gelen metod
self.parentInterface = None
self.board = None
self.rank_item_list = None
self.page_buttons = {}
self.nav_buttons = {}
self.my_rank_widgets = {}
self.all_ranking_data = []
self.isLoaded = 0
print "DEBUG: WorldBossRankingWindow.Destroy"
def Open(self):
# Dummy kişisel veriyi burada oluşturalım
my_player_name = "TestOyuncu" # Sabit bir isim kullanalım
my_empire_id = 1 # Sabit bir krallık ID'si kullanalım (örn: 1 for Shinsoo)
# if player: # player modülü import edilmişse # ŞİMDİLİK BU KONTROLÜ DEVRE DIŞI BIRAKALIM
# my_player_name = player.GetName() # HATA VERİYORDU
# my_empire_id = player.GetEmpireID() # HATA VERİYORDU
self.dummy_my_rank_data = {
"rank": 15,
"name": my_player_name,
"guild": "BenimLoncam",
"empire_id": my_empire_id,
# "tier": "I" # TIER KALKTI
"damage": 750000 # Örnek hasar
}
if not self.isLoaded:
self.LoadWindow()
if not self.isLoaded: # LoadWindow'da bir hata oluşmuşsa
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.WORLD_BOSS_RANKING_WINDOW_NOT_FOUND if hasattr(localeInfo, "WORLD_BOSS_RANKING_WINDOW_NOT_FOUND") else "Siralama penceresi arayuzu yuklenemedi.")
return
self.SetTop()
self.Show()
self.UpdateRanking(DUMMY_RANKING_DATA, self.dummy_my_rank_data) # Dummy veriyle güncelle
print "DEBUG: WorldBossRankingWindow.Open"
def Close(self):
self.Hide()
print "DEBUG: WorldBossRankingWindow.Close"
def OnPressEscapeKey(self):
self.Close()
return True
def __CalculateTotalPages(self):
if not self.all_ranking_data:
self.total_pages = 0
return
self.total_pages = (len(self.all_ranking_data) + self.MAX_RANK_ITEMS_PER_PAGE - 1) // self.MAX_RANK_ITEMS_PER_PAGE
def __DisplayPage(self, page_idx):
if not self.rank_item_list:
return
self.rank_item_list.RemoveAllItems()
self.current_page_index = page_idx
start_index = page_idx * self.MAX_RANK_ITEMS_PER_PAGE
end_index = start_index + self.MAX_RANK_ITEMS_PER_PAGE
page_data = self.all_ranking_data[start_index:end_index]
item_width = self.rank_item_list.GetWidth()
for entry in page_data:
item = RankingListItem(self.rank_item_list, item_width)
item.SetData(entry)
self.rank_item_list.AppendItem(item)
self.__UpdatePageButtonsState()
def __UpdatePageButtonsState(self):
# Sayfa butonlarının görünürlüğünü ve aktifliğini ayarla
for i, button in self.page_buttons.items():
if i <= self.total_pages:
button.Show()
if (i-1) == self.current_page_index:
button.Down() # Aktif sayfayı göster
else:
button.SetUp()
else:
button.Hide()
# Navigasyon butonlarının durumunu ayarla
if self.nav_buttons.get("first_prev"):
self.nav_buttons["first_prev"].Enable() if self.current_page_index > 0 else self.nav_buttons["first_prev"].Disable()
if self.nav_buttons.get("prev"):
if self.current_page_index > 0:
self.nav_buttons["prev"].Enable()
else:
self.nav_buttons["prev"].Disable()
if self.nav_buttons.get("next"):
if self.current_page_index < self.total_pages - 1:
self.nav_buttons["next"].Enable()
else:
self.nav_buttons["next"].Disable()
if self.nav_buttons.get("last_next"):
if self.current_page_index < self.total_pages - 1:
self.nav_buttons["last_next"].Enable()
else:
self.nav_buttons["last_next"].Disable()
def __OnClickPageButton(self, page_num_idx): # page_num_idx 0'dan başlar
print "DEBUG: Clicked page button index:", page_num_idx
if page_num_idx < self.total_pages:
self.__DisplayPage(page_num_idx)
def __OnClickNavButton(self, nav_key):
print "DEBUG: Clicked nav button:", nav_key
new_page_index = self.current_page_index
if nav_key == "first":
new_page_index = 0
elif nav_key == "prev":
if self.current_page_index > 0:
new_page_index = self.current_page_index - 1
elif nav_key == "next":
if self.current_page_index < self.total_pages - 1:
new_page_index = self.current_page_index + 1
elif nav_key == "last":
if self.total_pages > 0:
new_page_index = self.total_pages - 1
else:
new_page_index = 0 # Veya uygun bir varsayılan değer
if new_page_index != self.current_page_index:
self.__DisplayPage(new_page_index)
elif nav_key == "last" and new_page_index == self.current_page_index:
if self.total_pages > 0:
self.__DisplayPage(self.total_pages - 1)
def UpdateRanking(self, ranking_data, my_rank_data):
if not self.isLoaded:
print "WARN: WorldBossRankingWindow.UpdateRanking - Not loaded, trying to load..."
self.LoadWindow()
if not self.isLoaded:
print "ERROR: WorldBossRankingWindow.UpdateRanking - Still not loaded after trying."
return
self.all_ranking_data = ranking_data
self.__CalculateTotalPages()
self.__DisplayPage(0) # İlk sayfayı göster
self.__UpdateMyRankInfo(my_rank_data)
print "DEBUG: WorldBossRankingWindow.UpdateRanking with data"
def __UpdateMyRankInfo(self, my_rank_data):
if not self.isLoaded:
return
# Widget'ların varlığını ve verinin varlığını kontrol et
rank_widget = self.my_rank_widgets.get("rank")
if rank_widget:
rank_widget.SetText(str(my_rank_data.get("rank", "-")))
name_widget = self.my_rank_widgets.get("name")
if name_widget:
name_widget.SetText(my_rank_data.get("name", "-"))
guild_widget = self.my_rank_widgets.get("guild")
if guild_widget:
guild_widget.SetText(my_rank_data.get("guild", "-"))
# Tier yerine damage göster
damage_widget = self.my_rank_widgets.get("damage")
if damage_widget:
damage_value = my_rank_data.get("damage", 0)
try:
damage_widget.SetText(localeInfo.NumberToMoneyString(damage_value) if hasattr(localeInfo, "NumberToMoneyString") else "{:,}".format(damage_value).replace(",", "."))
except ValueError:
damage_widget.SetText(str(damage_value))
empire_img_widget = self.my_rank_widgets.get("empire_img")
if empire_img_widget:
empire_id = my_rank_data.get("empire_id", 0)
flag_path = self.empire_flag_map.get(empire_id, self.empire_flag_map[0])
empire_img_widget.LoadImage(flag_path)
print "DEBUG: __UpdateMyRankInfo with data:", my_rank_data
uiscript/worldbossranking.py:
import uiScriptLocale
PUBLIC_PATH = "d:/ymir work/ui/public/"
PATTERN_PATH = "d:/ymir work/ui/pattern/"
ROOT_PATH = "d:/ymir work/ui/minigame/world_boss/"
PAGE_BUTTON_PATH = "d:/ymir work/ui/privatesearch/"
WINDOW_WIDTH = 400
WINDOW_HEIGHT = 374
MAIN_WINDOW_WIDTH = 378
MAIN_WINDOW_HEIGHT = 330
MAIN_WINDOW_PATTERN_X_COUNT = (MAIN_WINDOW_WIDTH - 32) / 16
MAIN_WINDOW_PATTERN_Y_COUNT = (MAIN_WINDOW_HEIGHT - 32) / 16
window = {
"name" : "WorldBossRankingWindow",
"style" : ("movable", "float", ),
"x" : SCREEN_WIDTH / 2 - WINDOW_WIDTH / 2,
"y" : SCREEN_HEIGHT / 2 - WINDOW_HEIGHT / 2,
"width" : WINDOW_WIDTH,
"height" : WINDOW_HEIGHT,
"children" :
[
{
"name" : "board",
"type" : "board_with_titlebar",
"x" : 0,
"y" : 0,
"width" : WINDOW_WIDTH,
"height" : WINDOW_HEIGHT,
"title" : uiScriptLocale.WORLD_BOSS_RANK,
"children" :
[
{
"name" : "main_window",
"type" : "window",
"style" : ("ltr", "attach", ),
"x" : 10,
"y" : 32,
"width" : MAIN_WINDOW_WIDTH,
"height" : MAIN_WINDOW_HEIGHT,
"children" :
[
## LeftTop 1
{
"name" : "DescWindowLeftTop",
"type" : "image",
"style" : ("ltr",),
"x" : 0,
"y" : 0,
"image" : PATTERN_PATH + "border_A_left_top.tga",
},
## RightTop 2
{
"name" : "DescWindowRightTop",
"type" : "image",
"style" : ("ltr",),
"x" : MAIN_WINDOW_WIDTH - 16,
"y" : 0,
"image" : PATTERN_PATH + "border_A_right_top.tga",
},
## LeftBottom 3
{
"name" : "DescWindowLeftBottom",
"type" : "image",
"style" : ("ltr",),
"x" : 0,
"y" : MAIN_WINDOW_HEIGHT - 16,
"image" : PATTERN_PATH + "border_A_left_bottom.tga",
},
## RightBottom 4
{
"name" : "ListWindowRightBottom",
"type" : "image",
"style" : ("ltr",),
"x" : MAIN_WINDOW_WIDTH - 16,
"y" : MAIN_WINDOW_HEIGHT - 16,
"image" : PATTERN_PATH + "border_A_right_bottom.tga",
},
## topcenterImg 5
{
"name" : "DescWindowTopCenterImg",
"type" : "expanded_image",
"style" : ("ltr",),
"x" : 16,
"y" : 0,
"image" : PATTERN_PATH + "border_A_top.tga",
"rect" : (0.0, 0.0, MAIN_WINDOW_PATTERN_X_COUNT, 0),
},
## leftcenterImg 6
{
"name" : "DescWindowLeftCenterImg",
"type" : "expanded_image",
"style" : ("ltr",),
"x" : 0,
"y" : 16,
"image" : PATTERN_PATH + "border_A_left.tga",
"rect" : (0.0, 0.0, 0, MAIN_WINDOW_PATTERN_Y_COUNT),
},
## rightcenterImg 7
{
"name" : "DescWindowRightCenterImg",
"type" : "expanded_image",
"style" : ("ltr",),
"x" : MAIN_WINDOW_WIDTH - 16,
"y" : 16,
"image" : PATTERN_PATH + "border_A_right.tga",
"rect" : (0.0, 0.0, 0, MAIN_WINDOW_PATTERN_Y_COUNT),
},
## bottomcenterImg 8
{
"name" : "DescWindowBottomCenterImg",
"type" : "expanded_image",
"style" : ("ltr",),
"x" : 16,
"y" : MAIN_WINDOW_HEIGHT - 16,
"image" : PATTERN_PATH + "border_A_bottom.tga",
"rect" : (0.0, 0.0, MAIN_WINDOW_PATTERN_X_COUNT, 0),
},
## centerImg
{
"name" : "DescWindowCenterImg",
"type" : "expanded_image",
"style" : ("ltr",),
"x" : 16,
"y" : 16,
"image" : PATTERN_PATH + "border_A_center.tga",
"rect" : (0.0, 0.0, MAIN_WINDOW_PATTERN_X_COUNT, MAIN_WINDOW_PATTERN_Y_COUNT),
},
],
},
## 컬럼 이름
{
"name" : "ranking_menu_img",
"type" : "expanded_image",
"x" : 13,
"y" : 35,
"width" : 372,
"height" : 21,
"image" : ROOT_PATH + "ranking_menu.sub",
"children" :
(
## Text
{
"type" : "window", "x" : 18, "y" : 4, "width" : 21, "height" : 11,
"children":
[
{ "name" : "rank_column_rank", "type" : "text", "style" : ("ltr",), "x" : 0, "y" : 0, "text" : uiScriptLocale.WORLD_BOSS_RANK_RANK, "r":0.749, "g":0.718, "b":0.675, "a":1.0, "text_horizontal_align" : "center"},
],
},
{
"type" : "window", "x" : 101, "y" : 4, "width" : 22, "height" : 11,
"children":
[
{ "name" : "rank_column_name", "type" : "text", "style" : ("ltr",), "x" : 0, "y" : 0, "text" : uiScriptLocale.WORLD_BOSS_RANK_NAME, "r":0.749, "g":0.718, "b":0.675, "a":1.0, "text_horizontal_align" : "center"},
],
},
{
"type" : "window", "x" : 210, "y" : 4, "width" : 22, "height" : 11,
"children":
[
{ "name" : "rank_column_guild_name", "type" : "text", "style" : ("ltr",), "x" : 0, "y" : 0, "text" : uiScriptLocale.WORLD_BOSS_RANK_GUILD_NAME, "r":0.749, "g":0.718, "b":0.675, "a":1.0, "text_horizontal_align" : "center"},
],
},
{
"type" : "window", "x" : 281, "y" : 4, "width" : 23, "height" : 11,
"children":
[
{ "name" : "rank_column_empire", "type" : "text", "style" : ("ltr",), "x" : 0, "y" : 0, "text" : uiScriptLocale.WORLD_BOSS_RANK_EMPIRE, "r":0.749, "g":0.718, "b":0.675, "a":1.0, "text_horizontal_align" : "center"},
],
},
{
"type" : "window", "x" : 331, "y" : 4, "width" : 23, "height" : 11,
"children":
[
{ "name" : "rank_column_tier", "type" : "text", "style" : ("ltr",), "x" : 0, "y" : 0, "text" : uiScriptLocale.WORLD_BOSS_RANK_TIER, "r":0.749, "g":0.718, "b":0.675, "a":1.0, "text_horizontal_align" : "center"},
],
}
),
},
{
"name" : "rank_item_list",
"type" : "listboxex",
"x" : 15,
"y" : 58,
"width" : 353,
"height" : 265,
},
# 페이지 버튼
{
"name" : "first_prev_button", "type" : "button",
"x" : 71 - 10, "y" : 302,
"default_image" : PAGE_BUTTON_PATH + "private_first_prev_btn_01.sub",
"over_image" : PAGE_BUTTON_PATH + "private_first_prev_btn_02.sub",
"down_image" : PAGE_BUTTON_PATH + "private_first_prev_btn_01.sub",
},
{
"name" : "prev_button", "type" : "button",
"x" : 101 - 10, "y" : 302,
"default_image" : PAGE_BUTTON_PATH + "private_prev_btn_01.sub",
"over_image" : PAGE_BUTTON_PATH + "private_prev_btn_02.sub",
"down_image" : PAGE_BUTTON_PATH + "private_prev_btn_01.sub",
},
{
"name" : "page1_button", "type" : "button",
"x" : 126 - 10, "y" : 300,
"text" : "1",
"default_image" : PAGE_BUTTON_PATH + "private_pagenumber_00.sub",
"over_image" : PAGE_BUTTON_PATH + "private_pagenumber_01.sub",
"down_image" : PAGE_BUTTON_PATH + "private_pagenumber_02.sub",
},
{
"name" : "page2_button", "type" : "button",
"x" : 161 - 10, "y" : 300,
"text" : "2",
"default_image" : PAGE_BUTTON_PATH + "private_pagenumber_00.sub",
"over_image" : PAGE_BUTTON_PATH + "private_pagenumber_01.sub",
"down_image" : PAGE_BUTTON_PATH + "private_pagenumber_02.sub",
},
{
"name" : "page3_button", "type" : "button",
"x" : 196 - 10, "y" : 300,
"text" : "3",
"default_image" : PAGE_BUTTON_PATH + "private_pagenumber_00.sub",
"over_image" : PAGE_BUTTON_PATH + "private_pagenumber_01.sub",
"down_image" : PAGE_BUTTON_PATH + "private_pagenumber_02.sub",
},
{
"name" : "page4_button", "type" : "button",
"x" : 231 - 10, "y" : 300,
"text" : "4",
"default_image" : PAGE_BUTTON_PATH + "private_pagenumber_00.sub",
"over_image" : PAGE_BUTTON_PATH + "private_pagenumber_01.sub",
"down_image" : PAGE_BUTTON_PATH + "private_pagenumber_02.sub",
},
{
"name" : "page5_button", "type" : "button",
"x" : 266 - 10, "y" : 300,
"text" : "5",
"default_image" : PAGE_BUTTON_PATH + "private_pagenumber_00.sub",
"over_image" : PAGE_BUTTON_PATH + "private_pagenumber_01.sub",
"down_image" : PAGE_BUTTON_PATH + "private_pagenumber_02.sub",
},
{
"name" : "next_button", "type" : "button",
"x" : 314 - 10, "y" : 302,
"default_image" : PAGE_BUTTON_PATH + "private_next_btn_01.sub",
"over_image" : PAGE_BUTTON_PATH + "private_next_btn_02.sub",
"down_image" : PAGE_BUTTON_PATH + "private_next_btn_01.sub",
},
{
"name" : "last_next_button", "type" : "button",
"x" : 344 - 10, "y" : 302,
"default_image" : PAGE_BUTTON_PATH + "private_last_next_btn_01.sub",
"over_image" : PAGE_BUTTON_PATH + "private_last_next_btn_02.sub",
"down_image" : PAGE_BUTTON_PATH + "private_last_next_btn_01.sub",
},
###...
{
"name" : "ranking_dotdotdot_img",
"type" : "expanded_image",
"x" : 198,
"y" : 324,
"image" : ROOT_PATH + "ranking_dotdotdot.sub",
},
### 나의랭킹
{
"name" : "my_ranking_item",
"type" : "expanded_image",
"x" : 15,
"y" : 336,
"width" : 368,
"height" : 21,
"image" : ROOT_PATH + "ranking_my_rank_item.sub",
"children" :
(
## Text
{
"name" : "my_rank_rank_window", "type" : "window", "x" : 6, "y" : 4, "width" : 42, "height" : 11,
"children" :
[
{ "name" : "my_rank_rank_text", "type" : "text", "style" : ("ltr",), "x" : 2, "y" : 0, "text" : "", "r":0.812, "g":0.749, "b":0.651, "a":1.0, "horizontal_align" : "right", "text_horizontal_align" : "right"},
],
},
{
"name" : "my_rank_name_window", "type" : "window", "x" : 55, "y" : 4, "width" : 113, "height" : 11,
"children" :
[
{ "name" : "my_rank_name_text", "type" : "text", "style" : ("ltr",), "x" : 2, "y" : 0, "text" : "", "r":0.812, "g":0.749, "b":0.651, "a":1.0, "horizontal_align" : "right", "text_horizontal_align" : "right"},
],
},
{
"name" : "my_rank_guild_name_window", "type" : "window", "x" : 175, "y" : 4, "width" : 88, "height" : 11,
"children" :
[
{ "name" : "my_rank_guild_name_text", "type" : "text", "style" : ("ltr",), "x" : 2, "y" : 0, "text" : "", "r":0.812, "g":0.749, "b":0.651, "a":1.0, "horizontal_align" : "right", "text_horizontal_align" : "right"},
],
},
{ "name" : "my_rank_empire_img", "type" : "image", "style" : ("ltr",), "x" : 279, "y" : 3, "image" : "d:/ymir work/ui/public/battle/empire_empty.sub"},
{
"name" : "my_rank_tier_window", "type" : "window", "x" : 318, "y" : 4, "width" : 39, "height" : 11,
"children" :
[
{ "name" : "my_rank_tier_text", "type" : "text", "style" : ("ltr",), "x" : 0, "y" : 0, "text" : "", "r":0.812, "g":0.749, "b":0.651, "a":1.0, "horizontal_align" : "center", "text_horizontal_align" : "center"},
],
},
),
},
],
},
],
}