Portal SAMP
[Ajuda] Array index out of bounds - 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] Array index out of bounds (/showthread.php?tid=4257)



Array index out of bounds - L10motos - 01/12/2023

Estou com um problema no timer que crei e dentro do timer de um segundo aparece essa mensagem:


Citar:[2023-12-01T21:06:44-0200] [Error] SetTimer(Ex): There was a problem in calling SetTimerUmSegundo: Array index out of bounds


Código PHP:
             if(InvasionBox[playerid] >= 1)
             {
    
               new Invasion[gTeam[playerid]];
                   if(PlayerToPoint(2.0playeridOrg_X[f], Org_Y[f], Org_Z[f]))
                   {
                       if(GetPlayerVirtualWorld(playerid) == Org_W[f])
                    {
                           if(CofreInfo[f][cfMats] >= ARMAZEM_CRATE_VALUE && holding_crate[playerid] == 0)
                        {
                            PickBox(playerid);
                            CofreInfo[f][cfMats] -= ARMAZEM_CRATE_VALUE;
                        }
                        else if(CofreInfo[f][cfMats] < ARMAZEM_CRATE_VALUEInvasionBox[playerid] = 0;
                    }
    
             }
            



RE: Array index out of bounds - White_Blue - 01/12/2023

Mostre o código que você usa para chamar esse timer.


RE: Array index out of bounds - L10motos - 01/12/2023

(01/12/2023 21:10)White_Blue Escreveu: Mostre o código que você usa para chamar esse timer.


Código PHP:
public OnGameModeInit()
{
SetTimer("SetTimerUmSegundo"1000true);
}

forward [color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]SetTimerUmSegundo()[/font][/size][/color]
public [color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]SetTimerUmSegundo()[/font][/size][/color]
[color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]{[/font][/size][/color]
        if(InvasionBox[playerid] >= 1)
        {
          new Invasion[gTeam[playerid]];
              if(PlayerToPoint(2.0playeridOrg_X[f], Org_Y[f], Org_Z[f]))
              {
                  if(GetPlayerVirtualWorld(playerid) == Org_W[f])
                {
                      if(CofreInfo[f][cfMats] >= ARMAZEM_CRATE_VALUE && holding_crate[playerid] == 0)
                        {
                            PickBox(playerid);
                            CofreInfo[f][cfMats] -= ARMAZEM_CRATE_VALUE;
                        }
                        else if(CofreInfo[f][cfMats] < ARMAZEM_CRATE_VALUEInvasionBox[playerid] = 0;
                }
        }


Acho que vou precisar deletar o topico White, por que não esta aparecendo mais o erro no console e o codigo existe muitas funções que existe no gamemode que não tem fora do mesmo. Acho que foi resolvido. Se você quiser me ajudar a melhorar esse codigo vou te passar.

De couquer forma obrigado, vou te reputar.


RE: Array index out of bounds - White_Blue - 01/12/2023

(01/12/2023 21:31)L10motos Escreveu:
(01/12/2023 21:10)White_Blue Escreveu: Mostre o código que você usa para chamar esse timer.


Código PHP:
public OnGameModeInit()
{
SetTimer("SetTimerUmSegundo"1000true);
}

forward [color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]SetTimerUmSegundo()[/font][/size][/color]
public [color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]SetTimerUmSegundo()[/font][/size][/color]
[color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif]{[/font][/size][/color]
        if(InvasionBox[playerid] >= 1)
        {
          new Invasion[gTeam[playerid]];
              if(PlayerToPoint(2.0playeridOrg_X[f], Org_Y[f], Org_Z[f]))
              {
                  if(GetPlayerVirtualWorld(playerid) == Org_W[f])
                {
                      if(CofreInfo[f][cfMats] >= ARMAZEM_CRATE_VALUE && holding_crate[playerid] == 0)
                        {
                            PickBox(playerid);
                            CofreInfo[f][cfMats] -= ARMAZEM_CRATE_VALUE;
                        }
                        else if(CofreInfo[f][cfMats] < ARMAZEM_CRATE_VALUEInvasionBox[playerid] = 0;
                }
        }


Acho que vou precisar deletar o topico White, por que não esta aparecendo mais o erro no console e o codigo existe muitas funções que existe no gamemode que não tem fora do mesmo. Acho que foi resolvido. Se você quiser me ajudar a melhorar esse codigo vou te passar.

De couquer forma obrigado, vou te reputar.

Bem, no código que você mostrou, a única coisa errada que vi é o uso de PlayerToPoint, uma função que foi substituída pela função IsPlayerInRangeOfPoint há algum tempo. E também sobre a nomenclatura da função.

Código PHP:
forward TimerInvasion(playerid);
public 
TimerInvasion(playerid)
{
    if(InvasionBox[playerid] >= 1)
    {
        new Invasion[gTeam[playerid]];
        if(IsPlayerInRangeOfPoint(playerid2.0Org_X[f], Org_Y[f], Org_Z[f]))
        {
            if(GetPlayerVirtualWorld(playerid) == Org_W[f])
            {
                if(CofreInfo[f][cfMats] >= ARMAZEM_CRATE_VALUE && holding_crate[playerid] == 0)
                {
                    PickBox(playerid);
                    CofreInfo[f][cfMats] -= ARMAZEM_CRATE_VALUE;
                }
                else if(CofreInfo[f][cfMats] < ARMAZEM_CRATE_VALUE)
                {
                    InvasionBox[playerid] = 0;
                }
            }
        }
    }

    return 1;




RE: Array index out of bounds - Carlos Victor - 02/12/2023

O erro Array index out of bounds (Índice de array fora dos limites) significa que você está tentando acessar um índice de um array que está fora do valor definido limite, isto é:

Se eu definir um array com 100 índices eu não consigo acessar o índice 101.
Código PHP:
new array[100];

printf("Valor: %d", array[101]);
> (
error) array index out of bounds (variable "array"

O problema pode estar no que você está atribuindo a essa variável: new f que é Invasion e também gTeam[playerid], já que ela que manipula o índice do array das variáveis.