Portal SAMP
[Ajuda] CJ Aparecendo no Inventário - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] CJ Aparecendo no Inventário (/showthread.php?tid=3687)



CJ Aparecendo no Inventário - RosaScripter - 14/06/2023

Alguém sabe como posso remover os CJ no inventário liberado aqui no fórum? https://portalsamp.com/showthread.php?tid=1002

Tentei algumas formas mas sem sucesso..

Obs: Assim que um jogador abre o inventário aparece vários CJ's e só dar pra deixar o inv vazio só descartando eles assim o inventário funciona normal.


RE: CJ Aparecendo no Inventário - xbruno1000x - 14/06/2023

Vou baixar o sistema e depois vou dar uma olhada. Se ninguém solucionar antes de mim, mando a solução aqui.


RE: CJ Aparecendo no Inventário - Dr Editor - 14/06/2023

Ou está salvando ou carregando o ID 0, que é o valor inicial para variáveis do tipo inteiro, float...
Provavelmente está resetando e isso está afetando.
O valor 0 pertence a um modelo e para posições vazias no inventário é necessário usar um modelo inválido, como qualquer número negativo ou um positivo inexistente.
O código possui a função chamada IsValidItemInv. Basta usar ela para carregar/salvar e se o ID for inválido basta atribuir o valor -1 (ou conforme dito anteriormente, outro modelo inexistente) na função PlayerTextDrawSetPreviewModel e estará resolvido.


RE: CJ Aparecendo no Inventário - k2bi_YT - 14/06/2023

Você deve olhar o que esta sendo salvo na variavel PlayerInventario[playerid][i][Slot]

Verifique se, ao carregar o inventario do jogador assim que ele loga, se você setar PlayerInventario[playerid][i][Slot] = 0; irá aparece a skin do CJ por ser o ID do mesmo, para ficar invisível, a variavel deve ser definida para -1

Observe quando é feito a verificação da variavel ao abrir o inventario:

Código PHP:
if(PlayerInventario[playerid][i][Slot] == -1//Me refiro a essa linha, se a variavel esta guardando o valor -1(que é a default), ira ficar transparente a textdraw
            
{
                
PlayerTextDrawSetPreviewRot(playeridDrawInv[playerid][i], 0.0000000.0000000.000000999);
            }
            else
            {
                
PlayerTextDrawSetPreviewRot(playeridDrawInv[playerid][i], 0.0000000.0000000.0000001);
            } 



RE: CJ Aparecendo no Inventário - RosaScripter - 14/06/2023

(14/06/2023 17:09)Dr Editor Escreveu: Ou está salvando ou carregando o ID 0, que é o valor inicial para variáveis do tipo inteiro, float...
Provavelmente está resetando e isso está afetando.
O valor 0 pertence a um modelo e para posições vazias no inventário é necessário usar um modelo inválido, como qualquer número negativo ou um positivo inexistente.
O código possui a função chamada IsValidItemInv. Basta usar ela para carregar/salvar e se o ID for inválido basta atribuir o valor -1 (ou conforme dito anteriormente, outro modelo inexistente) na função PlayerTextDrawSetPreviewModel e estará resolvido.

Tentei essa forma e nada resolvido, sem sucesso!

(14/06/2023 17:10)k2bi_YT Escreveu: Você deve olhar o que esta sendo salvo na variavel PlayerInventario[playerid][i][Slot]

Verifique se, ao carregar o inventario do jogador assim que ele loga, se você setar PlayerInventario[playerid][i][Slot] = 0; irá aparece a skin do CJ por ser o ID do mesmo, para ficar invisível, a variavel deve ser definida para -1

Observe quando é feito a verificação da variavel ao abrir o inventario:

Código PHP:
if(PlayerInventario[playerid][i][Slot] == -1//Me refiro a essa linha, se a variavel esta guardando o valor -1(que é a default), ira ficar transparente a textdraw
            {
                PlayerTextDrawSetPreviewRot(playeridDrawInv[playerid][i], 0.0000000.0000000.000000999);
            }
            else
            {
                PlayerTextDrawSetPreviewRot(playeridDrawInv[playerid][i], 0.0000000.0000000.0000001);
            

Sem sucesso

(14/06/2023 17:10)k2bi_YT Escreveu: Você deve olhar o que esta sendo salvo na variavel PlayerInventario[playerid][i][Slot]

Verifique se, ao carregar o inventario do jogador assim que ele loga, se você setar PlayerInventario[playerid][i][Slot] = 0; irá aparece a skin do CJ por ser o ID do mesmo, para ficar invisível, a variavel deve ser definida para -1

Observe quando é feito a verificação da variavel ao abrir o inventario:

Código PHP:
if(PlayerInventario[playerid][i][Slot] == -1//Me refiro a essa linha, se a variavel esta guardando o valor -1(que é a default), ira ficar transparente a textdraw
            {
                PlayerTextDrawSetPreviewRot(playeridDrawInv[playerid][i], 0.0000000.0000000.000000999);
            }
            else
            {
                PlayerTextDrawSetPreviewRot(playeridDrawInv[playerid][i], 0.0000000.0000000.0000001);
            

O sistema liberado no fórum por padrão já está aparecendo os CJ´s, dei uma revisada nas mensagens do tópico e uma galera tem o mesmo problema. Não fui de criar um inv em textdraw mas acho que seria uma boa tu revisar o sistema pra ver se não há alguma coisa errada.


RE: CJ Aparecendo no Inventário - Maycon_Felipe - 15/06/2023

Basicamente ele está lendo um valor que não existe em LoadInv, assim setando a variavel para 0..
É apenas uma solução temporária pois qualquer bug as skin 0 pode voltar, eu aconselho a modificar a forma como é mostrada..
verifique se a variável 'PlayerInventario[playerid][i][Unidades]' se ela for menor ou igual a 0, você seta PlayerInventario[playerid][i][Slot] = -1;..
Código:
K2::LoadInv(playerid)
{
    new file[64], key[64], string[2][64], str[64];
    format(file, sizeof(file), Pasta_Inventario, PlayerName(playerid));
    
    new criado = 0;
    if(!DOF2_FileExists(file))
    {
        criado = 1;
        DOF2_CreateFile(file);
    }
    SetPVarInt(playerid, #VarSlotInv, 0);
    for(new i = 1; i < 33; ++i)
    {
        PlayerInventario[playerid][i][Slot] = -1;
        PlayerInventario[playerid][i][Unidades] = 0;
        if(!criado)
        {
            format(key, sizeof(key), "Item_%d", i);
            format(str, sizeof(str), DOF2_GetString(file, key));
            split(str, string, '|');
            PlayerInventario[playerid][i][Slot] = strval(string[0]);
            PlayerInventario[playerid][i][Unidades] = strval(string[1]);
        }
    }
    return 1;
}



RE: CJ Aparecendo no Inventário - xbruno1000x - 15/06/2023

Boa noite a todos!

Bug corrigido:
https://pastebin.com/N5iSuQYg

Ao debugar a public LoadInv, notei que tanto o Slot quanto Unidades eram criados como 0, independente do valor setado na variável. Criei uma public exclusiva para a criação de arquivos de inventários, que encaminha para o LoadInv caso o jogador já tenha um inventário criado. Pelos meus testes tudo está funcionando bem, mas em caso de surgirem outros problemas sinta-se à vontade para ressuscitar o tópico.


RE: CJ Aparecendo no Inventário - RosaScripter - 15/06/2023

(15/06/2023 02:33)xbruno1000x Escreveu: Boa noite a todos!

Bug corrigido:
https://pastebin.com/N5iSuQYg

Ao debugar a public LoadInv, notei que tanto o Slot quanto Unidades eram criados como 0, independente do valor setado na variável. Criei uma public exclusiva para a criação de arquivos de inventários, que encaminha para o LoadInv caso o jogador já tenha um inventário criado. Pelos meus testes tudo está funcionando bem, mas em caso de surgirem outros problemas sinta-se à vontade para ressuscitar o tópico.

Ótimo!! ?