[Ajuda] Identificar ID de veiculo sem estar dentro.
#1

Como posso identificar o ID do veнculo que vou por algo, sem eu estar dentro?

Uso isto para identificar quantas caixas o veнculo suporta, mas queria mudar para se for outro veiculo poder armazenar mais caixas.
PHP код:
if (CoreVehicles[i][vehLoads] >= 6)
    return 
SendErrorMessage(playerid"Este veнculo sу pode armazenar atй 6 caixas."); 
Reply
#2

Й sу verificar o veнculo que estб mais prуximo...faзa com um raio aproximado. E tambйm poderбs usar alguns algorнtimos para identificar qual veнculo estб na frente do player(em relaзгo ao seu angulo), para um resultado mais exato.

Ex:
PHP код:
static ipos[3];
for(
0<= GetVehiclePoolSize(); i++)
{
    
GetVehiclePos(ipos[0], pos[1], pos[2]);
    if(
IsPlayerInRangeOfPoint(playerid5.0pos[0], pos[1], pos[2]))//altere 5.0 para o raio que preferir
    
{
        
//Sua funзгo aqui
        
break;
    }

Sobre o tipo de veнculo nгo entendi muito bem, mas se for sobre tal veнculo corresponde a tantas caixas, basta fazer uma array com o id do veнculo e quantas caixas ele suporta.
Reply
#3

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
Й sу verificar o veнculo que estб mais prуximo...faзa com um raio aproximado. E tambйm poderбs usar alguns algorнtimos para identificar qual veнculo estб na frente do player(em relaзгo ao seu angulo), para um resultado mais exato.

Ex:
PHP код:
static ipos[3];
for(
0<= GetVehiclePoolSize(); i++)
{
    if(
IsPlayerInRangeOfPoint(playerid5.0pos[0], pos[1], pos[2]))//altere 5.0 para o raio que preferir
    
{
        
//Sua funзгo aqui
        
break;
    }

Sobre o tipo de veнculo nгo entendi muito bem, mas se for sobre tal veнculo corresponde a tantas caixas, basta fazer uma array com o id do veнculo e quantas caixas ele suporta.
Como eu poderia fazer isto de quantas caixas suporta? Й isso que estou com duvida, quanto a funзгo de identificar se esta atrбs, jб identifica corretamente.

Colocaria ali no " sua funзгo aqui " da seguinte maneira?

PHP код:
if(GetVehicleModel(vehicleid) == 499)
{
       if (
CoreVehicles[i][vehLoads] >= 6)
       return 
SendErrorMessage(playerid"Este veнculo sу pode armazenar atй 6 caixas.");
      return 
1

Mas como saberia o " vehicleid" se ele nгo usaria a funзгo de entrar no veiculo, e se usando " getplayervehicleid" ele pega o ID do veнculo em que o player esta, e nгo o ID do veiculo em que o player esta prуximo.
Reply
#4

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
Й sу verificar o veнculo que estб mais prуximo...faзa com um raio aproximado. E tambйm poderбs usar alguns algorнtimos para identificar qual veнculo estб na frente do player(em relaзгo ao seu angulo), para um resultado mais exato.

Ex:
PHP код:
static ipos[3];
for(
0<= GetVehiclePoolSize(); i++)
{
    if(
IsPlayerInRangeOfPoint(playerid5.0pos[0], pos[1], pos[2]))//altere 5.0 para o raio que preferir
    
{
        
//Sua funзгo aqui
        
break;
    }

Sobre o tipo de veнculo nгo entendi muito bem, mas se for sobre tal veнculo corresponde a tantas caixas, basta fazer uma array com o id do veнculo e quantas caixas ele suporta.
@off

"break", qual a funзao disso
Reply
#5

Creio que vocк esteja usando o gamemode South Central.

Tente isso:

Код:
new vehicleid;
vehicleid = GetNearestVehicle(playerid);

if(GetVehicleModel(vehicleid) == 499) 
{ 
       if (CoreVehicles[vehicleid][vehLoads] >= 6) 
       return SendErrorMessage(playerid, "Este veнculo sу pode armazenar atй 6 caixas."); 

      return 1;  
}
Se caso nгo tiver a funзгo ai,
Funзгo GetNearestVehicle:
Код:
stock GetNearestVehicle(playerid)
{
	static
	    Float:fX,
	    Float:fY,
	    Float:fZ;

	for (new i = 1; i != MAX_VEHICLES; i ++) if (IsValidVehicle(i) && GetVehiclePos(i, fX, fY, fZ))
	{
	    if (IsPlayerInRangeOfPoint(playerid, 3.5, fX, fY, fZ)) return i;
	}
	return INVALID_VEHICLE_ID;
}
Reply
#6

Quote:
Originally Posted by willttoonn
Посмотреть сообщение
Creio que vocк esteja usando o gamemode South Central.

Tente isso:

Код:
new vehicleid;
vehicleid = GetNearestVehicle(playerid);

if(GetVehicleModel(vehicleid) == 499) 
{ 
       if (CoreVehicles[vehicleid][vehLoads] >= 6) 
       return SendErrorMessage(playerid, "Este veнculo sу pode armazenar atй 6 caixas."); 

      return 1;  
}
Se caso nгo tiver a funзгo ai,
Funзгo GetNearestVehicle:
Код:
stock GetNearestVehicle(playerid)
{
	static
	    Float:fX,
	    Float:fY,
	    Float:fZ;

	for (new i = 1; i != MAX_VEHICLES; i ++) if (IsValidVehicle(i) && GetVehiclePos(i, fX, fY, fZ))
	{
	    if (IsPlayerInRangeOfPoint(playerid, 3.5, fX, fY, fZ)) return i;
	}
	return INVALID_VEHICLE_ID;
}
Obrigado pela ajuda, eu estou usando o sistema de entregas da gamemode, achei bem interessante!
Reply
#7

Quote:
Originally Posted by LucasDias
Посмотреть сообщение
Obrigado pela ajuda, eu estou usando o sistema de entregas da gamemode, achei bem interessante!
Й uma excelente base para aprender, principalmente se traduzi-la.
Reply
#8

Quote:
Originally Posted by IgorLuiz
Посмотреть сообщение
@off

"break", qual a funзao disso
a funзгo de "break"(pausa) й quebrar de fora de um loop, terminando prematuramente.
Reply
#9

Quote:
Originally Posted by willttoonn
Посмотреть сообщение
Й uma excelente base para aprender, principalmente se traduzi-la.
Sim, eu achei bem explicada e os cуdigos bem organizados para poder aprender, e jб aprendi um pouco de mysql sу com ela, achei bem interessante!
Reply
#10

Quote:
Originally Posted by LucasDias
Посмотреть сообщение
Como eu poderia fazer isto de quantas caixas suporta? Й isso que estou com duvida, quanto a funзгo de identificar se esta atrбs, jб identifica corretamente.

Colocaria ali no " sua funзгo aqui " da seguinte maneira?

PHP код:
if(GetVehicleModel(vehicleid) == 499)
{
       if (
CoreVehicles[i][vehLoads] >= 6)
       return 
SendErrorMessage(playerid"Este veнculo sу pode armazenar atй 6 caixas.");
      return 
1

Mas como saberia o " vehicleid" se ele nгo usaria a funзгo de entrar no veiculo, e se usando " getplayervehicleid" ele pega o ID do veнculo em que o player esta, e nгo o ID do veiculo em que o player esta prуximo.
Olhe la meu primeiro post que eu atualizei, havia esquecido de uma funзгo...

Entгo, isto й algo um pouco trabalhoso, mas hб vбrios mйtodos de fazer. Irei mostrar 2:

1є Exemplo (Array):
PHP код:
//No topo do GameMode(claro), vocк irб declarar esta array, informado quantas caixas tal modelo suporta
enum E_CAR_BOXES //nosso enumerator para nos acharmos
{
    
E_CAR_MODEL,
    
E_AMOUNT_BOX
}
new 
carBoxes[][E_CAR_BOXES] = {
    {
4002},
    {
4014},
    {
4024},
    {
4034}
};
/*
Logo o que iras fazer й seguir esta sequencia, colocar o modelo do veнculo e quantas caixas ele suporta (model, caixas)
*/
/*Agora vamos ver como usar essa tal 'array':
No meu exemplo de identificar veнculos prуximos, apуs ter encontrado um veнculo prуximo, basta pegar o modelo do mesmo e usar para identificar atravйs da array, quantas caixas ele suporta.
Obter modelo do veнculo = GetVehicleModel(vehicleid);
*/
static ipos[3], model;
for(
0<= GetVehiclePoolSize(); i++)
{
    
GetVehiclePos(ipos[0], pos[1], pos[2]);
    if(
IsPlayerInRangeOfPoint(playerid5.0pos[0], pos[1], pos[2]))//altere 5.0 para o raio que preferir
    
{
        
model GetVehicleModel(i);//troquei o parвmetro 'vehicleid' pela index que estб rodando no loop
      
        //logo, agora precisamos ver em qual index da minha array estб o modelo especificado:
        
        
static abool:found;
        
found false;
        for(
0sizeof(carBoxes); a++)
        {
            if(
carBoxes[a][E_CAR_MODEL] == model)
            {
                
found true;
                break;
            }
        }
        
//Agora saberemos se encontramos ou nгo:
        
if(found)
        {
            new 
total_de_caixas;
            
total_de_caixas carBoxes[a][E_AMOUNT_BOX];
            
//Agora sei o total de caixas, onde acessei a array acima
        
}
        break;
    }

2є Exemplo (Funзгo):
PHP код:
/*
Caso prefira por funзгo, e caso tambйm muitos modelos irгo repetir o mesmo nъmero de caixas, opte por este mйtodo
*/
GetAmountOfBoxes(vehicleid)
{
    
//Veja que nosso parвmetro й 'vehicleid' e nгo 'model'. Mas porque? Para evitar mais trabalhos, jб iremos pegar o id do modelo atravйs dessa funзгo, jб que sу usara o modelo para isto.
    
static modelamount;
    
model GetVehicleModel(vehicleid);
    
//O que irбs fazer aqui й muito parecido, veja:
    
switch(model)
    {
        case 
400401amount 5;//Observe que, se o modelo for 400 ou 401, o mбximo de caixas serб 5.
        
case 402amount 6;//Observe que, se o modelo for 402, o mбximo de caixas serб 6.
        
case 403amount 7;
        case 
404405amount 8;
        case 
406..410amount 9;//Observe agora que, se o modelo estiver entre 406 a 410, seu valor mбximo de caixas serб 9.
        
default: amount 0;//E aqui, por fim, se o modelo informado nгo estiver aqui, seu valor serб 0. Com isso poderбs identificar se o player estб tentando colocar caixas em um carro que nгo suporta caixas. Darei um exemplo agora a seguir.
    
}
    return 
amount;
}
/*
Agora vamos aplicar isto ao cуdigo(O que eu usei de exemplo no primeiro post para encontrar o veнculo prуximo):
*/
static ipos[3], boxes;
for(
0<= GetVehiclePoolSize(); i++)
{
    
GetVehiclePos(ipos[0], pos[1], pos[2]);
    if(
IsPlayerInRangeOfPoint(playerid5.0pos[0], pos[1], pos[2]))//altere 5.0 para o raio que preferir
    
{
        
boxes GetAmountOfBoxes(i);//Agora basta trocar 'vehicleid' pela index que estб rodando no loop, que й 'i'
      
        /*E pronto, jб sabemos quantas caixas suporta o veнculo 'i'. 
        E como disse acima, agora para identificar se o player estб tentando colocar caixas em um veнculo indevido:
        */
        
if(boxes == 0) return SendClientMessage(playerid, -1"Este veнculo nгo suporta caixas!");
        
/*Agora basta seguir com seu cуdigo:*/   
        
break;
    }


Se quiser saber sobre a parte teуrica das funзхes e mйtodos que usei, me chame via PM. Abзs.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)