C++ [Update Cube] Piccola guida su come trasferire i bonus e le pietre nei craft

BalanzaDev

Bannato
17 Agosto 2019
25
4
27
24
Ultima modifica:
Un saluto a voi inforgiani! In giro per il web ho trovato solo una guida su come trasferire i bonus e nessuna che ti guida a come trasferire anche le pietre, dato che mi è stato chiesto un aiuto per questo, voglio condividere con voi delle semplici righe per eseguire questo trasferimento.

NB: Chi ha già il trasferimento dei bonus può aggiungere solo quello delle pietre (è tutto ben definito quindi facile da capire quale sia).


Trasferimento Bonus: ENABLE_CRAFT_TRANSFER_ATTR
Trasferimento Pietre: ENABLE_CRAFT_TRANSFER_STONE



1° Server/game/src/cube.cpp

C++:
// 1. Cercare nella funzione: CUBE_DATA::CUBE_DATA()

    this->percent = 0;
    this->gold = 0;

// 1. Aggiungere sotto:

#ifdef ENABLE_CRAFT_TRANSFER_ATTR
    this->allowCopyAttr = false;
#endif
#ifdef ENABLE_CRAFT_TRANSFER_STONE
    this->allowCopySocket = false;
#endif

// 2. Cercare:

        else TOKEN("end")
        {

// 2. Aggiungere sopra:

#ifdef ENABLE_CRAFT_TRANSFER_ATTR
        else TOKEN("copy_attribute")
        {
            cube_data->allowCopyAttr = (value1 == 1 ? true : false);
        }
#endif
#ifdef ENABLE_CRAFT_TRANSFER_STONE
        else TOKEN("copy_stone")
        {
            cube_data->allowCopySocket = (value1 == 1 ? true : false);
        }
#endif

// 3. Cercare nella funzione: bool Cube_make (LPCHARACTER ch)

    LPITEM    *items;
    LPITEM    new_item;

// 3. Aggiungere sotto:

#ifdef ENABLE_CRAFT_TRANSFER_ATTR
    DWORD copyAttr[ITEM_ATTRIBUTE_MAX_NUM][2];
#endif
#ifdef ENABLE_CRAFT_TRANSFER_STONE
    DWORD copySocket[ITEM_SOCKET_MAX_NUM];
#endif

// 4. Cercare:

    CUBE_VALUE    *reward_value = cube_proto->reward_value();

// 4. Aggiungere sotto:

#ifdef ENABLE_CRAFT_TRANSFER_ATTR
    for (int i=0; i<CUBE_MAX_NUM; ++i)
    {
        if (NULL==items)    continue;

        if (items->GetType() == ITEM_WEAPON || items->GetType() == ITEM_ARMOR)
        {
            bool hasElement = false;
            for (int j = 0; j < cube_proto->item.size(); ++j)
            {
                if(cube_proto->item[j].vnum == items->GetVnum())
                {
                    hasElement = true;
                    break;
                }
            }
      
            if(hasElement == false)
                continue;
            for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
            {
                copyAttr[a][0] = items->GetAttributeType(a);
                copyAttr[a][1] = items->GetAttributeValue(a);
            }
    #ifdef ENABLE_CRAFT_TRANSFER_STONE
            for (int a = 0; a < ITEM_SOCKET_MAX_NUM; a++)
                copySocket[a] = items->GetSocket(a);
    #endif

            break;
        }
  
        continue;
    }
#endif

// 5. Cercare:

        new_item = ch->AutoGiveItem(reward_value->vnum, reward_value->count);

// 5. Aggiungere sotto:

#ifdef ENABLE_CRAFT_TRANSFER_ATTR
        if (cube_proto->allowCopyAttr == true && copyAttr != NULL)
        {
            new_item->ClearAttribute();
      
            for (int a = 0; a < ITEM_ATTRIBUTE_MAX_NUM; a++)
            {
                new_item->SetForceAttribute(a, copyAttr[a][0], copyAttr[a][1]);
            }
        }
#endif
#ifdef ENABLE_CRAFT_TRANSFER_STONE
        if (cube_proto->allowCopySocket == true && copySocket != NULL)
        {
            for (int i = 0; i < ITEM_SOCKET_MAX_NUM; i++)
                new_item->SetSocket(i, copySocket);
        }
#endif



2° Server/game/src/cube.h

C++:
// 1. Cercare:

    CUBE_DATA();

// 1. Aggiungere sopra:

#ifdef ENABLE_CRAFT_TRANSFER_ATTR
    bool                    allowCopyAttr;
#endif
#ifdef ENABLE_CRAFT_TRANSFER_STONE
    bool                    allowCopySocket;
#endif



3° Server/common/service.h (o CommonDefine.h se lo usate)

C++:
// 1. Aggiungere i seguenti defines:

#define ENABLE_CRAFT_TRANSFER_ATTR
#define ENABLE_CRAFT_TRANSFER_STONE



Per ultimo andando nella vostra locale troverete il cube.txt, basterà aggiungere i vari allow (copy_attribute / copy_stone)

ESEMPIO:


Codice:
section       
npc    20383   
item    279    1
copy_attribute    1
copy_stone    1
reward    460    1
gold    100000000   
percent    100   
end

Il codice è molto semplice da capire, potete migliorarlo e editarlo con i check che meglio preferite
 
  • Mi piace
Reazioni: RaVe_Soldier