Çözüldü 'module' object has no attribute 'SetRefineStatus'

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

karew1

MT Üye
MT Üye
Mesaj
150
Çözümler
1
Beğeni
91
Puan
689
Ticaret Puanı
0
Merhabalar K envanter sistemini ekliyorum fakat 2 adet sorunum var tabii dahada çıkacaktır sanırım baya bir fix isteyecek neyse,

1. Sorun K tuşuna basıldığında K envanter açılıyor fakat " I " tuşuna bastığımda yada Envanter butonuna tıkladığımda hiçbir şekilde Envanteri açamıyorum ( Normal Envanter ) ne bir Syserr var nede başka birşey.

Linkleri görebilmek için giriş yap veya kayıt ol.


2. Sorun ise şu K envanter penceresinde bir Check Box var Envanter ile beraber K envanteri açılsın mı diyor. Burayı işaretlediğim zaman Envanter açılıyor sonrada ya biri yada 2 envanter birden kapanıyor.

Linkleri görebilmek için giriş yap veya kayıt ol.


Buradaki Syserr :

Envanter ile birlikte Açılsın mı ?:
0905 10:04:14472 ::   File "ui.py", line 4154, in OnMouseLeftButtonUp

0905 10:04:14474 :: AttributeError
0905 10:04:14479 :: :
0905 10:04:14481 :: 'module' object has no attribute 'SetRefineStatus'
0905 10:04:14483 ::

Ui.py'de bu soruna yol açan kod bloğu

Ui.py:
class CheckBox(Window):
    def __init__(self):
        Window.__init__(self)
    
        self.backgroundImage = None
        self.checkImage = None

        self.eventFunc = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
        self.eventArgs = { "ON_CHECK" : None, "ON_UNCKECK" : None, }

        self.CreateElements()
    
    def __del__(self):
        Window.__del__(self)
    
        self.backgroundImage = None
        self.checkImage = None
    
        self.eventFunc = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
        self.eventArgs = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
    
    def CreateElements(self):
        self.backgroundImage = ImageBox()
        self.backgroundImage.SetParent(self)
        self.backgroundImage.AddFlag("not_pick")
        self.backgroundImage.LoadImage("d:/ymir work/ui/game/refine/checkbox.tga")
        self.backgroundImage.Show()
    
        self.checkImage = ImageBox()
        self.checkImage.SetParent(self)
        self.checkImage.AddFlag("not_pick")
        self.checkImage.SetPosition(0, -4)
        self.checkImage.LoadImage("d:/ymir work/ui/game/refine/checked.tga")
        self.checkImage.Hide()
    
        self.textInfo = TextLine()
        self.textInfo.SetParent(self)
        self.textInfo.SetPosition(20, -2)
        self.textInfo.Show()
    
        self.SetSize(self.backgroundImage.GetWidth() + self.textInfo.GetTextSize()[0], self.backgroundImage.GetHeight())
    
    def SetTextInfo(self, info):
        if self.textInfo:
            self.textInfo.SetText(info)
        
        self.SetSize(self.backgroundImage.GetWidth() + self.textInfo.GetTextSize()[0], self.backgroundImage.GetHeight())
    
    def SetCheckStatus(self, flag):
        if flag:
            self.checkImage.Show()
        else:
            self.checkImage.Hide()

    def GetCheckStatus(self):
        if self.checkImage:
            return self.checkImage.IsShow()
        
        return False
    
    def SetEvent(self, func, *args) :
        result = self.eventFunc.has_key(args[0])   
        if result :
            self.eventFunc[args[0]] = func
            self.eventArgs[args[0]] = args
        else :
            print "[ERROR] ui.py SetEvent, Can`t Find has_key : %s" % args[0]
    
    def OnMouseLeftButtonUp(self):
        if self.checkImage:
            if self.checkImage.IsShow():
                self.checkImage.Hide()

                if self.eventFunc["ON_UNCKECK"]:
                    apply(self.eventFunc["ON_UNCKECK"], self.eventArgs["ON_UNCKECK"])
                    systemSetting.SetRefineStatus(False)
            else:
                self.checkImage.Show()

                if self.eventFunc["ON_CHECK"]:
                    apply(self.eventFunc["ON_CHECK"], self.eventArgs["ON_CHECK"])
                    systemSetting.SetRefineStatus(True)

Sizce bu sorunu çözebilir miyiz ?

Veya bu sistemin fix halini paylaşabilecek var mı ?
( Forumda aradım ama bulamyorum :( )
 
Son düzenleme:
Çözüm
Sistem dosyalarını inceledim şimdi. ui.py ekleyin dediği kodda SetRefineStatus kullanılmış ama src tarafında nasıl eklenildiği yazmamış.
Python:
                if self.eventFunc["ON_UNCKECK"]:
                    apply(self.eventFunc["ON_UNCKECK"], self.eventArgs["ON_UNCKECK"])
                    systemSetting.SetRefineStatus(False)

True ve False değer aldığı için isterseniz bunu kendinizde ekleyebilirsiniz. Sırasıyla şu adımları uygulayın.
Not: Kodları denemedim. Forumun editöründe yazarak ilerledim. :D Umarım bi sorun çıkmaz.

PythonSystem.h, TConfig'e şunu ekleyin;
C++:
            bool                bRefineStatus;


Daha sonra fonksiyonların olduğu kısıma şunları ekleyin;
C++:
bool                            IsRefineStatus();
void...
Envanter sorunuyla bir ara eric bloodaxe filesine başlama kararı aldığımda karşılaşmıştım. Bu sorunlardan dolayı sırf sıfırdan kendi filesimi hazırladım :D Python tarafı hatan var yaptıklarını tekrar gözden geçir ve Debug mod kullanabilirsin bu hatalar için

systemSetting.SetRefineStatus(False) ek olarak bişey eklemediysen bu kodların olmaması gerekiyor. Orjinal halinde ekli değil yani eklediğin sistemlerden dolayı bunları oralara eklemiş olabilirsin
 
Hayır bu paylaştığım kod bloğu tamamen bu sisteme ait başka bir k envanter deneyeceğim en kötü ihtimalle kopya çekip aynı düzeye getirebilirim diye düşünüyorum...

Son olarak sizce 1-99'da k envanter gereklimi gereksiz mi ?
Bu konudaki fikirleriniz nelerdir ?
@Trashy @Whistle
 
Hangi k envanteri eklemeye çalışıyorsunuz? İsterseniz sistem dosyalarını da yayınlayın bi bakalım.
Şu ana kadar sitemizde yanlış hatırlamıyorsam k envanter sistemi paylaşılmadı fakat geçmiş yardım konularında bazı sorunların çözümü için içerikler var.

Hangi oyun türü olursa olsun k envanter gerekli. :)
 
Hangi k envanteri eklemeye çalışıyorsunuz? İsterseniz sistem dosyalarını da yayınlayın bi bakalım.
Şu ana kadar sitemizde yanlış hatırlamıyorsam k envanter sistemi paylaşılmadı fakat geçmiş yardım konularında bazı sorunların çözümü için içerikler var.

Hangi oyun türü olursa olsun k envanter gerekli. :)
Bu çiçekli olan var Hasan fidan'ın paylaştığı k envanter şimdi dosyayı ekliyorum.
Bu konu ile fixlersek güzelce toplanmış halini ayrı bir konu altında paylaşırım hem forumada katkı olur :)
Linkleri görebilmek için giriş yap veya kayıt ol.
 
Son düzenleme:
Bende gerekli olduğunu düşünüyorum hiç yoktan 3 slot şart bk taş +basma itemleri için
 
Bu çiçekli olan var Hasan fidan'ın paylaştığı k envanter şimdi dosyayı ekliyorum.
Bu konu ile fixlersek güzelce toplanmış halini ayrı bir konu altında paylaşırım hem forumada katkı olur :)
Linkleri görebilmek için giriş yap veya kayıt ol.
Verdiğiniz linkte izin istiyor. Link paylaşım kısmından herkese açık olarak değiştirmeniz lazım.

Bende gerekli olduğunu düşünüyorum hiç yoktan 3 slot şart bk taş +basma itemleri için
Bana 3 kategoriden fazlası biraz gereksiz gibi geliyor ama sonuçta insanların tercihi. :)
 
Bir tane daha var ama 5 env uyumlu eğer ayarlayabilirsek o daha iyi olur
 

Dosya Eklentileri

  • Özel Depo Sistemi BkV.s.rar
    32 KB · Gösterim: 34
Linkte paylaştığınız dosya bu mu? Çünkü hala erişim izni istiyor. Paylaşılabilir bağlantıyı al dedikten sonra şu şekilde ayarlamanız lazım.
google drive izin.jpg


Birde SetRefineStatus hatasını çözmek için. ClientSource/UserInterface/PythonSystemModule.cpp'ye tanımlamanız gerekiyor.
 
Pardon şimdi güncelledim.
PythonSystemModule.cpp 'de nasıl tanımlama yapabilirim ?
 
Sistem dosyalarını inceledim şimdi. ui.py ekleyin dediği kodda SetRefineStatus kullanılmış ama src tarafında nasıl eklenildiği yazmamış.
Python:
                if self.eventFunc["ON_UNCKECK"]:
                    apply(self.eventFunc["ON_UNCKECK"], self.eventArgs["ON_UNCKECK"])
                    systemSetting.SetRefineStatus(False)

True ve False değer aldığı için isterseniz bunu kendinizde ekleyebilirsiniz. Sırasıyla şu adımları uygulayın.
Not: Kodları denemedim. Forumun editöründe yazarak ilerledim. :D Umarım bi sorun çıkmaz.

PythonSystem.h, TConfig'e şunu ekleyin;
C++:
            bool                bRefineStatus;


Daha sonra fonksiyonların olduğu kısıma şunları ekleyin;
C++:
bool                            IsRefineStatus();
void                            SetRefineStatus(int iFlag);


PythonSystem.cpp şu fonksiyonları ekleyin;
C++:
void CPythonSystem::SetRefineStatus(int iFlag)
{
    m_Config.bRefineStatus = iFlag == 1 ? true : false;
}

bool CPythonSystem::IsRefineStatus()
{
    return m_Config.bRefineStatus;
}


void CPythonSystem::SetDefaultConfig() fonksiyonunun içerisinde alt kısıma şunu ekleyin;
C++:
    m_Config.bRefineStatus = false;


bool CPythonSystem::LoadConfig() fonksiyonunun içerisinde else if else if şeklinde devam eden koşulların en altına şunu ekleyin;
C++:
        else if (!stricmp(command, "REFINE_STATUS"))
            m_Config.bRefineStatus = atoi(value) == 1 ? true : false;


bool CPythonSystem::SaveConfig() fonksiyonun içerisinde if if şeklinde devam eden koşulların altına şunu ekleyin;
C++:
    if (m_Config.bRefineStatus == 0)
        fprintf(fp, "REFINE_STATUS        %d\n", m_Config.bRefineStatus);


PythonSystemModule.cpp'ye şunları ekleyin;
C++:
PyObject * systemIsRefineStatus(PyObject * poSelf, PyObject * poArgs)
{
    return Py_BuildValue("i", CPythonSystem::Instance().IsRefineStatus());
}

PyObject * systemSetRefineStatus(PyObject * poSelf, PyObject * poArgs)
{
    int iFlag;
    if (!PyTuple_GetInteger(poArgs, 0, &iFlag))
        return Py_BuildException();

    CPythonSystem::Instance().SetRefineStatus(iFlag);

    return Py_BuildNone();
}


Dosyanın alt kısımlarında python modülleri kısımı var. Şunları da müsahit bir yere ekleyin;
C++:
        { "SetRefineStatus",                    systemSetRefineStatus,                METH_VARARGS },
        { "IsRefineStatus",                     systemIsRefineStatus,                 METH_VARARGS },
 
Son düzenleme:
Çözüm
Parmakları çalıştırdım biraz :ao-laughing:
 
@Whistle Başarılı kodları ekledim ClientSrc Build ettim sorunsuz oldu. Oyuna girdim ama hala aynı problem var k envanter ile açılsın mı bölümünü işaretlemeden envanter açılmıyor açılsada " ı " tuşundan yada buton ile kapanmıyor şu anda client taraflı bir syserr yok sizce ne yapmalı ?

SetRefineStatus sorunu çözüldü :loveya:
 
Konuda belirtilen sorun çözüldü dimi. Bu kodlar olmadan işaretlemeyi yapamazdık. Bir bakiyim. Büyük ihtimal interfacemodule.py'de bir sıkıntı vardır.

interfaceModule.py, ToggleInventoryWindow fonksiyonunu verebilir misiniz?
 
Konuda belirtilen sorun çözüldü dimi. Bu kodlar olmadan işaretlemeyi yapamazdık. Bir bakiyim. Büyük ihtimal interfacemodule.py'de bir sıkıntı vardır.

interfaceModule.py, ToggleInventoryWindow fonksiyonunu verebilir misiniz?
Evet o Syserr artık gelmiyor o çözüldü ellerine sağlık :)

ToggleInventoryWindow:
    def ToggleInventoryWindow(self):
        if self.State == "Kapali":
            chat.AppendChat(chat.CHAT_TYPE_INFO, "Envanteri acabilmek icin " + str(int(int(self.LastContactTimeStamp) + self.WaitTime) - int(app.GetTime())) + " saniye beklemelisin.")
            return   
        else:
            if FALSE == player.IsObserverMode():
                if FALSE == self.wndInventory.IsShow():
                    self.wndInventory.Show()
                    self.wndInventory.SetTop()
                if 1 == constInfo.EnvanterAcilsinmi:
                    if not self.wndExtendedInventory.IsShow():
                        self.wndExtendedInventory.Show()
                else:
                    self.wndInventory.OverOutItem()
                    self.wndInventory.Close()
                if 1 == constInfo.EnvanterAcilsinmi:
                    if self.wndExtendedInventory.IsShow():
                        self.wndExtendedInventory.Close()

    if app.WJ_SPLIT_INVENTORY_SYSTEM:
        def ToggleExtendedInventoryWindow(self):
            if FALSE == player.IsObserverMode():
                if self.wndExtendedInventory.IsShow():
                    self.wndExtendedInventory.OverOutItem()
                    self.wndExtendedInventory.Close()
                else:
                    self.wndExtendedInventory.Show()
 
Galiba niye açılmadığını bulduk. Tab hatası mevcut. :) Şöyle düzenleyin.
Aslında fonksiyonu bulamadığı için syserr kaydı oluşturması gerekirdi.
:ao-smiling:

Python:
    def ToggleInventoryWindow(self):
        if self.State == "Kapali":
            chat.AppendChat(chat.CHAT_TYPE_INFO, "Envanteri acabilmek icin " + str(int(int(self.LastContactTimeStamp) + self.WaitTime) - int(app.GetTime())) + " saniye beklemelisin.")
            return
        else:
            if False == player.IsObserverMode():
                if False == self.wndInventory.IsShow():
                    self.wndInventory.Show()
                    self.wndInventory.SetTop()
                if 1 == constInfo.EnvanterAcilsinmi:
                    if not self.wndExtendedInventory.IsShow():
                        self.wndExtendedInventory.Show()
                else:
                    self.wndInventory.OverOutItem()
                    self.wndInventory.Close()
                if 1 == constInfo.EnvanterAcilsinmi:
                    if self.wndExtendedInventory.IsShow():
                        self.wndExtendedInventory.Close()

    if app.WJ_SPLIT_INVENTORY_SYSTEM:
        def ToggleExtendedInventoryWindow(self):
            if False == player.IsObserverMode():
                if self.wndExtendedInventory.IsShow():
                    self.wndExtendedInventory.OverOutItem()
                    self.wndExtendedInventory.Close()
                else:
                    self.wndExtendedInventory.Show()
 
Harika ! Bir aşama daha ilerledik...

Syserr:
0906 03:26:12757 :: Traceback (most recent call last):

0906 03:26:12758 ::   File "game.py", line 910, in RefreshInventory

0906 03:26:12759 ::   File "interfaceModule.py", line 612, in RefreshInventory

0906 03:26:12761 :: AttributeError
0906 03:26:12761 :: :
0906 03:26:12763 :: 'NoneType' object has no attribute 'RefreshQuickSlot'
0906 03:26:12766 ::

0906 03:27:12743 :: Traceback (most recent call last):

0906 03:27:12744 ::   File "game.py", line 910, in RefreshInventory

0906 03:27:12745 ::   File "interfaceModule.py", line 612, in RefreshInventory

0906 03:27:12748 :: AttributeError
0906 03:27:12748 :: :
0906 03:27:12750 :: 'NoneType' object has no attribute 'RefreshQuickSlot'
0906 03:27:12750 ::

0906 03:27:12752 :: Traceback (most recent call last):

0906 03:27:12753 ::   File "game.py", line 910, in RefreshInventory

0906 03:27:12755 ::   File "interfaceModule.py", line 612, in RefreshInventory

0906 03:27:12756 :: AttributeError
0906 03:27:12758 :: :
0906 03:27:12759 :: 'NoneType' object has no attribute 'RefreshQuickSlot'
0906 03:27:12759 ::

Game.py:
    def RefreshInventory(self):
        if self.interface:
            self.interface.RefreshInventory()

interfaceModule.py:
    def RefreshInventory(self):
        self.wndTaskBar.RefreshQuickSlot()
        self.wndInventory.RefreshItemSlot()
        if app.WJ_SPLIT_INVENTORY_SYSTEM:
            self.wndExtendedInventory.RefreshItemSlot()
        if app.ENABLE_DRAGON_SOUL_SYSTEM:
            self.wndDragonSoul.RefreshItemSlot()

:rolleyes:
 
612. satır hangisine denk geliyor? Editörün işaretleme seçeneğini kullanabilirsiniz.
self.wndTaskBar.RefreshQuickSlot() sanırsam burası için hata veriyor ama taskbar.py'de bi düzenleme yaptınız mı?
Envanter açılıyor mu?

Düzenle dediğim yeri şu şekilde değiştirebilir misiniz?
Python:
    def ToggleInventoryWindow(self):
        if self.State == "Kapali":
            chat.AppendChat(chat.CHAT_TYPE_INFO, "Envanteri acabilmek icin " + str(int(int(self.LastContactTimeStamp) + self.WaitTime) - int(app.GetTime())) + " saniye beklemelisin.")
            return
        else:
            if False == player.IsObserverMode():
                if False == self.wndInventory.IsShow():
                    self.wndInventory.Show()
                    self.wndInventory.SetTop()
                    if 1 == constInfo.EnvanterAcilsinmi and False == self.wndExtendedInventory.IsShow():
                        self.wndExtendedInventory.Show()
                else:
                    self.wndInventory.OverOutItem()
                    self.wndInventory.Close()
                    if 1 == constInfo.EnvanterAcilsinmi and self.wndExtendedInventory.IsShow():
                        self.wndExtendedInventory.Close()

    def ToggleExtendedInventoryWindow(self):
        if False == player.IsObserverMode():
            if False == self.wndExtendedInventory.IsShow():
                self.wndExtendedInventory.Show()
            else:
                self.wndExtendedInventory.OverOutItem()
                self.wndExtendedInventory.Close()
 
@Whistle sanırım tam da orası yarın son mesajın için güzel bir cevap yazacağım. Geç oldu uyuyalım :) Cevapların ve yardımın için çok Teşekkür ederim :ao-wink:
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst