Invalid Memory Access from OnPlayerKeyStateChange
#1

Whenever I press F in-game, no matter where I stand or whatever I'm doing. I get this in my console:
Код:
[debug] Run time error 5: "Invalid memory access"
[debug] AMX backtrace:
[debug] #0 000042d4 in public OnPlayerKeyStateChange (0, 16, 0) from gymscript.amx
I'm pretty sure it's safe to say it's coming from OnPlayerKeyStateChange, which would be:
PHP код:
public OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if((
newkeys KEY_SECONDARY_ATTACK) && !(oldkeys KEY_SECONDARY_ATTACK))
    {
        if(
usingBench[playerid] == true && canUseWeight[playerid] == true)
        {
            
KillTimer(benchTimer[playerid]);
            
finishBench(playerid);
        }
        else
        {
            for(new 
i<= sizeof bench_posi++)
            {
                if(
IsPlayerInRangeOfPoint(playerid1.2bench_pos[i][0], bench_pos[i][1], bench_pos[i][2]))
                {
                    if(
closeBench[i] == false && usingBench[playerid] == false)
                    {
                        
closeBench[i] = true;
                        
usingBench[playerid] = true;
                        
benchRep[playerid] = 0;
                        
SetProgressBarValue(gymProgress[playerid], 0);
                        
TogglePlayerControllable(playerid0);
                        if(
bench_pos[i][3] == -0.000007)
                        {
                            
SetPlayerPos(playeridbench_pos[i][0]-1.0bench_pos[i][1], bench_pos[i][2]+0.65);
                            
SetPlayerFacingAngle(playeridbench_pos[i][3]-90);
                        }
                        else if(
bench_pos[i][3] == -0.000015)
                        {
                            
SetPlayerPos(playeridbench_pos[i][0]-1.0bench_pos[i][1], bench_pos[i][2]+0.65);
                            
SetPlayerFacingAngle(playeridbench_pos[i][3]+90);
                        }
                        
ApplyAnimation(playerid"benchpress""gym_bp_geton"1000101);
                        
SetTimerEx("benchBegin"38000"ii"playeridi);
                        
SetPlayerCameraPos(playeridbench_pos[i][0]-1.5bench_pos[i][1]+1.0bench_pos[i][2] + );
                        
SetPlayerCameraLookAt(playeridbench_pos[i][0], bench_pos[i][1], bench_pos[i][2]);
                    }
                    else
                    {
                        
GameTextForPlayer(playerid"This weightbench is currently in use."20001);
                    }
                }
            }
        }
    }
    else if((
newkeys KEY_SPRINT) && !(oldkeys KEY_SPRINT))
    {
        if(
usingBench[playerid] == true && canUseWeight[playerid] == true)
        {
            
SetProgressBarValue(gymProgress[playerid], GetProgressBarValue(gymProgress[playerid]) + 5);
            
UpdateProgressBar(gymProgress[playerid], playerid);
        }
    }
    return 
1;

I've never encountered this error before. I'm curious what it is and how shall I stop it?
Reply
#2

Код:
for(new i; i <= sizeof bench_pos; i++)
Change <= to < operator. Might not be it but compile with -d3 flags so we know where it actually occurs.
Reply
#3

Quote:
Originally Posted by Arthur Kane
Посмотреть сообщение
Код:
for(new i; i <= sizeof bench_pos; i++)
Change <= to < operator. Might not be it but compile with -d3 flags so we know where it actually occurs.
That fixed it, wow. Just needed a second pair of eyes. Must've missed it somehow.
Reply
#4

You can actually make things easier on yourself by using DynamicAreas instead of IsPlayerInRangeOfPoint() . This is better because you only need to do any looping when a player is actually in a dynamic area and eliminate IsPlayerInRangeOfPoint() and makes it easier overall to code your systems.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)