Çözüldü Eşya Altında Nesne Kodu Gösterme.

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

droestaha

Gold Üye
Gold Üye
Üye
Mesaj
111
Beğeni
41
Puan
476
Ticaret Puanı
0
Merhaba, Alttaki kodu sorunsuz ekliyorum gerekli yerlere oyuna giriş yapıyorum fakat itemin altında nesne kodunu göstermiyor ve herhangi bir sysser de vermiyor.

uitooltip.py:
Genişlet Daralt Kopyala
#uitooltip.py - açılır

#Bu kod bloğunu aratın
 def __DragonSoulInfoString (self, dwVnum):

# Aynı bloktan iki tane olacaktır en üste olanı bulun ve onunda

# üstünde bu kod olacak

        self.ShowToolTip()

#üstüne eklenir
        if chr.IsGameMaster(player.GetMainCharacterIndex()):
            self.AppendTextLine(localeInfo.ITEM_VNUM_TOOLTIP % (int(itemVnum)), self.SINIRSIZ_COLOR)
            self.AppendTextLine(localeInfo.ITEM_TYPE_TOOLTIP % (int(itemType)), self.SINIRSIZ_COLOR)
            self.AppendTextLine(localeInfo.ITEM_SUBTYPE_TOOLTIP % (int(itemSubType)), self.SINIRSIZ_COLOR)


https://prnt.sc/20xppe5 Bu fotoğrafa bakarak doğru yeri anlayın.

# aratılır

Bunları sorunsuz ekliyorum herhangi bir sysser de vermiyor oyuna giriyorum fakat itemin üstüne gelince item kodunu göstermiyor.


    NEED_SKILL_POINT_COLOR = 0xff9A9CDB



#altına eklenir

    SINIRSIZ_COLOR = 0xffFFFF00

#locale_game.txt açılır ve eklenir

ITEM_VNUM_TOOLTIP    Vnum: %d
ITEM_TYPE_TOOLTIP    Type: %d
ITEM_SUBTYPE_TOOLTIP    SubType: %d
 
Çözüm
C++:
Genişlet Daralt Kopyala
if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
    return true;
Bu kod tamamen işlevsiz görünüyor.

Çünkü server tarafında;
C++:
Genişlet Daralt Kopyala
        if (GetGMLevel() == GM_IMPLEMENTOR)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_HIGH_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_GOD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_LOW_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
            m_bPKMode = PK_MODE_PROTECT...
şunu dene bakim.

uitooltip.py:
Genişlet Daralt Kopyala
        if chr.IsGameMaster(0):
            self.AppendTextLine("Vnum: {}".format(itemVnum), 0xFFf863ff)
            self.AppendTextLine("Type: {}, Subtype {}".format(itemType, itemSubType), 0xFF00cfb6)
            if metinSlot:
                self.AppendTextLine("Socket: {}".format('-'.join("[" + str(i) + "]" for i in metinSlot)), 0xFF00b6d6)
 
şunu dene bakim.

uitooltip.py:
Genişlet Daralt Kopyala
        if chr.IsGameMaster(0):
            self.AppendTextLine("Vnum: {}".format(itemVnum), 0xFFf863ff)
            self.AppendTextLine("Type: {}, Subtype {}".format(itemType, itemSubType), 0xFF00cfb6)
            if metinSlot:
                self.AppendTextLine("Socket: {}".format('-'.join("[" + str(i) + "]" for i in metinSlot)), 0xFF00b6d6)
Onu eklediğim de böyle bir sysser veriyor;
Sysser:
Genişlet Daralt Kopyala
1219 20:23:06193 ::
networkModule.py(line:208) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:23) <module>
system.py(line:130) __pack_import
system.py(line:110) _process_result
uiAffectShower.py(line:8) <module>
system.py(line:130) __pack_import

networkModule.SetSelectCharacterPhase - <type 'exceptions.IndentationError'>:unindent does not match any outer indentation level (uiToolTip.py, line 1209)

1219 20:23:06193 :: ============================================================================================================
1219 20:23:06193 :: Abort!!!!


1219 20:23:06193 :: filename=exception.py, name=Abort, line=33
1219 20:23:06193 :: filename=networkModule.py, name=SetSelectCharacterPhase, line=213
1219 20:23:06193 :: filename=prototype.py, name=RunApp, line=57
1219 20:23:06193 :: filename=prototype.py, name=<module>, line=61
1219 20:23:06193 :: filename=system.py, name=Run, line=163
1219 20:23:06193 :: filename=system.py, name=execfile, line=192
1219 20:23:06193 :: filename=system.py, name=RunMainScript, line=273
1219 20:23:06193 :: filename=system.py, name=<module>, line=296
1219 20:23:06193 :: filename=<string>, name=<module>, line=298
 
sadece şu kısmı dene altındakileri sil çalışıyormu diye bakalım;
Python:
Genişlet Daralt Kopyala
        if chr.IsGameMaster(0):
            self.AppendTextLine("Vnum: {}".format(itemVnum), 0xFFf863ff)
            self.AppendTextLine("Type: {}, Subtype {}".format(itemType, itemSubType), 0xFF00cfb6)
Şimdi oyuna girdi sorunsuz bir şekilde ama itemin üstüne gelince kod gözükmüyor.
 
sadece şu kısmı dene altındakileri sil çalışıyormu diye bakalım;
Python:
Genişlet Daralt Kopyala
        if chr.IsGameMaster(0):
            self.AppendTextLine("Vnum: {}".format(itemVnum), 0xFFf863ff)
            self.AppendTextLine("Type: {}, Subtype {}".format(itemType, itemSubType), 0xFF00cfb6)
knk kendim denedim sorun orda değil.
Sorun şurda;
Eğer karekter diğer gm yetkilerine sahip olursa görünüyor. Sadece IMPLEMENTOR olunca gözükmüyor. Muhtemelen IsGameMaster fonksiyonunda implementor 0 dönüyor. Şuan çözümüyle uğraşıyorum.
 
IMPLENTOR Yetkili GM Hesapta İtem_Vnum gözükmüyor diğer Yetkili GOD vb. İtem_Vnum gözüküyor Yunusunda dediği gibi yardım bekliyıruz. :)
 
Benim yazdıklarımla bunun bi alakası yokki. Eski kodu değiştirmedim üzerine, sa, ga, gm ve tgm ekledim sadece, inceleyebilirsiniz.
Eski hali ;
InstanceBase.cpp:
Genişlet Daralt Kopyala
BOOL CInstanceBase::IsGameMaster()
{
    if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
        return true;
    return false;
}

Yeni eklenmiş hali ;
InstanceBase.cpp:
Genişlet Daralt Kopyala
BOOL CInstanceBase::IsGameMaster()
{
    if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
        return true;
    if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_SA))
        return true;
    if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_GA))
        return true;
    if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_GM))
        return true;
    if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR_TGM))
        return true;

    return false;
}

Bunun dışında zaten ciddi bir yer değiştirtmedim.
Kendim de de deneyeceğim.
C++:
Genişlet Daralt Kopyala
if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
    return true;
Bu kod tamamen işlevsiz görünüyor.

Çünkü server tarafında;
C++:
Genişlet Daralt Kopyala
        if (GetGMLevel() == GM_IMPLEMENTOR)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_HIGH_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_GOD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_LOW_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
            m_bPKMode = PK_MODE_PROTECT;
        }

AFF_YMIR set edilmiyor, sadece yeni değerler set ediliyor.
Orjinal mantıkta:
C++:
Genişlet Daralt Kopyala
if (GetGMLevel() > GM_LOW_WIZARD)
{
    m_afAffectFlag.Set(AFF_YMIR);
    m_bPKMode = PK_MODE_PROTECT;
}
GM_LOW_WIZARD üstü tüm rütbelere GM rankı veriliyor. Aynı mantığı devam ettirmeyi deneyebilirsiniz, sadece rütbelere göre efektleri ayrı ayrı verirsiniz.
Server tarafını şu şekilde değiştirmeyi deneyebilirsiniz:
C++:
Genişlet Daralt Kopyala
    if (GetGMLevel() >= GM_LOW_WIZARD)
    {
        m_afAffectFlag.Set(AFF_YMIR); 
        m_bPKMode = PK_MODE_PROTECT;

        if (GetGMLevel() == GM_IMPLEMENTOR)
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
        else if (GetGMLevel() == GM_HIGH_WIZARD)
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
        else if (GetGMLevel() == GM_GOD)
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
        else if (GetGMLevel() == GM_LOW_WIZARD)
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
    }
 
Bunu Dermısınız Lutfen
 

Dosya Eklentileri

C++:
Genişlet Daralt Kopyala
if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
    return true;
Bu kod tamamen işlevsiz görünüyor.

Çünkü server tarafında;
C++:
Genişlet Daralt Kopyala
        if (GetGMLevel() == GM_IMPLEMENTOR)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_HIGH_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_GOD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_LOW_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
            m_bPKMode = PK_MODE_PROTECT;
        }

AFF_YMIR set edilmiyor, sadece yeni değerler set ediliyor.
Orjinal mantıkta:
C++:
Genişlet Daralt Kopyala
if (GetGMLevel() > GM_LOW_WIZARD)
{
    m_afAffectFlag.Set(AFF_YMIR);
    m_bPKMode = PK_MODE_PROTECT;
}
GM_LOW_WIZARD üstü tüm rütbelere GM rankı veriliyor. Aynı mantığı devam ettirmeyi deneyebilirsiniz, sadece rütbelere göre efektleri ayrı ayrı verirsiniz.
Server tarafını şu şekilde değiştirmeyi deneyebilirsiniz:
C++:
Genişlet Daralt Kopyala
    if (GetGMLevel() >= GM_LOW_WIZARD)
    {
        m_afAffectFlag.Set(AFF_YMIR);
        m_bPKMode = PK_MODE_PROTECT;

        if (GetGMLevel() == GM_IMPLEMENTOR)
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
        else if (GetGMLevel() == GM_HIGH_WIZARD)
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
        else if (GetGMLevel() == GM_GOD)
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
        else if (GetGMLevel() == GM_LOW_WIZARD)
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
    }
evet o zaten işlevsize düşüyor.

C++:
Genişlet Daralt Kopyala
        if (GetGMLevel() == GM_IMPLEMENTOR)
Burayı bu şekilde değiştiriyoruz.

C++:
Genişlet Daralt Kopyala
#ifdef GM_NEW_AFFECTS
        if (GetGMLevel() == GM_IMPLEMENTOR)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_HIGH_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_GOD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_LOW_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
            m_bPKMode = PK_MODE_PROTECT;
        }
#else
        if (GetGMLevel() > GM_LOW_WIZARD)
        {
            m_afAffectFlag.Set(AFF_YMIR);
            m_bPKMode = PK_MODE_PROTECT;
        }
#endif
 
C++:
Genişlet Daralt Kopyala
if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
    return true;
Bu kod tamamen işlevsiz görünüyor.

Çünkü server tarafında;
C++:
Genişlet Daralt Kopyala
        if (GetGMLevel() == GM_IMPLEMENTOR)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_HIGH_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_GOD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_LOW_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
            m_bPKMode = PK_MODE_PROTECT;
        }

AFF_YMIR set edilmiyor, sadece yeni değerler set ediliyor.
Orjinal mantıkta:
C++:
Genişlet Daralt Kopyala
if (GetGMLevel() > GM_LOW_WIZARD)
{
    m_afAffectFlag.Set(AFF_YMIR);
    m_bPKMode = PK_MODE_PROTECT;
}
GM_LOW_WIZARD üstü tüm rütbelere GM rankı veriliyor. Aynı mantığı devam ettirmeyi deneyebilirsiniz, sadece rütbelere göre efektleri ayrı ayrı verirsiniz.
Server tarafını şu şekilde değiştirmeyi deneyebilirsiniz:
C++:
Genişlet Daralt Kopyala
    if (GetGMLevel() >= GM_LOW_WIZARD)
    {
        m_afAffectFlag.Set(AFF_YMIR);
        m_bPKMode = PK_MODE_PROTECT;

        if (GetGMLevel() == GM_IMPLEMENTOR)
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
        else if (GetGMLevel() == GM_HIGH_WIZARD)
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
        else if (GetGMLevel() == GM_GOD)
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
        else if (GetGMLevel() == GM_LOW_WIZARD)
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
    }

Kaiser, Denedim sorun düzeldi fakat şöyle bir sorun oluştu GM Hesapta SA Logosu ile GM Logosu yani 2 logo birden gözükmeye başladı.
 
Kaiser, Denedim sorun düzeldi fakat şöyle bir sorun oluştu GM Hesapta SA Logosu ile GM Logosu yani 2 logo birden gözükmeye başladı.
Orijinal GM efektini devredışı bırakabilirsin. Biri GM logosu, diğerleri rütbe logosu. GM logosunu iptal edip sadece rütbelerin logosu kullanılabilir.
 
C++:
Genişlet Daralt Kopyala
if (m_kAffectFlagContainer.IsSet(AFFECT_YMIR))
    return true;
Bu kod tamamen işlevsiz görünüyor.

Çünkü server tarafında;
C++:
Genişlet Daralt Kopyala
        if (GetGMLevel() == GM_IMPLEMENTOR)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_HIGH_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_GOD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
            m_bPKMode = PK_MODE_PROTECT;
        }
        else if (GetGMLevel() == GM_LOW_WIZARD)
        {
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
            m_bPKMode = PK_MODE_PROTECT;
        }

AFF_YMIR set edilmiyor, sadece yeni değerler set ediliyor.
Orjinal mantıkta:
C++:
Genişlet Daralt Kopyala
if (GetGMLevel() > GM_LOW_WIZARD)
{
    m_afAffectFlag.Set(AFF_YMIR);
    m_bPKMode = PK_MODE_PROTECT;
}
GM_LOW_WIZARD üstü tüm rütbelere GM rankı veriliyor. Aynı mantığı devam ettirmeyi deneyebilirsiniz, sadece rütbelere göre efektleri ayrı ayrı verirsiniz.
Server tarafını şu şekilde değiştirmeyi deneyebilirsiniz:
C++:
Genişlet Daralt Kopyala
    if (GetGMLevel() >= GM_LOW_WIZARD)
    {
        m_afAffectFlag.Set(AFF_YMIR);
        m_bPKMode = PK_MODE_PROTECT;

        if (GetGMLevel() == GM_IMPLEMENTOR)
            m_afAffectFlag.Set(AFFECT_YMIR_SA);
        else if (GetGMLevel() == GM_HIGH_WIZARD)
            m_afAffectFlag.Set(AFFECT_YMIR_GA);
        else if (GetGMLevel() == GM_GOD)
            m_afAffectFlag.Set(AFFECT_YMIR_GM);
        else if (GetGMLevel() == GM_LOW_WIZARD)
            m_afAffectFlag.Set(AFFECT_YMIR_TGM);
    }
Burdan yola çıkarak,
C++:
Genişlet Daralt Kopyala
    //GM일때 보호모드
    if (!test_server)
    {
        if (GetGMLevel() > GM_LOW_WIZARD)
        {
            #ifdef GM_NEW_AFFECTS
                if (GetGMLevel() == GM_IMPLEMENTOR)
                    m_afAffectFlag.Set(AFFECT_YMIR_SA);
                else if (GetGMLevel() == GM_HIGH_WIZARD)
                    m_afAffectFlag.Set(AFFECT_YMIR_GA);
                else if (GetGMLevel() == GM_GOD)
                    m_afAffectFlag.Set(AFFECT_YMIR_GM);
                else if (GetGMLevel() == GM_LOW_WIZARD)
                    m_afAffectFlag.Set(AFFECT_YMIR_TGM);
            #else
                    m_afAffectFlag.Set(AFF_YMIR);
            #endif
            m_bPKMode = PK_MODE_PROTECT;
        }
    }

böyle birşey yaptım sadece efektleri alsın diye hatta kodları daha da derli toplu olsun diye switch caseye bağladım aşağıya bırakıyorum ama ne hikmetse affecti görüyor ama IsGameMaster sorgusunda sadece ve sadece implementoru kabul etmiyor ama efekti doğru geliyor. Bunu da şöyle çözdüm.

GM_IMPLEMENTOR yerine GM_LOW_WIZARD yazdım. Tüm gmlere gelen ortak gm.mseyide kapattım sorun çözüldü. Ama saçmalık şurda
m_afAffectFlag.Set(AFFECT_YMIR_SA); 2side aynı affecti çekiyor ama karekterlerde doğru efekt görünüyor. :D

Switch caseli derli toplu olarak düşündüğüm kod parçası :

C++:
Genişlet Daralt Kopyala
    //GM일때 보호모드
    if (!test_server)
    {
        #ifdef GM_NEW_AFFECTS
            switch (GetGMLevel())
            {
                case GM_IMPLEMENTOR:
                    m_afAffectFlag.Set(AFFECT_YMIR_SA);     // SA / Implementor
                    break;

                case GM_HIGH_WIZARD:
                    m_afAffectFlag.Set(AFFECT_YMIR_GA);     // GA
                    break;

                case GM_GOD:
                    m_afAffectFlag.Set(AFFECT_YMIR_GM);     // GM
                    break;

                case GM_LOW_WIZARD:
                    m_afAffectFlag.Set(AFFECT_YMIR_TGM);    // TGM
                    break;

                default:
                    break;
            }

            if (GetGMLevel() > GM_PLAYER)
                m_bPKMode = PK_MODE_PROTECT;
        #else
            if (GetGMLevel() > GM_LOW_WIZARD)
            {
                m_afAffectFlag.Set(AFF_YMIR);
                m_bPKMode = PK_MODE_PROTECT;
            }
        #endif

    }

Muhtemelen client src tarafında implementor gm olarak görünmüyor ya da gelen vid değeri 0 olarak geliyor. Diğer gmlerde yine sorun yok. Switch casedeki GM_IMPLEMENTOR'uda yine aynı GM_LOW_WIZARD yazarsam çalışıyor bu arada. Ama nasıl olursa olsun GM_IMPLEMENTOR kullanırsam çalışmıyor. Affect çalışıyor ama :D

Bu arada geçici bir çözüm bu doğrusunu ve güzelini bulursam konu altından güncelleme geçerim mutlaka.
 
Son düzenleme:
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst