Kemik efekt sistemi

Forgiven

Discord; burakhangunduz
Premium Üye
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
730
Çözümler
58
Beğeni
786
Puan
950
Ticaret Puanı
2
Öncelikle selamın aleyküm.
X forumda paylaşıldı alıntı olduğunu belirtmek istiyorum.
Lakin sistemde sadece [ 72705 ve 72706] kodlu itemlerde aktifti.
Ben 72703 ve 72704 adlı itemlerede efekt ekledim ve anlatımı yapmak istiyorum.

Var olan efektler;

giphy.gif


Yeni eklenen efektler;
giphy.gif



Başlıyalım..
Client src içerisinde Locale_inc.h açılır ve eklenir.

C++:
Genişlet Daralt Kopyala
#define DBONE_EFFECTS // Kemik efekt sistemi

Ardından InstanceBase.h açılır ve aratılır.

C++:
Genişlet Daralt Kopyala
AFFECT_NUM = 64,

Üstüne eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
            AFFECT_DBONE1,//xx
            AFFECT_DBONE2,//xx
            AFFECT_DBONE3,//xx
            AFFECT_DBONE4,//xx
#endif

PythonApplicationModule.cpp açılır ve aratılır.

C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_ENERGY_SYSTEM
    PyModule_AddIntConstant(poModule, "ENABLE_ENERGY_SYSTEM",    1);
#else
    PyModule_AddIntConstant(poModule, "ENABLE_ENERGY_SYSTEM",    0);
#endif

Altına eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
    PyModule_AddIntConstant(poModule, "DBONE_EFFECTS",    1);
#else
    PyModule_AddIntConstant(poModule, "DBONE_EFFECTS",    0);
#endif

PythonCharacterModule.cpp açılır ve aratılır.

C++:
Genişlet Daralt Kopyala
    PyModule_AddIntConstant(poModule, "NEW_AFFECT_DRAGON_SOUL_DECK2", CInstanceBase::NEW_AFFECT_DRAGON_SOUL_DECK2);

Altına eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
    PyModule_AddIntConstant(poModule, "AFFECT_DBONE1",        CInstanceBase::AFFECT_DBONE1);
    PyModule_AddIntConstant(poModule, "AFFECT_DBONE2",        CInstanceBase::AFFECT_DBONE2);
    PyModule_AddIntConstant(poModule, "AFFECT_DBONE3",        CInstanceBase::AFFECT_DBONE3);
    PyModule_AddIntConstant(poModule, "AFFECT_DBONE4",        CInstanceBase::AFFECT_DBONE4);
#endif

Client ile işimiz bitti.

Game srcye geçelim.

Service.h açılır ve eklenir.

C++:
Genişlet Daralt Kopyala
#define DBONE_EFFECTS // Kemik efekt sistemi

Affect.h açılır ve aratılır.

C++:
Genişlet Daralt Kopyala
    AFFECT_QUEST_START_IDX = 1000

Üstüne eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
    AFFECT_DBONE_1=703,
    AFFECT_DBONE_2=704,
    AFFECT_DBONE_3=705,
    AFFECT_DBONE_4=706,
#endif

Aratılır;

C++:
Genişlet Daralt Kopyala
    AFF_BITS_MAX

Üstüne eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
    AFF_DBONE1,
    AFF_DBONE2,
    AFF_DBONE3,
    AFF_DBONE4,
#endif

Char_affect.cpp açılır ve aratılır.

C++:
Genişlet Daralt Kopyala
            if ( IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType) )
            {
                ++it;
                continue;
            }

Altına eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
            if(pkAff->dwType==AFFECT_DBONE_1 || pkAff->dwType==AFFECT_DBONE_2 || pkAff->dwType==AFFECT_DBONE_3 || pkAff->dwType==AFFECT_DBONE_4){/**/++it;/**/continue;}
#endif

Char_item.cpp açılır ve aratılır.

C++:
Genişlet Daralt Kopyala
        if (item->GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE)
            ShowAlignment(false);

Altına eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
        if (item->GetVnum() == DBONE_VNUM_1){
            if (!IsAffectFlag(AFFECT_DBONE_2))
                AddAffect(AFFECT_DBONE_1, POINT_NONE, 0,AFF_DBONE1, INFINITE_AFFECT_DURATION, 0, false);
        }
        if (item->GetVnum() == DBONE_VNUM_2){
            if (!IsAffectFlag(AFFECT_DBONE_2))
                AddAffect(AFFECT_DBONE_2, POINT_NONE, 0,AFF_DBONE2, INFINITE_AFFECT_DURATION, 0, false);
        }
        if (item->GetVnum() == DBONE_VNUM_3){
            if (!IsAffectFlag(AFFECT_DBONE_2))
                AddAffect(AFFECT_DBONE_3, POINT_NONE, 0,AFF_DBONE3, INFINITE_AFFECT_DURATION, 0, false);
        }
        if (item->GetVnum() == DBONE_VNUM_4){
            if (!IsAffectFlag(AFFECT_DBONE_2))
                AddAffect(AFFECT_DBONE_4, POINT_NONE, 0,AFF_DBONE4, INFINITE_AFFECT_DURATION, 0, false);
        }
#endif

Aratılır;

C++:
Genişlet Daralt Kopyala
    if (item->GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE)
        ShowAlignment(true);

Altına eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
    if (item->GetVnum() == DBONE_VNUM_1){RemoveAffect(AFFECT_DBONE_1);}
    if (item->GetVnum() == DBONE_VNUM_2){RemoveAffect(AFFECT_DBONE_2);}
    if (item->GetVnum() == DBONE_VNUM_3){RemoveAffect(AFFECT_DBONE_3);}
    if (item->GetVnum() == DBONE_VNUM_4){RemoveAffect(AFFECT_DBONE_4);}
#endif

İtem.cpp açılır ve aratılır.

C++:
Genişlet Daralt Kopyala
            sys_log(0, "UNIQUE_ITEM: expire %s %u", pkItem->GetName(), pkItem->GetID());
            pkItem->SetUniqueExpireEvent(NULL);
            ITEM_MANAGER::instance().RemoveItem(pkItem, "UNIQUE_EXPIRE");
            return 0;

Üstüne eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
            if (pkItem->GetVnum() == DBONE_VNUM_1){
                //if(pkItem->GetOwner()->IsAffectFlag(AFFECT_DBONE_1))
                    pkItem->GetOwner()->RemoveAffect(AFFECT_DBONE_1);
            }
            if (pkItem->GetVnum() == DBONE_VNUM_2){
                //if(pkItem->GetOwner()->IsAffectFlag(AFFECT_DBONE_2))
                    pkItem->GetOwner()->RemoveAffect(AFFECT_DBONE_2);
            }
            if (pkItem->GetVnum() == DBONE_VNUM_3){
                //if(pkItem->GetOwner()->IsAffectFlag(AFFECT_DBONE_2))
                    pkItem->GetOwner()->RemoveAffect(AFFECT_DBONE_3);
            }
            if (pkItem->GetVnum() == DBONE_VNUM_4){
                //if(pkItem->GetOwner()->IsAffectFlag(AFFECT_DBONE_2))
                    pkItem->GetOwner()->RemoveAffect(AFFECT_DBONE_4);
            }
#endif

Aratılır.

C++:
Genişlet Daralt Kopyala
            pkItem->SetUniqueExpireEvent(NULL);
            ITEM_MANAGER::instance().RemoveItem(pkItem, "UNIQUE_EXPIRE");
            return 0;

Üstüne eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
            if (pkItem->GetVnum() == DBONE_VNUM_1){
                //if(pkItem->GetOwner()->IsAffectFlag(AFFECT_DBONE_1))
                    pkItem->GetOwner()->RemoveAffect(AFFECT_DBONE_1);
            }
            if (pkItem->GetVnum() == DBONE_VNUM_2){
                //if(pkItem->GetOwner()->IsAffectFlag(AFFECT_DBONE_2))
                    pkItem->GetOwner()->RemoveAffect(AFFECT_DBONE_2);
            }
            if (pkItem->GetVnum() == DBONE_VNUM_3){
                //if(pkItem->GetOwner()->IsAffectFlag(AFFECT_DBONE_1))
                    pkItem->GetOwner()->RemoveAffect(AFFECT_DBONE_3);
            }
            if (pkItem->GetVnum() == DBONE_VNUM_4){
                //if(pkItem->GetOwner()->IsAffectFlag(AFFECT_DBONE_2))
                    pkItem->GetOwner()->RemoveAffect(AFFECT_DBONE_4);
            }
#endif

Unique_item.h açılır ve aratılır.

C++:
Genişlet Daralt Kopyala
    DRAGON_HEART_VNUM = 100000,

Altına eklenir;

C++:
Genişlet Daralt Kopyala
#if defined DBONE_EFFECTS
    DBONE_VNUM_1=72705,
    DBONE_VNUM_2=72706,
    DBONE_VNUM_3=72703,
    DBONE_VNUM_4=72704,
#endif

Game src ile işimiz bitti.
playerSettingsModule.py açılır ve aratılır.

Python:
Genişlet Daralt Kopyala
    chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+1, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7.mse")
    chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+2, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8.mse")
    chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+3, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9.mse")

Üstüne eklenir;

Python:
Genişlet Daralt Kopyala
    if app.DBONE_EFFECTS:
        chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+42, 'Bip01 R Hand', 'd:/ymir work/effect/etc/buff/dragonbone.mse')
        chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+43, 'Bip01 L Hand', 'd:/ymir work/effect/etc/buff/dragonbone2.mse')
        chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+44, 'Bip01 R Hand', 'd:/ymir work/effect/etc/buff/dragonbone3.mse')
        chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+45, 'Bip01 L Hand', 'd:/ymir work/effect/etc/buff/dragonbone4.mse')

Bu eix epkyi indirip pack içine atın.

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

Ardından indexe ekleyin.

*
kemik_efekt
*

##################################################################################################

Dipnot; Öncelikle burda dikkat etmeniz gereken yer InstanceBase.h dosyasıdır.
Gifte görüldüğü gibi örnek vermem gerekirse;
AFFECT_DBONE1 üstüne geldiğimde 42 yazmaktadır.
Diğerleride sırasıyla gitmektedir. Sizde nasıl gidiyorsa rakamlar ona göre
Playersettingsmodule.py'de editlemeniz gerekir. Umarım anlamışsınızdır :)

Python:
Genişlet Daralt Kopyala
 chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+42, 'Bip01 R Hand', 'd:/ymir work/effect/etc/buff/dragonbone.mse')
Honeycam 2020-10-24 22-47-24.gif
 

Dosya Eklentileri

Paylaşım için teşekkürler.
 
bende de böyle takılı değilken de gözüküyor hangisinin altına ekleyeceğiz tam söyleyebilir misin
bunu çözdüm şuan tek sorun item takılıyken envanterden aynı slota takılacak itemi sağ tık ile takınca efekt üstümde kalıyor bunu nasıl çözebiliriz.
 
Paylaşım için teşekkür ederim.
Not: az önce fark ettim itemi çıkartınca efekt aktif kalıyor
 

Dosya Eklentileri

  • 0914_190624.webp
    0914_190624.webp
    308,4 KB · Gösterim: 123
Son düzenleme:
Geri
Üst