Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

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

Ajuda com o NPC Odin (itens celestiais)


querestico
 Compartilhar

Pergunta

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

2 respostass a esta questão

Posts Recomendados

  • 0

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.

Captura-de-tela-2024-10-24-200758.png

 

Captura-de-tela-2024-10-24-200740.png

 

Link para o comentário
Compartilhar em outros sites

  • 0

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

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Cadastre-se Agora para publicar com Sua Conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

 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.