Advertisement
Guest User

Untitled

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