[Resolvido] Comando executa mas retorna Comando Inexistente -
DiegoCosta - 21.02.2019
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] = {46, 33, 31, 32, 25, 24, 0};//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 i; i < 12; i++)
GivePlayerWeapon(playerid, APlayerWeapons[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(playerid, params[])
{
SendAdminText(playerid, "/arma", params);
if (APlayerData[playerid][LoggedIn] == true)
{
if (APlayerData[playerid][WeaponLicense] == 1)//Checa se o player tem a licenзa
{
for (new i; i < 12; i++)
GivePlayerWeapon(playerid, APlayerWeapons[i], PlayerWeaponsAmmo);//Se tem licenзa, recebe a lista de armas
}
else
SendClientMessage(playerid, 0xFFFFFFFF, "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(playerid, APoliceWeapons[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 i = 0; i < sizeof(APlayerWeapons); i++)
Re: Comando executa mas retorna Comando Inexistente -
ipsLuan - 21.02.2019
Й esse return 0 aн.
Re: Comando executa mas retorna Comando Inexistente -
FerrariL - 21.02.2019
PHP код:
new APlayerWeapons[7]
Vocк declarou um vetor de 7 posiзхes.
PHP код:
for (new i; i < 12; i++)
{
GivePlayerWeapon(playerid, APlayerWeapons[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 i = 0; i < sizeof(APlayerWeapons); i++)
{
GivePlayerWeapon(playerid, APlayerWeapons[i], PlayerWeaponsAmmo);//Se tem licenзa, recebe a lista de armas
}
Re: Comando executa mas retorna Comando Inexistente -
DiegoCosta - 22.02.2019
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 i = 0; i < sizeof(APlayerWeapons); i++)
{
GivePlayerWeapon(playerid, APlayerWeapons[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.