Kemik efekt sistemi

Forgiven

burakhangunduz
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
568
Çözümler
42
Beğeni
579
Puan
939
Ticaret Puanı
0
Ö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++:
#define DBONE_EFFECTS // Kemik efekt sistemi

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

C++:
AFFECT_NUM = 64,

Üstüne eklenir;

C++:
#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++:
#ifdef ENABLE_ENERGY_SYSTEM
    PyModule_AddIntConstant(poModule, "ENABLE_ENERGY_SYSTEM",    1);
#else
    PyModule_AddIntConstant(poModule, "ENABLE_ENERGY_SYSTEM",    0);
#endif

Altına eklenir;

C++:
#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++:
    PyModule_AddIntConstant(poModule, "NEW_AFFECT_DRAGON_SOUL_DECK2", CInstanceBase::NEW_AFFECT_DRAGON_SOUL_DECK2);

Altına eklenir;

C++:
#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++:
#define DBONE_EFFECTS // Kemik efekt sistemi

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

C++:
    AFFECT_QUEST_START_IDX = 1000

Üstüne eklenir;

C++:
#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++:
    AFF_BITS_MAX

Üstüne eklenir;

C++:
#if defined DBONE_EFFECTS
    AFF_DBONE1,
    AFF_DBONE2,
    AFF_DBONE3,
    AFF_DBONE4,
#endif

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

C++:
            if ( IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType) )
            {
                ++it;
                continue;
            }

Altına eklenir;

C++:
#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++:
        if (item->GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE)
            ShowAlignment(false);

Altına eklenir;

C++:
#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++:
    if (item->GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE)
        ShowAlignment(true);

Altına eklenir;

C++:
#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++:
            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++:
#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++:
            pkItem->SetUniqueExpireEvent(NULL);
            ITEM_MANAGER::instance().RemoveItem(pkItem, "UNIQUE_EXPIRE");
            return 0;

Üstüne eklenir;

C++:
#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++:
    DRAGON_HEART_VNUM = 100000,

Altına eklenir;

C++:
#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:
    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:
    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:
 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

  • Kemik Efekt.rar
    2,1 KB · Gösterim: 104
Paylaşım için teşekkürler.
 
Efeck rengini nasıl çoğaltabilirim
 
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.jpg
    0914_190624.jpg
    381,3 KB · Gösterim: 44
Son düzenleme:
Geri
Üst