Olá, pessoal!
Sou novo no fórum e na programação, mas vi que as pessoas ajudam bastante por aqui, por isso resolvi criar o post.
Tenho um servidor particular, apenas para brincar com alguns amigos, mas não conseguimos criar itens celestiais. Tentei mais de 50 vezes, todas resultaram em falha. Como não entendo muito da programação, tentei corrigir algumas coisas no _MSG_CombineItemOdin.cpp, mas ainda assim, não consegui resolver.
Não faço ideia de como consertar.
Esse é meu primeiro post, então não sei direito qual é o procedimento para pedir ajuda. Devo enviar o arquivo aqui? Apenas colar o código? Como fazer para pedir ajuda a vocês?
De qualquer maneira, vou postar o início do código desse arquivo, até o ponto onde estão as funções do item celestial para vocês olharem.
Conto com a sua paciência, e agradeço desde já!
#include "ProcessClientMessage.h"
void Exec_MSG_CombineItemOdin(int conn, char *pMsg)
{
MSG_CombineItem *m = (MSG_CombineItem*)pMsg;
for (int i = 0; i < MAX_COMBINE; i++)
{
if (m->Item.sIndex == 0)
continue;
int invPos = m->InvenPos;
if (invPos < 0 || invPos >= pMob[conn].MaxCarry)
{
RemoveTrade(conn);
return;
}
if (memcmp(&pMob[conn].MOB.Carry[invPos], &m->Item, sizeof(STRUCT_ITEM)))
{
MyLog(LogType::Combines, "err,msg_CombineOdin - item remove or changed.", pUser[conn].AccountName, 0, pUser[conn].IP);
SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0);
return;
}
}
int combine = GetMatchCombineOdin(m->Item);
if (combine == 2)
{
int sAgua = 0;
int sTerra = 0;
int sSol = 0;
int sVento = 0;
if(m->Item[3].sIndex == 5334 || m->Item[4].sIndex == 5334 || m->Item[5].sIndex == 5334 || m->Item[6].sIndex == 5334)
sAgua = 1;
if(m->Item[3].sIndex == 5335 || m->Item[4].sIndex == 5335 || m->Item[5].sIndex == 5335 || m->Item[6].sIndex == 5335)
sTerra = 1;
if(m->Item[3].sIndex == 5336 || m->Item[4].sIndex == 5336 || m->Item[5].sIndex == 5336 || m->Item[6].sIndex == 5336)
sSol = 1;
if(m->Item[3].sIndex == 5337 || m->Item[4].sIndex == 5337 || m->Item[5].sIndex == 5337 || m->Item[6].sIndex == 5337)
sVento = 1;
if((sAgua && (sTerra == 0 || sSol == 0 || sVento == 0)) || (sTerra && (sAgua == 0 || sSol == 0 || sVento == 0)) || (sSol && (sAgua == 0 || sTerra == 0 || sVento == 0)) || (sVento && (sAgua == 0 || sTerra == 0 || sSol == 0)))
{
SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0);
return;
}
}
if (combine == 2 && (BASE_GetItemSanc(&m->Item[2]) >= REF_15 || BASE_GetItemAbility(&m->Item[2], EF_MOBTYPE) == 3))
{
SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0);
return;
}
if (combine == 4 && (pMob[conn].MOB.CurrentScore.Level != 39 || pMob[conn].Extra.QuestInfo.Celestial.Lv40 == 1 || pMob[conn].Extra.ClassMaster != CELESTIAL))
{
SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0);
return;
}
if (combine == 11 && (pMob[conn].Extra.ClassMaster == MORTAL || pMob[conn].Extra.ClassMaster == ARCH || BASE_GetItemSanc(&pMob[conn].MOB.Equip[15]) >= 9))
{
SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 0);
return;
}
for (int i = 0; i < MAX_COMBINE; i++)
{
if (m->Item.sIndex == 0)
continue;
memset(&pMob[conn].MOB.Carry[m->InvenPos], 0, sizeof(STRUCT_ITEM));
SendItem(conn, ITEM_PLACE_CARRY, m->InvenPos, &pMob[conn].MOB.Carry[m->InvenPos]);
}
for (int i = 0; i < MAX_COMBINE; i++)
{
if (m->Item.sIndex)
{
char itemlog[2048];
BASE_GetItemCode(&m->Item, itemlog);
strcat(temp, itemlog);
}
}
srand(time(NULL) /0.7432524524515122 - (rand() % 62325928) * .124323);
int _rand = rand() % 91;
if (combine == 1)//Item celestial
{
// if (_rand <= g_pOdinRate[combine] || LOCALSERVER)
// {
memcpy(&pMob[conn].MOB.Carry[m->InvenPos[1]], &m->Item[1], sizeof(STRUCT_ITEM));
pMob[conn].MOB.Carry[m->InvenPos[1]].sIndex = g_pItemList[m->Item[0].sIndex].Extra;
BASE_SetItemSanc(&pMob[conn].MOB.Carry[m->InvenPos[1]], 0, 0);
char tt[256];
SendNotice(g_pMessageStringTable[_SS_Combin_12Succ]);
SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 1);
sprintf(temp, "%s ", pUser[conn].AccountName);
BASE_GetItemCode(&pMob[conn].MOB.Carry[m->InvenPos[1]], tt);
strcat(temp, tt);
MyLog(LogType::Combines, "*** Combine odin item celestial sucess ***", pUser[conn].AccountName, 0, pUser[conn].IP);
SendItem(conn, ITEM_PLACE_CARRY, m->InvenPos[1], &pMob[conn].MOB.Carry[m->InvenPos[1]]);
return;
/* }
else
{
memcpy(&pMob[conn].MOB.Carry[m->InvenPos[1]], &m->Item[1], sizeof(STRUCT_ITEM));
SendItem(conn, ITEM_PLACE_CARRY, m->InvenPos[1], &pMob[conn].MOB.Carry[m->InvenPos[1]]);
sprintf(temp, "%s", g_pMessageStringTable[_NN_CombineFailed]);
SendClientMsg(conn, temp);
SendClientSignalParm(conn, ESCENE_FIELD, _MSG_CombineComplete, 2);
MyLog(LogType::Combines, "*** Combine odin item celestial fail ***", pUser[conn].AccountName, 0, pUser[conn].IP);
return;
} */
}