Criar veiculos proprios ingame - AllanSG - 06/02/2023
Boa tarde/noite/dia
to fazendo meu sistema de veiculos proprios, mas na parte de criaçao in-game ele nao funciona como eu gostaria, eu sei que estou fazendo errado mas nao sei um jeito melhor de fazer e por isso venho pedir ajuda.
a define da pasta: Carros "Carros/Carro%d.ini"
Citar:CMD:criarv2 (playerid, params[])
{
if(Player[playerid][Pika] != 2) return SendClientMessage(playerid, vermelho, NaoPode);
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, vermelho, "| ERRO | Você precisa estar em um veículo para criar um v2.");
new modelo, info, texto[256], idv = GetNextIdV2(), Floatosi[4], pasta[64], Label[24];
if(sscanf(params, "id", modelo, info)) return SendClientMessage(playerid, vermelho, "| COMANDO | Use /criarv2 [ id modelo ][ info ]");
if(modelo < 400 || modelo > 611) return SendClientMessage(playerid, vermelho, "| ERRO | Id inválido, use 400-611");
if(info < 0) return SendClientMessage(playerid, vermelho, "| ERRO | Info inválida, use acima de 0");
format(pasta, sizeof(pasta), Carros, idv);
GetVehiclePos(GetPlayerVehicleID(playerid), Posi[0], Posi[1], Posi[2]);
GetVehicleZAngle(GetPlayerVehicleID(playerid), Posi[3]);
DOF2_CreateFile(pasta);
DOF2_SetBool(pasta, "tDono", false), V2[idv][tDono] = false;
DOF2_SetInt(pasta, "IDv", idv), V2[idv][IDv] = idv;
DOF2_SetInt(pasta, "vModelo", modelo), V2[idv][vModelo] = modelo;
DOF2_SetInt(pasta, "vInfo", info), V2[idv][vInfo] = info;
DOF2_SetInt(pasta, "vInfo", info), V2[idv][vInfo] = info;
DOF2_SetString(pasta, "nDono", "Ninguém"), format(V2[idv][nDono], 24, "Ninguém");
DOF2_SetFloat(pasta, "ConceX", Posi[0]), V2[idv][ConceX] = Posi[0];
DOF2_SetFloat(pasta, "ConceY", Posi[1]), V2[idv][ConceY] = Posi[1];
DOF2_SetFloat(pasta, "ConceZ", Posi[2]), V2[idv][ConceZ] = Posi[2];
DOF2_SetFloat(pasta, "ConceA", Posi[3]), V2[idv][ConceA] = Posi[3];
DOF2_SetFloat(pasta, "SalvoX", Posi[0]), V2[idv][SalvoX] = Posi[0];
DOF2_SetFloat(pasta, "SalvoY", Posi[1]), V2[idv][SalvoY] = Posi[1];
DOF2_SetFloat(pasta, "SalvoZ", Posi[2]), V2[idv][SalvoZ] = Posi[2];
DOF2_SetFloat(pasta, "SalvoA", Posi[3]), V2[idv][SalvoA] = Posi[3];
DOF2_SetInt(pasta, "vCor1", 157), V2[idv][vCor1] = 157;
DOF2_SetInt(pasta, "vCor2", 157), V2[idv][vCor2] = 157;
DOF2_SetInt(pasta, "vContas", 0), V2[idv][vContas] = 0;
DOF2_SetBool(pasta, "vPortas", false), V2[idv][vPortas] = false;
DOF2_SetInt(pasta, "vDano", 0), V2[idv][vDano] = 0;
DOF2_SetHex(pasta, "CorNick", 0xFFFFFFFF), V2[idv][CorNick] = 0xFFFFFFFF;
DOF2_SetString(pasta, "vPlaca", "BDV"), format(V2[idv][vPlaca], 15, "BDV");
DOF2_SaveFile();
idv = CreateVehicle(modelo, Posi[0], Posi[1], Posi[2], Posi[3], 157, 157, 0);
format(Label, sizeof(Label), "%s", V2[idv][nDono]);
V2[idv][v3DText] = Create3DTextLabel(Label, V2[idv][CorNick], 0, 0,0, 20.0, 0, 0);
Attach3DTextLabelToVehicle(V2[idv][v3DText], idv, -0.1286, -1.4873, 0.2334);
SetVehicleNumberPlate(idv, V2[idv][vPlaca]);
format(texto, sizeof(texto), "| V2 | Você criou o v2 id %i, modelo %i, info $%i", idv, modelo, info);
SendClientMessage(playerid, azulado, texto);
format(Log, sizeof(Log), "%s criou o v2 %d, modelo %i, info %i", GetPlayerNameEx(playerid), idv, info);
fileLog("CriarV2", Log);
return 1;
}
stock GetNextIdV2()
{
new pasta[64];
for(new i = 0; i < MAX_V2; i++)
{
format(pasta, sizeof(pasta), Carros, i);
if(i == 0) continue;
if(!DOF2_FileExists(pasta)) return i;
}
return MAX_V2;
}
O que acontece aqui é que na criaçao in-game, o 3dtext vai pro veiculo de id dentro do jogo, veiculos de profissao e outros que foram criados no gamemodeinit.
porém oq eu quero é q independente de quantos veiculos tenha no servidor, os veiculos proprios sempre sejam criados com ids baixos, quero q os ids ingame de 1 a 250 sejam dos v2 (veiculos proprios) e o resto seja de profissoes e etc...
*OBS: se criar um v2 e reiniciar o servidor ele funciona tudo certinho e fica com os ids q eu quero, porém eu nao quero ter q reiniciar pra funcionar.
Se alguem souber de um jeito q eu possa fazer isso, fico grato, ou se tiver algum plugin ou gambiarra tambem kkkk
RE: Criar veiculos proprios ingame - AllanSG - 11/02/2023
(06/02/2023 14:26)AllanSG Escreveu: Boa tarde/noite/dia
to fazendo meu sistema de veiculos proprios, mas na parte de criaçao in-game ele nao funciona como eu gostaria, eu sei que estou fazendo errado mas nao sei um jeito melhor de fazer e por isso venho pedir ajuda.
a define da pasta: Carros "Carros/Carro%d.ini"
Citar:CMD:criarv2 (playerid, params[])
{
if(Player[playerid][Pika] != 2) return SendClientMessage(playerid, vermelho, NaoPode);
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, vermelho, "| ERRO | Você precisa estar em um veículo para criar um v2.");
new modelo, info, texto[256], idv = GetNextIdV2(), Floatosi[4], pasta[64], Label[24];
if(sscanf(params, "id", modelo, info)) return SendClientMessage(playerid, vermelho, "| COMANDO | Use /criarv2 [ id modelo ][ info ]");
if(modelo < 400 || modelo > 611) return SendClientMessage(playerid, vermelho, "| ERRO | Id inválido, use 400-611");
if(info < 0) return SendClientMessage(playerid, vermelho, "| ERRO | Info inválida, use acima de 0");
format(pasta, sizeof(pasta), Carros, idv);
GetVehiclePos(GetPlayerVehicleID(playerid), Posi[0], Posi[1], Posi[2]);
GetVehicleZAngle(GetPlayerVehicleID(playerid), Posi[3]);
DOF2_CreateFile(pasta);
DOF2_SetBool(pasta, "tDono", false), V2[idv][tDono] = false;
DOF2_SetInt(pasta, "IDv", idv), V2[idv][IDv] = idv;
DOF2_SetInt(pasta, "vModelo", modelo), V2[idv][vModelo] = modelo;
DOF2_SetInt(pasta, "vInfo", info), V2[idv][vInfo] = info;
DOF2_SetInt(pasta, "vInfo", info), V2[idv][vInfo] = info;
DOF2_SetString(pasta, "nDono", "Ninguém"), format(V2[idv][nDono], 24, "Ninguém");
DOF2_SetFloat(pasta, "ConceX", Posi[0]), V2[idv][ConceX] = Posi[0];
DOF2_SetFloat(pasta, "ConceY", Posi[1]), V2[idv][ConceY] = Posi[1];
DOF2_SetFloat(pasta, "ConceZ", Posi[2]), V2[idv][ConceZ] = Posi[2];
DOF2_SetFloat(pasta, "ConceA", Posi[3]), V2[idv][ConceA] = Posi[3];
DOF2_SetFloat(pasta, "SalvoX", Posi[0]), V2[idv][SalvoX] = Posi[0];
DOF2_SetFloat(pasta, "SalvoY", Posi[1]), V2[idv][SalvoY] = Posi[1];
DOF2_SetFloat(pasta, "SalvoZ", Posi[2]), V2[idv][SalvoZ] = Posi[2];
DOF2_SetFloat(pasta, "SalvoA", Posi[3]), V2[idv][SalvoA] = Posi[3];
DOF2_SetInt(pasta, "vCor1", 157), V2[idv][vCor1] = 157;
DOF2_SetInt(pasta, "vCor2", 157), V2[idv][vCor2] = 157;
DOF2_SetInt(pasta, "vContas", 0), V2[idv][vContas] = 0;
DOF2_SetBool(pasta, "vPortas", false), V2[idv][vPortas] = false;
DOF2_SetInt(pasta, "vDano", 0), V2[idv][vDano] = 0;
DOF2_SetHex(pasta, "CorNick", 0xFFFFFFFF), V2[idv][CorNick] = 0xFFFFFFFF;
DOF2_SetString(pasta, "vPlaca", "BDV"), format(V2[idv][vPlaca], 15, "BDV");
DOF2_SaveFile();
idv = CreateVehicle(modelo, Posi[0], Posi[1], Posi[2], Posi[3], 157, 157, 0);
format(Label, sizeof(Label), "%s", V2[idv][nDono]);
V2[idv][v3DText] = Create3DTextLabel(Label, V2[idv][CorNick], 0, 0,0, 20.0, 0, 0);
Attach3DTextLabelToVehicle(V2[idv][v3DText], idv, -0.1286, -1.4873, 0.2334);
SetVehicleNumberPlate(idv, V2[idv][vPlaca]);
format(texto, sizeof(texto), "| V2 | Você criou o v2 id %i, modelo %i, info $%i", idv, modelo, info);
SendClientMessage(playerid, azulado, texto);
format(Log, sizeof(Log), "%s criou o v2 %d, modelo %i, info %i", GetPlayerNameEx(playerid), idv, info);
fileLog("CriarV2", Log);
return 1;
}
stock GetNextIdV2()
{
new pasta[64];
for(new i = 0; i < MAX_V2; i++)
{
format(pasta, sizeof(pasta), Carros, i);
if(i == 0) continue;
if(!DOF2_FileExists(pasta)) return i;
}
return MAX_V2;
}
O que acontece aqui é que na criaçao in-game, o 3dtext vai pro veiculo de id dentro do jogo, veiculos de profissao e outros que foram criados no gamemodeinit.
porém oq eu quero é q independente de quantos veiculos tenha no servidor, os veiculos proprios sempre sejam criados com ids baixos, quero q os ids ingame de 1 a 250 sejam dos v2 (veiculos proprios) e o resto seja de profissoes e etc...
*OBS: se criar um v2 e reiniciar o servidor ele funciona tudo certinho e fica com os ids q eu quero, porém eu nao quero ter q reiniciar pra funcionar.
Se alguem souber de um jeito q eu possa fazer isso, fico grato, ou se tiver algum plugin ou gambiarra tambem kkkk
alguem sabe como me ajudar?
RE: Criar veiculos proprios ingame - xbruno1000x - 11/02/2023
Cria uma public só para criar os veículos que não são pessoais. Daí você insere um timer na OnGameModeInit chamando essa callback, dessa forma esses veículos serão criados com um delay e os veiculos pessoais terão id's mais baixos por serem criados primeiro.
RE: Criar veiculos proprios ingame - AllanSG - 11/02/2023
(11/02/2023 03:03)xbruno1000x Escreveu: Cria uma public só para criar os veículos que não são pessoais. Daí você insere um timer na OnGameModeInit chamando essa callback, dessa forma esses veículos serão criados com um delay e os veiculos pessoais terão id's mais baixos por serem criados primeiro.
Entendi o que você falou, eu uso dessa forma, mas quando eu der /criarv2 in-game nao tem como fazer com q o v2 criado pegue o lugar do id de um veiculo que ja tava no servidor? é essa minha duvida, pois nao quero ter q reiniciar o servidor ao criar v2 novos
RE: Criar veiculos proprios ingame - xbruno1000x - 11/02/2023
(11/02/2023 13:07)AllanSG Escreveu: (11/02/2023 03:03)xbruno1000x Escreveu: Cria uma public só para criar os veículos que não são pessoais. Daí você insere um timer na OnGameModeInit chamando essa callback, dessa forma esses veículos serão criados com um delay e os veiculos pessoais terão id's mais baixos por serem criados primeiro.
Entendi o que você falou, eu uso dessa forma, mas quando eu der /criarv2 in-game nao tem como fazer com q o v2 criado pegue o lugar do id de um veiculo que ja tava no servidor? é essa minha duvida, pois nao quero ter q reiniciar o servidor ao criar v2 novos
Você poderia armazenar o número de veículos privados em uma variável, daí quando for criar um novo, basta usar DestroyVehicle(MAX_PRIVATE_VEH+1);. Dessa forma você irá deletar o primeiro ID após o último veículo privado e o novo que você irá criar assumirá esse ID.
RE: Criar veiculos proprios ingame - AllanSG - 11/02/2023
(11/02/2023 17:16)xbruno1000x Escreveu: (11/02/2023 13:07)AllanSG Escreveu: (11/02/2023 03:03)xbruno1000x Escreveu: Cria uma public só para criar os veículos que não são pessoais. Daí você insere um timer na OnGameModeInit chamando essa callback, dessa forma esses veículos serão criados com um delay e os veiculos pessoais terão id's mais baixos por serem criados primeiro.
Entendi o que você falou, eu uso dessa forma, mas quando eu der /criarv2 in-game nao tem como fazer com q o v2 criado pegue o lugar do id de um veiculo que ja tava no servidor? é essa minha duvida, pois nao quero ter q reiniciar o servidor ao criar v2 novos
Você poderia armazenar o número de veículos privados em uma variável, daí quando for criar um novo, basta usar DestroyVehicle(MAX_PRIVATE_VEH+1);. Dessa forma você irá deletar o primeiro ID após o último veículo privado e o novo que você irá criar assumirá esse ID. é isso que eu procuro, porém eu nao sei como fazer pra armazenar, pois eu teria q criar um veiculo com os ids q quero armazenar? ou existe outra forma de armazenar esses ids sem criar o veiculo?
RE: Criar veiculos proprios ingame - xbruno1000x - 12/02/2023
(11/02/2023 21:26)AllanSG Escreveu: (11/02/2023 17:16)xbruno1000x Escreveu: (11/02/2023 13:07)AllanSG Escreveu: (11/02/2023 03:03)xbruno1000x Escreveu: Cria uma public só para criar os veículos que não são pessoais. Daí você insere um timer na OnGameModeInit chamando essa callback, dessa forma esses veículos serão criados com um delay e os veiculos pessoais terão id's mais baixos por serem criados primeiro.
Entendi o que você falou, eu uso dessa forma, mas quando eu der /criarv2 in-game nao tem como fazer com q o v2 criado pegue o lugar do id de um veiculo que ja tava no servidor? é essa minha duvida, pois nao quero ter q reiniciar o servidor ao criar v2 novos
Você poderia armazenar o número de veículos privados em uma variável, daí quando for criar um novo, basta usar DestroyVehicle(MAX_PRIVATE_VEH+1);. Dessa forma você irá deletar o primeiro ID após o último veículo privado e o novo que você irá criar assumirá esse ID. é isso que eu procuro, porém eu nao sei como fazer pra armazenar, pois eu teria q criar um veiculo com os ids q quero armazenar? ou existe outra forma de armazenar esses ids sem criar o veiculo?
É só salvar a variável com DOF2. Toda vez que criar um veículo novo, é só você incrementar e salvar de novo.
RE: Criar veiculos proprios ingame - AllanSG - 12/02/2023
(12/02/2023 13:35)xbruno1000x Escreveu: (11/02/2023 21:26)AllanSG Escreveu: (11/02/2023 17:16)xbruno1000x Escreveu: (11/02/2023 13:07)AllanSG Escreveu: (11/02/2023 03:03)xbruno1000x Escreveu: Cria uma public só para criar os veículos que não são pessoais. Daí você insere um timer na OnGameModeInit chamando essa callback, dessa forma esses veículos serão criados com um delay e os veiculos pessoais terão id's mais baixos por serem criados primeiro.
Entendi o que você falou, eu uso dessa forma, mas quando eu der /criarv2 in-game nao tem como fazer com q o v2 criado pegue o lugar do id de um veiculo que ja tava no servidor? é essa minha duvida, pois nao quero ter q reiniciar o servidor ao criar v2 novos
Você poderia armazenar o número de veículos privados em uma variável, daí quando for criar um novo, basta usar DestroyVehicle(MAX_PRIVATE_VEH+1);. Dessa forma você irá deletar o primeiro ID após o último veículo privado e o novo que você irá criar assumirá esse ID. é isso que eu procuro, porém eu nao sei como fazer pra armazenar, pois eu teria q criar um veiculo com os ids q quero armazenar? ou existe outra forma de armazenar esses ids sem criar o veiculo?
É só salvar a variável com DOF2. Toda vez que criar um veículo novo, é só você incrementar e salvar de novo.
poderia me dar um exemplo de codigo pra eu ir testando? eu tentei alguns jeitos que nao funcionaram
|