Portal SAMP
[Ajuda] /pegarlixo dando SERVER: Unknown command. - 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] /pegarlixo dando SERVER: Unknown command. (/showthread.php?tid=4783)

Páginas: 1 2


/pegarlixo dando SERVER: Unknown command. - Enila182 - 30/05/2024

Opa tudo bem? 
Então eu to tentando adapitar o sistema do rootcase quando pega lixo em casa so que fica dando erro na parte da casa
Erro que aparece:
SERVER: Unknown command.

Código:
CMD:pegarlixo(playerid) {
    if(PlayerInfo[playerid][pProfissao] == GARI)
    {
        if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, vermelho, "| ERRO | Você não pode usar esse comando em um veículo.");
        new vehicleid = GetPVarInt(playerid, "LastVehicleID");
        if(GetVehicleModel(vehicleid) != 408) return SendClientMessage(playerid, vermelho, "| ERRO | Você precisa utilizar o veiculo trashmaster!");
          if(HasTrash[playerid]) return SendClientMessage(playerid, vermelho, "| ERRO | Você ja esta carregando um Saco de Lixo.");
         new id = Trash_Closest(playerid);
         new casaid = GetPlayerClosestCasa(playerid);
         if(id > 0)
         {
               if(TrashData[id][TrashLevel] < 1) return SendClientMessage(playerid, vermelho, "| ERRO | Não tem nenhum lixo aqui!");
            new Float: x, Float: y, Float: z;
            GetVehicleBoot(vehicleid, x, y, z);
            if(GetPlayerDistanceFromPoint(playerid, x, y, z) >= 30.0) return SendClientMessage(playerid, vermelho, "| ERRO | Você não esta perto do seu veículo Trashmaster.");
            TrashData[id][TrashLevel] --;
            KillTimer(TrashData[id][TrashTimer]);
               TrashData[id][TrashTimer] = SetTimerEx("FillTrash", REFILL_TIME * 1000, false, "i", id);
            TrashCP[playerid] = CreateDynamicCP(x, y, z, 1.0, .playerid = playerid);
            HasTrash[playerid] = true;
            ApplyAnimation(playerid, "CARRY", "liftup105", 4.1, 0, 0, 0, 0, 0);
            SetPlayerAttachedObject(playerid, ATTACHMENT_INDEX, 1264, 6, 0.222, 0.024, 0.128, 1.90, -90.0, 0.0, 0.5, 0.5, 0.5);
            Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, TrashData[id][TrashLabel], E_STREAMER_COLOR, (TrashData[id][TrashLevel] == 0) ? 0xE74C3CFF : 0xF39C12FF);
           }
           Loop(i, MAX_CASAS) {
              if(IsPlayerInRangeOfPoint(playerid, 2, CasaInfo[i][ca_X],CasaInfo[i][ca_Y], CasaInfo[i][ca_Z])){
                if(CasaInfo[i][CasaLixoFora] > 0) {
                    if(CasaInfo[i][CasaLixoFora] < 1) return SendClientMessage(playerid, vermelho, "| ERRO | Não tem nenhum lixo nessa casa!");
                     new Float: x, Float: y, Float: z;
                    GetVehicleBoot(vehicleid, x, y, z);
                     if(GetPlayerDistanceFromPoint(playerid, x, y, z) >= 30.0) return SendClientMessage(playerid, vermelho, "| ERRO | Você não esta perto do seu veículo Trashmaster.");
                    CasaInfo[i][CasaLixoFora] --;
                    KillTimer(TrashData[id][TrashTimer]);
                    TrashData[id][TrashTimer] = SetTimerEx("FillTrash", REFILL_TIME * 1000, false, "i", id);
                    TrashCP[playerid] = CreateDynamicCP(x, y, z, 1.0, .playerid = playerid);
                    HasTrash[playerid] = true;
                    ApplyAnimation(playerid, "CARRY", "liftup105", 4.1, 0, 0, 0, 0, 0);
                    SetPlayerAttachedObject(playerid, ATTACHMENT_INDEX, 1264, 6, 0.222, 0.024, 0.128, 1.90, -90.0, 0.0, 0.5, 0.5, 0.5);
                    //
                    SalvarCasa(i);
                    AtualizarCasa(i);
                }
            }
        }
    } else SendClientMessage(playerid, vermelho, "| ERRO | Você não tem permissão!");
    return 1;
}



RE: /pegarlixo dando SERVER: Unknown command. - BitSain - 30/05/2024

Código PHP:
CMD:pegarlixo(playerid) {
    if(PlayerInfo[playerid][pProfissao] == GARI) {
        if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playeridvermelho"| ERRO | Você não pode usar esse comando em um veículo.");

        new vehicleid GetPVarInt(playerid"LastVehicleID");
        if(GetVehicleModel(vehicleid) != 408) return SendClientMessage(playeridvermelho"| ERRO | Você precisa utilizar o veículo trashmaster!");
  if(HasTrash[playerid]) return SendClientMessage(playeridvermelho"| ERRO | Você já está carregando um Saco de Lixo.");
       
        
new id Trash_Closest(playerid);
        new casaid GetPlayerClosestCasa(playerid);
        if(id 0) {
   if(!TrashData[id][TrashLevel]) 
    
return SendClientMessage(playeridvermelho"| ERRO | Não tem nenhum lixo aqui!");
   
   new Float
xFloatyFloatz;
            GetVehicleBoot(vehicleidxyz);
            if(GetPlayerDistanceFromPoint(playeridxyz) >= 30.0) 
             return SendClientMessage
(playeridvermelho"| ERRO | Você não esta perto do seu veículo Trashmaster.");
            
            TrashData
[id][TrashLevel] --;
            KillTimer(TrashData[id][TrashTimer]);
   TrashData[id][TrashTimer] = SetTimerEx("FillTrash"REFILL_TIME 1000false"i"id);
            TrashCP[playerid] = CreateDynamicCP(xyz1.0, .playerid playerid);
            HasTrash[playerid] = true;
            ApplyAnimation(playerid"CARRY""liftup105"4.100000);
            SetPlayerAttachedObject(playeridATTACHMENT_INDEX126460.2220.0240.1281.90, -90.00.00.50.50.5);
            Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABELTrashData[id][TrashLabel], E_STREAMER_COLOR, (TrashData[id][TrashLevel] == 0) ? 0xE74C3CFF 0xF39C12FF);
        }
        Loop(iMAX_CASAS) {
   if(IsPlayerInRangeOfPoint(playerid2.0CasaInfo[i][ca_X],CasaInfo[i][ca_Y], CasaInfo[i][ca_Z])){
    if(!CasaInfo[i][CasaLixoFora]) return SendClientMessage(playeridvermelho"| ERRO | Não tem nenhum lixo nessa casa!");
     else if(CasaInfo[i][CasaLixoFora] > 0) {
     new FloatxFloatyFloatz;
     GetVehicleBoot(vehicleidxyz);
     if(GetPlayerDistanceFromPoint(playeridxyz) >= 30.0) 
      
return SendClientMessage(playeridvermelho"| ERRO | Você não esta perto do seu veículo Trashmaster.");
     
     CasaInfo
[i][CasaLixoFora] --;
     KillTimer(TrashData[id][TrashTimer]);
     TrashData[id][TrashTimer] = SetTimerEx("FillTrash"REFILL_TIME 1000false"i"id);
     TrashCP[playerid] = CreateDynamicCP(xyz1.0, .playerid playerid);
     HasTrash[playerid] = true;
     ApplyAnimation(playerid"CARRY""liftup105"4.100000);
     SetPlayerAttachedObject(playeridATTACHMENT_INDEX126460.2220.0240.1281.90, -90.00.00.50.50.5);
     //
     SalvarCasa(i);
     AtualizarCasa(i);
    }
    return true;
   }
  }
  return SendClientMessage(playeridvermelho"| ERRO | Você não está próximo de nenhuma casa.");
    } 
    
else {
     return SendClientMessage(playeridvermelho"| ERRO | Você não tem permissão!");
    }



Comparando os dois códigos, algumas mudanças podem ser observadas:

1. Correção de um possível bug: No código antigo, há uma condição "if" para verificar se há lixo em uma casa específica, mas dentro dessa condição, há outra verificação que deveria estar dentro de um bloco "else if". Isso poderia causar um bug potencial. No código atualizado, essa estrutura foi corrigida.

2. Melhorias na legibilidade / Estrutura do código: O código atualizado parece ter uma melhor formatação e legibilidade, com a adição de mais espaços e indentação adequada em comparação com o código anterior.

3. Adicionado um novo valor de retorno: Após o loop das casas, adicionei uma mensagem que informa que o jogador não está próximo da casa, também adicionei um retorno, pra quando o jogador está próximo da casa, não faz sentido ele fazer o loop em todas as casas do servidor se ele está próximo de apenas uma. (Também pra não ter "conflito" com a mensagem de não está próximo da casa)


RE: /pegarlixo dando SERVER: Unknown command. - samuelmatheus0502 - 30/05/2024

cara posso estar falando algo nada ver mas essa linha do seu código nunca vi createdynamiccp assim:
Código:
TrashCP[playerid] = CreateDynamicCP(x, y, z, 1.0, .playerid = playerid);
porque os parametros dele são esses
Código:
CreateDynamicCP(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_CP_SD, STREAMER_TAG_AREA:areaid = STREAMER_TAG_AREA:-1, priority = 0);

Uma dica é sempre que for fazendo o comando vai testando em tempo real, não faz o código inteiro para depois testar, pois assim você perde a total rastreabilidade de bugs, se ficar muito difícel de achar o que eu recomendaria é que fizesse o código novamente porém testando a cada parte que você fazer.


RE: /pegarlixo dando SERVER: Unknown command. - Dr Editor - 30/05/2024

(30/05/2024 10:38)samuelmatheus0502 Escreveu: cara posso estar falando algo nada ver mas essa linha do seu código nunca vi createdynamiccp assim:
Código:
TrashCP[playerid] = CreateDynamicCP(x, y, z, 1.0, .playerid = playerid);
porque os parametros dele são esses
Código:
CreateDynamicCP(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_CP_SD, STREAMER_TAG_AREA:areaid = STREAMER_TAG_AREA:-1, priority = 0);

Uma dica é sempre que for fazendo o comando vai testando em tempo real, não faz o código inteiro para depois testar, pois assim você perde a total rastreabilidade de bugs, se ficar muito difícel de achar o que eu recomendaria é que fizesse o código novamente porém testando a cada parte que você fazer.

Sobre os parâmetros da função isto é pouco utilizado, mas super normal e não tem nada de errado.
Quando você quer utilizar um parâmetro e não quer discriminar outros você utiliza o ponto para determinar o valor do parâmetro específico sem determinar dos anteriores.

Código PHP:
stock function(playeridparam1 0param2 0param3 0// função
{

}

function(
playerid, .param3 5); // discriminando um específico

function(playerid005); // Como normalmente se utiliza 

Desta forma você determina o valor de um parâmetro sem precisar passar por todos os seus antecessores.


RE: /pegarlixo dando SERVER: Unknown command. - BitSain - 30/05/2024

(30/05/2024 10:38)samuelmatheus0502 Escreveu: cara posso estar falando algo nada ver mas essa linha do seu código nunca vi createdynamiccp assim:
Código:
TrashCP[playerid] = CreateDynamicCP(x, y, z, 1.0, .playerid = playerid);
porque os parametros dele são esses
Código:
CreateDynamicCP(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_CP_SD, STREAMER_TAG_AREA:areaid = STREAMER_TAG_AREA:-1, priority = 0);

Uma dica é sempre que for fazendo o comando vai testando em tempo real, não faz o código inteiro para depois testar, pois assim você perde a total rastreabilidade de bugs, se ficar muito difícel de achar o que eu recomendaria é que fizesse o código novamente porém testando a cada parte que você fazer.

Ele está lidando com uma função que tem muitos parâmetros e ele só quer definir alguns deles, é comum usar o ponto (`.`) para especificar quais parâmetros você está configurando, enquanto mantém os outros como "padrão".

Nesse caso, se a função `CreateDynamicCP` tem muitos parâmetros, e vc quer configurar apenas o parâmetro `playerid`, você pode fazer isso usando a sintaxe `.playerid = playerid` para indicar explicitamente que você está configurando o parâmetro `playerid`, enquanto os outros parâmetros permanecem com seus valores pré definidos.

Portanto, no código, `.playerid = playerid` está dizendo à função `CreateDynamicCP` para usar o valor de `playerid` que você está passando, enquanto os outros parâmetros permanecem com seus valores padrão.


RE: /pegarlixo dando SERVER: Unknown command. - Enila182 - 30/05/2024

(30/05/2024 09:36)BitSain Escreveu:
Código PHP:
CMD:pegarlixo(playerid) {
    if(PlayerInfo[playerid][pProfissao] == GARI) {
        if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playeridvermelho"| ERRO | Você não pode usar esse comando em um veículo.");

        new vehicleid GetPVarInt(playerid"LastVehicleID");
        if(GetVehicleModel(vehicleid) != 408) return SendClientMessage(playeridvermelho"| ERRO | Você precisa utilizar o veículo trashmaster!");
  if(HasTrash[playerid]) return SendClientMessage(playeridvermelho"| ERRO | Você já está carregando um Saco de Lixo.");
       
        
new id Trash_Closest(playerid);
        new casaid GetPlayerClosestCasa(playerid);
        if(id 0) {
   if(!TrashData[id][TrashLevel]) 
    
return SendClientMessage(playeridvermelho"| ERRO | Não tem nenhum lixo aqui!");
   
   new Float
xFloatyFloatz;
            GetVehicleBoot(vehicleidxyz);
            if(GetPlayerDistanceFromPoint(playeridxyz) >= 30.0) 
             return SendClientMessage
(playeridvermelho"| ERRO | Você não esta perto do seu veículo Trashmaster.");
            
            TrashData
[id][TrashLevel] --;
            KillTimer(TrashData[id][TrashTimer]);
   TrashData[id][TrashTimer] = SetTimerEx("FillTrash"REFILL_TIME 1000false"i"id);
            TrashCP[playerid] = CreateDynamicCP(xyz1.0, .playerid playerid);
            HasTrash[playerid] = true;
            ApplyAnimation(playerid"CARRY""liftup105"4.100000);
            SetPlayerAttachedObject(playeridATTACHMENT_INDEX126460.2220.0240.1281.90, -90.00.00.50.50.5);
            Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABELTrashData[id][TrashLabel], E_STREAMER_COLOR, (TrashData[id][TrashLevel] == 0) ? 0xE74C3CFF 0xF39C12FF);
        }
        Loop(iMAX_CASAS) {
   if(IsPlayerInRangeOfPoint(playerid2.0CasaInfo[i][ca_X],CasaInfo[i][ca_Y], CasaInfo[i][ca_Z])){
    if(!CasaInfo[i][CasaLixoFora]) return SendClientMessage(playeridvermelho"| ERRO | Não tem nenhum lixo nessa casa!");
     else if(CasaInfo[i][CasaLixoFora] > 0) {
     new FloatxFloatyFloatz;
     GetVehicleBoot(vehicleidxyz);
     if(GetPlayerDistanceFromPoint(playeridxyz) >= 30.0) 
      
return SendClientMessage(playeridvermelho"| ERRO | Você não esta perto do seu veículo Trashmaster.");
     
     CasaInfo
[i][CasaLixoFora] --;
     KillTimer(TrashData[id][TrashTimer]);
     TrashData[id][TrashTimer] = SetTimerEx("FillTrash"REFILL_TIME 1000false"i"id);
     TrashCP[playerid] = CreateDynamicCP(xyz1.0, .playerid playerid);
     HasTrash[playerid] = true;
     ApplyAnimation(playerid"CARRY""liftup105"4.100000);
     SetPlayerAttachedObject(playeridATTACHMENT_INDEX126460.2220.0240.1281.90, -90.00.00.50.50.5);
     //
     SalvarCasa(i);
     AtualizarCasa(i);
    }
    return true;
   }
  }
  return SendClientMessage(playeridvermelho"| ERRO | Você não está próximo de nenhuma casa.");
    } 
    
else {
     return SendClientMessage(playeridvermelho"| ERRO | Você não tem permissão!");
    }



Comparando os dois códigos, algumas mudanças podem ser observadas:

1. Correção de um possível bug: No código antigo, há uma condição "if" para verificar se há lixo em uma casa específica, mas dentro dessa condição, há outra verificação que deveria estar dentro de um bloco "else if". Isso poderia causar um bug potencial. No código atualizado, essa estrutura foi corrigida.

2. Melhorias na legibilidade / Estrutura do código: O código atualizado parece ter uma melhor formatação e legibilidade, com a adição de mais espaços e indentação adequada em comparação com o código anterior.

3. Adicionado um novo valor de retorno: Após o loop das casas, adicionei uma mensagem que informa que o jogador não está próximo da casa, também adicionei um retorno, pra quando o jogador está próximo da casa, não faz sentido ele fazer o loop em todas as casas do servidor se ele está próximo de apenas uma. (Também pra não ter "conflito" com a mensagem de não está próximo da casa)

Eu testei aqui e continua dando o mesmo erro.
SERVER: Unknown command.


RE: /pegarlixo dando SERVER: Unknown command. - BitSain - 30/05/2024

Qual o seu processador de comandos?
ZCMD, Pawn.CMD?


RE: /pegarlixo dando SERVER: Unknown command. - Enila182 - 30/05/2024

Pawn.CMD


RE: /pegarlixo dando SERVER: Unknown command. - Vel - 30/05/2024

Use o plugin crashdetect e envie o log aqui.


RE: /pegarlixo dando SERVER: Unknown command. - Enila182 - 30/05/2024

[14:38:40] * O(A) Jogador(a) Enila182(ID: 0) usou o comando: /pegarlixo
[14:38:40] [debug] Run time error 4: "Array index out of bounds"
[14:38:40] [debug] Attempted to read/write array element at negative index -1
[14:38:40] [debug] AMX backtrace:
[14:38:40] [debug] #0 000b0aa0 in public OnPlayerCommandText (0, 18248724) in gm.amx