[Ajuda] Ajuda para manipular IDs de veнculos
#1

Bom, estou desenvolvendo um sistema para salvar veнculos em DOF2, mas encontrei uma dificuldade, vamos criar uma situaзгo aqui, suponhamos que vocк entre em seu veнculo, esse veнculo vai ter uma quantidade de gasolina e quantidade de Km rodados, e qualquer uma pessoa pode entrar em seu veнculo, se ele estiver destrancando, й claro, e quando essa pessoa entrar no veнculo, essas 2 informaзхes (Gasolina, KMs rodados) vгo ter que ser carregadas pra essa pessoa tambйm, aн que estб o problema.

Como vou fazer para o servidor identificar que й pra carregar as informaзхes do veнculo do jogador X para o jogador Y, jб pensei em algumas formas, como por exemplo salvar as informaзхes no save do jogador, mas prefiro que fique salvo no save do veнculo mesmo.

Esse й meu problema no PAWN atualmente, manipular IDs que nгo sejam o "playerid", como por exemplo um, "carid", "orgid", "empresaid", "casaid", etc...
Reply
#2

Vocк pode fazer uma simples verificaзгo quando o jogador for entrar no veiculo, veja a baixo..

PHP код:
public OnPlayerStateChange(playerid,newstate,oldstate)
{
    
// Verifique se o jogador estб dentro de qualquer veнculo (como motorista ou passageiro).
    
if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))
    {
        if(
GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
        
// Se o jogador for o motorista, mostre as informaзхes do veiculo pra ele
        
TextDrawShowForPlayer(playeridvelocidade); // Troque pela sua textdraw
    
}
    else 
// se nгo for o motorista esconda as informaзхes do veiculo
    
{
        
TextDrawHideForPlayer(playeridvelocidade); // Troque pela sua textdraw
    
}
    return 
1;

Reply
#3

PHP код:
new vehid//Vai armazenar o id do veнculo. obs nгo й o modelo.
vehid CreateVehicle(5202109.17631503.045332.288782.2873, -1, -160); 
Reply
#4

Considere que o jogador de ID x estб ao lado do veнculo de ID y, parado e a pй. Ainda, considere que as informaзхes dos veнculos sгo armazenadas em arrays indexadas por IDs de veнculos, como Gasolina[MAX_VEHICLES].



Bem, vocк sabe que os veнculos (vehicleid e MAX_VEHICLES) estгo separados dos jogadores (playerid e MAX_PLAYERS) do ponto de vista do cуdigo. Como, entгo, fazer esses dados interagirem entre si ?



Uma forma й usar algumas callbacks que facilitam essa interaзгo. Por exemplo, se na situaзгo inicial o jogador de ID x tentasse entrar no veнculo de ID y, a callback OnPlayerEnterVehicle seria executada. Nela, os parвmetros playerid e vehicleid teriam os valores x e y, respectivamente.



Com y, basta escrever Gasolina[y] (ou, nesse caso, Gasolina[vehicleid]). O problema й quando sу se tem x !



Agora, indo para o seu problema, vocк poderia usar o OnPlayerStateChange para detectar se um jogador entrasse em um veнculo. Porйm, sу haveria playerid sem os dados do veнculo. Como prosseguir ?



A soluзгo й usar a funзгo GetPlayerVehicleID para obter vehicleid a partir de playerid. Com isso, Gasolina[vehicleid] torna-se um valor acessнvel, podendo ser exibido ao jogador atravйs de, por exemplo, TextDraws.



Espero ter ajudado .
Reply
#5

Bom gente, primeiramente me desculpo por ter postado um cуdigo desse tamanho, mas й porque preciso saber o que estб certo e o que estб errado, assim saberei manipular esse sistema de uma forma melhor, jб que se aprende com os erros, utilizando as respostas de vocкs combinadas montei esse cуdigo, mas...

Deram 6 erros na linha em que eu comentei, pode ser na de cima, estou usando programaзгo modular, fica um pouco confuso isso, segue os erros:

Код:
..\modulos\Veiculos.pwn(38) : warning 211: possibly unintended assignment
..\modulos\Veiculos.pwn(38) : error 022: must be lvalue (non-constant)
..\modulos\Veiculos.pwn(38) : warning 215: expression has no effect
..\modulos\Veiculos.pwn(38) : error 001: expected token: ";", but found ")"
..\modulos\Veiculos.pwn(38) : error 029: invalid expression, assumed zero
..\modulos\Veiculos.pwn(38) : fatal error 107: too many error messages on one line
PHP код:
#include <YSI\y_hooks>
#define MAX_VEICULOS 1000
#define PASTA_VEICULOS                   "Veiculos/Veiculo%d.ini"
enum VeiculoEnum
{
 
Modelo,
 
Float:VeiculoX,
 
Float:VeiculoY,
 
Float:VeiculoZ,
 
Float:VeiculoA,//angulo
 
Cor1,
 
Cor2,
 
TempID
}
new 
VeiculoDados[MAX_VEICULOS][VeiculoEnum];
hook OnGameModeInit()
{
    
CarregarVeiculos();
    return 
1;
}
hook OnGameModeExit()
{
    
SalvarVeiculos();
    return 
1;
}
hook OnPlayerStateChange(playerid,newstate,oldstate

    new 
msg[64];
    if(
IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid)) 
    { 
        if(
GetPlayerState(playerid) = PLAYER_STATE_DRIVER) return 1//Erros nessa linha ou na de cima, nгo se sabe ao certo, estou usando modulos, ai confundi.
        
for(new iMAX_VEICULOSi++ )
        {
            
format(isizeof(i), PASTA_VEICULOSi);
        if(
GetPlayerVehicleID(playerid) == VeiculoDados[i][TempID])
        {
            
format(msgsizeof(msg), "Vocк entrou no veнculo ID %d"i//Apenas para testar o sistema
        
SendClientMessage(playerid, -1msg//Apenas para testar o sistema
        
}
        }
        return 
1;
    } 
    else 
    { 
        
//TextDrawHideForPlayer(playerid, Gasolina);
        
SendClientMessage(playerid, -1"Vocк saiu do veнculo!"//Apenas para testar o sistema
    

    return 
1
}  
stock SalvarVeiculos()
{
    for(new 
0MAX_VEICULOSi++)
    {
        
format(isizeof(i), PASTA_VEICULOSi);
        
DOF2_SetInt(i"Modelo"VeiculoDados[i][Modelo]);
        
DOF2_SetFloat(i"VeiculoX"VeiculoDados[i][VeiculoX]);
        
DOF2_SetFloat(i"VeiculoY"VeiculoDados[i][VeiculoY]);
        
DOF2_SetFloat(i"VeiculoZ"VeiculoDados[i][Veiculo]);
        
DOF2_SetFloat(i"VeiculoA"VeiculoDados[i][Veiculo]);
        
DOF2_SetInt(i"Cor1"VeiculoDados[i][Cor1]);
        
DOF2_SetInt(i"Cor2"VeiculoDados[i][Cor2]);
        
DOF2_SaveFile();
    }
    return 
1;
}
stock CarregarVeiculos()
{
    for(new 
0MAX_VEICULOSi++)
    {
    
format(isizeof(i), PASTA_VEICULOSi);
    
VeiculoDados[i][Modelo] = DOF2_GetInt(i"Modelo");
    
VeiculoDados[i][VeiculoX] = DOF2_GetFloat(i"VeiculoX");
    
VeiculoDados[i][VeiculoY] = DOF2_GetFloat(i"VeiculoY");
    
VeiculoDados[i][VeiculoZ] = DOF2_GetFloat(i"VeiculoZ");
    
VeiculoDados[i][VeiculoA] = DOF2_GetFloat(i"VeiculoA");
    
VeiculoDados[i][Cor1] = DOF2_GetInt(i"Cor1");
    
VeiculoDados[i][Cor2] = DOF2_GetInt(i"Cor2");    
    
VeiculoDados[i][TempID] = AddStaticVehicle(DOF2_GetInt(i"Modelo"), DOF2_GetFloat(i"VeiculoX"), DOF2_GetFloat(i"VeiculoY"), DOF2_GetFloat(i"VeiculoZ"), DOF2_GetFloat(i"VeiculoA"), DOF2_GetInt(i"Cor1"), DOF2_GetInt(i"Cor2"));
    }
    return 
1;

Reply
#6

Veja agora :

PHP код:
#include <YSI\y_hooks> 
#define MAX_VEICULOS 1000 
#define PASTA_VEICULOS                   "Veiculos/Veiculo%d.ini" 
enum VeiculoEnum 

 
Modelo
 
Float:VeiculoX
 
Float:VeiculoY
 
Float:VeiculoZ
 
Float:VeiculoA,//angulo 
 
Cor1
 
Cor2
 
TempID 
};
new 
VeiculoDados[MAX_VEICULOS][VeiculoEnum]; 
hook OnGameModeInit() 

    
CarregarVeiculos(); 
    return 
1

hook OnGameModeExit() 

    
SalvarVeiculos(); 
    return 
1

hook OnPlayerStateChange(playerid,newstate,oldstate)  
{  
    new 
msg[64]; 
    if(
IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))  
    {  
        if(
GetPlayerState(playerid) = PLAYER_STATE_DRIVER) return 1//Erros nessa linha ou na de cima, nгo se sabe ao certo, estou usando modulos, ai confundi. 
        
for(new iMAX_VEICULOSi++ ) 
        { 
            
format(isizeof(i), PASTA_VEICULOSi); 
            
            if(
GetPlayerVehicleID(playerid) == VeiculoDados[i][TempID]) 
            { 
                
format(msgsizeof(msg), "Vocк entrou no veнculo ID %d"i); //Apenas para testar o sistema 
                
SendClientMessage(playerid, -1msg); //Apenas para testar o sistema 
            

        } 
        return 
1
    }  
    else  
    {  
        
//TextDrawHideForPlayer(playerid, Gasolina); 
        
SendClientMessage(playerid, -1"Vocк saiu do veнculo!"); //Apenas para testar o sistema 
    
}  
    return 
1;  
}   
stock SalvarVeiculos() 

    for(new 
0MAX_VEICULOSi++) 
    { 
        
format(isizeof(i), PASTA_VEICULOSi); 
        
DOF2_SetInt(i"Modelo"VeiculoDados[i][Modelo]); 
        
DOF2_SetFloat(i"VeiculoX"VeiculoDados[i][VeiculoX]); 
        
DOF2_SetFloat(i"VeiculoY"VeiculoDados[i][VeiculoY]); 
        
DOF2_SetFloat(i"VeiculoZ"VeiculoDados[i][Veiculo]); 
        
DOF2_SetFloat(i"VeiculoA"VeiculoDados[i][Veiculo]); 
        
DOF2_SetInt(i"Cor1"VeiculoDados[i][Cor1]); 
        
DOF2_SetInt(i"Cor2"VeiculoDados[i][Cor2]); 
        
DOF2_SaveFile(); 
    } 
    return 
1

stock CarregarVeiculos() 

    for(new 
0MAX_VEICULOSi++) 
    { 
        
format(isizeof(i), PASTA_VEICULOSi); 
        
VeiculoDados[i][Modelo] = DOF2_GetInt(i"Modelo"); 
        
VeiculoDados[i][VeiculoX] = DOF2_GetFloat(i"VeiculoX"); 
        
VeiculoDados[i][VeiculoY] = DOF2_GetFloat(i"VeiculoY"); 
        
VeiculoDados[i][VeiculoZ] = DOF2_GetFloat(i"VeiculoZ"); 
        
VeiculoDados[i][VeiculoA] = DOF2_GetFloat(i"VeiculoA"); 
        
VeiculoDados[i][Cor1] = DOF2_GetInt(i"Cor1"); 
        
VeiculoDados[i][Cor2] = DOF2_GetInt(i"Cor2");     
        
VeiculoDados[i][TempID] = AddStaticVehicle(DOF2_GetInt(i"Modelo"), DOF2_GetFloat(i"VeiculoX"), DOF2_GetFloat(i"VeiculoY"), DOF2_GetFloat(i"VeiculoZ"), DOF2_GetFloat(i"VeiculoA"), DOF2_GetInt(i"Cor1"), DOF2_GetInt(i"Cor2")); 
    } 
    return 
1

Reply
#7

Quote:
Originally Posted by FerrariL
Посмотреть сообщение
Veja agora :
Vish, mesmos problemas nas mesmas linhas, nгo estou conseguindo achar o problema tambйm, o cуdigo aparenta estar correto.
Reply
#8

Qual й a linha 38 ?
Reply
#9

Quote:
Originally Posted by FerrariL
Посмотреть сообщение
Qual й a linha 38 ?
PHP код:
if(GetPlayerState(playerid) = PLAYER_STATE_DRIVER) return 1
Mas tambйm pode ser a linha de cima, porque estou usando programaзгo modular, aн as vezes o erro da em uma linha, mas pode ser na linha de cima.
Reply
#10

PHP код:
if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid)) 
Acho eu que nгo precisa de verificar se o player esta no veiculo usando IsPlayerInAnyVehicle,pois a callback OnPlayerStateChange й chamada quando o player estб no veiculo.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)