Çözüldü item yansıtma sistemi hk.

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 4
  • Gösterim Gösterim 82
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ı.

enes turan

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
559
Çözümler
35
Beğeni
281
Puan
909
Ticaret Puanı
0
merhabalar
Linkleri görebilmek için giriş yap veya kayıt ol.
item yansıtma sistemini ekledim fakar bir kaç problemim var ve bir türlü çözemedim

şöyleki
1002_005954.webp


mesela kesici diş bıçağına şeker çubuğu yansıtılmış fakat taktığımda halen daha kesici diş bıcağını gösteriyor
yada
1002_010126.webp


beyaz aslana yaban domuzu yansıtılmış fakat halen daha beyaz aslan olarak gözüküyor

herhangi bir syseer vermiyor silah ve zırh yansıttığımda böyle sorun olmuyor ne yansıtıldıysa o gözüküyor sadece kostüm sınıfında bu hata var fakat çözemedim bir türlü bilgisi olan yardımcı olabilirmi ?

item.cpp:
Genişlet Daralt Kopyala
        case ITEM_COSTUME:
            {
                DWORD toSetValue = this->GetVnum();
                EParts toSetPart = PART_MAX_NUM;

                if (GetSubType() == COSTUME_BODY)
                {
                    toSetPart = PART_MAIN;
                    if (false == bAdd)
                    {
#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
                        const CItem* pArmor = m_pOwner->GetEquipWear(WEAR_BODY);
#else
                        const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY);
#endif
#if defined(__BL_TRANSMUTATION__)
                        if (pArmor != NULL)
                        {
                            const DWORD dwVnum = pArmor->GetVnum();
                            const DWORD dwTransmutationVnum = pArmor->GetTransmutationVnum();
                            toSetValue = dwTransmutationVnum != 0 ? dwTransmutationVnum : dwVnum;
                        }
                        else
                        {
                            toSetValue = m_pOwner->GetOriginalPart(PART_MAIN);
                        }
#else
                        toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);
#endif
                    }
                }



                // 헤어 코스츔
                else if (GetSubType() == COSTUME_HAIR)
                {
                    toSetPart = PART_HAIR;

                    // 코스츔 헤어는 shape값을 item proto의 value3에 세팅하도록 함. 특별한 이유는 없고 기존 갑옷(ARMOR_BODY)의 shape값이 프로토의 value3에 있어서 헤어도 같이 value3으로 함.
                    // [NOTE] 갑옷은 아이템 vnum을 보내고 헤어는 shape(value3)값을 보내는 이유는.. 기존 시스템이 그렇게 되어있음...
                    toSetValue = (true == bAdd) ? this->GetValue (3) : 0;
                }
#ifdef ENABLE_ACCE_SYSTEM
                else if (GetSubType() == COSTUME_ACCE)
                {
                    toSetValue -= 85000;
                    if (GetSocket(ACCE_ABSORPTION_SOCKET) >= ACCE_EFFECT_FROM_ABS)
                        toSetValue += 500;

                    toSetValue = (bAdd == true) ? toSetValue : 0;
                    toSetPart = PART_ACCE;
                }
#endif

#ifdef __WEAPON_COSTUME_SYSTEM__
                else if (GetSubType() == COSTUME_WEAPON)
                {
                    toSetPart = PART_WEAPON;
                    if (false == bAdd)
                    {
#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
                        const CItem* pWeapon = m_pOwner->GetEquipWear(WEAR_WEAPON);
#else
                        const CItem* pWeapon = m_pOwner->GetWear(WEAR_WEAPON);
#endif
#if defined(__BL_TRANSMUTATION__)
                        if (pWeapon)
                        {
                            const DWORD dwVnum = pWeapon->GetVnum();
                            const DWORD dwTransmutationVnum = pWeapon->GetTransmutationVnum();
                            toSetValue = dwTransmutationVnum != 0 ? dwTransmutationVnum : dwVnum;
                        }
                        else
                        {
                            toSetValue = m_pOwner->GetOriginalPart(PART_WEAPON);
                        }
#else
                        toSetValue = (NULL != pWeapon) ? pWeapon->GetVnum() : m_pOwner->GetOriginalPart(PART_WEAPON);
#endif
                    }
                }
#endif

#ifdef __AURA_SYSTEM__
                else if (GetSubType() == COSTUME_AURA)
                {
                    if (m_wCell == INVENTORY_MAX_NUM + WEAR_COSTUME_AURA)
                        m_pOwner->SetPart(PART_AURA, bAdd ? GetVnum() : m_pOwner->GetOriginalPart(PART_AURA));
                }
#endif
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
                else if (GetSubType() == COSTUME_MOUNT)
                {
                    // not need to do a thing in here
                }
#endif
                if (PART_MAX_NUM != toSetPart)
                {
                    m_pOwner->SetPart ((BYTE)toSetPart, toSetValue);
                    m_pOwner->UpdatePacket();
                }
            }
            break;
 
Çözüm
@xenfero yardımları sayesinde sorunlar çözüldü teşekkürler

kostüm gizleme sistemi için char.cpp:
Genişlet Daralt Kopyala
WORD CHARACTER::GetPart (BYTE bPartPos) const
{
    assert (bPartPos < PART_MAX_NUM);

#ifdef __HIDE_COSTUME_SYSTEM__
    if (bPartPos == PART_MAIN && GetWear(WEAR_COSTUME_BODY) && IsBodyCostumeHidden() == true)
    {
        if (const LPITEM pArmor = GetWear(WEAR_BODY))
#if defined(__BL_TRANSMUTATION__)
            return pArmor->GetTransmutationVnum() != 0 ? pArmor->GetTransmutationVnum() : pArmor->GetVnum();
#else
            return pArmor->GetVnum();
#endif
        else
            return 0;
    }
    else if (bPartPos == PART_HAIR && GetWear(WEAR_COSTUME_HAIR) && IsHairCostumeHidden() == true)
        return 0;
    else if (bPartPos == PART_ACCE &&...
merhabalar
Linkleri görebilmek için giriş yap veya kayıt ol.
item yansıtma sistemini ekledim fakar bir kaç problemim var ve bir türlü çözemedim

şöyleki
19197 eklentisini görüntüle

mesela kesici diş bıçağına şeker çubuğu yansıtılmış fakat taktığımda halen daha kesici diş bıcağını gösteriyor
yada
19198 eklentisini görüntüle

beyaz aslana yaban domuzu yansıtılmış fakat halen daha beyaz aslan olarak gözüküyor

herhangi bir syseer vermiyor silah ve zırh yansıttığımda böyle sorun olmuyor ne yansıtıldıysa o gözüküyor sadece kostüm sınıfında bu hata var fakat çözemedim bir türlü bilgisi olan yardımcı olabilirmi ?

item.cpp:
Genişlet Daralt Kopyala
        case ITEM_COSTUME:
            {
                DWORD toSetValue = this->GetVnum();
                EParts toSetPart = PART_MAX_NUM;

                if (GetSubType() == COSTUME_BODY)
                {
                    toSetPart = PART_MAIN;
                    if (false == bAdd)
                    {
#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
                        const CItem* pArmor = m_pOwner->GetEquipWear(WEAR_BODY);
#else
                        const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY);
#endif
#if defined(__BL_TRANSMUTATION__)
                        if (pArmor != NULL)
                        {
                            const DWORD dwVnum = pArmor->GetVnum();
                            const DWORD dwTransmutationVnum = pArmor->GetTransmutationVnum();
                            toSetValue = dwTransmutationVnum != 0 ? dwTransmutationVnum : dwVnum;
                        }
                        else
                        {
                            toSetValue = m_pOwner->GetOriginalPart(PART_MAIN);
                        }
#else
                        toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);
#endif
                    }
                }



                // 헤어 코스츔
                else if (GetSubType() == COSTUME_HAIR)
                {
                    toSetPart = PART_HAIR;

                    // 코스츔 헤어는 shape값을 item proto의 value3에 세팅하도록 함. 특별한 이유는 없고 기존 갑옷(ARMOR_BODY)의 shape값이 프로토의 value3에 있어서 헤어도 같이 value3으로 함.
                    // [NOTE] 갑옷은 아이템 vnum을 보내고 헤어는 shape(value3)값을 보내는 이유는.. 기존 시스템이 그렇게 되어있음...
                    toSetValue = (true == bAdd) ? this->GetValue (3) : 0;
                }
#ifdef ENABLE_ACCE_SYSTEM
                else if (GetSubType() == COSTUME_ACCE)
                {
                    toSetValue -= 85000;
                    if (GetSocket(ACCE_ABSORPTION_SOCKET) >= ACCE_EFFECT_FROM_ABS)
                        toSetValue += 500;

                    toSetValue = (bAdd == true) ? toSetValue : 0;
                    toSetPart = PART_ACCE;
                }
#endif

#ifdef __WEAPON_COSTUME_SYSTEM__
                else if (GetSubType() == COSTUME_WEAPON)
                {
                    toSetPart = PART_WEAPON;
                    if (false == bAdd)
                    {
#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
                        const CItem* pWeapon = m_pOwner->GetEquipWear(WEAR_WEAPON);
#else
                        const CItem* pWeapon = m_pOwner->GetWear(WEAR_WEAPON);
#endif
#if defined(__BL_TRANSMUTATION__)
                        if (pWeapon)
                        {
                            const DWORD dwVnum = pWeapon->GetVnum();
                            const DWORD dwTransmutationVnum = pWeapon->GetTransmutationVnum();
                            toSetValue = dwTransmutationVnum != 0 ? dwTransmutationVnum : dwVnum;
                        }
                        else
                        {
                            toSetValue = m_pOwner->GetOriginalPart(PART_WEAPON);
                        }
#else
                        toSetValue = (NULL != pWeapon) ? pWeapon->GetVnum() : m_pOwner->GetOriginalPart(PART_WEAPON);
#endif
                    }
                }
#endif

#ifdef __AURA_SYSTEM__
                else if (GetSubType() == COSTUME_AURA)
                {
                    if (m_wCell == INVENTORY_MAX_NUM + WEAR_COSTUME_AURA)
                        m_pOwner->SetPart(PART_AURA, bAdd ? GetVnum() : m_pOwner->GetOriginalPart(PART_AURA));
                }
#endif
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
                else if (GetSubType() == COSTUME_MOUNT)
                {
                    // not need to do a thing in here
                }
#endif
                if (PART_MAX_NUM != toSetPart)
                {
                    m_pOwner->SetPart ((BYTE)toSetPart, toSetValue);
                    m_pOwner->UpdatePacket();
                }
            }
            break;

char.cpp aç dostum ara:
Kod:
Genişlet Daralt Kopyala
    if (mountItem->GetValue(0) != 0)
        mobVnum = mountItem->GetValue(0);


değiştir:

Kod:
Genişlet Daralt Kopyala
    if (mountItem->GetTransmutationVnum() != 0)
        mobVnum = mountItem->GetTransmutationVnum();
    else if (mountItem->GetValue(0) != 0)
        mobVnum = mountItem->GetValue(0);

Sorununun buradan kaynaklandığını düşünüyorum.
 
char.cpp aç dostum ara:
Kod:
Genişlet Daralt Kopyala
    if (mountItem->GetValue(0) != 0)
        mobVnum = mountItem->GetValue(0);


değiştir:

Kod:
Genişlet Daralt Kopyala
    if (mountItem->GetTransmutationVnum() != 0)
        mobVnum = mountItem->GetTransmutationVnum();
    else if (mountItem->GetValue(0) != 0)
        mobVnum = mountItem->GetValue(0);

Sorununun buradan kaynaklandığını düşünüyorum.
Test edip dönüş yapacağım akşama doğru 👍


malesef bir işe yaramadı
 
Son düzenleme:
@xenfero yardımları sayesinde sorunlar çözüldü teşekkürler

kostüm gizleme sistemi için char.cpp:
Genişlet Daralt Kopyala
WORD CHARACTER::GetPart (BYTE bPartPos) const
{
    assert (bPartPos < PART_MAX_NUM);

#ifdef __HIDE_COSTUME_SYSTEM__
    if (bPartPos == PART_MAIN && GetWear(WEAR_COSTUME_BODY) && IsBodyCostumeHidden() == true)
    {
        if (const LPITEM pArmor = GetWear(WEAR_BODY))
#if defined(__BL_TRANSMUTATION__)
            return pArmor->GetTransmutationVnum() != 0 ? pArmor->GetTransmutationVnum() : pArmor->GetVnum();
#else
            return pArmor->GetVnum();
#endif
        else
            return 0;
    }
    else if (bPartPos == PART_HAIR && GetWear(WEAR_COSTUME_HAIR) && IsHairCostumeHidden() == true)
        return 0;
    else if (bPartPos == PART_ACCE && GetWear(WEAR_COSTUME_ACCE) && IsAcceCostumeHidden() == true)
        return 0;
    else if (bPartPos == PART_WEAPON && GetWear(WEAR_COSTUME_WEAPON) && IsWeaponCostumeHidden() == true)
    {
        if (const LPITEM pWeapon = GetWear(WEAR_WEAPON))
#if defined(__BL_TRANSMUTATION__)
            return pWeapon->GetTransmutationVnum() != 0 ? pWeapon->GetTransmutationVnum() : pWeapon->GetVnum();
#else
            return pWeapon->GetVnum();
#endif
        else
            return 0;
    }
#endif

    return m_pointsInstant.parts[bPartPos];
}

yanında gezen binek sistemi için char.cpp:
Genişlet Daralt Kopyala
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
void CHARACTER::MountSummon(LPITEM mountItem)
{
    if (GetMapIndex() == 113)
        return;

    if (CWarMapManager::instance().IsWarMap(GetMapIndex()))
        return;

    if (CArenaManager::instance().IsArenaMap(GetMapIndex()) == true)
        return;

    CMountSystem* mountSystem = GetMountSystem();
    DWORD mobVnum = 0;

    if (!mountSystem || !mountItem)
        return;

    if (mountItem->GetValue(0) != 0)
        mobVnum = mountItem->GetValue(0);
    
    if (mountItem->GetTransmutationVnum() != 0)
    {
        TItemTable* itembul = ITEM_MANAGER::instance().GetTable (mountItem->GetTransmutationVnum());
        mobVnum = itembul->alValues[0];
    }


    if (IsHorseRiding())
        StopRiding();

    if (GetHorse())
        HorseSummon(false);

    mountSystem->Summon(mobVnum, mountItem, false);
}

void CHARACTER::MountUnsummon(LPITEM mountItem)
{
    CMountSystem* mountSystem = GetMountSystem();
    DWORD mobVnum = 0;

    if (!mountSystem || !mountItem)
        return;

    if (mountItem->GetValue(0) != 0)
        mobVnum = mountItem->GetValue(0);
    
    if (mountItem->GetTransmutationVnum() != 0)
    {
        TItemTable* itembul = ITEM_MANAGER::instance().GetTable (mountItem->GetTransmutationVnum());
        mobVnum = itembul->alValues[0];
    }

    if (GetMountVnum() == mobVnum)
        mountSystem->Unmount(mobVnum);

    mountSystem->Unsummon(mobVnum);
}

void CHARACTER::CheckMount()
{

    if (GetMapIndex() == 113)
        return;

    if (CWarMapManager::instance().IsWarMap(GetMapIndex()))
        return;

    CMountSystem* mountSystem = GetMountSystem();
    LPITEM mountItem = GetWear(WEAR_COSTUME_MOUNT);
    DWORD mobVnum = 0;

    if (!mountSystem || !mountItem)
        return;

    if (mountItem->GetValue(0) != 0)
        mobVnum = mountItem->GetValue(0);
    
    if (mountItem->GetTransmutationVnum() != 0)
    {
        TItemTable* itembul = ITEM_MANAGER::instance().GetTable (mountItem->GetTransmutationVnum());
        mobVnum = itembul->alValues[0];
    }

    if (mountSystem->CountSummoned() == 0)
    {
        mountSystem->Summon(mobVnum, mountItem, false);
    }
}

bool CHARACTER::IsRidingMount()
{
    return (GetWear(WEAR_COSTUME_MOUNT) || FindAffect(AFFECT_MOUNT));
}
#endif

cmd_general.cpp:
Genişlet Daralt Kopyala
ACMD (do_unmount)
{
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
    if (ch->GetWear(WEAR_COSTUME_MOUNT))
    {
        CMountSystem* mountSystem = ch->GetMountSystem();
        LPITEM mount = ch->GetWear(WEAR_COSTUME_MOUNT);
        DWORD mobVnum = 0;

        if (!mountSystem && !mount)
            return;

        if (mount->GetValue(0) != 0)
            mobVnum = mount->GetValue(0);
        
    if (mount->GetTransmutationVnum() != 0)
    {
        TItemTable* itembul = ITEM_MANAGER::instance().GetTable (mount->GetTransmutationVnum());
        mobVnum = itembul->alValues[0];
    }

        if (ch->GetMountVnum())
        {
            if (mountSystem->CountSummoned() == 0)
            {
                mountSystem->Unmount(mobVnum);
            }
        }
        return;
    }
#endif
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst