Yardım Kostüm Silah Parlama Sorunu

Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

murphy

Üye
Üye
Mesaj
136
Çözümler
2
Beğeni
8
Puan
79
Ticaret Puanı
0
Merhaba arkadaşlar, forumdaki shining sistemini ekledim kostümler parlıyor. Ama silah kostümleri parlamıyor baya bir ugraştım ama çözüme varamadım. Konu hakkında bilgisi olan varsa yardımcı olabilir misiniz. Süslü parantez kısmını da yaptım.

@Mavi Ruh
 

Dosya Eklentileri

Son düzenleme:
Parlamaması çok doğal çünkü costume weapon ile alakalı tek bir kod tanımlaması yok.

En aşağıya eklediğini değiştir
Instancebase.cpp:
Genişlet Daralt Kopyala
#ifdef ENABLE_SHINING_SYSTEM
//This method checks if the item has shinings and will attach them.
//Weapons are heaving special checks for two sided weapons like daggers or fans while mounting.
//Every itemtype is supported. If no explicit logic is implemented it will be attached to "Bip01".
void CInstanceBase::__GetShiningEffect(CItemData* pItem)
{
    //Set this to true if you want to hide the refine effect if there's a shining for this item.
    bool removeRefineEffect = false;
    CItemData::TItemShiningTable shiningTable = pItem->GetItemShiningTable();
#if defined(ENABLE_COSTUME_SYSTEM) && defined(ENABLE_COSTUME_WEAPON_SYSTEM)
    if (pItem->GetType() == CItemData::ITEM_TYPE_WEAPON || (pItem->GetType() == CItemData::ITEM_TYPE_COSTUME && pItem->GetSubType() == CItemData::COSTUME_WEAPON))
    {
        BYTE bSubType = pItem->GetType() == CItemData::ITEM_TYPE_COSTUME && pItem->GetSubType() == CItemData::COSTUME_WEAPON ? pItem->GetValue(3) : pItem->GetSubType();
#else
    if (pItem->GetType() == CItemData::ITEM_TYPE_WEAPON)
    {
        BYTE bSubType = pItem->GetSubType();
#endif
        __ClearWeaponShiningEffect();
        if (shiningTable.Any() && removeRefineEffect)
        {
            __ClearWeaponRefineEffect();
        }
        for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++)
        {
            if (strcmp(shiningTable.szShinings[i], ""))
            {
                if (bSubType == CItemData::WEAPON_BOW)
                {
                    __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON_LEFT");
                }
                else
                {
                    //Check for double sided weapons or fan which is attached on both sides when mounted.
#ifdef ENABLE_WOLFMAN
                    bool twoSidedWeapon = bSubType == CItemData::WEAPON_DAGGER || (IsMountingHorse() && bSubType == CItemData::WEAPON_FAN) || bSubType == CItemData::WEAPON_CLAW;
#else
                    bool twoSidedWeapon = bSubType == CItemData::WEAPON_DAGGER || (IsMountingHorse() && bSubType == CItemData::WEAPON_FAN);
#endif
                    if (twoSidedWeapon)
                    {
                        __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON_LEFT");
                    }
                    __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON");
                }
            }
                }
            }
#if defined(ENABLE_COSTUME_SYSTEM)
    if ((pItem->GetType() == CItemData::ITEM_TYPE_ARMOR && pItem->GetSubType() == CItemData::ARMOR_BODY) || (pItem->GetType() == CItemData::ITEM_TYPE_COSTUME && pItem->GetSubType() == CItemData::COSTUME_BODY))
#else
    if (pItem->GetType() == CItemData::ITEM_TYPE_ARMOR && pItem->GetSubType() == CItemData::ARMOR_BODY)
#endif
    {
        __ClearArmorShiningEffect();
        if (shiningTable.Any() && removeRefineEffect)
        {
            __ClearArmorRefineEffect();
        }
        for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++)
        {
            if (strcmp(shiningTable.szShinings[i], ""))
            {
                __AttachArmorShiningEffect(i, shiningTable.szShinings[i]);
            }
        }
    }
}

//Attaching the shining effect.
//BoneName can be "PART_WEAPON" or "PART_WEAPON_LEFT" to get the attaching bone name dynamically.
//If boneName is not given "Bip01" is used as boneName.
void CInstanceBase::__AttachWeaponShiningEffect(int effectIndex, const char* effectFileName, const char* boneName)
{
    if (IsAffect(AFFECT_INVISIBILITY))
    {
        return;
    }

    if (effectIndex >= CItemData::ITEM_SHINING_MAX_COUNT)
    {
        return;
    }

    CEffectManager::Instance().RegisterEffect(effectFileName, false, false);

    if (!strcmp(boneName, "PART_WEAPON"))
    {
        const char* c_szRightBoneName;
        m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szRightBoneName);

        if (strcmp(c_szRightBoneName, ""))
        {
            m_weaponShiningEffects[0][effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, c_szRightBoneName, effectFileName);
        }
    }
    else if (!strcmp(boneName, "PART_WEAPON_LEFT"))
    {
        const char* c_szLeftBoneName;
        m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON_LEFT, &c_szLeftBoneName);

        if (strcmp(c_szLeftBoneName, ""))
        {
            m_weaponShiningEffects[1][effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, c_szLeftBoneName, effectFileName);
        }
    }
    else
    {
        Tracef("Invalid partname for getting attaching bone name. %s - %s", effectFileName, boneName);
    }
}

//Attaching the armor shining effect.
//If boneName is not given "Bip01" is used as boneName.
void CInstanceBase::__AttachArmorShiningEffect(int effectIndex, const char* effectFileName, const char* boneName)
{
    if (IsAffect(AFFECT_INVISIBILITY))
    {
        return;
    }

    if (effectIndex >= CItemData::ITEM_SHINING_MAX_COUNT)
    {
        return;
    }

    if (!strcmp(boneName, ""))
    {
        Tracef("Empty bone name for attaching armor shining. Effect Index: %i, EffectFileName: %s", effectIndex, effectFileName);
        return;
    }

    CEffectManager::Instance().RegisterEffect(effectFileName, false, false);
    m_armorShiningEffects[effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, boneName, effectFileName);
}

//Clears all weapon shining effects. Left & Right if set.
void CInstanceBase::__ClearWeaponShiningEffect(bool detaching)
{
    if (detaching)
    {
        for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++)
        {
            if (m_weaponShiningEffects[0][i])
            {
                __DetachEffect(m_weaponShiningEffects[0][i]);
            }
            if (m_weaponShiningEffects[1][i])
            {
                __DetachEffect(m_weaponShiningEffects[1][i]);
            }
        }
    }
    memset(&m_weaponShiningEffects, 0, sizeof(m_weaponShiningEffects));
}
//Clears all armor shining effects.
void CInstanceBase::__ClearArmorShiningEffect(bool detaching)
{
    if (detaching)
    {
        for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++)
        {
            if (m_armorShiningEffects[i])
            {
                __DetachEffect(m_armorShiningEffects[i]);
            }
        }
    }
    memset(&m_armorShiningEffects, 0, sizeof(m_armorShiningEffects));
}
#endif
 
Parlamaması çok doğal çünkü costume weapon ile alakalı tek bir kod tanımlaması yok.


Instancebase.cpp:
Genişlet Daralt Kopyala
#ifdef ENABLE_SHINING_SYSTEM
//This method checks if the item has shinings and will attach them.
//Weapons are heaving special checks for two sided weapons like daggers or fans while mounting.
//Every itemtype is supported. If no explicit logic is implemented it will be attached to "Bip01".
void CInstanceBase::__GetShiningEffect(CItemData* pItem)
{
    //Set this to true if you want to hide the refine effect if there's a shining for this item.
    bool removeRefineEffect = false;
    CItemData::TItemShiningTable shiningTable = pItem->GetItemShiningTable();
#if defined(ENABLE_COSTUME_SYSTEM) && defined(ENABLE_COSTUME_WEAPON_SYSTEM)
    if (pItem->GetType() == CItemData::ITEM_TYPE_WEAPON || (pItem->GetType() == CItemData::ITEM_TYPE_COSTUME && pItem->GetSubType() == CItemData::COSTUME_WEAPON))
    {
        BYTE bSubType = pItem->GetType() == CItemData::ITEM_TYPE_COSTUME && pItem->GetSubType() == CItemData::COSTUME_WEAPON ? pItem->GetValue(3) : pItem->GetSubType();
#else
    if (pItem->GetType() == CItemData::ITEM_TYPE_WEAPON)
    {
        BYTE bSubType = pItem->GetSubType();
#endif
        __ClearWeaponShiningEffect();
        if (shiningTable.Any() && removeRefineEffect)
        {
            __ClearWeaponRefineEffect();
        }
        for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++)
        {
            if (strcmp(shiningTable.szShinings[i], ""))
            {
                if (bSubType == CItemData::WEAPON_BOW)
                {
                    __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON_LEFT");
                }
                else
                {
                    //Check for double sided weapons or fan which is attached on both sides when mounted.
#ifdef ENABLE_WOLFMAN
                    bool twoSidedWeapon = bSubType == CItemData::WEAPON_DAGGER || (IsMountingHorse() && bSubType == CItemData::WEAPON_FAN) || bSubType == CItemData::WEAPON_CLAW;
#else
                    bool twoSidedWeapon = bSubType == CItemData::WEAPON_DAGGER || (IsMountingHorse() && bSubType == CItemData::WEAPON_FAN);
#endif
                    if (twoSidedWeapon)
                    {
                        __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON_LEFT");
                    }
                    __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON");
                }
            }
                }
            }
#if defined(ENABLE_COSTUME_SYSTEM)
    if ((pItem->GetType() == CItemData::ITEM_TYPE_ARMOR && pItem->GetSubType() == CItemData::ARMOR_BODY) || (pItem->GetType() == CItemData::ITEM_TYPE_COSTUME && pItem->GetSubType() == CItemData::COSTUME_BODY))
#else
    if (pItem->GetType() == CItemData::ITEM_TYPE_ARMOR && pItem->GetSubType() == CItemData::ARMOR_BODY)
#endif
    {
        __ClearArmorShiningEffect();
        if (shiningTable.Any() && removeRefineEffect)
        {
            __ClearArmorRefineEffect();
        }
        for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++)
        {
            if (strcmp(shiningTable.szShinings[i], ""))
            {
                __AttachArmorShiningEffect(i, shiningTable.szShinings[i]);
            }
        }
    }
}

//Attaching the shining effect.
//BoneName can be "PART_WEAPON" or "PART_WEAPON_LEFT" to get the attaching bone name dynamically.
//If boneName is not given "Bip01" is used as boneName.
void CInstanceBase::__AttachWeaponShiningEffect(int effectIndex, const char* effectFileName, const char* boneName)
{
    if (IsAffect(AFFECT_INVISIBILITY))
    {
        return;
    }

    if (effectIndex >= CItemData::ITEM_SHINING_MAX_COUNT)
    {
        return;
    }

    CEffectManager::Instance().RegisterEffect(effectFileName, false, false);

    if (!strcmp(boneName, "PART_WEAPON"))
    {
        const char* c_szRightBoneName;
        m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szRightBoneName);

        if (strcmp(c_szRightBoneName, ""))
        {
            m_weaponShiningEffects[0][effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, c_szRightBoneName, effectFileName);
        }
    }
    else if (!strcmp(boneName, "PART_WEAPON_LEFT"))
    {
        const char* c_szLeftBoneName;
        m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON_LEFT, &c_szLeftBoneName);

        if (strcmp(c_szLeftBoneName, ""))
        {
            m_weaponShiningEffects[1][effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, c_szLeftBoneName, effectFileName);
        }
    }
    else
    {
        Tracef("Invalid partname for getting attaching bone name. %s - %s", effectFileName, boneName);
    }
}

//Attaching the armor shining effect.
//If boneName is not given "Bip01" is used as boneName.
void CInstanceBase::__AttachArmorShiningEffect(int effectIndex, const char* effectFileName, const char* boneName)
{
    if (IsAffect(AFFECT_INVISIBILITY))
    {
        return;
    }

    if (effectIndex >= CItemData::ITEM_SHINING_MAX_COUNT)
    {
        return;
    }

    if (!strcmp(boneName, ""))
    {
        Tracef("Empty bone name for attaching armor shining. Effect Index: %i, EffectFileName: %s", effectIndex, effectFileName);
        return;
    }

    CEffectManager::Instance().RegisterEffect(effectFileName, false, false);
    m_armorShiningEffects[effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, boneName, effectFileName);
}

//Clears all weapon shining effects. Left & Right if set.
void CInstanceBase::__ClearWeaponShiningEffect(bool detaching)
{
    if (detaching)
    {
        for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++)
        {
            if (m_weaponShiningEffects[0][i])
            {
                __DetachEffect(m_weaponShiningEffects[0][i]);
            }
            if (m_weaponShiningEffects[1][i])
            {
                __DetachEffect(m_weaponShiningEffects[1][i]);
            }
        }
    }
    memset(&m_weaponShiningEffects, 0, sizeof(m_weaponShiningEffects));
}
//Clears all armor shining effects.
void CInstanceBase::__ClearArmorShiningEffect(bool detaching)
{
    if (detaching)
    {
        for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++)
        {
            if (m_armorShiningEffects[i])
            {
                __DetachEffect(m_armorShiningEffects[i]);
            }
        }
    }
    memset(&m_armorShiningEffects, 0, sizeof(m_armorShiningEffects));
}
#endif
merhaba hocam zaten sizden inceleyerek eklemiştim ben zaten bunu da eklemiştim. ama costüme weaponda çalışmıyor malesef. burda value3 değerlerini baz alarak fonksiyon işliyor. ama bende value3 değeri silah kostümlerinde sırasıyla şöyle ben şuan sadece bir weapon costume olarak sadece sword denedim value3 değeri 0 oluyor costume swordlarda bende tıpkı aşagıda oldugu gibi bundan kaynaklı olabileceğini düşünüyorum.

enum EWeaponSubTypes
{
WEAPON_SWORD, //0
WEAPON_DAGGER, //1
WEAPON_BOW, //2
WEAPON_TWO_HANDED, //3
WEAPON_BELL, //4
WEAPON_FAN, //5
WEAPON_ARROW, //6
WEAPON_MOUNT_SPEAR, //7
#ifdef ENABLE_WOLFMAN_CHARACTER
WEAPON_CLAW = 8, //8
#endif
#ifdef ENABLE_QUIVER_SYSTEM
WEAPON_QUIVER = 9, //9
#endif
#ifdef __UNIMPLEMENTED__
WEAPON_BOUQUET = 10,//10
#endif
WEAPON_NUM_TYPES, //11
WEAPON_NONE = WEAPON_NUM_TYPES+1,
};
 
Geri
Üst