Parameter count loop detected. - therinhodzn - 27/12/2024
So tinha eu no servidor On-line e isso apareceu
[debug]:
Citar:[debug] Parameter count corrections:
[debug]
[debug] The 1st mangled arguments (e.g. `<1073741823 arguments>`) below should read `<2 arguments>`
[debug] Parameter count loop detected.
[debug]
[debug] Run time error 4: "Array index out of bounds"
[debug] Attempted to read/write array element at index 20200 in array of size 300
[debug] AMX backtrace:
[debug] #0 0002c964 in _@yHOnPlayerDisconnect@04 (playerid=20200, reason=0) at ..\Dependencias\Global\Login.inc:94
[debug] #1 0001bbe8 in public ScriptInit_OnPlayerDisconnect (20200, 0) at C:\Users\gabri\OneDrive\Área de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\y_cgen\y_cgen_impl.inc:157
[debug] #2 0000b758 in public Android_OnPlayerDisconnect (playerid=20200, reason=0) at C:\Users\gabri\OneDrive\Área de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\../y_utils/y_utils_ip.inc:115
[debug] #3 00009810 in public Iter_OnPlayerDisconnect (playerid=20200) at C:\Users\gabri\OneDrive\Área de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\..\..\YSI_Players\y_android\y_android_entry.inc:148
Linha:
Código: hook OnPlayerDisconnect(playerid, reason)
{
if(pCharacter[playerid][pEstado] == STATUS_ONLINE) // {#} Linha 94
PlayerSave(playerid);
return 1;
}
RE: Parameter count loop detected. - xbruno1000x - 28/12/2024
O servidor está tentando acessar o array pCharacter no índice 20200. O problema é que o índice representa o valor de slots do servidor, e o máximo possível é 1000. Recomendo a analise de entradas e saídas de dados para descobrir o motivo disso, com o printf para realizar esse debug.
RE: Parameter count loop detected. - therinhodzn - 28/12/2024
Poderia me informar onde devo colocar esse debug? Isso ocorre sempre com a callback 'onPlayerDisconnect'. Essa callback é chamada mesmo quando ninguém está se desconectando do servidor, e é chamada em tempos aleatórios
Exemplo: 1 hora após o servidor ser iniciado (e eu estou sozinho no servidor no momento)
Servidor iniciado às 01:36:30
Callback chamada sozinha às 02:32:43
Removi a hook 'onPlayerDisconnect' do modulo 'login.inc'. Após a remoção, o índice mudou para 20284 e a hook agora está sendo chamada em outro módulo que também contém 'onPlayerDisconnect'.
Código: ----------------------------------
[01:36:30] Server Starting Spot Successfully!
[01:36:30] ----------------------------------
[01:36:30] Number of vehicle models: 0
[01:37:04] [connection] 127.0.0.1:52342 requests connection cookie.
[01:37:05] [connection] incoming connection: 127.0.0.1:52342 id: 0
[01:37:05] [join] MaCk has joined the server (0:127.0.0.1)
[02:32:43] [debug]
[02:32:43] [debug] Parameter count corrections:
[02:32:43] [debug]
[02:32:43] [debug] The 1st mangled arguments (e.g. `<1073741823 arguments>`) below should read `<2 arguments>`
[02:32:43] [debug] Parameter count loop detected.
[02:32:43] [debug]
[02:32:43] [debug] Run time error 4: "Array index out of bounds"
[02:32:43] [debug] Attempted to read/write array element at index 20284 in array of size 300
[02:32:43] [debug] AMX backtrace:
[02:32:43] [debug] #0 0002ef14 in _@yHOnPlayerDisconnect@05 (playerid=20284, reason=0) at ..\Dependencias\Global\Acessorios.inc:70
[02:32:43] [debug] #1 0001bc78 in public ScriptInit_OnPlayerDisconnect (20284, 0) at C:\Users\gabri\OneDrive\ rea de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\y_cgen\y_cgen_impl.inc:157
[02:32:43] [debug] #2 0000b7ac in public Android_OnPlayerDisconnect (playerid=20284, reason=0) at C:\Users\gabri\OneDrive\ rea de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\../y_utils/y_utils_ip.inc:115
[02:32:43] [debug] #3 00009864 in public Iter_OnPlayerDisconnect (playerid=20284) at C:\Users\gabri\OneDrive\ rea de Trabalho\Samp Servers\RJ ACADEMY\pawno\include\YSI-Includes\YSI_Coding\y_hooks\..\..\YSI_Core\y_core\..\..\YSI_Players\y_android\y_android_entry.inc:148
RE: Parameter count loop detected. - xbruno1000x - 28/12/2024
O ideal seria encontrar de onde esses valores tão altos estão surgindo e resolver a raiz do problema, mas é possível fazer uma solução temporária também para evitar crash's/debug's.
Adicione uma validação no modulo principal para que esses valores não passem adiante, conforme o exemplo abaixo:
Código: public OnPlayerDisconnect(playerid, reason)
{
//O código abaixo deve estar no topo da public, para garantir que nada seja processado antes dele.
if (playerid < 0 || playerid >= GetMaxPlayers())
{
printf("[ERRO] playerid fora dos limites na OnPlayerDisconnect: %d", playerid);
return 0;
}
return 1;
}
Dessa forma nenhum código irá tentar acessar uma posição inválida do array. Poderia até mesmo remover o printf para manter o log limpo.
Por outro lado, para corrigir o problema de maneira permanente, teria que revisar os códigos de hook. O runtime error do YSI "Parameter count loop detected." indica que existe hook ou callback mal configurada ou mal chamada.
Certifique-se de a assinatura da função estar consistente, ou seja, deve ser da forma abaixo:
Código: //DEVE SER ASSIM:
hook OnPlayerDisconnect(playerid, reason)
{
return 1;
}
//NÃO DEVE SER ASSIM:
hook OnPlayerDisconnect(playerid)
{
return 1;
}
Também podem haver recursões gerando o problema, como o exemplo abaixo:
Código: hook OnPlayerDisconnect(playerid, reason)
{
OnPlayerDisconnect(playerid, reason);
return 1;
}
Busque por esses problemas nas hook OnPlayerDisconnect para tentar resolver o problema pela raiz. Com a verificação você já deve evitar que esse problema gere quaisquer males ao servidor.
|