Domanda Anello exp non si toglie!?

Stato
Discussione chiusa ad ulteriori risposte.

RaVe_Soldier

Utente Gold
9 Settembre 2014
239
38
105
201
Salve gente!

Oggi mi si è presentato un problema molto banale, talmente banale da non riuscire a capire come risolverlo :asd:
Indossando il classico anello exp da 1 ora, una volta indossato non è possibile toglierlo e riportarlo all'inventario.
Qualcuno sa come risolvere questo fastidioso problema?


Grazie in anticipo a chi risponderà.
 
Ultima modifica da un moderatore:
Modifica la query dell'anello dell'esperienza rimuovendo il flag(utilizzando la struttura txt)
ITEM_IRREMOVABLE
 
C'è un flag che serve a rendere un item "irremovibile" una volta indossato fino al suo scadere del tempo.
Ti basta quindi ricalcolare il flagnumber dell'item rimuovendo questo flag e dovresti aver risolto.


Se ti interessa vedere dove il codice impedisce di rimuovere l'item..
Codice:
// char_item.cpp


bool CHARACTER::CanUnequipNow(const LPITEM item, const TItemPos& srcCell, const TItemPos& destCell) /*const*/
{

    if (ITEM_BELT == item->GetType())
        VERIFY_MSG(CBeltInventoryHelper::IsExistItemInBeltInventory(this), "º§Æ® Àκ¥Å丮¿¡ ¾ÆÀÌÅÛÀÌ Á¸ÀçÇϸé ÇØÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù.");
   
    //@@@parte rilevante che ci interessa
    if (IS_SET(item->GetFlag(), ITEM_FLAG_IRREMOVABLE))
        return false;
    //@@@fine parte rilevante

    {
        int pos = -1;

        if (item->IsDragonSoul())
            pos = GetEmptyDragonSoulInventory(item);
        else
            pos = GetEmptyInventory(item->GetSize());

        VERIFY_MSG( -1 == pos, "¼ÒÁöǰ¿¡ ºó °ø°£ÀÌ ¾ø½À´Ï´Ù." );
    }


    return true;
}

credo che attualmente dovresti avere 256 come flag (2 alla ottava) , mettendo 0 l'item diventerebbe rimovibile.
Se ti interessa però mettere altre restrizioni all'uso dell'item allora dovrai usare un itemFlag calculator (mi pare che martysama ci abbia fatto anche una pagina web poco fa).

per chi fosse interessato ai vari flag e ai vari coefficienti , è possibile trovarli in common/item_length.h

Codice:
enum EItemFlag
{
    ITEM_FLAG_REFINEABLE        = (1 << 0),
    ITEM_FLAG_SAVE            = (1 << 1),
    ITEM_FLAG_STACKABLE        = (1 << 2),    // ¿©·¯°³ ÇÕÄ¥ ¼ö ÀÖÀ½
    ITEM_FLAG_COUNT_PER_1GOLD    = (1 << 3),
    ITEM_FLAG_SLOW_QUERY        = (1 << 4),
    ITEM_FLAG_UNUSED01        = (1 << 5),    // UNUSED
    ITEM_FLAG_UNIQUE        = (1 << 6),
    ITEM_FLAG_MAKECOUNT        = (1 << 7),
    ITEM_FLAG_IRREMOVABLE        = (1 << 8), //256 -> Anello Esperienza ;)
    ITEM_FLAG_CONFIRM_WHEN_USE    = (1 << 9),
    ITEM_FLAG_QUEST_USE        = (1 << 10),
    ITEM_FLAG_QUEST_USE_MULTIPLE    = (1 << 11),
    ITEM_FLAG_QUEST_GIVE        = (1 << 12),
    ITEM_FLAG_LOG            = (1 << 13),
    ITEM_FLAG_APPLICABLE        = (1 << 14),
};
 
Stato
Discussione chiusa ad ulteriori risposte.
Indietro
Top Bottom