(26/05/2021 18:11)ProKillerPa Escreveu:(26/05/2021 16:48)zBL4CK Escreveu:(26/05/2021 16:31)ProKillerPa Escreveu: Boa tarde! Bom, primeiramente voce precisa salvar os veiculos ( quando comprados na concessionaria, por exemplo ), por ordem de número.
Exemplo:
Código PHP:0.ini > carro do joãozinho
1.ini > carro do matheus
etc....
Posteriormente, quando o player logar no servidor, voce fará um loop que começa em 0 e vai até um numero MAX de veiculos que voce definiu ( Nao MAX_VEHICLES ).
Aí voce verifica se o arquivo .ini existe, e após isso voce verifica se o nome do player condiz com o nome no arquivo encontrado, e se sim, spawna o veiculo.
Veja:
Código PHP:for(new i; i < MAX_VEH_CONCE; i++){
format(ff, sizeof(ff), CONCE, i);
if(DOF2::FileExists(ff)){
format(Conce[i][Dono], 24, DOF2::GetString(ff, "Dono")); // Carreguei o que está em Dono no arquivo .ini
if(strcmp(NomePQP(playerid), Conce[i][Dono], true) == 0){ // Comparei se o jogador é dono do veiculo
// Aqui voce vai criar o veiculo:
VAR_Da_Enum_Que_Armazena_O_ID_Do_Veiculo[i] = createv......
// caso o jogador só possa ter um veiculo, use um break; pro loop não girar em vão.
}
}
}
E Pra verificar se o jogador é dono do veiculo ao entrar nele, basta fazer o seguinte:
Código PHP:for(new i; i < MAX_VEH_CONCE; i++){
if(vehicleid == VAR_Da_Enum_Que_Armazena_O_ID_Do_Veiculo[i]){
if(strcmp(NomePQP(playerid), Conce[i][Dono], true) == 0){
// jogador é dono
} else SendClientMessage(playerid, -1, "Voce nao e o dono."); // aqui vc faz o que quiser com o jogador.
break;
}
}
bom eu tb uso dessa forma porem eu fiz de um jeito um pouquinho mas otimizado basta vc fazer um count a cada vez que um carro é criado pela conce ou seja Count+1 e logo em seguida usar o valor de count no lugar MAX_VEH_CONCE
Pois se essa define for declarada por exemplo MAX_VEH_CONCE 1000 sendo que na pasta no momento só está criado 5 carros, assim o loop irá contar de 0 até 1000 mesmo passando da quantidade de carros criados atualmente, tornando a ação um pouco mais demorada, pois se esse loop for chamado diversas vezes ao mesmo tempo o servidor perderá desempenho.
Errado, esse é o melhor jeito para voce fazer esse tipo de sistema.
Assim que o loop encontrar o arquivo desejado, voce usa o break; e o loop se encerra.
https://sampwiki.blast.hk/wiki/Control_Structures
Código:
#define PASTA_CONTAS "/Contas/%s.ini"
enum PlayerInfo
{
Modelo,
float:ex,
float:ey,
float:ez,
Cor1,
Cor2
}
new pInfo[MAX_PLAYERS][PlayerInfo];
stock SalvarConta(playerid)
{
if(DOF2_FileExists(GetarArquivo(playerid)))
{
DOF2_SetInt(GetarArquivo(playerid), "Modelo", pInfo[playerid][Modelo]);
DOF2_SetFloat(GetarArquivo(playerid), "ex", pInfo[playerid][ex]);
DOF2_SetFloat(GetarArquivo(playerid), "ey", pInfo[playerid][ey]);
DOF2_SetFloat(GetarArquivo(playerid), "ez", pInfo[playerid][ez]);
DOF2_SetInt(GetarArquivo(playerid), "Cor1", pInfo[playerid][Cor1]);
DOF2_SetInt(GetarArquivo(playerid), "Cor2", pInfo[playerid][Cor2]);
}
}
stock CarregarConta(playerid)
{
if(DOF2_FileExists(GetarArquivo(playerid)))
{
pInfo[playerid][Modelo] = DOF2_GetInt(GetarArquivo(playerid), "Modelo");
pInfo[playerid][ex] = DOF2_GetFloat(GetarArquivo(playerid), "ex");
pInfo[playerid][ey] = DOF2_GetFloat(GetarArquivo(playerid), "ey");
pInfo[playerid][ez] = DOF2_GetFloat(GetarArquivo(playerid), "ez");
pInfo[playerid][Cor1] = DOF2_GetInt(GetarArquivo(playerid), "Cor1");
pInfo[playerid][Co2] = DOF2_GetInt(GetarArquivo(playerid), "Cor2");
}
}
GetarArquivo(playerid)
{
new ArquivoPlayer[30];
format(ArquivoPlayer, sizeof(ArquivoPlayer), PASTA_CONTAS, pNome(playerid));
return ArquivoPlayer;
}
Onplayerconnect
if(carro > 0){
CreateVehicle(pInfo[playerid][Modelo], pInfo[playerid][ex],pInfo[playerid][ey],pInfo[playerid][ez],0, pInfo[playerid][Co1],pInfo[playerid][Cor2], -1);
}
OnPlayerStateChange
new carro = GetPlayerVehicleID(playerid);
if(newstate == PLAYER_STATE_DRIVER)
{
if(carro == pInfo[playerid][Modelo]) como faço a verificação
}