Portal SAMP
[Ajuda] Pegar nome do carro pelo ID - 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] Pegar nome do carro pelo ID (/showthread.php?tid=3110)



Pegar nome do carro pelo ID - MisteriumBr - 28/12/2022

Estou querendo pegar o nome do carro pelo ID porém só esta aparecendo "Nenhum" seja qual for o carro só aparece isso.

https://ibb.co/8M7hZgD - PRINT

Código:
stock getVehicleName(vehicleid){

        new vehmodel = GetVehicleModel(vehicleid);
        new nameVeh[75];

        if (vehmodel < 400 || vehmodel > 611)
        {
                strcat(nameVeh, "Nenhum");
                return nameVeh;
        }
        strcat(nameVeh, VehicleNames[vehmodel - 400]);
        return nameVeh;
}


Creio eu que o problema esteja aqui, mas não tenho certeza


RE: Pegar nome do carro pelo ID - xbruno1000x - 28/12/2022

Enumerador com os nomes:
Código:
new CarModelNameFromID[][] ={"Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster",
"Stretch","Manana","Infernus","Voodoo","Pony","Mule","Cheetah","Ambulancia","Leviathan","Moonbeam","Esperanto",
"Taxi","Washington","Bobcat","Mr Whoopee","BF Injection","Hunter","Premier","Enforcer","Securicar","Banshee",
"Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie","Stallion","Rumpo",
"RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer",
"Turismo","Speeder","Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer",
"PCJ-600","Faggio","Freeway","RC Baron","RC Raider","Glendale","Oceanic","Sanchez","Sparrow","Patriot",
"Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR-350","Walton","Regina","Comet","BMX",
"Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo",
"Greenwood","Jetmax","Hotring","Sandking","Blista Compact","Maverick Policial","Boxville","Benson","Mesa",
"RC Goblin","Hotring Racer A","Hotring Racer B","Bloodring Banger","Rancher","Super Gt","Elegant",
"Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain","Nebula","Majestic",
"Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona",
"FBI Truck","Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight",
"Streak","Vortex","Vincent","Bullet","Clover","Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob",
"Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A","Monster B","Uranus",
"Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight",
"Trailer","Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford",
"BF-400","Newsvan","Tug","Trailer A","Emperor","Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C",
"Andromada","Dodo","RC Cam","Launch","Viatura (LSPD)","Viatura (SFPD)","Viatura (LVPD)","Police Ranger",
"Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
"Stair Trailer","Boxville","Farm Plow","Utility Trailer"
};

Código teste:
Código:
        SendClientMessage(playerid, COR_PRINCIPAL, "[INFO] Veículo privado criado!");
        new string[128];
        format(string, 128,"Privado %s de %s", CarModelNameFromID[GetVehicleModel(Player[playerid][VehicleCreated])-400], getPName(playerid));
        Player[playerid][VehicleLabel] = Create3DTextLabel(string, COR_AMARELO, 30.0,40.0,50.0,10.0,0);
        Attach3DTextLabelToVehicle(Player[playerid][VehicleLabel], Player[playerid][VehicleCreated], 0.0, -2.0, 0.0);
        format(string, 30, "%d", Player[playerid][VehicleCreated]);



RE: Pegar nome do carro pelo ID - MisteriumBr - 28/12/2022

Nao deu certo, agora o comando nao é reconhecido

Código:
if(IsPlayerInRangeOfPoint(playerid, 4.0, 478.3958,-1318.1388,15.6686))
        {
            new string[500];
        format(string, sizeof(string), "{00BFFF}Veiculo Slot 1: %s\n{00BFFF}Veiculo Slot 2: %s", CarModelNameFromID[GetVehicleModel(PlayerInfo[playerid][pCarro])-400], CarModelNameFromID[GetVehicleModel(PlayerInfo[playerid][pCarro2])-400]);
            ShowPlayerDialog(playerid, 654, DIALOG_STYLE_LIST, "{858585}Garagem:", string, "Usar", "Fechar");
        }

Esta assim


RE: Pegar nome do carro pelo ID - domingues93 - 28/12/2022

Código PHP:
stock getVehicleName(vehicleidvname[], len sizeof(vname))
{
        if ( !
IsValidVehicle(vehicleid) ) return 0;

        new 
modelid GetVehicleModel(vehicleid);

        if (
modelid 400 || modelid 611) {
                
strcat(vname"inválido"len);
                return 
0;
        }
        
strcat(vnameVehicleNames[modelid 400], len);
        return 
1;

Se retornar uma string vazia, é porque o id do veiculo é inválido!


RE: Pegar nome do carro pelo ID - MisteriumBr - 29/12/2022

Eu acabei fazendo uma stock com todos os veiculos usados na minha gamemode, deu um pouco de trabalho mas deu certo, +Rep


RE: Pegar nome do carro pelo ID - White_Blue - 29/12/2022

Tem uma include chamada SVStream que tem a função GetVehicleName e outras funções bem interessantes relacionadas à veículos.

Baixar (Pastebin)
Baixar (Mediafire)


RE: Pegar nome do carro pelo ID - Carlos Victor - 29/12/2022

Você está passando o vehicleid ou o modelo do veículo?

Código:
stock ReturnVehicleModelName(model)
{
    new
        name[32] = "None";

    if (model < 400 || model > 611)
        return name;

    format(name, sizeof(name), g_arrVehicleNames[model - 400]);
    return name;
}

stock ReturnVehicleName(vehicleid)
{
    new
        model = GetVehicleModel(vehicleid),
        name[32] = "None";

    if(model < 400 || model > 611)
        return name;

    format(name, sizeof(name), g_arrVehicleNames[model - 400]);
    return name;
}

A função ReturnVehicleName vai retornar o nome do vehicleid, e não do modelo, então se o VehicleID 1 é um Sultan, ele vai retornar Sultan se você colocar ReturnVehicleName(1)

A função ReturnVehicleModelName vai retornar o nome do veículo a partir do modelo dele, ou seja o modelo 411 é o veículo Infernus, ReturnVehicleModelName(411) vai retornar Infernus.


RE: Pegar nome do carro pelo ID - strelo - 30/12/2022

O seu código parece estar correto, mas é possível que haja algum problema com a declaração da variável VehicleNames. Você tem certeza de que essa variável é um array de strings e que possui nomes de veículos correspondentes aos índices de modelos de veículos no intervalo de 400 a 611?

Além disso, é importante verificar se o modelo de veículo retornado pelo comando GetVehicleModel está realmente no intervalo esperado (400 a 611). Você pode adicionar alguns prints para verificar os valores retornados pelas funções e ter uma ideia do que está acontecendo. Por exemplo:

Código PHP:
printf("vehmodel: %d"vehmodel); 

Também é importante verificar se o veículo existe no jogo (isto é, se ele foi criado com sucesso antes de tentar obter seu modelo). Você pode usar a função IsValidVehicle para verificar isso:

Código PHP:
if (!IsValidVehicle(vehicleid)) {
  printf("Veículo inválido!");
  return "";


Além disso, é importante verificar se a função strcat está sendo usada corretamente. Ela concatena uma string ao final de outra string, portanto, é preciso ter cuidado para garantir que o primeiro argumento é uma string válida. Você também pode considerar usar a função format para facilitar a concatenação de strings. Por exemplo:

Código PHP:
format(nameVehsizeof(nameVeh), "%s"VehicleNames[vehmodel 400]);