20.04.2013, 03:14
Ah, that's better. 
I've updated my code, again. This is final now:

I've updated my code, again. This is final now:
pawn Код:
#include <a_samp>
#include <streamer>
#include <zcmd>
#define MAX_GATES 150 // change 150 to the number of gates you'll have
enum enumGateInformation
{
gateModel,
Float:gateClosePosX,
Float:gateClosePosY,
Float:gateClosePosZ,
Float:gateClosePosRX,
Float:gateClosePosRY,
Float:gateClosePosRZ,
Float:gateOpenPosX,
Float:gateOpenPosY,
Float:gateOpenPosZ,
Float:gateOpenPosRX,
Float:gateOpenPosRY,
Float:gateOpenPosRZ,
gateObjID
};
new
gateInfo[MAX_GATES][enumGateInformation];
stock CreateGate(modelid, Float:cx, Float:cy, Float:cz, Float:crx, Float:cry, Float:crz, Float:ox, Float:oy, Float:oz, Float:orx, Float:ory, Float:orz)
// SYNTAX: model, closex, closey, closez, closerx, closery, closerz, openx, openy, openz, openrx, openry, openrz
{
for(new i = 0; i < sizeof(gateInfo); i++)
{
if(gateInfo[i][gateObjID] == INVALID_OBJECT_ID)
{
gateInfo[i][gateModel] = modelid;
gateInfo[i][gateClosePosX] = cx;
gateInfo[i][gateClosePosY] = cy;
gateInfo[i][gateClosePosZ] = cz;
gateInfo[i][gateClosePosRX] = crx;
gateInfo[i][gateClosePosRY] = cry;
gateInfo[i][gateClosePosRZ] = crz;
gateInfo[i][gateOpenPosX] = ox;
gateInfo[i][gateOpenPosY] = oy;
gateInfo[i][gateOpenPosZ] = oz;
gateInfo[i][gateOpenPosRX] = orx;
gateInfo[i][gateOpenPosRY] = ory;
gateInfo[i][gateOpenPosRZ] = orz;
gateInfo[i][gateObjID] = CreateObject(modelid, cx, cy, cz, crx, cry, crz);
break;
}
}
return 1;
}
stock DestroyGate(gateid)
{
DestroyObject(gateInfo[gateid][gateObjID]);
for(new i; enumGateInformation:i < enumGateInformation; i++) gateInfo[gateid][enumGateInformation:i] = 0;
return 1;
}
CMD:opengate(playerid, params[])
{
new
i = getNearestGate(playerid);
MoveObject(gateInfo[i][gateObjID], gateInfo[i][gateOpenPosX], gateInfo[i][gateOpenPosY], gateInfo[i][gateOpenPosZ], 2.0, gateInfo[i][gateOpenPosRX], gateInfo[i][gateOpenPosRY], gateInfo[i][gateOpenPosRZ]);
return 1;
}
CMD:closegate(playerid, params[])
{
new
i = getNearestGate(playerid);
MoveObject(gateInfo[i][gateObjID], gateInfo[i][gateClosePosX], gateInfo[i][gateClosePosY], gateInfo[i][gateClosePosZ], 2.0, gateInfo[i][gateClosePosRX], gateInfo[i][gateClosePosRY], gateInfo[i][gateClosePosRZ]);
return 1;
}
stock getNearestGate(playerid) // partial credits to [uL]Pottus
{
new
currentGate,
Float:distance = 9999.9, // the whole map, basically
Float:odist;
for(new i = 0; i < sizeof(gateInfo); i++)
{
odist = GetPlayerDistanceFromPoint(playerid, gateInfo[i][gateClosePosX], gateInfo[i][gateClosePosY], gateInfo[i][gateClosePosZ]);
if (odist < distance)
{
currentGate = i;
distance = odist;
}
}
return currentGate;
}