Portal SAMP
[Ajuda] conce - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] conce (/showthread.php?tid=1222)

Páginas: 1 2


conce - Smith - 26/05/2021

boa galera!
estou tentando criar uma conce e queria saber como faço para getar o id do veiculo sem estar dentro dele?
porque tipo quando o player conecta no servidor o veiculo dele e criado na posição salva mas como vou verificar se o veiculo  e do  dono sem getar o id do carro? eu tentei criar mas qualquer um consegue entrar no carro como dono tentei salvar o id do veiculo ao criar mas cada vez que o player conecta o carro e criado com id diferente. se auguem puder me da uma luz me explica cm posso fazer isso ou indicar um tutorial ou uma base funcionando eu agradeço de coração, eu tentei baixar algumas fs pra estudar e usar de base mais todas que tem na net e bugada  nao funciona corretamente


RE: conce - ProKillerPa - 26/05/2021

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 iMAX_VEH_CONCEi++){

        
format(ffsizeof(ff), CONCEi);

        if(
DOF2::FileExists(ff)){

            
format(Conce[i][Dono], 24DOF2::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 iMAX_VEH_CONCEi++){

        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;
        }
    } 



RE: conce - zBL4CK - 26/05/2021

(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 iMAX_VEH_CONCEi++){

        
format(ffsizeof(ff), CONCEi);

        if(
DOF2::FileExists(ff)){

            
format(Conce[i][Dono], 24DOF2::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 iMAX_VEH_CONCEi++){

        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. 


RE: conce - ProKillerPa - 26/05/2021

(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 iMAX_VEH_CONCEi++){

        
format(ffsizeof(ff), CONCEi);

        if(
DOF2::FileExists(ff)){

            
format(Conce[i][Dono], 24DOF2::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 iMAX_VEH_CONCEi++){

        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


RE: conce - zBL4CK - 26/05/2021

(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 iMAX_VEH_CONCEi++){

        
format(ffsizeof(ff), CONCEi);

        if(
DOF2::FileExists(ff)){

            
format(Conce[i][Dono], 24DOF2::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 iMAX_VEH_CONCEi++){

        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

vdd não me atentei aos detalhes sorry


RE: conce - Smith - 26/05/2021

(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 iMAX_VEH_CONCEi++){

        
format(ffsizeof(ff), CONCEi);

        if(
DOF2::FileExists(ff)){

            
format(Conce[i][Dono], 24DOF2::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 iMAX_VEH_CONCEi++){

        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
}



RE: conce - Terrorwyd - 27/05/2021

Tabem estou com mesmo problema tentei fazer igual pessoal falou ai mas nao obtive exito, como verificar
If(dono == donoveiculo)
Tentei varias comparações mas na pratica buga so conssegui usando o getplayervehicleid mas so funciona se o player estiver dentro do carro salvar o carro e facio so comparar se o player e dono ou não que ta complicado


RE: conce - Dr Editor - 27/05/2021

(27/05/2021 12:17)Terrorwyd Escreveu: Tabem estou com mesmo problema tentei fazer igual pessoal falou ai mas nao obtive exito, como verificar
If(dono == donoveiculo)
Tentei varias comparações mas na pratica buga so conssegui usando o getplayervehicleid mas so funciona se o player estiver dentro do carro salvar o carro e facio so comparar se o player e dono ou não que ta complicado

Basta ajustar às variáveis reais do sistema:

Código PHP:
public OnPlayerEnterVehicle(playeridvehicleidispassenger)
{
    for(new 
iMAX_VEH_CONCEi++)
    {
        if(
vehicleid == Conce[i][Id])
        {
            new 
name[MAX_PLAYER_NAME];
            
GetPlayerName(playeridnamesizeof name);
            if(
strcmp(nameConce[i][Dono], true) == 0)
            {
            
// jogador é dono
            

            else 
            {
                
SendClientMessage(playerid, -1"Voce nao e o dono."); // aqui vc faz o que quiser com o jogador.
                
RemovePlayerFromVehicle(playerid);
            }
            break;
        }
    } 
    return 
1;




RE: conce - Smith - 27/05/2021

(27/05/2021 12:17)Terrorwyd Escreveu: Tabem estou com mesmo problema tentei fazer igual pessoal falou ai mas nao obtive exito, como verificar
If(dono == donoveiculo)
Tentei varias comparações mas na pratica buga so conssegui usando o getplayervehicleid mas so funciona se o player estiver dentro do carro salvar o carro e facio so comparar se o player e dono ou não que ta complicado

tentei fazer isso nao deu tbm 
Código:
#define PASTA_CONCE         "Conce/%s.ini"

enum PlayerCarro
{
Modelo,
float:ex,
float:ey,
float:ez,
Cor1,
Cor2
}
new Carro[MAX_PLAYERS][PlayerCarro];
GetarCarro(playerid)
{
new CarroPlayer[30];
format(CarroPlayer, sizeof(CarroPlayer), PASTA_CONCE, pNome(playerid));
return CarroPlayer;
}

stock SalvarCarro(playerid)
{

if(DOF2_FileExists(GetarCarro(playerid)))
{
DOF2_SetInt(GetarCarro(playerid), "Modelo", Carro[playerid][Modelo]);
DOF2_SetFloat(GetarCarro(playerid), "ex", Carro[playerid][ex]);
DOF2_SetFloat(GetarCarro(playerid), "ey", Carro[playerid][ey]);
DOF2_SetFloat(GetarCarro(playerid), "ez", Carro[playerid][ez]);
DOF2_SetInt(GetarCarro(playerid), "Cor1", Carro[playerid][Cor1]);
DOF2_SetInt(GetarCarro(playerid), "Cor2", Carro[playerid][Cor2]);
DOF2_SaveFile();
}

}

stock CarregarCarro(playerid)
{
if(DOF2_FileExists(GetarCarro(playerid)))
{
Carro[playerid][Modelo] = DOF2_GetInt(GetarCarro(playerid), "Modelo");
Carro[playerid][ex] = DOF2_GetFloat(GetarCarro(playerid), "ex");
Carro[playerid][ey] = DOF2_GetFloat(GetarCarro(playerid), "ey");
Carro[playerid][ez] = DOF2_GetFloat(GetarCarro(playerid), "ez");
Carro[playerid][Cor1] = DOF2_GetInt(GetarCarro(playerid), "Cor1");
Carro[playerid][Cor2] = DOF2_GetInt(GetarCarro(playerid), "Cor2");
}
}


public OnPlayerConnect
{
if(DOF2_FileExists(GetarCarro(playerid))
{
CreateVehicle(Carro[playerid][Modelo], Carro[playerid][ex], Carro[playerid][ey], Carro[playerid][ez], 0, Carro[playerid][Cor1], Carro[playerid][Cor2], -1);    
}
}
não conssegui fazer a verificação tambem sou iniciante muitas coisas ainda não sei


RE: conce - Terrorwyd - 27/05/2021

(27/05/2021 14:36)Dr Editor Escreveu:
(27/05/2021 12:17)Terrorwyd Escreveu: Tabem estou com mesmo problema tentei fazer igual pessoal falou ai mas nao obtive exito, como verificar
If(dono == donoveiculo)
Tentei varias comparações mas na pratica buga so conssegui usando o getplayervehicleid mas so funciona se o player estiver dentro do carro salvar o carro e facio so comparar se o player e dono ou não que ta complicado

Basta ajustar às variáveis reais do sistema:

Código PHP:
public OnPlayerEnterVehicle(playeridvehicleidispassenger)
{
    for(new 
iMAX_VEH_CONCEi++)
    {
        if(
vehicleid == Conce[i][Id])
        {
            new 
name[MAX_PLAYER_NAME];
            
GetPlayerName(playeridnamesizeof name);
            if(
strcmp(nameConce[i][Dono], true) == 0)
            {
            
// jogador é dono
            

            else 
            {
                
SendClientMessage(playerid, -1"Voce nao e o dono."); // aqui vc faz o que quiser com o jogador.
                
RemovePlayerFromVehicle(playerid);
            }
            break;
        }
    } 
    return 
1;


Pode fazer uma base pf em dof2 pra eu ter uma noção e estudar o codico