enum BARRIER
{
barrierID,
barrierObject,
barrierModel,
barrierStatus,
barrierFraction,
Float:barrierOpenedX,
Float:barrierOpenedY,
Float:barrierOpenedZ,
Float:barrierOpenedRotX,
Float:barrierOpenedRotY,
Float:barrierOpenedRotZ,
Float:barrierClosedX,
Float:barrierClosedY,
Float:barrierClosedZ,
Float:barrierClosedRotX,
Float:barrierClosedRotY,
Float:barrierClosedRotZ
}
new gInfo[MAX_GATES][BARRIER] = {
{1, INVALID_OBJECT_ID, 968, 0, 3, 1544.69995117, -1630.80004883, 13.10000038, 0.00000000, 270.00000000, 270.00000000, 1544.69921875, -1630.79980469, 13.10000038, 0.00000000, 0.00000000, 270.00000000}, // LSPD
{2, INVALID_OBJECT_ID, 968, 0, 4, -1572.1890, 658.7903, 6.8367, 0.00000000, 90.00000000, 90.18000000, -1572.1890, 658.7903, 6.8367, 0.00000000, 0.00000000, 90.18000000}, // SFPD
{3, INVALID_OBJECT_ID, 968, 0, 5, 2238.1851, 2450.3584, 10.6600, 0.00000000, 90.00000000, 89.76000000, 2238.1851, 2450.3584, 10.6600, 0.00000000, 0.00000000, 89.76000000}, // LVPD
{4, INVALID_OBJECT_ID, 968, 0, 2, -2436.8767, 495.4464, 29.7209, 0.00000000, 90.00000000, 24.96000000, -2436.8767, 495.4464, 29.7209, 0.00000000, 0.00000000, 24.96000000} // FBI
};
CMD:openbarrier(playerid, params[])
{
if(!PI[playerid][Login]) return true;
for(new i = 0; i < MAX_GATES; ++i)
{
if(PI[playerid][Member] == gInfo[i][barrierFraction] && PlayerToPoint(7.0, playerid, gInfo[i][barrierClosedX], gInfo[i][barrierClosedY], gInfo[i][barrierClosedZ])) return true;
if(gInfo[i][barrierStatus] != 1) return SendClientMessage(playerid, COLOR_WHITE, "Îøèáêà: Âîðîòà óæå îòêðûòû.");
MoveObject(gInfo[i][barrierID], gInfo[i][barrierClosedX], gInfo[i][barrierClosedY], gInfo[i][barrierClosedZ] + 0.004, 0.004, gInfo[i][barrierClosedRotX], gInfo[i][barrierClosedRotY], gInfo[i][barrierClosedRotZ]);
SendClientMessage(playerid, COLOR_YELLOW, "Âîðîòà îòêðûòû íà 10 ñåêóíä, ïðîåçæàéòå.");
SetTimerEx("CloseBarrier", 10000, false, "i", i);
gInfo[i][barrierStatus] = 1;
}
return true;
}
forward CloseBarrier(id);
public CloseBarrier(id)
{
MoveObject(gInfo[id][barrierID], gInfo[id][barrierOpenedX], gInfo[id][barrierOpenedY], gInfo[id][barrierOpenedZ] - 0.004, 0.004, gInfo[id][barrierOpenedRotX], gInfo[id][barrierOpenedRotY], gInfo[id][barrierOpenedRotZ]);
gInfo[id][barrierStatus] = 0;
return true;
}
Здесь не нужно быть профессионалом.
PlayerToPoint - очень медленная скриптовая функция написанная в незапамятные времена для Pen/GF. Взамен давно появилась быстрая нативная - IsPlayerInRangeOfPoint. |
Ты устанавливаешь значение для gInfo[id][barrierID] прямо при создании массива, а нужно при создании объекта.
|
gInfo[i][barrierID] = CreateObject(...);