Ir para conteúdo
🥇 [Exclusivo] Seja um Membro VIP EXTREME! ×
  • Quem está por aqui   0 membros estão online

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

preciso enviar 2 item com id diferentes usando apenas um arquivo na ImportItem.


Posts Recomendados

Alguém pode me ajudar?
preciso enviar 2 item com id diferentes usando apenas um arquivo na ImportItem.
Alguém pode me ajudar por favor ?
Link para o comentário
https://www.webcheats.com.br/topic/2299820-preciso-enviar-2-item-com-id-diferentes-usando-apenas-um-arquivo-na-importitem/
Compartilhar em outros sites

10 minutos atrás, sidneycarneiro disse:
Alguém pode me ajudar?
preciso enviar 2 item com id diferentes usando apenas um arquivo na ImportItem.
Alguém pode me ajudar por favor ?

chat gpt ajuda 

1 hora atrás, CerolFinin disse:

chat gpt ajuda 

ja pesquisei la não achei nada , uma pessoa do facebook falou que eu tenho que criar um baú e colocar os itens dentro e enviar o baú , mas eu não sei qual é o nome do baú pra ser usado e nem sei como digitar o código completo para encaminhar os dois itens no mesmo arquivo txt na importitem 

7 horas atrás, sidneycarneiro disse:

ja pesquisei la não achei nada , uma pessoa do facebook falou que eu tenho que criar um baú e colocar os itens dentro e enviar o baú , mas eu não sei qual é o nome do baú pra ser usado e nem sei como digitar o código completo para encaminhar os dois itens no mesmo arquivo txt na importitem 

O baú é só um exemplo, você tem que pegar a ID do item que você quer utilizar pra isso e criar a função pra ele pra quando for aberto, e aí ele vai entregar os itens que você quer, como por exemplo Baú de XP e Frango.

1 hora atrás, jhsms03 disse:

O baú é só um exemplo, você tem que pegar a ID do item que você quer utilizar pra isso e criar a função pra ele pra quando for aberto, e aí ele vai entregar os itens que você quer, como por exemplo Baú de XP e Frango.

tem que fazer esse código na source ? você tem o código ?

Acho que quem te passou a ideia do bau, deveria estar falando de um item customizado na src na qual voce pode configurar quais itens ele entrega ao abrir o bau, tem algumas srcs  postada com sistemas similares, então em vez de tu enviar os itens no import voce envia o bau que quando jogador abrir no jogo vai entregar os itens configurados. porem surgi uma pequena dúvida, porque voce não poderia enviar em 2 imports separados?

6 horas atrás, Crazy Player-1 disse:

Acho que quem te passou a ideia do bau, deveria estar falando de um item customizado na src na qual você pode configurar quais itens ele entrega ao abrir o bau, tem algumas srcs  postada com sistemas similares, então em vez de tu enviar os itens no import você envia o bau que quando jogador abrir no jogo vai entregar os itens configurados. porem surgi uma pequena dúvida, porque voce não poderia enviar em 2 imports separados?

exatamente isso que estou precisando,  configurar na source para quando abrir o baú entregar os itens programados . preciso enviar em um único porque  estou desenvolvendo um sistema de envio no site e quero enviar todos de uma vez .

9 horas atrás, sidneycarneiro disse:

exatamente isso que estou precisando,  configurar na source para quando abrir o baú entregar os itens programados . preciso enviar em um único porque  estou desenvolvendo um sistema de envio no site e quero enviar todos de uma vez .

eu fiz algo similar no meu site, voce pode cadastrar um pacote de itens, mais quando a api vai enviar para o import, gera um import para cada item.

5 horas atrás, Crazy Player-1 disse:

eu fiz algo similar no meu site, voce pode cadastrar um pacote de itens, mais quando a api vai enviar para o import, gera um import para cada item.

você pode disponibilizar esse código pra mim colocar no meu ?

duvido muito que vá te servir para alguma coisa mais o código relevante da api em c#:
levando em consideração que o site esta salvando os itens no banco onde o campo Game_Id seria o id da conta do jogador.
 

É necessário se cadastrar para acessar o conteúdo.

 

  • Curtir 8
Em 27/01/2025 em 21:18, Crazy Player-1 disse:

duvido muito que vá te servir para alguma coisa mais o código relevante da api em c#:
levando em consideração que o site esta salvando os itens no banco onde o campo Game_Id seria o id da conta do jogador.
 

É necessário se cadastrar para acessar o conteúdo.

 

Obrigado amigo , to com um problema aqui , quando eu crio o arquivo txt na importitem o arquivo esta sendo enviado antes do jogador entrar no jogo ai quando o jogador entra no jogo não tem nada , so consegue entregar o item se o jogador estiver logado no jogo . voce sabe como eu conserto isso ?

给你完整代码,替换原有函数即可
 

//向帐户的仓库导入物品。一行一条,可同时导入多行
void ImportItem()
{
    char pathSucess[256];
    char temp[256];
    char pathError[256];
    strncpy_s(temp, "..\\DATA\\ImportItem\\*.txt", sizeof(temp));

    struct _finddata_t file;
    INT32 findFile = _findfirst(temp, &file);
    if (findFile == -1)
        return;

    INT32 serverId = 0;
    while (true)
    {
        serverId++;
        if (serverId > MAX_SERVERGROUP)
            break;

        if (file.name[0] == '.')
        {
            INT32 tryFindNext = _findnext(findFile, &file);
            if (tryFindNext != 0)
                break;

            continue;
        }

        sprintf_s(pathSucess, sizeof(pathSucess), "..\\DATA\\ImportItem\\%s", file.name);
        sprintf_s(pathError, sizeof(pathError), "..\\DATA\\ImportItem\\err\\%s", file.name);

        FILE* pFile;
        fopen_s(&pFile, pathSucess, "rt");
        if (pFile == nullptr)
        {
            INT32 tryFindNext = _findnext(findFile, &file);
            if (tryFindNext != 0)
                break;

            continue;
        }

        char accountName[256];
        INT32 itemId, ef1, ef2, ef3, efv1, efv2, efv3;

        while (fgets(temp, sizeof(temp), pFile))
        {
            sscanf_s(temp, "%s %d %d %d %d %d %d %d", accountName, sizeof(accountName), &itemId, &ef1, &efv1, &ef2, &efv2, &ef3, &efv3);

            // 将账号名称转换为大写
            _strupr_s(accountName);

            bool runTimeSent = false;

            if (itemId < 0)
            {
                // Invalid itemId, move file to error
                MoveFileA(pathSucess, pathError);
                continue;
            }

            INT32 idxName = cFileDB.GetIndex(accountName);
            if (idxName > 0 && idxName < MAX_DBACCOUNT && cFileDB.Account[idxName].Slot >= 0 && cFileDB.Account[idxName].Slot <= 3)
            {
                INT32 srv = idxName / MAX_PLAYER;
                INT32 id = idxName % MAX_PLAYER;

                pCOF packet;
                memset(&packet, 0, sizeof(packet));

                packet.Header.PacketId = 0xC0F;
                packet.Header.Size = sizeof(pCOF);
                packet.Header.ClientId = id;

                strncpy_s(packet.Username, accountName, sizeof(packet.Username));

                packet.item.Index = itemId;
                packet.item.Effect[0].Index = ef1;
                packet.item.Effect[0].Value = efv1;
                packet.item.Effect[1].Index = ef2;
                packet.item.Effect[1].Value = efv2;
                packet.item.Effect[2].Index = ef3;
                packet.item.Effect[2].Value = efv3;

                pUser[srv].Sock.SendOneMessage((char*)&packet, sizeof(pCOF));
                runTimeSent = true;

                std::stringstream str;
                str << "通过DBsrv接收到物品 " << packet.item.toString().c_str();
            }

            if (!runTimeSent)
            {
                STRUCT_ACCOUNT account{};
                memcpy(account.Username, accountName, sizeof(account.Username));

                INT32 readedAccount = cFileDB.DBReadAccount(&account);
                if (readedAccount == 0)
                {
                    MoveFileA(pathSucess, pathError);
                    continue;
                }

                STRUCT_ITEM item{};
                item.Index = itemId;
                item.Effect[0].Index = ef1;
                item.Effect[0].Value = efv1;
                item.Effect[1].Index = ef2;
                item.Effect[1].Value = efv2;
                item.Effect[2].Index = ef3;
                item.Effect[2].Value = efv3;

                INT32 pos = -1;
                for (INT32 i = 0; i < 160; i++)
                {
                    if (account.Storage.Item.Index != 0)
                        continue;

                    pos = i;
                    break;
                }

                if (pos == -1)
                {
                    INT32 moveRet = MoveFileA(pathSucess, pathError);
                    Log(accountName, "空间不足,无法接收物品 %s。", item.toString().c_str());

                    if (moveRet == 0)
                    {
                        Log("空间不足,移动失败。文件: %s。物品: %s。GetLastError: %d。\n", pathSucess, item.toString().c_str(), GetLastError());
                        Log(accountName, "空间不足,移动失败。文件 %s。物品: %s。GetLastError %s。", pathSucess, item.toString().c_str(), GetLastError());
                    }
                    else
                    {
                        Log("空间不足,移动失败。文件: %s。物品: %s。GetLastError: %d。\n", pathSucess, item.toString().c_str(), GetLastError());
                    }
                    continue;
                }

                account.Storage.Item[pos] = item;
                Log(accountName, "物品 %s 已交付给角色", item.toString().c_str());

                INT32 tryReadAccount = cFileDB.DBWriteAccount(&account);
                if (tryReadAccount == 0)
                {
                    if (!runTimeSent)
                        MoveFileA(pathSucess, pathError);
                }
            }
        }

        fclose(pFile);

        auto tryReadAccount = DeleteFileA(pathSucess);
        if (tryReadAccount == 0)
        {
            if (!MoveFileA(pathSucess, pathError))
            {
                printf("导入物品成功 - 文件未删除\n");
            }
            else
            {
                printf("导入物品成功 - 文件已移动,警告\n");
            }
        }

        INT32 tryFindNext = _findnext(findFile, &file);
        if (tryFindNext != 0)
            break;
    }

    if (findFile != -1)
        _findclose(findFile);
}

1 hora atrás, cerdic disse:

给你完整代码,替换原有函数即可
 

//向帐户的仓库导入物品。一行一条,可同时导入多行
void ImportItem()
{
    char pathSucess[256];
    char temp[256];
    char pathError[256];
    strncpy_s(temp, "..\\DATA\\ImportItem\\*.txt", sizeof(temp));

    struct _finddata_t file;
    INT32 findFile = _findfirst(temp, &file);
    if (findFile == -1)
        return;

    INT32 serverId = 0;
    while (true)
    {
        serverId++;
        if (serverId > MAX_SERVERGROUP)
            break;

        if (file.name[0] == '.')
        {
            INT32 tryFindNext = _findnext(findFile, &file);
            if (tryFindNext != 0)
                break;

            continue;
        }

        sprintf_s(pathSucess, sizeof(pathSucess), "..\\DATA\\ImportItem\\%s", file.name);
        sprintf_s(pathError, sizeof(pathError), "..\\DATA\\ImportItem\\err\\%s", file.name);

        FILE* pFile;
        fopen_s(&pFile, pathSucess, "rt");
        if (pFile == nullptr)
        {
            INT32 tryFindNext = _findnext(findFile, &file);
            if (tryFindNext != 0)
                break;

            continue;
        }

        char accountName[256];
        INT32 itemId, ef1, ef2, ef3, efv1, efv2, efv3;

        while (fgets(temp, sizeof(temp), pFile))
        {
            sscanf_s(temp, "%s %d %d %d %d %d %d %d", accountName, sizeof(accountName), &itemId, &ef1, &efv1, &ef2, &efv2, &ef3, &efv3);

            // 将账号名称转换为大写
            _strupr_s(accountName);

            bool runTimeSent = false;

            if (itemId < 0)
            {
                // Invalid itemId, move file to error
                MoveFileA(pathSucess, pathError);
                continue;
            }

            INT32 idxName = cFileDB.GetIndex(accountName);
            if (idxName > 0 && idxName < MAX_DBACCOUNT && cFileDB.Account[idxName].Slot >= 0 && cFileDB.Account[idxName].Slot <= 3)
            {
                INT32 srv = idxName / MAX_PLAYER;
                INT32 id = idxName % MAX_PLAYER;

                pCOF packet;
                memset(&packet, 0, sizeof(packet));

                packet.Header.PacketId = 0xC0F;
                packet.Header.Size = sizeof(pCOF);
                packet.Header.ClientId = id;

                strncpy_s(packet.Username, accountName, sizeof(packet.Username));

                packet.item.Index = itemId;
                packet.item.Effect[0].Index = ef1;
                packet.item.Effect[0].Value = efv1;
                packet.item.Effect[1].Index = ef2;
                packet.item.Effect[1].Value = efv2;
                packet.item.Effect[2].Index = ef3;
                packet.item.Effect[2].Value = efv3;

                pUser[srv].Sock.SendOneMessage((char*)&packet, sizeof(pCOF));
                runTimeSent = true;

                std::stringstream str;
                str << "通过DBsrv接收到物品 " << packet.item.toString().c_str();
            }

            if (!runTimeSent)
            {
                STRUCT_ACCOUNT account{};
                memcpy(account.Username, accountName, sizeof(account.Username));

                INT32 readedAccount = cFileDB.DBReadAccount(&account);
                if (readedAccount == 0)
                {
                    MoveFileA(pathSucess, pathError);
                    continue;
                }

                STRUCT_ITEM item{};
                item.Index = itemId;
                item.Effect[0].Index = ef1;
                item.Effect[0].Value = efv1;
                item.Effect[1].Index = ef2;
                item.Effect[1].Value = efv2;
                item.Effect[2].Index = ef3;
                item.Effect[2].Value = efv3;

                INT32 pos = -1;
                for (INT32 i = 0; i < 160; i++)
                {
                    if (account.Storage.Item.Index != 0)
                        continue;

                    pos = i;
                    break;
                }

                if (pos == -1)
                {
                    INT32 moveRet = MoveFileA(pathSucess, pathError);
                    Log(accountName, "空间不足,无法接收物品 %s。", item.toString().c_str());

                    if (moveRet == 0)
                    {
                        Log("空间不足,移动失败。文件: %s。物品: %s。GetLastError: %d。\n", pathSucess, item.toString().c_str(), GetLastError());
                        Log(accountName, "空间不足,移动失败。文件 %s。物品: %s。GetLastError %s。", pathSucess, item.toString().c_str(), GetLastError());
                    }
                    else
                    {
                        Log("空间不足,移动失败。文件: %s。物品: %s。GetLastError: %d。\n", pathSucess, item.toString().c_str(), GetLastError());
                    }
                    continue;
                }

                account.Storage.Item[pos] = item;
                Log(accountName, "物品 %s 已交付给角色", item.toString().c_str());

                INT32 tryReadAccount = cFileDB.DBWriteAccount(&account);
                if (tryReadAccount == 0)
                {
                    if (!runTimeSent)
                        MoveFileA(pathSucess, pathError);
                }
            }
        }

        fclose(pFile);

        auto tryReadAccount = DeleteFileA(pathSucess);
        if (tryReadAccount == 0)
        {
            if (!MoveFileA(pathSucess, pathError))
            {
                printf("导入物品成功 - 文件未删除\n");
            }
            else
            {
                printf("导入物品成功 - 文件已移动,警告\n");
            }
        }

        INT32 tryFindNext = _findnext(findFile, &file);
        if (tryFindNext != 0)
            break;
    }

    if (findFile != -1)
        _findclose(findFile);
}

Obrigado amigo . Valeu 

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
×
×
  • 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.