[Ajuda] Comando executa mas retorna Comando Inexistente
#1

Boa tarde, galera.

Estou com uma pequena dъvida. Hб tempos venho tentando aprender mais sobre Pawn, nгo cheguei ainda ao ponto de "criar" algo, mas jб consigo me virar para implementar algumas coisas, criar comandos e etc. Mas agora me deparei com algo que atй agora nгo consegui resolver.

Apуs a escolha da Classe, o player seleciona o ponto de Spawn, e ao confirmar ele spawna com um "kit" de armas. Conforme trecho abaixo:

PHP код:
/* Lista de armas 
0 = Desarmado
24 = Desert Slot 2
25 = Shotgun Slot 3
32 = Tec9 Slot 4    
31 = M4 Slot 5
33 = Rifle Slot 6
46 = Paraquedas Slot 11 */
new APlayerWeapons[7] = {4633313225240};//Lista de armas
new PlayerWeaponsAmmo 99999;//Muniзгo infinita
//Sendo assim:
if (APlayerData[playerid][WeaponLicense] == 1)// Se o player tem a licenзa para portar armas...
   
{
    for (new 
i12i++)
    
GivePlayerWeapon(playeridAPlayerWeapons[i], PlayerWeaponsAmmo);// ele recebe automaticamente a lista de armas com muniзгo infinita        

Aqui comeзam os problemas. Durante o Spawn o codigo acima funciona perfeitamente ingame, sem nenhum erro ou "warning" no compilador. Entгo decidi transformar isso em um "comando" para que o player escolha se quer ou nгo "portar" as armas constantemente.

PHP код:
COMMAND:arma(playeridparams[])
{    
    
SendAdminText(playerid"/arma"params);
    
    if (
APlayerData[playerid][LoggedIn] == true)
    {
        if (
APlayerData[playerid][WeaponLicense] == 1)//Checa se o player tem a licenзa
        
{
for (new 
i12i++)
           
GivePlayerWeapon(playeridAPlayerWeapons[i], PlayerWeaponsAmmo);//Se tem licenзa, recebe a lista de armas
        
}
        else
            
SendClientMessage(playerid0xFFFFFFFF"Voce nao pode usar armas sem licenзa");
    }
    else
        return 
0;
    
//Retorna que o comando existe
    
return 1;

O comando novamente funciona perfeitamente ingame, sem nenhum erro ou "warning" no compilador, porйm retorna "Comando Inexistente" (mensagem que defini em OnPlayerCommandPerformed para comandos inexistentes ou restritos).

Decidi compilar em modo Debug e usar o CrashDetect para verificar qual poderia ser o problema, e retornou o seguinte:

Quote:

[13:37:02] Diego_Bueno: /arma

[13:37:02] [debug] Run time error 4: "Array index out of bounds"

[13:37:02] [debug] Attempted to read/write array element at index 7 in array of size 7

[13:37:02] [debug] AMX backtrace:

[13:37:02] [debug] #0 0007f8c0 in public cmd_arma (playerid=0, params[]=@006c2b60 "") at C:\Users\...\pawno\include\PPC_PlayerCommands.inc:960

[13:37:02] [debug] #1 native CallLocalFunction () in samp-server.exe

[13:37:02] [debug] #2 00000694 in public OnPlayerCommandText (playerid=0, cmdtext[]=@006c2b48 "/arma") at C:\Users\...\pawno\include\zcmd.inc:102

PHP код:
GivePlayerWeapon(playeridAPoliceWeapons[i], PoliceWeaponsAmmo); //Linha 960 que consta no log do servidor 
Alguem poderia, por gentileza, apontar quais possнveis erros eu cometi, ou me indicar uma forma de fazer com que o comando funcional pare de retornar "Comando Inexistente"?

Sei que seria possivel fazer isso colocando um "GivePlayerWeapon" para cada arma, porйm achei mais prбtico manter as armas reunidas em forma de "Kit" dentro de APlayerWeapon.

Desde jб, agradeзo.

EDIT:

Resolvido graзas а ajuda de FerrariL
(https://forum.sa-mp.com/showpost.php...04&postcount=3)

PHP код:
for (new 0sizeof(APlayerWeapons); i++) 
Reply
#2

Й esse return 0 aн.
Reply
#3

PHP код:
new APlayerWeapons[7
Vocк declarou um vetor de 7 posiзхes.

PHP код:
for (new i12i++)
{       
    
GivePlayerWeapon(playeridAPlayerWeapons[i], PlayerWeaponsAmmo);//Se tem licenзa, recebe a lista de armas

Vocк estб fazendo um laзo que serб rodado doze vezes, e cada vez que a variбvel "i" й incrementada irб acessar um espaзo do seu vetor (APlayerWeapons) Porйm seu Vetor nгo possui 12 нndices isto estб causando o problema em seu cуdigo.

Um modo dinвmico de se fazer isso :

PHP код:
for (new 0sizeof(APlayerWeapons); i++)
{       
    
GivePlayerWeapon(playeridAPlayerWeapons[i], PlayerWeaponsAmmo);//Se tem licenзa, recebe a lista de armas

Reply
#4

Quote:
Originally Posted by ipsLuan
Посмотреть сообщение
Й esse return 0 aн.
O Return 0 й caso o player nгo esteja logado, todos os outros comandos seguem essa mesma estrutura e nгo retornam o mesmo erro de "Comando inexistente".

Quote:
Originally Posted by FerrariL
Посмотреть сообщение
PHP код:
new APlayerWeapons[7
Vocк declarou um vetor de 7 posiзхes.

Vocк estб fazendo um laзo que serб rodado doze vezes, e cada vez que a variбvel "i" й incrementada irб acessar um espaзo do seu vetor (APlayerWeapons) Porйm seu Vetor nгo possui 12 нndices isto estб causando o problema em seu cуdigo.

Um modo dinвmico de se fazer isso :

PHP код:
for (new 0sizeof(APlayerWeapons); i++)
{       
    
GivePlayerWeapon(playeridAPlayerWeapons[i], PlayerWeaponsAmmo);//Se tem licenзa, recebe a lista de armas

FerrariL, muito obrigado mesmo, brother, principalmente pela explicaзгo sobre onde estava o erro. Alйm de ter resolvido o problema me ajudou a aprender mais um pouco.

Novamente, muito obrigado.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)