View difference between Paste ID: 862f9RhN and Lr8hxipX
SHOW: | | - or go back to the newest paste.
1
#include a_samp
2
#include zcmd
3
#include Dini
4
5
#define MAX_GATES       		20
6
#define GATE_OBJECT     		980
7
#define GATE_STATE_CLOSED   	0
8
#define GATE_STATE_OPEN         1
9
10
enum fs_gates
11
{
12
	gCreated,
13
	Float:gX,
14
	Float:gY,
15
	Float:gZ,
16
	Float:gA,
17
	gObject,
18
	gPlacedBy[24],
19
	gStatus,
20
	gPassword
21
}
22
23
new GateInfo[MAX_GATES][fs_gates];
24
25
CMD:placegate( playerid, params[] )
26
{
27
	if( isnull( params) )
28
	    return SendClientMessage( playerid, -1, "Syntax: /placegate [password]" );
29
	    
30
	if( !strval( params ) )
31
	    return SendClientMessage( playerid, -1, "You need to input numbers." );
32
	    
33
	if( IsPlayerInAnyVehicle( playerid ) )
34
	    return SendClientMessage( playerid, -1, "You need to exit your vehicle." );
35
36-
	new szName[24];
36+
37
	GetPlayerPos( playerid, pPos[0], pPos[1], pPos[2] );
38
	GetPlayerFacingAngle( playerid, pPos[3] );
39
	CreateGate( playerid, strval( params ), pPos[0], pPos[1], pPos[2], pPos[3] );
40-
			if( !strcmp( szName, GateInfo[i][gPlacedBy], true ) )
40+
41-
			    return SendClientMessage( playerid, -1, "You already placed a movable gate." );
41+
42
	return 1;
43-
			    continue;
43+
44
45
CMD:gopen( playerid, params[] )
46
{
47
	if( isnull( params ) )
48
	    return SendClientMessage( playerid, -1, "Syntax: /gopen [password]" );
49
	    
50
	new szName[24], gate = -1;
51
	GetPlayerName( playerid, szName, 24 );
52
	for( new i = 0; i != MAX_GATES; i++ )
53
		if( GateInfo[i][gCreated] == 1 )
54
			if( strval( params ) == GateInfo[i][gPassword] )
55
				{ gate = i; break; }
56
57
	if( gate != -1 )
58
	{
59
	    if( !IsObjectMoving( GateInfo[gate][gObject] ) )
60
	    {
61
	    	if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ] ) )
62
			{
63
   				if( GateInfo[gate][gStatus] == GATE_STATE_CLOSED )
64
	        	{
65
				    MoveObject( GateInfo[gate][gObject], GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ]-5.3, 7.0 );
66
					SendClientMessage( playerid, -1, "You opened the gate." );
67
				}
68
69
				else
70
	    			return SendClientMessage( playerid, -1, "The gate is already open." );
71
			}
72
73
			else
74
    			return SendClientMessage( playerid, -1, "You're not near any gate." );
75
        }
76
77
       	else
78
	    	return SendClientMessage( playerid, -1, "You must wait untill the gate has moved." );
79
	}
80
81
	else
82
	    return SendClientMessage( playerid, -1, "Invalid password." );
83
84
	return 1;
85
}
86
87
CMD:gclose( playerid, params[] )
88
{
89
	if( isnull( params ) )
90
	    return SendClientMessage( playerid, -1, "Syntax: /gclose [password]" );
91
	    
92
	new szName[24], gate = -1;
93
	GetPlayerName( playerid, szName, 24 );
94
	for( new i = 0; i != MAX_GATES; i++ )
95
		if( GateInfo[i][gCreated] == 1 )
96
			if( strval( params ) == GateInfo[i][gPassword] )
97
				{ gate = i; break; }
98
99
	if( gate != -1 )
100
	{
101
	    if( !IsObjectMoving( GateInfo[gate][gObject] ) )
102
	    {
103
	       	if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ] ) )
104
			{
105
				if( GateInfo[gate][gStatus] == GATE_STATE_OPEN )
106
	        	{
107
				    MoveObject( GateInfo[gate][gObject], GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ]+5.3, 7.0 );
108
					SendClientMessage( playerid, -1, "You closed the gate." );
109
				}
110
111
				else
112
	    			return SendClientMessage( playerid, -1, "The gate is already closed." );
113
			}
114
			
115
			else
116
				return SendClientMessage( playerid, -1, "You're not near any gate." );
117
        }
118
119
       	else
120
	    	return SendClientMessage( playerid, -1, "You must wait untill the gate has moved." );
121
	}
122
123
	else
124
	    return SendClientMessage( playerid, -1, "Invalid password." );
125
126
	return 1;
127
}
128
129
CMD:removegate( playerid, params[] )
130
{
131
	for( new i = 0; i != MAX_GATES; i++ )
132
	{
133
		if( GateInfo[i][gCreated] == 1 )
134
		{
135
		    if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ] ) )
136
			{
137
  				new szName[24];
138
				GetPlayerName( playerid, szName, 24 );
139
				if( !strcmp( szName, GateInfo[i][gPlacedBy], true ) || IsPlayerAdmin( playerid ) )
140
				{
141
					DestroyObject( GateInfo[i][gObject] );
142
					format( GateInfo[i][gPlacedBy], 24, "None" );
143
			        GateInfo[i][gCreated] = 0;
144
			        GateInfo[i][gX] = 0.0;
145
			        GateInfo[i][gY] = 0.0;
146
			        GateInfo[i][gZ] = 0.0;
147
			        GateInfo[i][gA] = 0.0;
148
			        GateInfo[i][gPassword] = 0;
149
			        GateInfo[i][gStatus] = GATE_STATE_CLOSED;
150
			        SendClientMessage( playerid, -1, "You removed the gate." );
151
152
					new file[32];
153
					format( file, 32, "Gates/gate_%d.ini", i );
154
					if( dini_Exists( file ) )
155
	    				dini_Remove( file );
156
					break;
157
                }
158
                
159
				else
160
					return SendClientMessage( playerid, -1, "You don't own this gate." );
161
			}
162
			
163
			else
164
				return SendClientMessage( playerid, -1, "You're not near any gate." );
165
        }
166
    }
167
168
	return 1;
169
}
170
171
CMD:gateinfo( playerid, params[] )
172
{
173
	if( IsPlayerAdmin( playerid ) )
174
	{
175
		for( new i = 0; i != MAX_GATES; i++ )
176
		{
177
			if( GateInfo[i][gCreated] == 1 )
178
			{
179
			    if( IsPlayerInRangeOfPoint( playerid, 5.0, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ] ) )
180
				{
181
					new szString[128];
182
					format( szString, 128, "Gate Info( Placed by: %s | Password: %d)", GateInfo[i][gPlacedBy], GateInfo[i][gPassword] );
183
					SendClientMessage( playerid, -1, szString );
184
					return 1;
185
				}
186
187
				else
188
					return SendClientMessage( playerid, -1, "You're not near any gate." );
189
	        }
190
	    }
191
    }
192
    
193
	else
194
		return SendClientMessage( playerid, -1, "You're not an admin." );
195
	return 1;
196
}
197
198
public OnFilterScriptInit( )
199
{
200
	for( new i = 0; i != MAX_GATES; i++ )
201
	{
202
	    if( GateInfo[i][gCreated] == 0 )
203
	    {
204
			new file[64];
205
			format( file, 64, "Gates/gate_%d.ini", i );
206
			if( fexist( file ) )
207
			{
208
			    GateInfo[i][gCreated] = 1;
209
				GateInfo[i][gX] = dini_Float( file, "X" );
210
				GateInfo[i][gY] = dini_Float( file, "Y" );
211
				GateInfo[i][gZ] = dini_Float( file, "Z" );
212
				GateInfo[i][gA] = dini_Float( file, "A" );
213
				GateInfo[i][gStatus] = dini_Int( file, "Status" );
214
				GateInfo[i][gPassword] = dini_Int( file, "Password" );
215
				format( GateInfo[i][gPlacedBy], 24, dini_Get( file, "PlacedBy" ) );
216
				GateInfo[i][gObject] = CreateObject( GATE_OBJECT, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ], 0, 0, GateInfo[i][gA] );
217
            }
218
        }
219
    }
220
221
	return 1;
222
}
223
224
public OnFilterScriptExit( )
225
{
226
	for( new i = 0; i != MAX_GATES; i++ )
227
	{
228
	    if( GateInfo[i][gCreated] == 1 )
229
	    {
230
			new file[64];
231
			format( file, 64, "Gates/gate_%d.ini", i );
232
			if( fexist( file ) )
233
			{
234
				dini_IntSet( file, "Object", GateInfo[i][gObject] );
235
				dini_FloatSet( file, "X", GateInfo[i][gX] );
236
				dini_FloatSet( file, "Y", GateInfo[i][gY] );
237
				dini_FloatSet( file, "Z", GateInfo[i][gZ] );
238
				dini_FloatSet( file, "A", GateInfo[i][gA] );
239
				dini_IntSet( file, "Status", GateInfo[i][gStatus] );
240
				dini_IntSet( file, "Password", GateInfo[i][gPassword] );
241
				dini_Set( file, "PlacedBy", GateInfo[i][gPlacedBy] );
242
				DestroyObject( GateInfo[i][gObject] );
243
				format( GateInfo[i][gPlacedBy], 24, "None" );
244
		        GateInfo[i][gCreated] = 0;
245
		        GateInfo[i][gX] = 0.0;
246
		        GateInfo[i][gY] = 0.0;
247
		        GateInfo[i][gZ] = 0.0;
248
		        GateInfo[i][gA] = 0.0;
249
		        GateInfo[i][gStatus] = GATE_STATE_CLOSED;
250
            }
251
        }
252
    }
253
    
254
	return 1;
255
}
256
257
public OnObjectMoved( objectid )
258
{
259
	for( new i = 0; i != MAX_GATES; i++ )
260
	{
261
	    if( GateInfo[i][gCreated] == 1 )
262
	    {
263
	    	if( GateInfo[i][gObject] == objectid )
264
	    	{
265
	    	    if( GateInfo[i][gStatus] == GATE_STATE_CLOSED )
266
	    	    	GateInfo[i][gStatus] = GATE_STATE_OPEN;
267
				else if( GateInfo[i][gStatus] == GATE_STATE_OPEN )
268
				    GateInfo[i][gStatus] = GATE_STATE_CLOSED;
269
270
				// Update the variables.
271
				new Float:oPos[3];
272
				GetObjectPos( objectid, oPos[0], oPos[1], oPos[2] );
273
				GateInfo[i][gX] = oPos[0];
274
	        	GateInfo[i][gY] = oPos[1];
275
	        	GateInfo[i][gZ] = oPos[2];
276
				break;
277
            }
278
        }
279
    }
280
    
281
    return 1;
282
}
283
284
stock CreateGate( playerid, password, Float:x, Float:y, Float:z, Float:a )
285
{
286
	for( new i = 0; i != MAX_GATES; i++ )
287
	{
288
	    if( GateInfo[i][gCreated] == 0 )
289
	    {
290
			new szName[24];
291
			GetPlayerName( playerid, szName, 24 );
292
			
293
			GateInfo[i][gObject] = CreateObject( GATE_OBJECT, x, y, z+1.5, 0, 0, a );
294
			format( GateInfo[i][gPlacedBy], 24, "%s", szName );
295
	        GateInfo[i][gCreated] = 1;
296
	        GateInfo[i][gX] = x;
297
	        GateInfo[i][gY] = y;
298
	        GateInfo[i][gZ] = z+1.5; // comment the +1.5 if you're not using object 980.
299
	        GateInfo[i][gA] = a;
300
			GateInfo[i][gStatus] = GATE_STATE_CLOSED;
301
			GateInfo[i][gPassword] = password;
302
			SetPlayerPos( playerid, x+1, y+1, z );
303
			
304
			new file[64];
305
			format( file, 64, "Gates/gate_%d.ini", i );
306
			if( !fexist( file ) )
307
			{
308
			    dini_Create( file );
309
				dini_IntSet( file, "Object", GateInfo[i][gObject] );
310
				dini_FloatSet( file, "X", GateInfo[i][gX] );
311
				dini_FloatSet( file, "Y", GateInfo[i][gY] );
312
				dini_FloatSet( file, "Z", GateInfo[i][gZ] );
313
				dini_FloatSet( file, "A", GateInfo[i][gA] );
314
				dini_IntSet( file, "Status", GateInfo[i][gStatus] );
315
				dini_Set( file, "PlacedBy", GateInfo[i][gPlacedBy] );
316
            }
317
			break;
318
        }
319
    }
320
}