Portal SAMP
[Ajuda] Carro some - 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] Carro some (/showthread.php?tid=2692)

Páginas: 1 2


Carro some - fear - 21/08/2022

Bom dia.

estou com um problema no sistema de carros... o player pega seu veiculo usando /car porém se algum player spawna um carro o carro do player anterior some como se fosse deletado.. se o player sai do servidor tb acontece isso.


CODIGO:
Código PHP:
new VehicleNames[212][] =
{
    
"Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
    
"Voodoo","Pony","Mule","Cheetah","Ambulance","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","ZR3 50","Walton","Regina",
    
"Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
    
"Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","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","gobob","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","Police (LSPD)","Police (SFPD)",
    
"Police  (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 PHP:
CMD:car(playeridparams[])
{
    new 
GetVehicle[15],interior;
    if(
PlayerInfo[playerid][modo] != 4)return SendClientMessage(playerid,Vermelho,"[ ERRO ] Voce nao tem permissao!");
    
GetPlayerPos(playerid,PlayerInfo[playerid][pPos][0],PlayerInfo[playerid][pPos][1],PlayerInfo[playerid][pPos][2]);
    
GetPlayerFacingAngle(playerid,PlayerInfo[playerid][pPos][3]);
    
interior GetPlayerInterior(playerid);

    if(
sscanf(params,"s[15]",GetVehicle)) return SendClientMessage(playerid,Vermelho,"[ ERRO ] Digite:/Car [Nome do Veiculo]");
    if(
IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playeridVermelho"[ ERRO ] Voce nao pode criar um Veiculo dentro de outro!");
        
    new 
bool:existeVeiculoID;
    for(new 
0;212r++)
    {
        if(!
strcmp(GetVehicleVehicleNames[r],true))
        {
            
existe true;
        }
        if(!
strcmp(GetVehicleVehicleNames[r],true)) VeiculoID = (r+400);
    }
    if(!
existe) return SendClientMessage(playerid,Vermelho,"[ ERRO ] Esse Veiculo nao existe!");
    
DestroyVehicle(PegarCarro[playerid]);
    
PegarCarro[playerid] = CreateVehicle(VeiculoID,PlayerInfo[playerid][pPos][0],PlayerInfo[playerid][pPos][1],PlayerInfo[playerid][pPos][2]+1,PlayerInfo[playerid][pPos][3],-1,-10);
    
LinkVehicleToInterior(PegarCarro[playerid],interior);
    
SetVehicleVirtualWorld(PegarCarro[playerid] ,GetPlayerVirtualWorld(playerid));
    
PutPlayerInVehicle(playerid,PegarCarro[playerid], 0);

    
SendClientMessage(playerid,0x799dc9FF,"[ ZP ] {FFFFFF}Veiculo criado com sucesso! ( Nome: {799dc9}%s{FFFFFF} )"VehicleNames[VeiculoID-400]);
    return 
1;


Código PHP:
public OnPlayerDisconnect(playeridreason)
{
    if ( 
reason == ) return 1;
    
DestroyVehicle(PegarCarro[playerid]);


DestroyVehicle(PegarCarro[playerid]); 

Código PHP:
getVehicleName(vehicleid)
{
    new 
nameVeh[75],vehmodel GetVehicleModel(vehicleid);
    if (
vehmodel 400 || vehmodel 611)
    {
        
strcat(nameVeh"Nenhum");
        return 
nameVeh;
    }
    
strcat(nameVehVehicleNames[vehmodel 400]);
    return 
nameVeh;




RE: Carro some - White_Blue - 21/08/2022

A função nativa CreateVehicle tem um parâmetro, e esse parâmetro é o tempo em que o veículo deve ser respawnado. Deixando esse parâmetro como -1 o veículo não irá respawnar.

Faça como no código abaixo e veja se funciona:

Código PHP:
CreateVehicle(VeiculoID,PlayerInfo[playerid][pPos][0],PlayerInfo[playerid][pPos][1],PlayerInfo[playerid][pPos][2]+1,PlayerInfo[playerid][pPos][3],-1,-1, -1); 



RE: Carro some - fear - 21/08/2022

(21/08/2022 11:22)White_Blue Escreveu: A função nativa CreateVehicle tem um parâmetro, e esse parâmetro é o tempo em que o veículo deve ser respawnado. Deixando esse parâmetro como -1 o veículo não irá respawnar.

Faça como no código abaixo e veja se funciona:

Código PHP:
CreateVehicle(VeiculoID,PlayerInfo[playerid][pPos][0],PlayerInfo[playerid][pPos][1],PlayerInfo[playerid][pPos][2]+1,PlayerInfo[playerid][pPos][3],-1,-1, -1); 

Ele não respawna e sim ele some.. como se eu tivesse deletado ele.


RE: Carro some - White_Blue - 21/08/2022

Reparando aqui no seu código, tem uma função sendo chamada assim que ele é criado. Por isso ele está sendo destruído

Código PHP:
DestroyVehicle(PegarCarro[playerid]); 



RE: Carro some - fear - 21/08/2022

(21/08/2022 11:42)White_Blue Escreveu: Reparando aqui no seu código, tem uma função sendo chamada assim que ele é criado. Por isso ele está sendo destruído

Código PHP:
DestroyVehicle(PegarCarro[playerid]); 

Essa função deleta o carro anterior do mesmo players para não acumular. não deveria deletar um carro de outro player.


RE: Carro some - White_Blue - 21/08/2022

(21/08/2022 11:47)fear Escreveu:
(21/08/2022 11:42)White_Blue Escreveu: Reparando aqui no seu código, tem uma função sendo chamada assim que ele é criado. Por isso ele está sendo destruído

Código PHP:
DestroyVehicle(PegarCarro[playerid]); 

Essa função deleta o carro anterior do mesmo players para não acumular. não deveria deletar um carro de outro player.
Você está fazendo isso de maneira errônea, pois você está destruindo o carro ao player executar o comando.


RE: Carro some - MarcosBrazz - 21/08/2022

Tem que fazer uma verificação se a variavel PegarCarro[playerid] existe como veiculo válido, caso exista destruir, se não existir um veiculo e mesmo assim chamar pra destruir vai destruir um veiculo com ID mais proximo


RE: Carro some - RosaScripter - 21/08/2022

(21/08/2022 11:47)fear Escreveu:
(21/08/2022 11:42)White_Blue Escreveu: Reparando aqui no seu código, tem uma função sendo chamada assim que ele é criado. Por isso ele está sendo destruído

Código PHP:
DestroyVehicle(PegarCarro[playerid]); 

Essa função deleta o carro anterior do mesmo players para não acumular. não deveria deletar um carro de outro player.

Use o DestroyVehicle na public OnPlayerExitVehcle, para quando o jogador sair do veiculo o carro sumir.


RE: Carro some - Magrinho93 - 21/08/2022

Código PHP:
public OnPlayerDisconnect(playeridreason)
{
    if ( !IsValidVehicle(PegarCarro[playerid]) )return 1;
    DestroyVehicle(PegarCarro[playerid]);
    PegarCarro[playerid] = INVALID_VEHICLE_ID;
    return 1;
}

CMD:car(playeridparams[])
{
    new GetVehicle[15],interior;
    if(PlayerInfo[playerid][modo] != 4)return SendClientMessage(playerid,Vermelho,"[ ERRO ] Voce nao tem permissao!");
    GetPlayerPos(playerid,PlayerInfo[playerid][pPos][0],PlayerInfo[playerid][pPos][1],PlayerInfo[playerid][pPos][2]);
    GetPlayerFacingAngle(playerid,PlayerInfo[playerid][pPos][3]);
    interior GetPlayerInterior(playerid);

    if(sscanf(params,"s[15]",GetVehicle)) return SendClientMessage(playerid,Vermelho,"[ ERRO ] Digite:/Car [Nome do Veiculo]");
    if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playeridVermelho"[ ERRO ] Voce nao pode criar um Veiculo dentro de outro!");
        
    
new bool:existeVeiculoID;
    for(new 0;212r++)
    {
        if(!strcmp(GetVehicleVehicleNames[r],true))
        {
            existe true;
        }
        if(!strcmp(GetVehicleVehicleNames[r],true)) VeiculoID = (r+400);
    }
    if(!existe) return SendClientMessage(playerid,Vermelho,"[ ERRO ] Esse Veiculo nao existe!");
    
    
// verifica se o jogador já tem um veiculo criado.
    if ( IsValidVehicle(PegarCarro[playerid]) ) {
        DestroyVehicle(PegarCarro[playerid]);
    }

    PegarCarro[playerid] = CreateVehicle(VeiculoID,PlayerInfo[playerid][pPos][0],PlayerInfo[playerid][pPos][1],PlayerInfo[playerid][pPos][2]+1,PlayerInfo[playerid][pPos][3],-1,-10);
    LinkVehicleToInterior(PegarCarro[playerid],interior);
    SetVehicleVirtualWorld(PegarCarro[playerid] ,GetPlayerVirtualWorld(playerid));
    PutPlayerInVehicle(playerid,PegarCarro[playerid], 0);

    SendClientMessage(playerid,0x799dc9FF,"[ ZP ] {FFFFFF}Veiculo criado com sucesso! ( Nome: {799dc9}%s{FFFFFF} )"VehicleNames[VeiculoID-400]);
    return 1;




RE: Carro some - DM110 - 23/08/2022

Código PHP:
public OnPlayerDisconnect(playeridreason)
{
    if( 
PegarCarro[playerid] > -){
        
DestroyVehicle(PegarCarro[playerid]);
        
PegarCarro[playerid] = -1;
    }
    return 
1;
}
CMD:car(playeridparams[])
{
    new GetVehicle[15],interior;
    if(PlayerInfo[playerid][modo] != 4)return SendClientMessage(playerid,Vermelho,"[ ERRO ] Voce nao tem permissao!");
    GetPlayerPos(playerid,PlayerInfo[playerid][pPos][0],PlayerInfo[playerid][pPos][1],PlayerInfo[playerid][pPos][2]);
    GetPlayerFacingAngle(playerid,PlayerInfo[playerid][pPos][3]);
    interior GetPlayerInterior(playerid);

    if(sscanf(params,"s[15]",GetVehicle)) return SendClientMessage(playerid,Vermelho,"[ ERRO ] Digite:/Car [Nome do Veiculo]");
    if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playeridVermelho"[ ERRO ] Voce nao pode criar um Veiculo dentro de outro!");
        
    
new bool:existeVeiculoID;
    for(new 0;212r++)
    {
        if(!strcmp(GetVehicleVehicleNames[r],true))
        {
            existe true;
        }
        if(!strcmp(GetVehicleVehicleNames[r],true)) VeiculoID = (r+400);
    }
    if(!existe) return SendClientMessage(playerid,Vermelho,"[ ERRO ] Esse Veiculo nao existe!");

    if( PegarCarro[playerid] > -){
        DestroyVehicle(PegarCarro[playerid]);
        PegarCarro[playerid] = -1;
    }  
    PegarCarro
[playerid] = CreateVehicle(VeiculoID,PlayerInfo[playerid][pPos][0],PlayerInfo[playerid][pPos][1],PlayerInfo[playerid][pPos][2]+1,PlayerInfo[playerid][pPos][3],-1,-10);
    LinkVehicleToInterior(PegarCarro[playerid],interior);
    SetVehicleVirtualWorld(PegarCarro[playerid] ,GetPlayerVirtualWorld(playerid));
    PutPlayerInVehicle(playerid,PegarCarro[playerid], 0);

    SendClientMessage(playerid,0x799dc9FF,"[ ZP ] {FFFFFF}Veiculo criado com sucesso! ( Nome: {799dc9}%s{FFFFFF} )"VehicleNames[VeiculoID-400]);
    return 1;