Portal SAMP
[Ajuda] Não estou conseguindo finalizar este código - 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] Não estou conseguindo finalizar este código (/showthread.php?tid=1649)



Não estou conseguindo finalizar este código - H4WK - 21/09/2021

Estou criando uma concessionária, e antes tinha feito de uma forma muito extensa, e acabou que a dialog parou de reconhecer outros modelos de veículos
Então, o que eu não consegui fazer é: através da linha abaixo, eu defino o modelo do veículo, seu valor e o seu tipo (0 - bicicletas, 1 - carros, etc...).
Código:
#define MODEL_SELECTION_BUYVEHICLE (1)

enum dealerData {
    vehModel,
    vehPrice,
    vehType[2]
};
new DealerData[][dealerData] =
{
// TYPES: 0 - BICICLETA / 1 - DUAS PORTAS / 2 - QUATRO PORTAS
    {509, 75, 0},
    {481, 80, 0},
    {510, 110, 0},
    {602, 12000, 1},
    {496, 5000, 1},
    {401, 3250, 1},
    {518, 4500, 1},
    {527, 4300, 1},
    {589, 3200, 1},
    {419, 6200, 1},
    {587, 9650, 1},
    {533, 8700, 1},
    {526, 7500, 1},
    {474, 3200, 1},
    {545, 2200, 1},
    {517, 6700, 1},
    {410, 3300, 1},
    {600, 6500, 1},
    {436, 4500, 1},
    {439, 3100, 1},
    {549, 2100, 1},
    {491, 4300, 1}
};

E quando o Model selection lê isso, ele não consegue ler o modelo de todos os veículos do tipo 0, e ele acaba bugando

Código:
ShowModelSelectionMenu(playerid, "Bicicletas", MODEL_SELECTION_BUYVEHICLE, DealerData[vehModel][vehType][0], sizeof(DealerData[vehModel][vehType][0]), -16.0, 0.0, -55.0);
Nesse caso, ele não consegue ler o modelid de TODOS os veículos do tipo 0, e gostaria que lesse, pois senão eu teria que trocar o "DealerData...." por {modelid, modelid, modelid} e etc...
Código:
public OnModelSelectionResponse(playerid, extraid, index, modelid, response)
{
    if ((response) && (extraid == MODEL_SELECTION_BUYVEHICLE))
    {
        PlayerData[playerid][pDealerCar] = index;
        Dialog_Show(playerid, BuyVehicle, DIALOG_STYLE_MSGBOX, ReturnVehicleModelName(modelid), "Você deseja comprar um(a) %s por %s?", "Sim", "Não", ReturnVehicleModelName(modelid), FormatNumber(DealerData[index][vehPrice]));
    }
    return 1;
}



RE: Não estou conseguindo finalizar este código - SrBlue - 21/09/2021

referente ao sizeof, mude para
sizeof(DealerData[]), sobre o valor 0
tenta fazer um debug, com printf(dealer..[vehType][0])!


RE: Não estou conseguindo finalizar este código - H4WK - 21/09/2021

(21/09/2021 15:01)SrBlue Escreveu: referente ao sizeof, mude para
sizeof(DealerData[]), sobre o valor 0
tenta fazer um debug, com printf(dealer..[vehType][0])!

Não deu certo o debug, retorna uma coisa nada a ver
O que eu queria é que, cada valor dentro das chaves, fosse lido como as variáveis

Por Exemplo:

{0, 411, 10000}
Tipo do veículo = 0, logo ele é um carro, então quando eu selecionar a dialog de Carros, vai listar apenas os carros do tipo 0
ModelID = o modelid do veículo
Preço = o preço daquele modelo de veículo (o carro modelid 411 (infernus) vale $10000)


RE: Não estou conseguindo finalizar este código - SrBlue - 21/09/2021

(21/09/2021 15:22)H4WK Escreveu:
(21/09/2021 15:01)SrBlue Escreveu: referente ao sizeof, mude para
sizeof(DealerData[]), sobre o valor 0
tenta fazer um debug, com printf(dealer..[vehType][0])!

Não deu certo o debug, retorna uma coisa nada a ver
O que eu queria é que, cada valor dentro das chaves, fosse lido como as variáveis

Por Exemplo:

{0, 411, 10000}
Tipo do veículo = 0, logo ele é um carro, então quando eu selecionar a dialog de Carros, vai listar apenas os carros do tipo 0
ModelID = o modelid do veículo
Preço = o preço daquele modelo de veículo (o carro modelid 411 (infernus) vale $10000)


manda print do debug...

enum dealerData {
vehModel,
vehPrice,
vehType[2]
};
new DealerData[][dealerData] = {
{509, 75, 0}, // 0
{481, 80, 0}, // 1
{510, 110, 0}, // 2
};

para ler como variaveis
a primeira chave [] recebe o numero do elemente da lista, como exemplo 0,1,2,3
Sendo assim os demais valores são recebidos pela enum,
ficando as vars assim

DealerData[0][vehModel] = 509
DealerData[0][vehPrice] = 75
... etc


RE: Não estou conseguindo finalizar este código - H4WK - 21/09/2021

(21/09/2021 15:30)SrBlue Escreveu:
enum dealerData {
    vehModel,
    vehPrice,
    vehType[2]
};
new DealerData[][dealerData] = {
    {509, 75, 0}, // 0
    {481, 80, 0}, // 1
    {510, 110, 0}, // 2
};

para ler como variaveis
a primeira chave [] recebe o numero do elemente da lista, como exemplo 0,1,2,3
Sendo assim os demais valores são recebidos pela enum,
ficando as vars assim

DealerData[0][vehModel] = 509
DealerData[0][vehPrice] = 75
... etc
Fiz da seguinte maneira, e a princípio quase deu certo, mas o sistema continua não lendo o tipo de veículo, (0 ou 1)
Código:
enum dealerData {
    vehModel,
    vehPrice,
    vehType[2],
};
new DealerData[][dealerData] =
{
// TYPES: 0 - BICICLETA / 1 - DUAS PORTAS / 2 - QUATRO PORTAS
    {{509}, {75}, {0}},
    {{481}, {80}, {0}},
    {{510}, {110}, {0}},
    {{602}, {12000}, {1}}
};

As bicicletas, que são tipo 0, reconheceu as 3 pois no código eu limitei às 3.
portanto, no model selection aparece isso
https://prnt.sc/1t4rbjm
Código:
Dialog:VehicleType(playerid, response, listitem, inputtext[])
{
    if(response)
    {
        if(listitem == 0)
        {
            Dialog_Show(playerid, SelectCars, DIALOG_STYLE_LIST, "Concessionária - Carros", "Populares 2 Portas\nPopulares 4 Portas\nCamionetes\nFurgões\nLowrider\nUtilitário Esportivo", "Selecionar", "Cancelar");
        }
        else if(listitem == 1)
        {
       
        }
        else if(listitem == 2)
        {
            static
                bikes[3];

            for(new i = 0; i < 3; i++)
            {
                bikes[i] = DealerData[0][vehModel];
            }
            ShowModelSelectionMenu(playerid, "Bicicletas", MODEL_SELECTION_BUYVEHICLE, bikes, 3, -16.0, 0.0, -55.0);
        }
    }
    return 1;
}

Só que, ao clicar no dialog de carros de 2 portas, no caso, do tipo {1}, ele mostra isso
https://prnt.sc/1t4rlzd
Código:
Dialog:SelectCars(playerid, response, listitem, inputtext[])
{
    if(response)
    {
        if(listitem == 0)
        {
            static
                cars[19];

            for(new i = 0; i < 19; i++)
            {
                cars[i] = DealerData[1][vehModel];
            }
            ShowModelSelectionMenu(playerid, "Populares de 2 Portas", MODEL_SELECTION_BUYVEHICLE, cars, 19, -16.0, 0.0, -55.0);
        }
        else if(listitem == 1)
        {
        }
        else if(listitem == 2)
        {
        }
        else if(listitem == 3)
        {
        }
        else if(listitem == 4)
        {
        }
        else if(listitem == 5)
        {
        }

    }
    return 1;
}

Veja que ao declarar, eu declaro como DealerData[VEHTYPE (sendo 0 para bikes, 1 para carros)][VEHMODEL (ModelID do veiculo)];

E o debug retorna o nome do servidor e um monte de caractere nada a ver, não retornou as arrays


RE: Não estou conseguindo finalizar este código - SrBlue - 21/09/2021

(21/09/2021 15:55)H4WK Escreveu:
(21/09/2021 15:30)SrBlue Escreveu:
enum dealerData {
    vehModel,
    vehPrice,
    vehType[2]
};
new DealerData[][dealerData] = {
    {509, 75, 0}, // 0
    {481, 80, 0}, // 1
    {510, 110, 0}, // 2
};

para ler como variaveis
a primeira chave [] recebe o numero do elemente da lista, como exemplo 0,1,2,3
Sendo assim os demais valores são recebidos pela enum,
ficando as vars assim

DealerData[0][vehModel] = 509
DealerData[0][vehPrice] = 75
... etc
Fiz da seguinte maneira, e a princípio quase deu certo, mas o sistema continua não lendo o tipo de veículo, (0 ou 1)
Código:
enum dealerData {
    vehModel,
    vehPrice,
    vehType[2],
};
new DealerData[][dealerData] =
{
// TYPES: 0 - BICICLETA / 1 - DUAS PORTAS / 2 - QUATRO PORTAS
    {{509}, {75}, {0}},
    {{481}, {80}, {0}},
    {{510}, {110}, {0}},
    {{602}, {12000}, {1}}
};

As bicicletas, que são tipo 0, reconheceu as 3 pois no código eu limitei às 3.
portanto, no model selection aparece isso
https://prnt.sc/1t4rbjm
Código:
Dialog:VehicleType(playerid, response, listitem, inputtext[])
{
    if(response)
    {
        if(listitem == 0)
        {
            Dialog_Show(playerid, SelectCars, DIALOG_STYLE_LIST, "Concessionária - Carros", "Populares 2 Portas\nPopulares 4 Portas\nCamionetes\nFurgões\nLowrider\nUtilitário Esportivo", "Selecionar", "Cancelar");
        }
        else if(listitem == 1)
        {
       
        }
        else if(listitem == 2)
        {
            static
                bikes[3];

            for(new i = 0; i < 3; i++)
            {
                bikes[i] = DealerData[0][vehModel];
            }
            ShowModelSelectionMenu(playerid, "Bicicletas", MODEL_SELECTION_BUYVEHICLE, bikes, 3, -16.0, 0.0, -55.0);
        }
    }
    return 1;
}

Só que, ao clicar no dialog de carros de 2 portas, no caso, do tipo {1}, ele mostra isso
https://prnt.sc/1t4rlzd
Código:
Dialog:SelectCars(playerid, response, listitem, inputtext[])
{
    if(response)
    {
        if(listitem == 0)
        {
            static
                cars[19];

            for(new i = 0; i < 19; i++)
            {
                cars[i] = DealerData[1][vehModel];
            }
            ShowModelSelectionMenu(playerid, "Populares de 2 Portas", MODEL_SELECTION_BUYVEHICLE, cars, 19, -16.0, 0.0, -55.0);
        }
        else if(listitem == 1)
        {
        }
        else if(listitem == 2)
        {
        }
        else if(listitem == 3)
        {
        }
        else if(listitem == 4)
        {
        }
        else if(listitem == 5)
        {
        }

    }
    return 1;
}

Veja que ao declarar, eu declaro como DealerData[VEHTYPE (sendo 0 para bikes, 1 para carros)][VEHMODEL (ModelID do veiculo)];

ok, as variaveis estão no seus devidos lugares, porem porque você está usando STRING no vehtype, sendo que só recebe valor de 0,1,2?
somente use "vetor ( [1],[2],[3])" em caso de str..., retire o valor [2] e experimente


RE: Não estou conseguindo finalizar este código - H4WK - 21/09/2021

(21/09/2021 16:00)SrBlue Escreveu:
(21/09/2021 15:55)H4WK Escreveu:
(21/09/2021 15:30)SrBlue Escreveu:
enum dealerData {
    vehModel,
    vehPrice,
    vehType[2]
};
new DealerData[][dealerData] = {
    {509, 75, 0}, // 0
    {481, 80, 0}, // 1
    {510, 110, 0}, // 2
};

para ler como variaveis
a primeira chave [] recebe o numero do elemente da lista, como exemplo 0,1,2,3
Sendo assim os demais valores são recebidos pela enum,
ficando as vars assim

DealerData[0][vehModel] = 509
DealerData[0][vehPrice] = 75
... etc
Fiz da seguinte maneira, e a princípio quase deu certo, mas o sistema continua não lendo o tipo de veículo, (0 ou 1)
Código:
enum dealerData {
    vehModel,
    vehPrice,
    vehType[2],
};
new DealerData[][dealerData] =
{
// TYPES: 0 - BICICLETA / 1 - DUAS PORTAS / 2 - QUATRO PORTAS
    {{509}, {75}, {0}},
    {{481}, {80}, {0}},
    {{510}, {110}, {0}},
    {{602}, {12000}, {1}}
};

As bicicletas, que são tipo 0, reconheceu as 3 pois no código eu limitei às 3.
portanto, no model selection aparece isso
https://prnt.sc/1t4rbjm
Código:
Dialog:VehicleType(playerid, response, listitem, inputtext[])
{
    if(response)
    {
        if(listitem == 0)
        {
            Dialog_Show(playerid, SelectCars, DIALOG_STYLE_LIST, "Concessionária - Carros", "Populares 2 Portas\nPopulares 4 Portas\nCamionetes\nFurgões\nLowrider\nUtilitário Esportivo", "Selecionar", "Cancelar");
        }
        else if(listitem == 1)
        {
       
        }
        else if(listitem == 2)
        {
            static
                bikes[3];

            for(new i = 0; i < 3; i++)
            {
                bikes[i] = DealerData[0][vehModel];
            }
            ShowModelSelectionMenu(playerid, "Bicicletas", MODEL_SELECTION_BUYVEHICLE, bikes, 3, -16.0, 0.0, -55.0);
        }
    }
    return 1;
}

Só que, ao clicar no dialog de carros de 2 portas, no caso, do tipo {1}, ele mostra isso
https://prnt.sc/1t4rlzd
Código:
Dialog:SelectCars(playerid, response, listitem, inputtext[])
{
    if(response)
    {
        if(listitem == 0)
        {
            static
                cars[19];

            for(new i = 0; i < 19; i++)
            {
                cars[i] = DealerData[1][vehModel];
            }
            ShowModelSelectionMenu(playerid, "Populares de 2 Portas", MODEL_SELECTION_BUYVEHICLE, cars, 19, -16.0, 0.0, -55.0);
        }
        else if(listitem == 1)
        {
        }
        else if(listitem == 2)
        {
        }
        else if(listitem == 3)
        {
        }
        else if(listitem == 4)
        {
        }
        else if(listitem == 5)
        {
        }

    }
    return 1;
}

Veja que ao declarar, eu declaro como DealerData[VEHTYPE (sendo 0 para bikes, 1 para carros)][VEHMODEL (ModelID do veiculo)];

ok, as variaveis estão no seus devidos lugares, porem porque você está usando STRING no vehtype, sendo que só recebe valor de 0,1,2?
somente use "vetor ( [1],[2],[3])" em caso de str..., retire o valor [2] e experimente
Continua da mesma forma, o dialog de carros aparece apenas os 3 primeiros modelos de bicicletas, o que no caso seriam as de tipo 0


RE: Não estou conseguindo finalizar este código - SrBlue - 21/09/2021

cars[i] = DealerData[1][vehModel];
...


RE: Não estou conseguindo finalizar este código - SrBlue - 21/09/2021

(21/09/2021 16:13)SrBlue Escreveu: cars[i] = DealerData[1][vehModel];
...


como dito na explicação anterior, cada {} é igual um vetor
no caso o DealerData[1] = {481,80,0}
dando todos os 19 "carros"

Código:
for(new i = 0; i < 19; i++)

            {

                cars[i] = DealerData[1][vehModel];

            }

o valor do veiculo id 481,do preço 80, e do tipo 0, no caso a bicicleta!