[PY] Sistem Seçeneklerine Yazı Tipi Eklentisi

Forgiven

burakhangunduz
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
552
Çözümler
41
Beğeni
565
Puan
939
@H4ZEJ beraber zamanında çok aradık ama ya hepsinin linki bozuktu yada kodlar işlevsiz kalıyordu.
Sistem rohan2 filesinden sökülmüştür.

İlk önce uiscriptten sistem seçeneklerine buton ekliyoruz;
uiscript/systemoptiondialog.py açılır.
Aratılır;
Python:
                {
                    "name" : "tiling_apply",
                    "type" : "button",

                    "x" : 110+100,
                    "y" : 185,

                    "text" : uiScriptLocale.OPTION_TILING_APPLY,

                    "default_image" : ROOT_PATH + "middle_Button_01.sub",
                    "over_image" : ROOT_PATH + "middle_Button_02.sub",
                    "down_image" : ROOT_PATH + "middle_Button_03.sub",
                },

Altına şu şekilde eklenir;
Unutmayın ekledikten sonra koordinatları kendi sistem seçeneklerinize göre ayarlayın.
Python:
                {
                    "name" : "font_type_name",
                    "type" : "text",

                    "x" : 30,
                    "y" : 232,

                    "text" : "Yazı Tipi",
                },
             
                {
                    "name" : "font_type_arial",
                    "type" : "radio_button",

                    "x" : 110,
                    "y" : 232,

                    "text" : "Arial",

                    "default_image" : ROOT_PATH + "Middle_Button_01.sub",
                    "over_image" : ROOT_PATH + "Middle_Button_02.sub",
                    "down_image" : ROOT_PATH + "Middle_Button_03.sub",
                },
             
                {
                    "name" : "font_type_tahoma",
                    "type" : "radio_button",

                    "x" : 110+70,
                    "y" : 232,

                    "text" : "Tahoma",

                    "default_image" : ROOT_PATH + "Middle_Button_01.sub",
                    "over_image" : ROOT_PATH + "Middle_Button_02.sub",
                    "down_image" : ROOT_PATH + "Middle_Button_03.sub",
                },

Uiscript ile işimiz bitti.
Şimdi root/uisystemoption.py açılır.

importların arasına - import os - eklenir.
Ardından;

Kod:
blockMode = 0
Bu kodun altına bu class eklenir;
Python:
class PopupDialog(ui.ScriptWindow):
    def __init__(self, parent):
        print "PopupDialog::PopupDialog()"
        ui.ScriptWindow.__init__(self)

        self.__Load()
        self.__Bind()

    def __del__(self):
        ui.ScriptWindow.__del__(self)
        print "PopupDialog::~PopupDialog()"

    def __Load(self):
        try:
            pyScrLoader = ui.PythonScriptLoader()
            pyScrLoader.LoadScriptFile(self, "UIScript/PopupDialog.py")
        except:
            import exception
            exception.Abort("PopupDialog.__Load")

    def __Bind(self):
        try:
            self.textLine=self.GetChild("message")
            self.okButton=self.GetChild("accept")
        except:
            import exception
            exception.Abort("PopupDialog.__Bind")

        self.okButton.SAFE_SetEvent(self.__OnOK)

    def Open(self, msg):
        self.textLine.SetText(msg)
        self.SetCenterPosition()
        self.Show()
        self.SetTop()

    def __OnOK(self):
        self.Hide()

Ardından bu kod bloğu aratılır.
Python:
        self.SetCenterPosition()
     
        self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))

Bu şekilde değiştirilir.

Python:
        self.SetCenterPosition()
     
        self.popupDialog = PopupDialog(self)
     
        self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))

Aratılır;
Python:
        self.tilingModeButtonList = []

Altına eklenir;
Python:
        self.fonttypeButtonList = []

Aratılır;
Python:
            self.tilingApplyButton=GetObject("tiling_apply")

Altına eklenir;
Python:
            self.fonttypeButtonList.append(GetObject("font_type_arial"))
            self.fonttypeButtonList.append(GetObject("font_type_tahoma"))

Aratılır;
Python:
        self.tilingModeButtonList[1].SAFE_SetEvent(self.__OnClickTilingModeGPUButton)

Altına eklenir;
Python:
        self.fonttypeButtonList[0].SAFE_SetEvent(self.__OnClickArialButton)
        self.fonttypeButtonList[1].SAFE_SetEvent(self.__OnClickTahomaButton)

Aratılır;
Python:
        self.__ClickRadioButton(self.cameraModeButtonList, constInfo.GET_CAMERA_MAX_DISTANCE_INDEX())

Altına eklenir;
Python:
        if os.path.exists("gameoption.cfg"):
            fd = open( "gameoption.cfg" , "r")
            fonttype = fd.readline()
            fd.close()
            if fonttype == "0":
                self.__ClickRadioButton(self.fonttypeButtonList, 0)
            elif fonttype == "1":
                self.__ClickRadioButton(self.fonttypeButtonList, 1)
        else:
            self.__ClickRadioButton(self.fonttypeButtonList, 0)

Aratılır;
Python:
    def OnCloseInputDialog(self):
        self.inputDialog.Close()
        self.inputDialog = None
        return True

Bu kod bloğunun üstüne eklenir;
Python:
    def __OnClickArialButton(self):
        if os.path.exists("gameoption.cfg"):
            os.remove("gameoption.cfg")
        f = open( "gameoption.cfg", "w")
        f.write("0")
        f.close()
        self.popupDialog.Open(localeInfo.LANG_RESTART_FOR_CHANGE)
        self.__ClickRadioButton(self.fonttypeButtonList, 0)
     
    def __OnClickTahomaButton(self):
        if os.path.exists("gameoption.cfg"):
            os.remove("gameoption.cfg")
        f = open( "gameoption.cfg", "w")
        f.write("1")
        f.close()
        self.popupDialog.Open(localeInfo.LANG_RESTART_FOR_CHANGE)
        self.__ClickRadioButton(self.fonttypeButtonList, 1)

uisystemoption.py ile işimiz bitti.
gelelim root/prototype.py

importlara - import os - eklenir.


Aratılır;
Python:
def RunApp():
    musicInfo.LoadLastPlayFieldMusic()
 
    app.SetHairColorEnable(constInfo.HAIR_COLOR_ENABLE)
    app.SetArmorSpecularEnable(constInfo.ARMOR_SPECULAR_ENABLE)
    app.SetWeaponSpecularEnable(constInfo.WEAPON_SPECULAR_ENABLE)

    app.SetMouseHandler(mouseModule.mouseController)
    wndMgr.SetMouseHandler(mouseModule.mouseController)
    wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight())

Bu kod bloğu tamamen değiştirilir;
Python:
def RunApp():
    musicInfo.LoadLastPlayFieldMusic()
 
    app.SetHairColorEnable(constInfo.HAIR_COLOR_ENABLE)
    app.SetArmorSpecularEnable(constInfo.ARMOR_SPECULAR_ENABLE)
    app.SetWeaponSpecularEnable(constInfo.WEAPON_SPECULAR_ENABLE)

    #Initialize default fonts.
    if os.path.exists("gameoption.cfg"):
        fd = open( "gameoption.cfg" , "r")
        fonttype = fd.readline()
        if fonttype == "0":
            localeInfo.UI_DEF_FONT = "Arial:14"
            localeInfo.UI_DEF_FONT_LARGE = "Arial:16"
        elif fonttype == "1":
            localeInfo.UI_DEF_FONT = "Tahoma:12"
            localeInfo.UI_DEF_FONT_LARGE = "Tahoma:16"
        fd.close()

    app.SetMouseHandler(mouseModule.mouseController)
    wndMgr.SetMouseHandler(mouseModule.mouseController)
    wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight())

prototype.py ile işimiz bitti gelelim.
root/uitooltip.py açılır.

importlara eklenir -import os-

Aratılır;
Python:
        self.defFontName = localeInfo.UI_DEF_FONT
        self.ClearToolTip()

Değiştirilir;
Python:
        if os.path.exists("gameoption.cfg"):
            fd = open( "gameoption.cfg" , "r")
            fonttype = fd.readline()
            fd.close()
            if fonttype == "0":
                self.defFontName = "Arial:14"
            elif fonttype == "1":
                self.defFontName = "Tahoma:12"
        else:
            self.defFontName = localeInfo.UI_DEF_FONT
        self.ClearToolTip()

Root ile işimiz bitti.

locale_tr içinden locale_game.txt açın.
ve en sona ekleyin.

Python:
LANG_RESTART_FOR_CHANGE    Değişiklik için oyunu tekrar başlatmalısın.

Son işlem olarak client dosyanızın içine
Linkleri görebilmek için giriş yap veya kayıt ol.
bunu atın.



Güncelleme 1; Arkadaşlar küçük bi sorun vardı şöyle ki; Misal oyunu tahoma yaptıktan sonra karakter ismi,derecesi,npcler ve bazı bölümler değişmiyordu bunun sebebi ui.py'deki ''app.SetDefaultFontName(localeInfo.UI_DEF_FONT)'' bu bölüm default yazı fontunu çektiği için böyle bi problem oluşturuyordu. Yardımından ötürü turkmmo'dan Kaneki'ye teşekkür ediyorum.


ui.py açılır.
İmportlara eklenir ; - import os -

Aratılır.
Python:
app.SetDefaultFontName(localeInfo.UI_DEF_FONT)

Ve değiştirilir;
Python:
if os.path.exists("gameoption.cfg"):
    fd = open( "gameoption.cfg" , "r")
    fonttype = fd.readline()
    if fonttype == "0":
        app.SetDefaultFontName("Arial:14")
    elif fonttype == "1":
        app.SetDefaultFontName("Tahoma:12")
    fd.close()




Kanıt;
x6YTds.png
 
Son düzenleme:
Güncelleme gelmiştir. Ekliyenler lütfen son güncellemeyi yapsınlar.
 
uiSystemOption.py(line:123) __Load_BindObject
ui.py(line:2927) GetChild

OptionDialog.__Load_BindObject - <type 'exceptions.KeyError'>:'font_type_arial' her adımı yaptım ama bu hatayı veriyor localede vs de tanımlı bu kısım
 
Paylaşım için teşekkürler. Daha farklı yazı tipleri için pack kısmına herhangi bir dosya eklemek gerekiyor mu yoksa sadece yazıtipi adını değişince sistem otomatik mi tanıyor.
 
uiSystemOption.py(line:123) __Load_BindObject
ui.py(line:2927) GetChild

OptionDialog.__Load_BindObject - <type 'exceptions.KeyError'>:'font_type_arial' her adımı yaptım ama bu hatayı veriyor localede vs de tanımlı bu kısım
font_type_arial kısmını uiscript bölümüne eklediğine emin misin?


Paylaşım için teşekkürler. Daha farklı yazı tipleri için pack kısmına herhangi bir dosya eklemek gerekiyor mu yoksa sadece yazıtipi adını değişince sistem otomatik mi tanıyor.

Ekstradan bir dosyaya gerek yok ama örnek verirsem senin pcnde özel bir yazı tipi var ise onu yapmanı önermiyorum eğer ki oyun açtığında o adam da mevcut değilse client açılmıcaktır.
 
font_type_arial kısmını uiscript bölümüne eklediğine emin misin?




Ekstradan bir dosyaya gerek yok ama örnek verirsem senin pcnde özel bir yazı tipi var ise onu yapmanı önermiyorum eğer ki oyun açtığında o adam da mevcut değilse client açılmıcaktır.
Bu durumda yazı tipini ihtiyaç halinde oyunculara yükletmek gerekecektir. Teşekkürler bilgilendirme için.
 
Geri
Üst