Yardım uiworldbossrankingwindow.py hizalama sorunu.

  • Konuyu açan Konuyu açan Raviel
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 8
  • Gösterim Gösterim 111
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

Raviel

Premium Üye
Premium Üye
MT Üye
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.

1747826534827.webp


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:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
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"},
                            ],
                        },
                    ),
                },
            ],
        },
    ],
}
 
uiscript/worldbossranking.py:

Kod:
Genişlet Daralt Kopyala
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

su kısımla oynama yapmanız lazım board penceresı genısletın
 
WINDOW_WIDTH = 400<br>WINDOW_HEIGHT = 400 yada 450

ama soyle durumda var sayıların boardlarınıda ortalamanız ıcın baya gırdı cıktı yapacaksınız cunku gırdı cıktı yapmadan hıc kımse ayarlama yapamaz dırek sayı olarak bundan oturu sızın ayarlamanız gerekıyor ornek olarak verdıgım py dosyasında ıslem yapabılırsınız
 
uiworldbossranking.py:
Genişlet Daralt Kopyala
        # 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 - 10, 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(5, 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(8, 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 + 20 # 171 + 88 + 30 = 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 - 10 # 264 + 26 + 5 = 295
        damage_w = width - damage_x - 30 # Sağdan 10px boşluk bırakarak kalan alan.
        #if damage_w < 70: damage_w = 70 # 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ı

Birazcık manuel olarak uğraştım ve şu an sonuç:
1747829037141.webp


bu şekilde ancak hasar yazılarının tam o arka plandaki küçük kutuya uyumlu olması göze daha hoş durur onların boyutlarını tam olarak nereden ayarlayacağımı bilemiyorum. Öğrenirsem onlarıda koyacağım. Şimdilik source tarafına geçeceğim bakalım ilerleyen zamanlar bizi ne bekliyor.
 
yanı boardla ılgılı ıslemlerını dedıgım gıbı yapabılırsınız baya ıslem uzun olacagı ıcın sızı ıster ıstemez bıraz yoracak bu nedenle basarılar dılerım
 
Merhaba dostum,
Genelde ui tasarlarken, şu örnek alınıyor.
"x": (PENCERE_GENISLIGI - ELEMENT_GENISLIGI) / 2
Genelde pencere içine bu şekilde ortalanıyor. Bazı arkadaşlar web tabanlı gui giydirme paneli gibi birşey kullanıyor. Enix yazılım paylaşmıştı sanırım bulursam mesajı düzenler eklerim. Birde uiscript tarafı, webdeki css gibi çalışıyor. Mesela "align": center; gibi ama align burda olmaya bilir aslında text_horizontal_align kullanarak da ortalayabilirsin. Ama bazı yerleri ortalamaya bilir. Senin için bi kaç deneme yaptım, mobildeyim deneybilirsin istersen.
Python:
Genişlet Daralt Kopyala
{
    "name" : "ranking_menu_img",
    "type" : "expanded_image",
    "x" : 13,
    "y" : 35,
    "width" : 372,
    "height" : 21,
    "image" : ROOT_PATH + "ranking_menu.sub",
    "children" :
    (
        # Rank
        {
            "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",
                },
            ],
        },
        # Name
        {
            "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",
                },
            ],
        },
        # Guild Name
        {
            "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",
                },
            ],
        },
        # Empire
        {
            "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",
                },
            ],
        },
        # Tier
        {
            "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",
                },
            ],
        },
    ),
},
 
Selamlar öncelikle yorumlarınız için teşekkürler. Muhtemelen .sub dosyalarından kaynaklı boyutlandırma sağlayamıyorum name_w dosyasının değerini değiştirsemde yazılar ona göre şekil alıyor ama arkaplanda ki kutucuk görselini değiştirmek istediğimden dolayı tam olarak ayarlayamıyorum. Dedikleriniz ve yorumlarınız için ayrıca teşekkür ederim tekrardan.
 
yanı boardla ılgılı ıslemlerını dedıgım gıbı yapabılırsınız baya ıslem uzun olacagı ıcın sızı ıster ıstemez bıraz yoracak bu nedenle basarılar dılerım
Çok teşekkürler öneriniz için buda bir çözüm olabilir tabiki ancak arkaplan yani .dds dosyası tek bir kalıp olarak oluşturulmuş:

1747831823235.webp



Bu sebeple burada ki kutucuk boyutlarını değiştirmek için .sub dosyalarında bulunan lonca boyutunu muhtemelen özel olarak alıp hem isim yeri hemde hasar yeri için kullanmayı deneyeceğim. Sizin dediğiniz yöntemle çözülebilir mi bilmiyorum boyutlar tam olarak .dds dosyasına göre ayarlı olduğundan dolayı ekstra olarak sağ tarafta boşluk açılabilir diye düşünüyorum buda hoş durmayacaktır.



Merhaba dostum,
Genelde ui tasarlarken, şu örnek alınıyor.

Genelde pencere içine bu şekilde ortalanıyor. Bazı arkadaşlar web tabanlı gui giydirme paneli gibi birşey kullanıyor. Enix yazılım paylaşmıştı sanırım bulursam mesajı düzenler eklerim. Birde uiscript tarafı, webdeki css gibi çalışıyor. Mesela "align": center; gibi ama align burda olmaya bilir aslında text_horizontal_align kullanarak da ortalayabilirsin. Ama bazı yerleri ortalamaya bilir. Senin için bi kaç deneme yaptım, mobildeyim deneybilirsin istersen.
Python:
Genişlet Daralt Kopyala
{
    "name" : "ranking_menu_img",
    "type" : "expanded_image",
    "x" : 13,
    "y" : 35,
    "width" : 372,
    "height" : 21,
    "image" : ROOT_PATH + "ranking_menu.sub",
    "children" :
    (
        # Rank
        {
            "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",
                },
            ],
        },
        # Name
        {
            "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",
                },
            ],
        },
        # Guild Name
        {
            "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",
                },
            ],
        },
        # Empire
        {
            "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",
                },
            ],
        },
        # Tier
        {
            "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",
                },
            ],
        },
    ),
},

Bu yanıtınız içinde ekstra teşekkür ederim ama buda sorunu çözmüyor dediğim gibi tek bir görselden alıp mağara yöntemlerini kullandıkları için görsel kesitleri alıp değiştirmek gerekiyor sanırım.
 
Çok teşekkürler öneriniz için buda bir çözüm olabilir tabiki ancak arkaplan yani .dds dosyası tek bir kalıp olarak oluşturulmuş:

23530 eklentisini görüntüle


Bu sebeple burada ki kutucuk boyutlarını değiştirmek için .sub dosyalarında bulunan lonca boyutunu muhtemelen özel olarak alıp hem isim yeri hemde hasar yeri için kullanmayı deneyeceğim. Sizin dediğiniz yöntemle çözülebilir mi bilmiyorum boyutlar tam olarak .dds dosyasına göre ayarlı olduğundan dolayı ekstra olarak sağ tarafta boşluk açılabilir diye düşünüyorum buda hoş durmayacaktır.





Bu yanıtınız içinde ekstra teşekkür ederim ama buda sorunu çözmüyor dediğim gibi tek bir görselden alıp mağara yöntemlerini kullandıkları için görsel kesitleri alıp değiştirmek gerekiyor sanırım.
Aslında önerim tamda bu yüzden di,
text_horizontal_align genelde pencereyi temsil alıyor üzerindeki yazıyı ortalıyor. "x": (PENCERE_GENISLIGI - ELEMENT_GENISLIGI) / 2 bununla aynı mantık gibi...
 
Geri
Üst