Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
mavzermete 1
mavzermete
Bvural41 1
Bvural41
Hikaye Ekle

Cevaplandı Yeni Affect Ekleme Sorunu

  • Konuyu başlatan Konuyu başlatan kadobaba1
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 2
  • Görüntüleme Görüntüleme 69
AFFECT.H KOD BLOĞU
C++:
#ifdef CARBON_PREMIUM_OTO
    AFFECT_CARBON_PREMIUM = 545,
#endif
CHAR_İTEM KOD BLOĞU
C++:
#ifdef CARBON_PREMIUM_OTO
            // --- CARBON PREMIUM EŞYASI KULLANIMI BAŞLANGIÇ ---
            case 99917: // 1 Saatlik Premium Eşyası
            case 99918: // 12 Saatlik Premium Eşyası
            case 99919: // 24 Saatlik Premium Eşyası (GÜNCELLENDİ)
            case 99920: // 1 Aylık Premium Eşyası
            {
                // Zaten aktifse tekrar üst üste basılmasını engelliyoruz
                if (ch->FindAffect(AFFECT_CARBON_PREMIUM))
                {
                    ch->ChatPacket(CHAT_TYPE_INFO, "Carbon Premium zaten aktif!");
                    return false;
                }

                long lDuration = 0;

                // Oyuncunun tıkladığı eşyanın koduna göre (VNUM) saniye hesabı yapıyoruz
                switch (item->GetVnum())
                {
                    case 99917:
                        lDuration = 60 * 60 * 1;        // 1 Saat (3.600 saniye)
                        break;
                    case 99918:
                        lDuration = 60 * 60 * 12;       // 12 Saat (43.200 saniye)
                        break;
                    case 99919:
                        lDuration = 60 * 60 * 24;       // 24 Saat [1 Gün] (86.400 saniye) - (GÜNCELLENDİ)
                        break;
                    case 99920:
                        lDuration = 60 * 60 * 24 * 30;  // 1 Ay [30 Gün] (2.592.000 saniye)
                        break;
                    default:
                        lDuration = 60 * 60 * 24;       // Güvenlik önlemi
                        break;
                }

                // AFFECT TABLOSUNA (DB) VE KARAKTERE SÜREYİ İŞLİYORUZ
                ch->AddAffect(AFFECT_CARBON_PREMIUM, POINT_NONE, 0, AFF_NONE, lDuration, 0, false);
                
                // Eşyayı envanterden 1 adet siliyoruz
                item->SetCount(item->GetCount() - 1);

                // Client'e (Python tarafına) aktif etme komutunu gönderiyoruz
                ch->ChatPacket(CHAT_TYPE_COMMAND, "CarbonPremiumStatus 1");
                ch->ChatPacket(CHAT_TYPE_INFO, "Carbon Premium basariyla aktif edildi! Iyi avlar.");
                break;
            }
            // --- CARBON PREMIUM EŞYASI KULLANIMI BİTİŞ ---
#endif

PYTHONCHARACTERMODULE.CPP
C++:
#ifdef CARBON_PREMIUM_OTO
    PyModule_AddIntConstant(poModule, "AFFECT_CARBON_PREMIUM", CInstanceBase::AFFECT_CARBON_PREMIUM);
#endif

INSTANCEBASE.H
Kod:
#ifdef CARBON_PREMIUM_OTO
            AFFECT_CARBON_PREMIUM = 545,
#endif

PYTHONAPPLİCATİONMODULE.CPP

Kod:
#ifdef CARBON_PREMIUM_OTO
    PyModule_AddIntConstant(poModule, "CARBON_PREMIUM_OTO", 1);
#else
    PyModule_AddIntConstant(poModule, "CARBON_PREMIUM_OTO", 0);
#endif

UİAFFECTSHOWER.PY
Python:
    if app.CARBON_PREMIUM_OTO:
        AFFECT_DATA_DICT[chr.AFFECT_CARBON_PREMIUM] = (localeInfo.TOOLTIP_CARBON_PREMIUM, "d:/ymir work/ui/skill/common/affect/att_bonus.sub"),

Kodları bu şekilde düzenledim ancak, Eşyaya sağ tıkladığım zaman karekterime bonuslar işleniyor, Affect ID'si player.affect tablosuna düşmüyor. Sol üstte beliren ikonlar arasında yer almıyor yardım edermisiniz?
 
Sorunun 2 Ana Sebebi Var:

  1. POINT_NONE ve 0 Değeri (En Kritik Hata):Metin2 çekirdek mimarisinde POINT_NONE veya 0 değeri verilen affect'ler "etkisiz" kabul edilir. Motor bunu işlevsiz gördüğü için player.affect veritabanına kaydetmez ve paket oluşturup sol üstteki uiAffectShower paneline göndermez.
    • Çözüm: char_item.cpp içerisindeki AddAffect satırını en az 1 sembolik değer verecek şekilde değiştirin:

      C++

      POINT_NONE ve 0 yerine sembolik bir point ve değer verin:(AFFECT_CARBON_PREMIUM, POINT_EXP_BONUS, 1, AFF_NONE, lDuration0, false);
  2. Affect ID Limiti (545 Sınırı):Atadığınız 545 ID'si, client tarafındaki AFFECT_MAX_NUM veya paket sınırının (BYTE/WORD) üzerindeyse client paketi reddeder ve ikon görünmez.
    • Çözüm: ID'yi hem Server hem Clienttarafında boşta olan daha küçük bir değere çekin ya da client paket yapısındaki affect sınırını kontrol edin.
Özetle: char_item.cpp dosyasında POINT_NONE ve 0 parametrelerini geçerli bir değerle değiştirip game/client src derlerseniz sorun çözülecektir.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst