Ir para conteúdo
  • 2 Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Ajuda com o NPC Odin (itens celestiais)


querestico
 Compartilhar

Posts Recomendados

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;
        } */
    }

Editado por querestico
Link para o comentário
Compartilhar em outros sites

Olá @ querestico , seja bem-vindo em nosso fórum, você é muito importante para nós.

 

Então, estaremos verificando como pode ser feito para solucionar seu problema, desde já agradeço, e estaremos informando por aqui ou por mensagem na sua caixa de mensagens.

 

Estamos à disposição.

"Eu nunca desisti e como você pode ver, eu não estou morto!"

 

OIP.bpO46LFEcMK1kQkPPrItqgHaEK?rs=1&pid=

Link para o comentário
Compartilhar em outros sites

  • 3 semanas atrás...

int combine = GetMatchCombineOdin(m->Item);//Função que alimenta a variável.

if(combine == 1) //  a função aqui dentro só será executada o "combine" a tender a condição 1, dessa forma você deve verificar a que função alimenta essa variável e estudar lá o porque de não chegar o valor 1.

 

Editado por lord320
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.