Ajuda para manipular IDs de veнculos -
IniProgrammer - 18.03.2018
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...
Re: Ajuda para manipular IDs de veнculos -
IgorLuiz - 18.03.2018
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(playerid, velocidade); // Troque pela sua textdraw
}
else // se nгo for o motorista esconda as informaзхes do veiculo
{
TextDrawHideForPlayer(playerid, velocidade); // Troque pela sua textdraw
}
return 1;
}
Re: Ajuda para manipular IDs de veнculos -
Marllun - 18.03.2018
PHP код:
new vehid; //Vai armazenar o id do veнculo. obs nгo й o modelo.
vehid = CreateVehicle(520, 2109.1763, 1503.0453, 32.2887, 82.2873, -1, -1, 60);
Re: Ajuda para manipular IDs de veнculos -
rjjj - 18.03.2018
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
.
Re: Ajuda para manipular IDs de veнculos -
IniProgrammer - 18.03.2018
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 i; i < MAX_VEICULOS; i++ )
{
format(i, sizeof(i), PASTA_VEICULOS, i);
if(GetPlayerVehicleID(playerid) == VeiculoDados[i][TempID])
{
format(msg, sizeof(msg), "Vocк entrou no veнculo ID %d", i) //Apenas para testar o sistema
SendClientMessage(playerid, -1, msg) //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 i = 0; i < MAX_VEICULOS; i++)
{
format(i, sizeof(i), PASTA_VEICULOS, i);
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 i = 0; i < MAX_VEICULOS; i++)
{
format(i, sizeof(i), PASTA_VEICULOS, i);
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;
}
Re: Ajuda para manipular IDs de veнculos -
FerrariL - 18.03.2018
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 i; i < MAX_VEICULOS; i++ )
{
format(i, sizeof(i), PASTA_VEICULOS, i);
if(GetPlayerVehicleID(playerid) == VeiculoDados[i][TempID])
{
format(msg, sizeof(msg), "Vocк entrou no veнculo ID %d", i); //Apenas para testar o sistema
SendClientMessage(playerid, -1, msg); //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 i = 0; i < MAX_VEICULOS; i++)
{
format(i, sizeof(i), PASTA_VEICULOS, i);
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 i = 0; i < MAX_VEICULOS; i++)
{
format(i, sizeof(i), PASTA_VEICULOS, i);
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;
}
Re: Ajuda para manipular IDs de veнculos -
IniProgrammer - 18.03.2018
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.
Re: Ajuda para manipular IDs de veнculos -
FerrariL - 18.03.2018
Qual й a linha 38 ?
Re: Ajuda para manipular IDs de veнculos -
IniProgrammer - 18.03.2018
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.
Re: Ajuda para manipular IDs de veнculos -
FerrariL - 18.03.2018
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.