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).
1° Server/game/src/cube.cpp
2° Server/game/src/cube.h
3° Server/common/service.h (o CommonDefine.h se lo usate)
Per ultimo andando nella vostra locale troverete il cube.txt, basterà aggiungere i vari allow (copy_attribute / copy_stone)
ESEMPIO:
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
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