Çözüldü Python'da Pazar ve NPC Ayrı Olarak Tanıtma

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 14
  • Gösterim Gösterim 864
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ı.

Kaiser

Admin
Admin
Geliştirici
Yardımsever Üye
Mesaj
3.973
Çözümler
384
Beğeni
4.046
Puan
1.849
Ticaret Puanı
0
Merhaba, kolay gelsin. Python da shop ve npcleri birbirinden ayıracak şekilde nasıl tanım kullanabilirim?
Yani mesela markete tıkladığımda normal market penceresi açılacak, ancak pazarlara tıkladığımda ayrı pencere açılacak.

chr.IsNPC() ve GetRace() işe yaramıyor.

Diğer gerekli bütün kod kısımlarını hallettim ancak pazar ve npc yi birbirinden ayıracak if koşuluğunu sağlayamadım bir türlü.
 
Çözüm
Python:
Genişlet Daralt Kopyala
        pazar = chr.GetNameByVID(vid)
        self.wndInventory.Show()
        self.wndInventory.SetTop()
        if " Marketi" in pazar:
            isPrivateShop = True
            self.offshop.Open(vid)
        else:
            isPrivateShop = False
            self.dlgShop.Open(vid)

vid üzerinden name'i çekip in ile text kontrolü sağlayarak hallettim. Yardımcı olmaya çalışan herkese teşekkürler.



Böyle bir ayrım zaten mevcut.

uishop.py

Kod:
Genişlet Daralt Kopyala
        import chr
        if chr.IsNPC(vid):
            isPrivateShop = False
        else:
            isPrivateShop = True
 



Böyle bir ayrım zaten mevcut.

uishop.py

Kod:
Genişlet Daralt Kopyala
        import chr
        if chr.IsNPC(vid):
            isPrivateShop = False
        else:
            isPrivateShop = True

Python:
Genişlet Daralt Kopyala
        isPrivateShop = shop.IsPrivateShop()
        if chr.IsNPC(vid):
            isPrivateShop = True
            self.shop.Open(vid)
            chat.AppendChat(1,"Pazar")
        else:
            isPrivateShop = False
            self.dlgShop.Open(vid)
            self.dlgShop.SetTop()
            chat.AppendChat(1,"NPC")

interfacemodule.py üzerinden ayarlamaya çalışıyorum. Bu şekilde yaptığımda pazar ve npc ye tıkladığımda sadece if bloğu çalışıyor else bloğu çalışmıyor.
 
Python:
Genişlet Daralt Kopyala
        isPrivateShop = shop.IsPrivateShop()
        if chr.IsNPC(vid):
            isPrivateShop = True
            self.shop.Open(vid)
            chat.AppendChat(1,"Pazar")
        else:
            isPrivateShop = False
            self.dlgShop.Open(vid)
            self.dlgShop.SetTop()
            chat.AppendChat(1,"NPC")

interfacemodule.py üzerinden ayarlamaya çalışıyorum. Bu şekilde yaptığımda pazar ve npc ye tıkladığımda sadece if bloğu çalışıyor else bloğu çalışmıyor.
Neden interface ? Ne yapmaya çalışıyorsun?
 
Ayırdığında ne farkları olacak ? 2 sinde de ek bir gui mi açılacak ? Yazı mı geçecek ? 2 sini ayırdığında ne olmasını istiyorsun?
Pazar ekranını baştan sona değiştireceğim, bazı eklentiler mevcut. Onların düzenlenmesiyle beraber genel olarak tasarımı değiştireceğim. Aslında değiştirdim de sadece konuda bahsettiğim gibi npc yi ve pazarı birbirinden ayıramadım.
 
Pazar ekranını baştan sona değiştireceğim, bazı eklentiler mevcut. Onların düzenlenmesiyle beraber genel olarak tasarımı değiştireceğim. Aslında değiştirdim de sadece konuda bahsettiğim gibi npc yi ve pazarı birbirinden ayıramadım.
char.cpp

Kod:
Genişlet Daralt Kopyala
void CHARACTER::OnClick(LPCHARACTER pkChrCauser)

içerisine

Kod:
Genişlet Daralt Kopyala
if GetRaceNum() == 30000
ChatPacket(CHAT_TYPE_COMMAND, "shop_or_npc 1");

shop_manager.cpp

Kod:
Genişlet Daralt Kopyala
bool CShopManager::StartShopping

içerisine

Kod:
Genişlet Daralt Kopyala
ChatPacket(CHAT_TYPE_COMMAND, "shop_or_npc 2");

Daha sonra bunları constInfo ya bağlanıp ayırabilirsin
Close fonk. na da constInfo 0 yaparsın
Aklıma gelen en basit çözüm bu
 
Son düzenleme:
char.cpp

Kod:
Genişlet Daralt Kopyala
void CHARACTER::OnClick(LPCHARACTER pkChrCauser)

içerisine

Kod:
Genişlet Daralt Kopyala
if GetRaceNum() == 30000
ChatPacket(CHAT_TYPE_COMMAND, "shop_or_npc 1");

shop_manager.cpp

Kod:
Genişlet Daralt Kopyala
bool CShopManager::StartShopping

içerisine

Kod:
Genişlet Daralt Kopyala
ChatPacket(CHAT_TYPE_COMMAND, "shop_or_npc 2");

Daha sonra bunları constInfo ya bağlanıp ayırabilirsin
Close fonk. na da constInfo 0 yaparsın
Aklıma gelen en basit çözüm bu
ConstInfo dan kontrol sağlayınca yapmak istedigimi sorunsuz yapabiliyorum ama bir nevi statik çalıştığı için kullanışlı gelmedi. O yüzden olayı kökünden halletmek istiyorum.
 
Python:
Genişlet Daralt Kopyala
# Game.py içerisinde bu alan çalışıyor
## Shop
def StartShop(self, vid):
    self.interface.OpenShopDialog(vid)
# interfacemodule.py içerisinde bu alan çalışıyor
# Shop
def OpenShopDialog(self, vid):
    self.wndExpandedMoney.Show()
    self.wndInventory.Show()
    self.wndInventory.SetTop()
    self.dlgShop.Open(vid)
    self.dlgShop.SetTop()
# bu kısımda interface üzerinden kolayca istediğin değişikliği yaparsın.
# if chr.IsNPC(vid): bu kodu kullanarak
# Yani en azından ben öyle düşünüyorum :D
 
Son düzenleme:
Python:
Genişlet Daralt Kopyala
# Game.py içerisinde bu alan çalışıyor
## Shop
def StartShop(self, vid):
    self.interface.OpenShopDialog(vid)
# interfacemodule.py içerisinde bu alan çalışıyor
# Shop
def OpenShopDialog(self, vid):
    self.wndExpandedMoney.Show()
    self.wndInventory.Show()
    self.wndInventory.SetTop()
    self.dlgShop.Open(vid)
    self.dlgShop.SetTop()
# bu kısımda interface üzerinden kolayca istediğin değişikliği yaparsın.
# if chr.IsNPC(vid): bu kodu kullanarak
# Yani en azından ben öyle düşünüyorum :D
Zaten interfacemodule.py üzerinde gösterdiğin kısımda düzenleme yapıyorum ama o kısımda gerekli olan koşulları sağlayamadım. Denediğim hiç bir şey olmuyor.
 
C++:
Genişlet Daralt Kopyala
// direkt client üzerinden bir kontrol yapmayı dene
// PythonNetworkStreamPhaseGame.cpp üzerinden
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartShop", Py_BuildValue("(i)", dwVID));
//
CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwVID);
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartShop", Py_BuildValue("(ii)", dwVID, pInstance->IsNPC()));
 
C++:
Genişlet Daralt Kopyala
// direkt client üzerinden bir kontrol yapmayı dene
// PythonNetworkStreamPhaseGame.cpp üzerinden
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartShop", Py_BuildValue("(i)", dwVID));
//
CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwVID);
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartShop", Py_BuildValue("(ii)", dwVID, pInstance->IsNPC()));
Maalesef işe yaramadı
 
Python:
Genişlet Daralt Kopyala
        pazar = chr.GetNameByVID(vid)
        self.wndInventory.Show()
        self.wndInventory.SetTop()
        if " Marketi" in pazar:
            isPrivateShop = True
            self.offshop.Open(vid)
        else:
            isPrivateShop = False
            self.dlgShop.Open(vid)

vid üzerinden name'i çekip in ile text kontrolü sağlayarak hallettim. Yardımcı olmaya çalışan herkese teşekkürler.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst