Kemik efekt sistemi

Forgiven

burakhangunduz
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
553
Çözümler
41
Beğeni
565
Puan
939
Ö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: 98
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: 39
Son düzenleme:
Geri
Üst