Guida Implementare armi effettate (MDE)

Stato
Discussione chiusa ad ulteriori risposte.

luzzi

Utente Jade
30 Ottobre 2008
1,957
96
961
855
Ultima modifica da un moderatore:
Cosa sono le armi in MDE?

Sono degli effetti che includendo l'arma associando a quest'ultima una sorta di animazione.
Questo è stato possibile grazie alla realizzazione dell'exporter mde.

I file che riguardano questo tipo di effect sono i seguenti.

nomefile.msm
nomefile.mse
nomefile.gr2
nomefile.mde
nomefile.tga


Cosa serve ancora?

InstanceBase.cpp
InstanceBase.h


Che si trovano nei source del launcher

playersettingmodule.py

Che si trova nella root del client.


Modifica da fare:

nel InstanceBase.h cercare (circa line 266) **

450e168051.png

Alla fine dell'enum dovrete modificare così

a788692430.png

dove EFFECT_WEAPON_MDE è la nuova voce che abbiam aggiunto.

Cercate:

PHP:
void    __ClearArmorRefineEffect(); (circa line 912)

sotto aggiungete

PHP:
void    __ClearMdeRefineEffect();

Cercate:

PHP:
DWORD                    m_armorRefineEffect;  (circa line 981)

sotto aggiungete

PHP:
DWORD                    MdeRefineEffect;


Ora nel file IstanceBase.cpp

cercate

PHP:
m_armorRefineEffect = 0;  (circa line 9112)
sotto aggiungete

PHP:
MdeRefineEffect = 0;

cercate

PHP:
void CInstanceBase::__ClearArmorRefineEffect()  (circa line 2677)

sotto questa funzione aggiungete questo

PHP:
void CInstanceBase::__ClearMdeRefineEffect()
{
    
    if (MdeRefineEffect)
    {
        __DetachEffect(MdeRefineEffect);
        MdeRefineEffect = 0;
    }
}

Screen di esempio:

567108c77c.png


Subito sotto troverete **

PHP:
__GetRefinedEffect(CItemData* pItem)


sostituite tutta la funzione con questa

PHP:
UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem)
{
    DWORD refine = max(pItem->GetRefine() + pItem->GetSocketCount(),CItemData::ITEM_SOCKET_MAX_NUM) - CItemData::ITEM_SOCKET_MAX_NUM;
    switch (pItem->GetType())
    {
    case CItemData::ITEM_TYPE_WEAPON:
        __ClearWeaponRefineEffect();        
        __ClearMdeRefineEffect();
        
        if (refine < 7)    //ÇöÀç Á¦·Ãµµ 7 ÀÌ»ó¸¸ ÀÌÆåÆ®°¡ ÀÖ½À´Ï´Ù.
            return 0;
        switch(pItem->GetSubType())
        {
        case CItemData::WEAPON_DAGGER:
            m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7+refine-7;
            m_swordRefineEffectLeft = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7_LEFT+refine-7;
            break;
        case CItemData::WEAPON_FAN:
            m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_FANBELL_REFINED7+refine-7;
            break;
        case CItemData::WEAPON_ARROW:
        case CItemData::WEAPON_BELL:
            m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED7+refine-7;
            break;
        case CItemData::WEAPON_BOW:
            m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_BOW_REFINED7+refine-7;
            break;

        case CItemData::WEAPON_SWORD:
            {
            //__ClearMdeRefineEffect();
            DWORD vnum = pItem->GetIndex();
            if (290 <= vnum && vnum <= 299)
            {
                MdeRefineEffect = __AttachEffect(EFFECT_REFINED+EFFECT_WEAPON_MDE);
                
                
            }
            break;
            }
        default:
            m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SWORD_REFINED7+refine-7;
        }
        if (m_swordRefineEffectRight)
            m_swordRefineEffectRight = __AttachEffect(m_swordRefineEffectRight);
        if (m_swordRefineEffectLeft)
            m_swordRefineEffectLeft = __AttachEffect(m_swordRefineEffectLeft);
        break;
        
    case CItemData::ITEM_TYPE_ARMOR:
        __ClearArmorRefineEffect();
        
        // °©¿Ê Ưȭ ÀÌÆåÆ®
        if (pItem->GetSubType() == CItemData::ARMOR_BODY)
        {
            DWORD vnum = pItem->GetIndex();

            if (12010 <= vnum && vnum <= 12049)
            {
                __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
                __AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2);
            }
        }

        if (refine < 7)    //ÇöÀç Á¦·Ãµµ 7 ÀÌ»ó¸¸ ÀÌÆåÆ®°¡ ÀÖ½À´Ï´Ù.
            return 0;

        if (pItem->GetSubType() == CItemData::ARMOR_BODY)
        {
            m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7;
            __AttachEffect(m_armorRefineEffect);
        }
        break;
    }
    return 0;
}

Poi ancora sotto

cercate
PHP:
SetWeapon(DWORD eWeapon)

e modificate la funzione in questo modo

97315fcdd7.png


Salvate e compilate il vostro launcher.

Parte client:

Aprite playersettingmodule.py

cercate

Codice:
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+19, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-1.mse")
    chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+20, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse")
sotto aggiungete

Codice:
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+21, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/campana.mse")


Chiudete e ricompilate la root.

Ora cosa fare?

Implementate l'arma come fate sempre:

Scompattate item:
Codice:
Il nomefile.gr2  -->> \item\ymir work\item\weapon\
Il nomefile.msm -->> \item\ymir work\item\
Ricompattate item

Scompattate pc o pc2
Codice:
Il nomefile.MDE -->> \PC\ymir work\pc\common\effect\sword\
Il nomefile.mse -->>  \PC\ymir work\pc\common\effect\sword\
Il nomefile.tga  -->>   \PC\ymir work\pc\common\effect\sword\
Ricompattate pc o pc2


Nota bene:

-Alcuni dei percosi che vi ho messo nella guida sono indicativi.
-Tramite questo processo aggiungiamo la possibilità di utilizzare una sola arma mde; per aggiungerne più di una basta semplicemente aggiungere un altro effetto alla lista (seguendo i punti nella guida **)

Crediti esclusivamente miei.
Non sono stato il primo a realizzare il metodo, l'ho fatto su richiesta per un amico gratuitamente e penso che possa servire in futuro.
 
Ottima guida, anche se è molto intuibile anche per chi è alle "prime armi", l'unica cosa è che mi sembra alquanto inutile visto che quasi nessuno crea delle armi nuove, e sopratutto in MDE visto che la maggior parte si limita ad utilizzare modelli trovati sul web. Good [MENTION=18761]luzzi[/MENTION] .
 
Ottima guida , spiegata in modo abbastanza chiaro ;) Complimenti:D
Quindi in poche parole questa guida serve ad implementare le armi come quelle di Rotten Root giusto?
 
Qualcuno mi può aiutare? una volta che faccio tutto, compilo il launcher...quando sono in game non vedo piu nessun effect delle armi
 
scusa luzzi, "innanzitutto bravo>>", ma una curiosita' che ho, è che tra i file. mde , mse , non c'è nessun collegamento con l'arma gr2, come fa' quest'ultima a funzionare?
perche nn capisco come fa' il game a riconoscere che quei file sono collegati proprio al quel gr2, se chiamo "spada1.gr2 ,spadatexture.dds , e spadaeffect.mde spadaeffect.mse spadaeffect.tga
come si collegano tra di loro questi 5file? visto che percorsi che li collegano in questi file non ce ne sono, apparte per il mde ed mse.. questi ultimi 2 se hanno nomi diversi dal nome del gr2 funzionano lo stesso? se si, come si collegano? è una mia curiosita'
 
scusa luzzi, "innanzitutto bravo>>", ma una curiosita' che ho, è che tra i file. mde , mse , non c'è nessun collegamento con l'arma gr2, come fa' quest'ultima a funzionare?
perche nn capisco come fa' il game a riconoscere che quei file sono collegati proprio al quel gr2, se chiamo "spada1.gr2 ,spadatexture.dds , e spadaeffect.mde spadaeffect.mse spadaeffect.tga
come si collegano tra di loro questi 5file? visto che percorsi che li collegano in questi file non ce ne sono, apparte per il mde ed mse.. questi ultimi 2 se hanno nomi diversi dal nome del gr2 funzionano lo stesso? se si, come si collegano? è una mia curiosita'
@luzzi ???
 
hai detto come si modifica il launcher.. ma non hai detto come parte l'effetto...
come collego sul client o sul database, l'item (es. 05150.gr2) al file mde,,
xke ti assicuro che ho fatto tutto correttamente, si vede l'arma ma non l'effetto.
devo collegare qualche socket all'item proto server? o altro del genere ? dopo che ho messo i file nelle directory corrette?
 
Guida incompleta ... Una vera delusione.. Non si vedono gli mde..solo i luccichii. Ma se fate una guida perché la fate incompleta.
 
Ultima modifica:
io l'ho seguita, per filo e per segno invece, ma cmq gli effetti non si vedono, eppure stranamente, se invece del EFFECT_WEAPON_MDE gli metto il BODYARMOR_SPECIAL , l'arma mde si vede, attaccata alla mano, pero' essendo un effetto della corazzA, non viene usata come arma, quindi qualcosina manca davvero.. per caso puoi dirmi che mettere nel file msm? e come si inserisce sul vnum dell'arma?

p.s. MdeRefineEffect = __AttachEffect(EFFECT_REFINED + EFFECT_WEAPON_MDE);
è sbagliata, perche in questo modo l'effetto non si vede,
in secondo luogo, se levo MdeRefineEffec = , lasciando solo la riga dopo, l'effetto si attacca all'arma , ma l'arma gr2 si vede piu' sotto e la mde si vede piu' su rispetto all'arma, e in piu se tolgo e rimetto arma, iniziano a formarsi una decina di effetti mde XD

help pls
 
  • Mi piace
Reazioni: informatiC
La guida funziona bene, scusate se riuppo questa discussione ma ho notato una piccola cosa, poi chi lo sa, potrebbe ancora servire a qualcuno. ;)

Ho notato che il codice così è più che giusto, se non fosse che mettendolo in questo modo l'effetto visivo del +7/+8/+9 delle spade non verrà più visualizzato. Quindi direi di aggiustarlo così:

Nel case CItemData::WEAPON_SWORD:
Codice:
case CItemData::WEAPON_SWORD:
            {
            m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SWORD_REFINED7+refine-7;
            //__ClearMdeRefineEffect();
            DWORD vnum = pItem->GetIndex();
            if (290 <= vnum && vnum <= 299)
            {
                MdeRefineEffect = __AttachEffect(EFFECT_REFINED+EFFECT_WEAPON_MDE);
            }
            break;
            }

Mettendolo così tornerà a funzionare di nuovo.
Ottima guida comunque, grazie ancora luzzi.
 
La guida funziona bene, scusate se riuppo questa discussione ma ho notato una piccola cosa, poi chi lo sa, potrebbe ancora servire a qualcuno. ;)

Ho notato che il codice così è più che giusto, se non fosse che mettendolo in questo modo l'effetto visivo del +7/+8/+9 delle spade non verrà più visualizzato. Quindi direi di aggiustarlo così:

Nel case CItemData::WEAPON_SWORD:
Codice:
case CItemData::WEAPON_SWORD:
            {
            m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SWORD_REFINED7+refine-7;
            //__ClearMdeRefineEffect();
            DWORD vnum = pItem->GetIndex();
            if (290 <= vnum && vnum <= 299)
            {
                MdeRefineEffect = __AttachEffect(EFFECT_REFINED+EFFECT_WEAPON_MDE);
            }
            break;
            }

Mettendolo così tornerà a funzionare di nuovo.
Ottima guida comunque, grazie ancora luzzi.

A rigor di logica in questo modo verrebbero attaccati 2 effect all'arma, quello del refine(+7,+8,+9 quello che sia) e l'effetto mde.
Anche a me dava questo problema io ho risolto creando una funzione che analizzava il value dell'item e ne restituiva l'ultimo valore utilizzando così solo la variabile MdeRefineEffect sia per gli effetti refine sia per gli mde.
inserisci una variabile booleana nella if dell'effetto animato e sei apposto in questo modo gli effetti non si sovrappongono ;)
 
A rigor di logica in questo modo verrebbero attaccati 2 effect all'arma, quello del refine(+7,+8,+9 quello che sia) e l'effetto mde.
Anche a me dava questo problema io ho risolto creando una funzione che analizzava il value dell'item e ne restituiva l'ultimo valore utilizzando così solo la variabile MdeRefineEffect sia per gli effetti refine sia per gli mde.
inserisci una variabile booleana nella if dell'effetto animato e sei apposto in questo modo gli effetti non si sovrappongono ;)
Si anche, ma per chi non è capace questo è il metodo più facile per farlo funzionare di nuovo. :)
 
So che il posto è vecchio... Ma qualcuno puo spiegarmi una cosa? Perchè lo spadone non va anche dopo averlo messo dopo il case two_handed e perche quando tolgo i pugnali un pugnale ti rimane in mano? (uso 2 mde per i pugnali 1 per il sinistro e 1 per il destro) il mio skype è miki2401. Grazie a tutti
 
Perdonate se uppo, essendo un post vecchio. Mi serve questa guida ma ho letto nelle varie pagine che risulta incompleta, ora non so se ciò sia vero o meno. Se qualcuno che ne capisce di più potesse rispondere, Grazie ragazzi!
 
Stato
Discussione chiusa ad ulteriori risposte.