[21:36:40] [debug] Run time error 4: "Array index out of bounds" [21:36:40] [debug] Attempted to read/write array element at negative index -1 [21:36:40] [debug] AMX backtrace: [21:36:40] [debug] #0 000494d0 in public CloseGate (gateid=4, linkid=-1, Float:fX=1544.63000, Float:fY=-1630.51001, Float:fZ=13.27840, Float:speed=3.00000, Float:fRotX=-90.69980, Float:fRotY=0.00000, Float:fRotZ=0.85680) at C:\Users\xxx\Desktop\server\sc mod\gamemodes\roleplay.pwn:4967
forward CloseGate(gateid, linkid, Float:fX, Float:fY, Float:fZ, Float:speed, Float:fRotX, Float:fRotY, Float:fRotZ); public CloseGate(gateid, linkid, Float:fX, Float:fY, Float:fZ, Float:speed, Float:fRotX, Float:fRotY, Float:fRotZ) { new id = -1; if (GateData[gateid][gateExists] && GateData[gateid][gateOpened]) { MoveDynamicObject(GateData[gateid][gateObject], fX, fY, fZ, speed, fRotX, fRotY, fRotZ); if ((id = GetGateByID(linkid)) != -1) MoveDynamicObject(GateData[id][gateObject], GateData[id][gatePos][0], GateData[id][gatePos][1], GateData[id][gatePos][2], speed, GateData[id][gatePos][3], GateData[id][gatePos][4], GateData[id][gatePos][5]); GateData[id][gateOpened] = 0; return 1; } return 0; } stock Gate_Operate(gateid) { if (gateid != -1 && GateData[gateid][gateExists]) { new id = -1; if (!GateData[gateid][gateOpened]) { GateData[gateid][gateOpened] = true; MoveDynamicObject(GateData[gateid][gateObject], GateData[gateid][gateMove][0], GateData[gateid][gateMove][1], GateData[gateid][gateMove][2], GateData[gateid][gateSpeed], GateData[gateid][gateMove][3], GateData[gateid][gateMove][4], GateData[gateid][gateMove][5]); if (GateData[gateid][gateTime] > 0) { GateData[gateid][gateTimer] = SetTimerEx("CloseGate", GateData[gateid][gateTime], false, "ddfffffff", gateid, GateData[gateid][gateLinkID], GateData[gateid][gatePos][0], GateData[gateid][gatePos][1], GateData[gateid][gatePos][2], GateData[gateid][gateSpeed], GateData[gateid][gatePos][3], GateData[gateid][gatePos][4], GateData[gateid][gatePos][5]); } if (GateData[gateid][gateLinkID] != -1 && (id = GetGateByID(GateData[gateid][gateLinkID])) != -1) { GateData[id][gateOpened] = true; MoveDynamicObject(GateData[id][gateObject], GateData[id][gateMove][0], GateData[id][gateMove][1], GateData[id][gateMove][2], GateData[id][gateSpeed], GateData[id][gateMove][3], GateData[id][gateMove][4], GateData[id][gateMove][5]); } } else if (GateData[gateid][gateOpened]) { GateData[gateid][gateOpened] = false; MoveDynamicObject(GateData[gateid][gateObject], GateData[gateid][gatePos][0], GateData[gateid][gatePos][1], GateData[gateid][gatePos][2], GateData[gateid][gateSpeed], GateData[gateid][gatePos][3], GateData[gateid][gatePos][4], GateData[gateid][gatePos][5]); if (GateData[gateid][gateTime] > 0) { KillTimer(GateData[gateid][gateTimer]); } if (GateData[gateid][gateLinkID] != -1 && (id = GetGateByID(GateData[gateid][gateLinkID])) != -1) { GateData[id][gateOpened] = false; MoveDynamicObject(GateData[id][gateObject], GateData[id][gatePos][0], GateData[id][gatePos][1], GateData[id][gatePos][2], GateData[id][gateSpeed], GateData[id][gatePos][3], GateData[id][gatePos][4], GateData[id][gatePos][5]); } } } return 1; } stock Gate_Create(playerid) { new Float:x, Float:y, Float:z, Float:angle; if (GetPlayerPos(playerid, x, y, z) && GetPlayerFacingAngle(playerid, angle)) { for (new i = 0; i < MAX_GATES; i ++) if (!GateData[i][gateExists]) { GateData[i][gateExists] = true; GateData[i][gateModel] = 980; GateData[i][gateSpeed] = 3.0; GateData[i][gateRadius] = 5.0; GateData[i][gateOpened] = 0; GateData[i][gateTime] = 0; GateData[i][gatePos][0] = x + (3.0 * floatsin(-angle, degrees)); GateData[i][gatePos][1] = y + (3.0 * floatcos(-angle, degrees)); GateData[i][gatePos][2] = z; GateData[i][gatePos][3] = 0.0; GateData[i][gatePos][4] = 0.0; GateData[i][gatePos][5] = angle; GateData[i][gateMove][0] = x + (3.0 * floatsin(-angle, degrees)); GateData[i][gateMove][1] = y + (3.0 * floatcos(-angle, degrees)); GateData[i][gateMove][2] = z - 10.0; GateData[i][gateMove][3] = -1000.0; GateData[i][gateMove][4] = -1000.0; GateData[i][gateMove][5] = -1000.0; GateData[i][gateInterior] = GetPlayerInterior(playerid); GateData[i][gateWorld] = GetPlayerVirtualWorld(playerid); GateData[i][gateLinkID] = -1; GateData[i][gateFaction] = -1; GateData[i][gatePass][0] = '\0'; GateData[i][gateObject] = CreateDynamicObject(GateData[i][gateModel], GateData[i][gatePos][0], GateData[i][gatePos][1], GateData[i][gatePos][2], GateData[i][gatePos][3], GateData[i][gatePos][4], GateData[i][gatePos][5], GateData[i][gateWorld], GateData[i][gateInterior]); mysql_tquery(g_iHandle, "INSERT INTO `gates` (`gateModel`) VALUES(980)", "OnGateCreated", "d", i); return i; } } return -1; } stock Gate_Delete(gateid) { if (gateid != -1 && GateData[gateid][gateExists]) { new query[64]; format(query, sizeof(query), "DELETE FROM `gates` WHERE `gateID` = '%d'", GateData[gateid][gateID]); mysql_tquery(g_iHandle, query); if (IsValidDynamicObject(GateData[gateid][gateObject])) DestroyDynamicObject(GateData[gateid][gateObject]); for (new i = 0; i != MAX_GATES; i ++) if (GateData[i][gateExists] && GateData[i][gateLinkID] == GateData[gateid][gateID]) { GateData[i][gateLinkID] = -1; Gate_Save(i); } if (GateData[gateid][gateOpened] && GateData[gateid][gateTime] > 0) { KillTimer(GateData[gateid][gateTimer]); } GateData[gateid][gateExists] = false; GateData[gateid][gateID] = 0; GateData[gateid][gateOpened] = 0; } return 1; } stock Gate_Save(gateid) { new query[768]; format(query, sizeof(query), "UPDATE `gates` SET `gateModel` = '%d', `gateSpeed` = '%.4f', `gateRadius` = '%.4f', `gateTime` = '%d', `gateX` = '%.4f', `gateY` = '%.4f', `gateZ` = '%.4f', `gateRX` = '%.4f', `gateRY` = '%.4f', `gateRZ` = '%.4f', `gateInterior` = '%d', `gateWorld` = '%d', `gateMoveX` = '%.4f', `gateMoveY` = '%.4f', `gateMoveZ` = '%.4f', `gateMoveRX` = '%.4f', `gateMoveRY` = '%.4f', `gateMoveRZ` = '%.4f', `gateLinkID` = '%d', `gateFaction` = '%d', `gatePass` = '%s' WHERE `gateID` = '%d'", GateData[gateid][gateModel], GateData[gateid][gateSpeed], GateData[gateid][gateRadius], GateData[gateid][gateTime], GateData[gateid][gatePos][0], GateData[gateid][gatePos][1], GateData[gateid][gatePos][2], GateData[gateid][gatePos][3], GateData[gateid][gatePos][4], GateData[gateid][gatePos][5], GateData[gateid][gateInterior], GateData[gateid][gateWorld], GateData[gateid][gateMove][0], GateData[gateid][gateMove][1], GateData[gateid][gateMove][2], GateData[gateid][gateMove][3], GateData[gateid][gateMove][4], GateData[gateid][gateMove][5], GateData[gateid][gateLinkID], GateData[gateid][gateFaction], SQL_ReturnEscaped(GateData[gateid][gatePass]), GateData[gateid][gateID] ); return mysql_tquery(g_iHandle, query); }
GateData[id][gateOpened] = 0;
forward CloseGate(gateid, linkid, Float:fX, Float:fY, Float:fZ, Float:speed, Float:fRotX, Float:fRotY, Float:fRotZ);
public CloseGate(gateid, linkid, Float:fX, Float:fY, Float:fZ, Float:speed, Float:fRotX, Float:fRotY, Float:fRotZ)
{
new id = -1;
if (GateData[gateid][gateExists] && GateData[gateid][gateOpened])
{
MoveDynamicObject(GateData[gateid][gateObject], fX, fY, fZ, speed, fRotX, fRotY, fRotZ);
if ((id = GetGateByID(linkid)) != -1)
{
MoveDynamicObject(GateData[id][gateObject], GateData[id][gatePos][0], GateData[id][gatePos][1], GateData[id][gatePos][2], speed, GateData[id][gatePos][3], GateData[id][gatePos][4], GateData[id][gatePos][5]);
GateData[id][gateOpened] = 0;
return 1;
}
}
return 0;
}
Change your CloseGate function to this:
PHP код:
|