PDA

View Full Version : How would I add more gate ID's?


Freemuffins
24/11/2012, 06:54 PM
Just wondering how I would add more gate ID's to this script.

I want it so you would be able to use "/placegate [password] [GATEID]. Gate ID being the model of the gate. It's currently only "/placegate [password]", and it automatically does the Gate Model 980

Here's the script:
#include a_samp
#include zcmd
#include Dini

#define MAX_GATES 20
#define GATE_OBJECT 980
#define GATE_STATE_CLOSED 0
#define GATE_STATE_OPEN 1

enum fs_gates
{
gCreated,
Float:gX,
Float:gY,
Float:gZ,
Float:gA,
gObject,
gPlacedBy[24],
gStatus,
gPassword
}

new GateInfo[MAX_GATES][fs_gates];

CMD:placegate( playerid, params[] )
{
if( isnull( params) )
return SendClientMessage( playerid, -1, "Syntax: /placegate [password]" );

if( !strval( params ) )
return SendClientMessage( playerid, -1, "You need to input numbers." );

if( IsPlayerInAnyVehicle( playerid ) )
return SendClientMessage( playerid, -1, "You need to exit your vehicle." );

new Float:pPos[4];
GetPlayerPos( playerid, pPos[0], pPos[1], pPos[2] );
GetPlayerFacingAngle( playerid, pPos[3] );
CreateGate( playerid, strval( params ), pPos[0], pPos[1], pPos[2], pPos[3] );
SendClientMessage( playerid, -1, "You succesfully created a movable gate. Use /gopen or /gclose." );

return 1;
}

CMD:gopen( playerid, params[] )
{
if( isnull( params ) )
return SendClientMessage( playerid, -1, "Syntax: /gopen [password]" );

new szName[24], gate = -1;
GetPlayerName( playerid, szName, 24 );
for( new i = 0; i != MAX_GATES; i++ )
if( GateInfo[i][gCreated] == 1 )
if( strval( params ) == GateInfo[i][gPassword] )
{ gate = i; break; }

if( gate != -1 )
{
if( !IsObjectMoving( GateInfo[gate][gObject] ) )
{
if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ] ) )
{
if( GateInfo[gate][gStatus] == GATE_STATE_CLOSED )
{
MoveObject( GateInfo[gate][gObject], GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ]-5.3, 7.0 );
SendClientMessage( playerid, -1, "You opened the gate." );
}

else
return SendClientMessage( playerid, -1, "The gate is already open." );
}

else
return SendClientMessage( playerid, -1, "You're not near any gate." );
}

else
return SendClientMessage( playerid, -1, "You must wait untill the gate has moved." );
}

else
return SendClientMessage( playerid, -1, "Invalid password." );

return 1;
}

CMD:gclose( playerid, params[] )
{
if( isnull( params ) )
return SendClientMessage( playerid, -1, "Syntax: /gclose [password]" );

new szName[24], gate = -1;
GetPlayerName( playerid, szName, 24 );
for( new i = 0; i != MAX_GATES; i++ )
if( GateInfo[i][gCreated] == 1 )
if( strval( params ) == GateInfo[i][gPassword] )
{ gate = i; break; }

if( gate != -1 )
{
if( !IsObjectMoving( GateInfo[gate][gObject] ) )
{
if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ] ) )
{
if( GateInfo[gate][gStatus] == GATE_STATE_OPEN )
{
MoveObject( GateInfo[gate][gObject], GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ]+5.3, 7.0 );
SendClientMessage( playerid, -1, "You closed the gate." );
}

else
return SendClientMessage( playerid, -1, "The gate is already closed." );
}

else
return SendClientMessage( playerid, -1, "You're not near any gate." );
}

else
return SendClientMessage( playerid, -1, "You must wait untill the gate has moved." );
}

else
return SendClientMessage( playerid, -1, "Invalid password." );

return 1;
}

CMD:removegate( playerid, params[] )
{
for( new i = 0; i != MAX_GATES; i++ )
{
if( GateInfo[i][gCreated] == 1 )
{
if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ] ) )
{
new szName[24];
GetPlayerName( playerid, szName, 24 );
if( !strcmp( szName, GateInfo[i][gPlacedBy], true ) || IsPlayerAdmin( playerid ) )
{
DestroyObject( GateInfo[i][gObject] );
format( GateInfo[i][gPlacedBy], 24, "None" );
GateInfo[i][gCreated] = 0;
GateInfo[i][gX] = 0.0;
GateInfo[i][gY] = 0.0;
GateInfo[i][gZ] = 0.0;
GateInfo[i][gA] = 0.0;
GateInfo[i][gPassword] = 0;
GateInfo[i][gStatus] = GATE_STATE_CLOSED;
SendClientMessage( playerid, -1, "You removed the gate." );

new file[32];
format( file, 32, "Gates/gate_%d.ini", i );
if( dini_Exists( file ) )
dini_Remove( file );
break;
}

else
return SendClientMessage( playerid, -1, "You don't own this gate." );
}

else
return SendClientMessage( playerid, -1, "You're not near any gate." );
}
}

return 1;
}

CMD:gateinfo( playerid, params[] )
{
if( IsPlayerAdmin( playerid ) )
{
for( new i = 0; i != MAX_GATES; i++ )
{
if( GateInfo[i][gCreated] == 1 )
{
if( IsPlayerInRangeOfPoint( playerid, 5.0, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ] ) )
{
new szString[128];
format( szString, 128, "Gate Info( Placed by: %s | Password: %d)", GateInfo[i][gPlacedBy], GateInfo[i][gPassword] );
SendClientMessage( playerid, -1, szString );
return 1;
}

else
return SendClientMessage( playerid, -1, "You're not near any gate." );
}
}
}

else
return SendClientMessage( playerid, -1, "You're not an admin." );
return 1;
}

public OnFilterScriptInit( )
{
for( new i = 0; i != MAX_GATES; i++ )
{
if( GateInfo[i][gCreated] == 0 )
{
new file[64];
format( file, 64, "Gates/gate_%d.ini", i );
if( fexist( file ) )
{
GateInfo[i][gCreated] = 1;
GateInfo[i][gX] = dini_Float( file, "X" );
GateInfo[i][gY] = dini_Float( file, "Y" );
GateInfo[i][gZ] = dini_Float( file, "Z" );
GateInfo[i][gA] = dini_Float( file, "A" );
GateInfo[i][gStatus] = dini_Int( file, "Status" );
GateInfo[i][gPassword] = dini_Int( file, "Password" );
format( GateInfo[i][gPlacedBy], 24, dini_Get( file, "PlacedBy" ) );
GateInfo[i][gObject] = CreateObject( GATE_OBJECT, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ], 0, 0, GateInfo[i][gA] );
}
}
}

return 1;
}

public OnFilterScriptExit( )
{
for( new i = 0; i != MAX_GATES; i++ )
{
if( GateInfo[i][gCreated] == 1 )
{
new file[64];
format( file, 64, "Gates/gate_%d.ini", i );
if( fexist( file ) )
{
dini_IntSet( file, "Object", GateInfo[i][gObject] );
dini_FloatSet( file, "X", GateInfo[i][gX] );
dini_FloatSet( file, "Y", GateInfo[i][gY] );
dini_FloatSet( file, "Z", GateInfo[i][gZ] );
dini_FloatSet( file, "A", GateInfo[i][gA] );
dini_IntSet( file, "Status", GateInfo[i][gStatus] );
dini_IntSet( file, "Password", GateInfo[i][gPassword] );
dini_Set( file, "PlacedBy", GateInfo[i][gPlacedBy] );
DestroyObject( GateInfo[i][gObject] );
format( GateInfo[i][gPlacedBy], 24, "None" );
GateInfo[i][gCreated] = 0;
GateInfo[i][gX] = 0.0;
GateInfo[i][gY] = 0.0;
GateInfo[i][gZ] = 0.0;
GateInfo[i][gA] = 0.0;
GateInfo[i][gStatus] = GATE_STATE_CLOSED;
}
}
}

return 1;
}

public OnObjectMoved( objectid )
{
for( new i = 0; i != MAX_GATES; i++ )
{
if( GateInfo[i][gCreated] == 1 )
{
if( GateInfo[i][gObject] == objectid )
{
if( GateInfo[i][gStatus] == GATE_STATE_CLOSED )
GateInfo[i][gStatus] = GATE_STATE_OPEN;
else if( GateInfo[i][gStatus] == GATE_STATE_OPEN )
GateInfo[i][gStatus] = GATE_STATE_CLOSED;

// Update the variables.
new Float:oPos[3];
GetObjectPos( objectid, oPos[0], oPos[1], oPos[2] );
GateInfo[i][gX] = oPos[0];
GateInfo[i][gY] = oPos[1];
GateInfo[i][gZ] = oPos[2];
break;
}
}
}

return 1;
}

stock CreateGate( playerid, password, Float:x, Float:y, Float:z, Float:a )
{
for( new i = 0; i != MAX_GATES; i++ )
{
if( GateInfo[i][gCreated] == 0 )
{
new szName[24];
GetPlayerName( playerid, szName, 24 );

GateInfo[i][gObject] = CreateObject( GATE_OBJECT, x, y, z+1.5, 0, 0, a );
format( GateInfo[i][gPlacedBy], 24, "%s", szName );
GateInfo[i][gCreated] = 1;
GateInfo[i][gX] = x;
GateInfo[i][gY] = y;
GateInfo[i][gZ] = z+1.5; // comment the +1.5 if you're not using object 980.
GateInfo[i][gA] = a;
GateInfo[i][gStatus] = GATE_STATE_CLOSED;
GateInfo[i][gPassword] = password;
SetPlayerPos( playerid, x+1, y+1, z );

new file[64];
format( file, 64, "Gates/gate_%d.ini", i );
if( !fexist( file ) )
{
dini_Create( file );
dini_IntSet( file, "Object", GateInfo[i][gObject] );
dini_FloatSet( file, "X", GateInfo[i][gX] );
dini_FloatSet( file, "Y", GateInfo[i][gY] );
dini_FloatSet( file, "Z", GateInfo[i][gZ] );
dini_FloatSet( file, "A", GateInfo[i][gA] );
dini_IntSet( file, "Status", GateInfo[i][gStatus] );
dini_Set( file, "PlacedBy", GateInfo[i][gPlacedBy] );
}
break;
}
}
}

By the way, it's this script http://forum.sa-mp.com/showthread.php?t=345906

Thanks, rep for anybody who can tell me how to add it!

park4bmx
24/11/2012, 07:19 PM
maybe try changing MAX_GATES to a higher amount ?????
This forum requires that you wait 120 seconds between posts

PockerFace
24/11/2012, 07:23 PM
Get another Gate system....
This one is bad....
there are alot of good gates system..

Freemuffins
24/11/2012, 07:36 PM
Can you link me to a nice one?