Run time error 4: "Array index out of bounds" in Server Console!
#1

Hey,

I've got this error in my console, but I can't find any soulution for it. Maybe you can help me.
Код:
[debug] Run time error 4: "Array index out of bounds"
[debug]  Accessing element at index 4 past array upper bound 3
[debug] AMX backtrace:
[debug] #0 00018294 in ?? (0) from hagakure_script.amx
[debug] #1 0000f0c8 in public inc_Ven_OnPlayerConnect (0) from hagakure_script.amx
[debug] #2 0000bfa8 in public SSCANF_OnPlayerConnect (0) from hagakure_script.amx
[debug] #3 0000509c in public Iter_OnPlayerConnect (0) from hagakure_script.amx
[debug] #4 native CallLocalFunction () from samp-server.exe
[debug] #5 00002f18 in public f3_KBROnPlayerConnect (0) from hagakure_script.amx
[debug] #6 000023fc in public AB_OnPlayerConnect (0) from hagakure_script.amx
[debug] #7 00000684 in public OnPlayerConnect (0) from hagakure_script.amx
OnPlayerConnect:
Код:
public OnPlayerConnect(playerid)
{
    new query[128];
    SetPlayerColor(playerid, 0xFFFFFFFF);
    TogglePlayerControllable(playerid, false);
    AddPlayerTextdraws(playerid);
    mysql_format(mysql, query, sizeof(query), "SELECT `pPass`, `pID` FROM `accs` WHERE `pName` = '%e'                      LIMIT 1", PlayerName(playerid));
    mysql_tquery(mysql, query, "OnAccountCheck", "d", playerid);
	ResetPlayerVariables(playerid);
	return 1;
}
OnAccountCheck:
Код:
forward OnAccountCheck(playerid); public OnAccountCheck(playerid)
{
    SetPlayerColor(playerid, 0xFFFFFFFF);
    new rows, fields;
    cache_get_data(rows, fields, mysql);
    if(rows)
    {
        cache_get_field_content(0, "pPass", pData[playerid][pPass], mysql, 129);
       	pData[playerid][pID] = cache_get_field_content_int(0, "pID");
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{69FFA2}HAGAKURE's Reallife Server Login", "We could find your Account in our database, please type in your password:", "{69FFA2}Login", "{FF6347}Exit");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "HAGAKURE's Reallife Server Register", "We couldn't find your Account in our database. Please register", "{69FFA2}Register", "{FF6347}Exit");
    }
    return 1;
}
Somebody have any idea?
Thanks!
Reply
#2

Hello!

Can you show us your functions AddPlayerTextdraws and ResetPlayerVariables.
Reply
#3

Quote:
Originally Posted by Mencent
Посмотреть сообщение
Hello!

Can you show us your functions AddPlayerTextdraws and ResetPlayerVariables.
AddPlayerTextdraws
Код:
stock AddPlayerTextdraws(playerid)
{
	topbar[playerid] = CreatePlayerTextDraw(playerid,690.000000, 0.000000, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~");
	PlayerTextDrawBackgroundColor(playerid,topbar[playerid], 255);
	PlayerTextDrawFont(playerid,topbar[playerid], 1);
	PlayerTextDrawLetterSize(playerid,topbar[playerid], 0.500000, 1.200000);
	PlayerTextDrawColor(playerid,topbar[playerid], -1);
	PlayerTextDrawSetOutline(playerid,topbar[playerid], 0);
	PlayerTextDrawSetProportional(playerid,topbar[playerid], 1);
	PlayerTextDrawSetShadow(playerid,topbar[playerid], 1);
	PlayerTextDrawUseBox(playerid,topbar[playerid], 1);
	PlayerTextDrawBoxColor(playerid,topbar[playerid], 255);
	PlayerTextDrawTextSize(playerid,topbar[playerid], -37.000000, 4.000000);
	PlayerTextDrawSetSelectable(playerid,topbar[playerid], 0);

	bottombar[playerid] = CreatePlayerTextDraw(playerid,690.000000, 346.000000, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~");
	PlayerTextDrawBackgroundColor(playerid,bottombar[playerid], 255);
	PlayerTextDrawFont(playerid,bottombar[playerid], 1);
	PlayerTextDrawLetterSize(playerid,bottombar[playerid], 0.500000, 1.200000);
	PlayerTextDrawColor(playerid,bottombar[playerid], -1);
	PlayerTextDrawSetOutline(playerid,bottombar[playerid], 0);
	PlayerTextDrawSetProportional(playerid,bottombar[playerid], 1);
	PlayerTextDrawSetShadow(playerid,bottombar[playerid], 1);
	PlayerTextDrawUseBox(playerid,bottombar[playerid], 1);
	PlayerTextDrawBoxColor(playerid,bottombar[playerid], 255);
	PlayerTextDrawTextSize(playerid,bottombar[playerid], -37.000000, 4.000000);
	PlayerTextDrawSetSelectable(playerid,bottombar[playerid], 0);

	centerHUDInfo[playerid] = CreatePlayerTextDraw(playerid,314.000000, 352.000000, "");
	PlayerTextDrawAlignment(playerid,centerHUDInfo[playerid], 2);
	PlayerTextDrawBackgroundColor(playerid,centerHUDInfo[playerid], 255);
	PlayerTextDrawFont(playerid,centerHUDInfo[playerid], 1);
	PlayerTextDrawLetterSize(playerid,centerHUDInfo[playerid], 0.600000, 3.000000);
	PlayerTextDrawColor(playerid,centerHUDInfo[playerid], -1);
	PlayerTextDrawSetOutline(playerid,centerHUDInfo[playerid], 0);
	PlayerTextDrawSetProportional(playerid,centerHUDInfo[playerid], 1);
	PlayerTextDrawSetShadow(playerid,centerHUDInfo[playerid], 1);
	PlayerTextDrawSetSelectable(playerid,centerHUDInfo[playerid], 0);
}
ResetPlayerVariables
Код:
stock ResetPlayerVariables(playerid)
{
	pData[playerid][pID] = 0;
	format(pData[playerid][pName], 1, "");
	pData[playerid][pLevel] = 0;
	format(pData[playerid][pPass], 1, "");
	format(pData[playerid][pRegisterIP], 1, "");
	pData[playerid][pAdmin] = 0;
	pData[playerid][pMoney] = 0;
	pData[playerid][pHoursPlayed] = 0;
	pData[playerid][pSkin] = 0;
	pData[playerid][pGender] = 0;
	pData[playerid][pInterior] = 0;
	pData[playerid][pVirtualWorld] = 0;
	pData[playerid][pMask] = 0;
	pData[playerid][pVIP] = 0;
	pData[playerid][pRadioChannel] = 0;
	pData[playerid][pRadio] = 0;
	pData[playerid][pHelper] = 0;
	pData[playerid][pHospital] = 0;
	pData[playerid][pHospitalLevel] = 0;
	pData[playerid][pPhNumber] = 0;
	pData[playerid][pPhCase] = 0;
	pData[playerid][pHasBankCard] = 0;
	pData[playerid][pBankMoney] = 0;
	pData[playerid][pBanned] = 0;
	pData[playerid][pBanAppealable] = 0;
	format(pData[playerid][pBanReason], 1, "");
	pData[playerid][pBannedBy] = 0;
	format(pData[playerid][pBanDate], 1, "");
	pData[playerid][pWarnings] = 0;
	pData[playerid][pMuted] = 0;
	pData[playerid][pFrozen] = 0;
	pData[playerid][pPassport] = 0;
	pData[playerid][pDriversLicense] = 0;
	pData[playerid][pFlyingLicense] = 0;
	pData[playerid][pTaxiLicense] = 0;
	pData[playerid][pWeaponLicense] = 0;
	pData[playerid][pBoatLicense] = 0;
	format(pData[playerid][pRegisterDate], 1, "");
	format(pData[playerid][pLastLoginDate], 1, "");
	pData[playerid][pUpgradesLeft] = 0;
	pData[playerid][pStrengthUpgrade] = 0;
	pData[playerid][pHealthUpgrade] = 0;
	pData[playerid][pWalkStyle] = 0;
	pData[playerid][pChatStyle] = 0;
	pData[playerid][pFaction] = 0;
	pData[playerid][pFactionRank] = 0;
	pData[playerid][pFactionSkin] = 0;
	pData[playerid][pUsingFactionSkin] = 0;
	pData[playerid][pCanManageFaction] = 0;
	pData[playerid][pBadge] = 0;
	pData[playerid][pWearsBadge] = 0;
	pData[playerid][pPosX] = 0;
	pData[playerid][pPosY] = 0;
	pData[playerid][pPosZ] = 0;
	pData[playerid][pPosA] = 0;


    moneytimer[playerid] = -1;


    
    paccsavetimr[playerid] = -1;
    
	gPlayerFirstSpawn[playerid] = 0;
	gPlayerLogged[playerid] = 0;
	displayingText[playerid] = 0;
	hideCenterHUDTimerID[playerid] = -1;
	MaskID[playerid] = 0;
	for(new i = 0; i < 5; i++)
	{
		heditinside[playerid][i] = 0;
		heditoutside[playerid][i] = 0;
	}
    heditingoutside[playerid] = 0;
    heditinginside[playerid] = 0;
	hprice[playerid] = 0;
	hMaxFurn[playerid] = 0;
	houtsideinterior[playerid] = 0;
	houtsidevirtualworld[playerid] = 0;
	hinsideinterior[playerid] = 0;
	
}
Reply
#4

Ok, now show where you define heditinside and heditoutside.
Reply
#5

Quote:
Originally Posted by Misiur
Посмотреть сообщение
Ok, now show where you define heditinside and heditoutside.
Код:
new Float:heditinside[MAX_PLAYERS][4], Float:heditoutside[MAX_PLAYERS][4], hprice[MAX_PLAYERS], hMaxFurn[MAX_PLAYERS], houtsideinterior[MAX_PLAYERS], houtsidevirtualworld[MAX_PLAYERS], hinsideinterior[MAX_PLAYERS], heditingoutside[MAX_PLAYERS], heditinginside[MAX_PLAYERS];
Reply
#6

The size of the second dimension is 4, that means that 0-3 are the valid indexes and any other will result to a run time error 4.
When it is not an enum-array, you better use sizeof so it will determinate the size itself. Using:
pawn Код:
for(new i = 0; i < sizeof heditinside[]; i++)
will go from 0 to 3. Having [] after the name of the array returns the size of the second dimension, without it returns the first.
Reply
#7

Quote:
Originally Posted by Konstantinos
Посмотреть сообщение
The size of the second dimension is 4, that means that 0-3 are the valid indexes and any other will result to a run time error 4.
When it is not an enum-array, you better use sizeof so it will determinate the size itself. Using:
pawn Код:
for(new i = 0; i < sizeof heditinside[]; i++)
will go from 0 to 3. Having [] after the name of the array returns the size of the second dimension, without it returns the first.
Sounds simple, I just tried it, somehow it worked. Thanks
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)