Çözüldü Costume Weapon Sistemi

  • Konuyu açan Konuyu açan Happy Way
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 30
  • Gösterim Gösterim 212
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ı.

Happy Way

Üye
Üye
Mesaj
120
Çözümler
13
Beğeni
38
Puan
749
Ticaret Puanı
0
Costume weapon sistemini ekledim daha sonra test ederken kostüm silahı giyiliyor gözüküyor problem yok fakat
şöyle bir bug var. Bakmak istediğiniz dosya olursa belirtin konuya dahil ederim.
Karakter atınca silah elde gözükmüyor normal olması gerektiği gibi oluyor.
Normal çıkartınca elde kalıyor silah.
Krakterin elindeki silah çıkmasına rağmen krakterin elinde gözüküyor örnek resim ;
Linkleri görebilmek için giriş yap veya kayıt ol.

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

(İP ALL ) komutundan sonrada bu şekilde: @MT2Dev
Linkleri görebilmek için giriş yap veya kayıt ol.


Linkleri görebilmek için giriş yap veya kayıt ol.
Kostüm Silahını giymeye çalışıncada giymiyor. Çünkü silah yok sadece görsel olarak var.
Tek problem Burası.
Linkleri görebilmek için giriş yap veya kayıt ol.

SYSSR VS Vermiyor (DB-CH1-CH99-AUTH CLİENT SYSSR TEMİZ.) MARTY 5.8 Filesinden geçirdim mainline alt yapıya.


ItemData.h:
Genişlet Daralt Kopyala
        enum ECostumeSubTypes
        {
            COSTUME_BODY,                //0
            COSTUME_HAIR,                //1
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
            COSTUME_WEAPON    = 4,        //2
#endif
            COSTUME_NUM_TYPES,
        };

        enum EWearPositions
        {
            WEAR_BODY,        // 0
            WEAR_HEAD,        // 1
            WEAR_FOOTS,        // 2
            WEAR_WRIST,        // 3
            WEAR_WEAPON,    // 4
            WEAR_NECK,        // 5
            WEAR_EAR,        // 6
            WEAR_UNIQUE1,    // 7
            WEAR_UNIQUE2,    // 8
            WEAR_ARROW,        // 9
            WEAR_SHIELD,    // 10
            WEAR_ABILITY1,        // 11
            WEAR_ABILITY2,        // 12
            WEAR_ABILITY3,        // 13
            WEAR_ABILITY4,        // 14
            WEAR_ABILITY5,        // 15
            WEAR_ABILITY6,        // 16
            WEAR_ABILITY7,        // 17
            WEAR_ABILITY8,        // 18
            WEAR_COSTUME_BODY,    // 19
            WEAR_COSTUME_HAIR,    // 20
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
            WEAR_COSTUME_WEAPON,// 21
#endif
            WEAR_BELT,            // 22
            WEAR_RING1,            // 23
            WEAR_RING2,            // 24
            WEAR_MAX_NUM = 32    //
        };
item_lenght.h:
Genişlet Daralt Kopyala
enum ECostumeSubTypes
{
    COSTUME_BODY = ARMOR_BODY,            //0
    COSTUME_HAIR = ARMOR_HEAD,            //1
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
    COSTUME_WEAPON    = 4,                //2
#endif
    COSTUME_NUM_TYPES,
};
lenght.h:
Genişlet Daralt Kopyala
enum EWearPositions
{
    WEAR_BODY,            // 0
    WEAR_HEAD,            // 1
    WEAR_FOOTS,            // 2
    WEAR_WRIST,            // 3
    WEAR_WEAPON,        // 4
    WEAR_NECK,            // 5
    WEAR_EAR,            // 6
    WEAR_UNIQUE1,        // 7
    WEAR_UNIQUE2,        // 8
    WEAR_ARROW,            // 9
    WEAR_SHIELD,        // 10
    WEAR_ABILITY1,        // 11
    WEAR_ABILITY2,        // 12
    WEAR_ABILITY3,        // 13
    WEAR_ABILITY4,        // 14
    WEAR_ABILITY5,        // 15
    WEAR_ABILITY6,        // 16
    WEAR_ABILITY7,        // 17
    WEAR_ABILITY8,        // 18
    WEAR_COSTUME_BODY,    // 19
    WEAR_COSTUME_HAIR,    // 20
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
    WEAR_COSTUME_WEAPON,// 21
#endif
    WEAR_BELT,            // 22
    WEAR_RING1,            // 23
    WEAR_RING2,            // 24
    WEAR_MAX = 32    //
};
İtemCSVReader.cpp:
Genişlet Daralt Kopyala
    static string arSub27[] =
    {
        "COSTUME_BODY",
        "COSTUME_HAIR",
        "COSTUME_MOUNT",
        "COSTUME_ACCE",
        "COSTUME_WEAPON",
        "COSTUME_AURA",
    };
Char_item.cpp Unequip:
Genişlet Daralt Kopyala
bool CHARACTER::UnequipItem (LPITEM item)
{
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
    int iWearCell = item->FindEquipCell(this);
    if (iWearCell == WEAR_WEAPON)
    {
        LPITEM costumeWeapon = GetWear(WEAR_COSTUME_WEAPON);
        if (costumeWeapon && !UnequipItem(costumeWeapon))
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot unequip the costume weapon. Not enough space."));
            return false;
        }
    }
#endif
    int pos;

    if (false == CanUnequipNow (item))
    {
        return false;
    }

    if (item->IsDragonSoul())
    {
        pos = GetEmptyDragonSoulInventory (item);
    }
    else
    {
        pos = GetEmptyInventory (item->GetSize());
    }

    // HARD CODING
    if (item->GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE)
    {
        ShowAlignment (true);
    }

    item->RemoveFromCharacter();
    if (item->IsDragonSoul())
    {
        item->AddToCharacter (this, TItemPos (DRAGON_SOUL_INVENTORY, pos));
    }
    else
    {
        item->AddToCharacter (this, TItemPos (INVENTORY, pos));
    }

    CheckMaximumPoints();

    return true;
}
item_proto.sql:
Genişlet Daralt Kopyala
40101    ÇÒ·ÎÀ© ´Üµµ(¹«)    ITEM_COSTUME    COSTUME_WEAPON    2    ANTI_MUDANG | ANTI_DROP | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    0    REAL_TIME    86400    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    30    0    0
40102    ÇÒ·ÎÀ© ´ë°Å(¹«)    ITEM_COSTUME    COSTUME_WEAPON    1    ANTI_MUSA | ANTI_SURA | ANTI_MUDANG | ANTI_DROP | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    0    REAL_TIME    86400    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    1    0    0    30    0    0
40103    ÇÒ·ÎÀ© È°(¹«)    ITEM_COSTUME    COSTUME_WEAPON    2    ANTI_MUSA | ANTI_SURA | ANTI_MUDANG | ANTI_DROP | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    0    REAL_TIME    86400    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    2    0    0    30    0    0
40104    ÇÒ·ÎÀ© ¾ç¼Õ°Ë(¹«)    ITEM_COSTUME    COSTUME_WEAPON    3    ANTI_ASSASSIN | ANTI_SURA | ANTI_MUDANG | ANTI_DROP | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    0    REAL_TIME    86400    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    3    0    0    30    0    0
40105    ÇÒ·ÎÀ© ¹æ¿ï(¹«)    ITEM_COSTUME    COSTUME_WEAPON    1    ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA | ANTI_DROP | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    0    REAL_TIME    86400    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    4    0    0    30    0    0
40106    ÇÒ·ÎÀ© ºÎä(¹«)    ITEM_COSTUME    COSTUME_WEAPON    1    ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA | ANTI_DROP | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    0    REAL_TIME    86400    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    5    0    0    30    0    0
40107    ÇÒ·ÎÀ© Å©·Î¿ì(¹«)    ITEM_COSTUME    COSTUME_WEAPON    1    ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA | ANTI_MUDANG | ANTI_DROP | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP    NONE    NONE    NONE    0    0    0    0    0    REAL_TIME    86400    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    8    0    0    30    0    0
40108    ÇÒ·ÎÀ© ÇѼհË(À¯)    ITEM_COSTUME    COSTUME_WEAPON    2    ANTI_MUDANG | ANTI_STACK | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    100    REAL_TIME    2592000    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    100    0    0
40109    ÇÒ·ÎÀ© ´Üµµ(À¯)    ITEM_COSTUME    COSTUME_WEAPON    1    ANTI_MUSA | ANTI_SURA | ANTI_MUDANG | ANTI_PKDROP | ANTI_STACK | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    100    REAL_TIME    2592000    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    1    0    0    100    0    0
40110    ÇÒ·ÎÀ© È°(À¯)    ITEM_COSTUME    COSTUME_WEAPON    2    ANTI_MUSA | ANTI_SURA | ANTI_MUDANG | ANTI_PKDROP | ANTI_STACK | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    100    REAL_TIME    2592000    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    2    0    0    100    0    0
40111    ÇÒ·ÎÀ© ¾ç¼Õ°Ë(À¯)    ITEM_COSTUME    COSTUME_WEAPON    3    ANTI_ASSASSIN | ANTI_SURA | ANTI_MUDANG | ANTI_PKDROP | ANTI_STACK | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    100    REAL_TIME    2592000    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    3    0    0    100    0    0
40112    ÇÒ·ÎÀ© ¹æ¿ï(À¯)    ITEM_COSTUME    COSTUME_WEAPON    1    ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA | ANTI_PKDROP | ANTI_STACK | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    100    REAL_TIME    2592000    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    4    0    0    100    0    0
40113    ÇÒ·ÎÀ© ºÎä(À¯)    ITEM_COSTUME    COSTUME_WEAPON    1    ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA | ANTI_PKDROP | ANTI_STACK | ANTI_WOLFMAN    NONE    NONE    NONE    0    0    0    0    100    REAL_TIME    2592000    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    5    0    0    100    0    0
40114    ÇÒ·ÎÀ© Å©·Î¿ì(À¯)    ITEM_COSTUME    COSTUME_WEAPON    1    ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA | ANTI_MUDANG | ANTI_PKDROP | ANTI_STACK    NONE    NONE    NONE    0    0    0    0    100    REAL_TIME    2592000    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    8    0    0    100    0    0
 
Son düzenleme:
Problem server tarafından kaynaklanıyor client taraflı bir problem olmadığını düşünüyorum şöyle bir deneme yaptım kostüme weapon sistemini devre dışı bıraktım client üzerinden sadece silah giy çıkar yaptım ve aynı şekilde silah elimde kaldı.
 
Sorun net birşekilde server tarafında olduğuna emin oldum.

Client #define weapon devre dışı bıraktım. Denedim devam etti problem
Server #define weapon devre dışı client #define weapon aktif problem çözüldü.
Server tarafındaki dosyaları tekrar ekliyip denicem
 
Sorun sanırım server veya client taraflı değil. Daha farklı.
Dikkatimi çeken noktaları göstereceğim; buna bağlı olarak eklemeleri doğrudan çekmek yerine kendi filesına göre uyarlayıp eklemen gerekecek.

Öncelikle ItemData.h dosyasına şöyle eklemişsin:
C++:
Genişlet Daralt Kopyala
    enum ECostumeSubTypes
        {
            COSTUME_BODY,         
            COSTUME_HAIR,             
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
            COSTUME_WEAPON    = 4,   
#endif
            COSTUME_NUM_TYPES,
        };

Buraya = 4 şeklinde eklemişsin fakat bu enuma göre COSTUME_WEAPON değer olarak 2'ye denk geliyor. 4 olamaz çünkü enum 4 veriye sahip değil. Bu yüzden eklenen satırlar, veri sırasını temsil etmelidir. (... = 4) yazmak bu satırın değerini 4 yapmaz.

Aynı şekilde item_lengt.h içindeki şu blokta da aynı şey oluyor ve 2'ye denk geliyor..
C++:
Genişlet Daralt Kopyala
enum ECostumeSubTypes
{
    COSTUME_BODY = ARMOR_BODY,         
    COSTUME_HAIR = ARMOR_HEAD,         
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
    COSTUME_WEAPON    = 4,             
#endif
    COSTUME_NUM_TYPES,
};

GameType.h dosyasına baktığımızda:
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_COSTUME_SYSTEM
    const DWORD c_Costume_Slot_Start    = c_Equipment_Start + CItemData::WEAR_COSTUME_BODY;
    const DWORD    c_Costume_Slot_Body        = c_Costume_Slot_Start + CItemData::COSTUME_BODY;
    const DWORD    c_Costume_Slot_Hair        = c_Costume_Slot_Start + CItemData::COSTUME_HAIR;
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
    const DWORD    c_Costume_Slot_Mount    = c_Costume_Slot_Start + CItemData::COSTUME_MOUNT;
#endif
#ifdef ENABLE_ACCE_COSTUME_SYSTEM
    const DWORD    c_Costume_Slot_Acce        = c_Costume_Slot_Start + CItemData::COSTUME_ACCE;
#endif

#if defined(ENABLE_WEAPON_COSTUME_SYSTEM) || defined(ENABLE_ACCE_COSTUME_SYSTEM)
    const DWORD c_Costume_Slot_Count    = 4;
#elif defined(ENABLE_MOUNT_COSTUME_SYSTEM)
    const DWORD c_Costume_Slot_Count    = 3;
#else
    const DWORD c_Costume_Slot_Count    = 2;
#endif

    const DWORD c_Costume_Slot_End        = c_Costume_Slot_Start + c_Costume_Slot_Count;

#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
    const DWORD    c_Costume_Slot_Weapon    = c_Equipment_Start + CItemData::WEAR_COSTUME_WEAPON; // c_Costume_Slot_End + 1;
#endif

#endif
Burada ise slota bağlı olan verinin değeri (silah kostümü) = 4 olarak çağrılıyor.(CItemData::WEAR_COSTUME_WEAPON)
Ama hem server hem de client tarafında 4. verinin varlığı tam olarak bilinmiyor. Hem var, hem yok.
Dolayısıyla tüm bu faktörleri dikkate alarak kendi filesının değerlerine göre düzenleyerek eklemen gerekiyor. Bu kostüm sistemlerinin tamamı için geçerli bir durumdur.
 
GameType.h yükler misin? Ve db/ClientManagerBoot.cpp

Sorun sanırım server veya client taraflı değil. Daha farklı.
Dikkatimi çeken noktaları göstereceğim; buna bağlı olarak eklemeleri doğrudan çekmek yerine kendi filesına göre uyarlayıp eklemen gerekecek.

Öncelikle ItemData.h dosyasına şöyle eklemişsin:
C++:
Genişlet Daralt Kopyala
    enum ECostumeSubTypes
        {
            COSTUME_BODY,         
            COSTUME_HAIR,             
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
            COSTUME_WEAPON    = 4,   
#endif
            COSTUME_NUM_TYPES,
        };

Buraya = 4 şeklinde eklemişsin fakat bu enuma göre COSTUME_WEAPON değer olarak 2'ye denk geliyor. 4 olamaz çünkü enum 4 veriye sahip değil. Bu yüzden eklenen satırlar, veri sırasını temsil etmelidir. (... = 4) yazmak bu satırın değerini 4 yapmaz.

Aynı şekilde item_lengt.h içindeki şu blokta da aynı şey oluyor ve 2'ye denk geliyor..
C++:
Genişlet Daralt Kopyala
enum ECostumeSubTypes
{
    COSTUME_BODY = ARMOR_BODY,         
    COSTUME_HAIR = ARMOR_HEAD,         
#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
    COSTUME_WEAPON    = 4,             
#endif
    COSTUME_NUM_TYPES,
};

GameType.h dosyasına baktığımızda:
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_COSTUME_SYSTEM
    const DWORD c_Costume_Slot_Start    = c_Equipment_Start + CItemData::WEAR_COSTUME_BODY;
    const DWORD    c_Costume_Slot_Body        = c_Costume_Slot_Start + CItemData::COSTUME_BODY;
    const DWORD    c_Costume_Slot_Hair        = c_Costume_Slot_Start + CItemData::COSTUME_HAIR;
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
    const DWORD    c_Costume_Slot_Mount    = c_Costume_Slot_Start + CItemData::COSTUME_MOUNT;
#endif
#ifdef ENABLE_ACCE_COSTUME_SYSTEM
    const DWORD    c_Costume_Slot_Acce        = c_Costume_Slot_Start + CItemData::COSTUME_ACCE;
#endif

#if defined(ENABLE_WEAPON_COSTUME_SYSTEM) || defined(ENABLE_ACCE_COSTUME_SYSTEM)
    const DWORD c_Costume_Slot_Count    = 4;
#elif defined(ENABLE_MOUNT_COSTUME_SYSTEM)
    const DWORD c_Costume_Slot_Count    = 3;
#else
    const DWORD c_Costume_Slot_Count    = 2;
#endif

    const DWORD c_Costume_Slot_End        = c_Costume_Slot_Start + c_Costume_Slot_Count;

#ifdef ENABLE_WEAPON_COSTUME_SYSTEM
    const DWORD    c_Costume_Slot_Weapon    = c_Equipment_Start + CItemData::WEAR_COSTUME_WEAPON; // c_Costume_Slot_End + 1;
#endif

#endif
Burada ise slota bağlı olan verinin değeri (silah kostümü) = 4 olarak çağrılıyor. Ama server tarafında 4. verinin varlığı tam olarak bilinmiyor.
Hem var, hem yok.
Dolayısıyla tüm bu faktörleri dikkate alarak kendi filesının değerlerine göre düzenleyerek eklemen gerekiyor. Bu kostüm sistemlerinin tamamı için geçerli bir durumdur.
Haklısınız bunlara dikkat etmedim sistemi doğrudan geçirmiştim hasana'da sordum oda öncelikle diğer sistemleri geçirip sonra onu eklemiş o yüzden problem yaşamadı demekki ben onları daha sonra eklemeyi düşünüyordum yine öyle yapsam şu gösterilen verileri güncellersem sql tabanlıda işlem yapam gerekicek sanırım type subtype'larda demi
yada geçici bir enum değeri ile 4'e alamazmıyız bu değeri kullanılmayacak 2 adet enum ekleyerek önüne daha sonra onlara ekleme yapsam
 
Haklısınız bunlara dikkat etmedim sistemi doğrudan geçirmiştim hasana'da sordum oda öncelikle diğer sistemleri geçirip sonra onu eklemiş o yüzden problem yaşamadı demekki ben onları daha sonra eklemeyi düşünüyordum yine öyle yapsam şu gösterilen verileri güncellersem sql tabanlıda işlem yapam gerekicek sanırım type subtype'larda demi
yada geçici bir enum değeri ile 4'e alamazmıyız bu değeri kullanılmayacak 2 adet enum ekleyerek önüne daha sonra onlara ekleme yapsam
Bahsettiğim faktörlerin birbirleriyle tamamen uyuşması önemli. Önce veya sonra eklemen böyle bir durumda fark etmez.
Söylediğin şeyi deneyebilirsin, eğer olursa öyle yaparsın. Olmazsa tamamen düzenlemen gerekir.
 
dc ekle .nyami. baştan sona server tarafını düzeltip olası buglarını fixleyim. yanlış anlama ücret filan istemiyorum amaç iyilik olsun 😇
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst