Advertisement
Guest User

Untitled

a guest
Sep 25th, 2012
6,113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 Float:pPos[4];
  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. SendClientMessage( playerid, -1, "You succesfully created a movable gate. Use /gopen or /gclose." );
  41.  
  42. return 1;
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement