Guest User

third filterscript

a guest
Jul 19th, 2012
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.58 KB | None | 0 0
  1. /* ________________________________
  2. __,__ ( )
  3. .--. .-" "-. .--. ( Monky fix, good now, happy be!)
  4. / .. \/ .-. .-. \/ .. \ ( Keep the credits! )
  5. | | '| / Y \ |' | | / ( )
  6. | \ \ \ 0 | 0 / / / | / ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  7. \ '- ,\.-"`` ``"-./, -' / /
  8. `'-' /_ ^ ^ _\ '-'` /
  9. .--'| \._ _ _./ |'--.
  10. /` \ \.-. / / `\
  11. / '._/ |-' _.' \
  12. / ; /--~' | \
  13. / .'\|.-\--. \ \
  14. / .'-. /.-.;\ |\|'~'-.|\ \
  15. \ `-./`|_\_/ ` `\'. \
  16. '. ; ___) '.`; /
  17. '-.,_ ; ___) \/ /
  18. \ ``'------'\ \ ` /
  19. '. \ '. | ;/_
  20. ___> '. \_ _ _/ , '--.
  21. .' '. .-~~~~~-. / |--'`~~-. \
  22. // / .---'/ .-~~-._/ / / /---..__.' /
  23. ((_(_/ / / (_(_(_(---.__ .'
  24. | | _ `~~`
  25. | | \'.
  26. \ '....' |
  27. '.,___.'
  28.  
  29. #Name: [FilterScript]Don't Get Wet
  30. #Author: iMonk3y
  31. #Release Date: 31/01/2011
  32. #Credits:
  33. ¤ zcmd - Zeex (http://forum.sa-mp.com/showthread.php?t=91354)
  34. ¤ foreach - Y_Less (http://forum.sa-mp.com/showthread.php?t=92679)
  35. */
  36.  
  37. #define FILTERSCRIPT
  38.  
  39. #include <a_samp>
  40. #include <zcmd>
  41. #include <foreach>
  42.  
  43. #define isodd(%1) \
  44. ((%1) & 0x01)
  45.  
  46. #define iseven(%1) \
  47. (!isodd((%1)))
  48.  
  49. #define ALL_PLAYERS 200 //Define number of players on your server
  50. #define MAX_SLOTS 54 //Don't change this
  51.  
  52. #define PRIZE_MONEY 10000
  53.  
  54. #define LIME 0x88AA62FF
  55. #define WHITE 0xFFFFFFAA
  56. #define RULE 0xFBDF89AA
  57. #define ORANGE 0xDB881AAA
  58.  
  59. #define COL_LIME \
  60. "{88AA62}"
  61. #define COL_WHITE \
  62. "{FFFFFF}"
  63. #define COL_RULE \
  64. "{FBDF89}"
  65. #define COL_ORANGE \
  66. "{DB881A}"
  67.  
  68. forward SpeedUp( object, Float:x, Float:y, Float:z);
  69. forward RespawnPlayer( player );
  70. forward MinigameWinner( player );
  71. forward MinigameCountdown( );
  72. forward MinigameUpdate( );
  73. forward EndMinigame( );
  74.  
  75. new bool:Minigamer_[ALL_PLAYERS char];
  76. new bool:VIEW_FROM_ABOVE;
  77. new inProgress, uTimer;
  78. new Objects_[2][MAX_SLOTS];
  79. new pWeaponData[ALL_PLAYERS][13];
  80. new pSavedAmmo[ALL_PLAYERS][13];
  81. new Float:pCoords[ALL_PLAYERS][3];
  82. new pInterior[ALL_PLAYERS];
  83.  
  84. new Iterator:_Minigamer <MAX_SLOTS>;
  85. new Iterator:_Objects <MAX_SLOTS>;
  86.  
  87. new pReadyText[4][64] =
  88. {
  89. "~n~ ~n~ ~n~ ~y~stand by...",
  90. "~n~ ~n~ ~n~ ~y~get Ready!",
  91. "~n~ ~n~ ~n~ ~y~are you ready?",
  92. "~n~ ~n~ ~n~ ~y~ready to get wet?"
  93. };
  94.  
  95. new pFellOffText[5][28] =
  96. {
  97. "~n~ ~r~hosed",
  98. "~n~ ~r~all wet",
  99. "~n~ ~r~no swimming",
  100. "~n~ ~r~you're drowning!",
  101. "~n~ ~r~water... baaad!"
  102. };
  103.  
  104. new Float:gCoords[MAX_SLOTS][3] = {
  105.  
  106. { -5309.198120,-199.052383,22.593704 },
  107. { -5309.198120,-195.786071,22.593704 },
  108. { -5309.198120,-192.510620,22.593704 },
  109. { -5309.198120,-189.250564,22.593704 },
  110. { -5309.198120,-185.987960,22.593704 },
  111. { -5309.198120,-182.727081,22.593704 },
  112. { -5309.198120,-179.463394,22.593704 },
  113. { -5309.198120,-176.205261,22.593704 },
  114. { -5304.841796,-176.205261,22.593704 },
  115. { -5304.841796,-179.468795,22.593704 },
  116. { -5304.841796,-182.737884,22.593704 },
  117. { -5304.841796,-185.989654,22.593704 },
  118. { -5304.841796,-189.259185,22.593704 },
  119. { -5304.841796,-192.518615,22.593704 },
  120. { -5304.841796,-195.785491,22.593704 },
  121. { -5304.841796,-199.054733,22.593704 },
  122. { -5300.489990,-199.054733,22.593704 },
  123. { -5300.489990,-195.782165,22.593704 },
  124. { -5300.489990,-192.531250,22.593704 },
  125. { -5300.489990,-189.274765,22.593704 },
  126. { -5300.489990,-186.003005,22.593704 },
  127. { -5300.489990,-182.735229,22.593704 },
  128. { -5300.489990,-179.471069,22.593704 },
  129. { -5300.489990,-176.208007,22.593704 },
  130. { -5296.138061,-176.208007,22.593704 },
  131. { -5296.138061,-179.479248,22.593704 },
  132. { -5296.138061,-182.744735,22.593704 },
  133. { -5296.138061,-186.002944,22.593704 },
  134. { -5296.138061,-189.274505,22.593704 },
  135. { -5296.138061,-192.533691,22.593704 },
  136. { -5296.138061,-195.788970,22.593704 },
  137. { -5296.138061,-199.048782,22.593704 },
  138. { -5291.776000,-199.050140,22.593704 },
  139. { -5291.776000,-195.790634,22.593704 },
  140. { -5291.776000,-192.542922,22.593704 },
  141. { -5291.776000,-189.277542,22.593704 },
  142. { -5291.776000,-186.013275,22.593704 },
  143. { -5291.776000,-182.742355,22.593704 },
  144. { -5291.776000,-179.475021,22.593704 },
  145. { -5291.776000,-176.215805,22.593704 },
  146. { -5287.432250,-176.215805,22.593704 },
  147. { -5287.432250,-179.485168,22.593704 },
  148. { -5287.432250,-182.739608,22.593704 },
  149. { -5287.432250,-186.016723,22.593704 },
  150. { -5287.432250,-189.277816,22.593704 },
  151. { -5287.432250,-192.539001,22.593704 },
  152. { -5287.432250,-195.796325,22.593704 },
  153. { -5287.432250,-199.053771,22.593704 },
  154. { -5287.431274,-202.320648,22.593704 },
  155. { -5291.781616,-202.320648,22.593704 },
  156. { -5296.136718,-202.320648,22.593704 },
  157. { -5300.493652,-202.320648,22.593704 },
  158. { -5304.848876,-202.320648,22.593704 },
  159. { -5309.201660,-202.320648,22.593704 }
  160. };
  161.  
  162. public OnFilterScriptInit( )
  163. {
  164. return 1;
  165. }
  166.  
  167. public OnFilterScriptExit( )
  168. {
  169. if( inProgress > 0 ) EndMinigame( );
  170. return 1;
  171. }
  172.  
  173. public OnPlayerDisconnect( playerid, reason )
  174. {
  175. new str[128];
  176. if( Minigamer_{ playerid } == true )
  177. {
  178. if( inProgress > 1 )
  179. {
  180. format( str, sizeof( str ), "* %s "COL_RULE"has dropped out of "COL_ORANGE"Don't Get Wet"COL_RULE" minigame, "COL_LIME"rank %d", PlayerName( playerid ), Iter_Count(_Minigamer ) );
  181. SendClientMessageToAll( LIME, str );
  182. Iter_Remove(_Minigamer, playerid );
  183. Minigamer_{ playerid } = false;
  184. if( Iter_Count(_Minigamer ) < 2 )
  185. {
  186. foreach(_Minigamer, i ) MinigameWinner( i );
  187. }
  188. }
  189. else
  190. {
  191. Iter_Remove(_Minigamer, playerid );
  192. Minigamer_{ playerid } = false;
  193. }
  194. }
  195. return 1;
  196. }
  197.  
  198. public OnPlayerDeath( playerid, killerid, reason )
  199. {
  200. new str[128];
  201. if( Minigamer_{ playerid } == true )
  202. {
  203. if( inProgress > 1 )
  204. {
  205. format( str, sizeof( str ), "* %s "COL_RULE"has dropped out of "COL_ORANGE"Don't Get Wet"COL_RULE" minigame, "COL_LIME"rank %d", PlayerName( playerid ), Iter_Count(_Minigamer ) );
  206. SendClientMessageToAll( LIME, str );
  207. Iter_Remove(_Minigamer, playerid );
  208. Minigamer_{ playerid } = false;
  209. if( Iter_Count(_Minigamer ) < 2 )
  210. {
  211. foreach(_Minigamer, i ) MinigameWinner( i );
  212. }
  213. }
  214. else
  215. {
  216. SendClientMessage( playerid, LIME, "Your sign up for "COL_ORANGE"Don't Get Wet"COL_LIME" minigame has been cancelled." );
  217. Iter_Remove(_Minigamer, playerid );
  218. Minigamer_{ playerid } = false;
  219. }
  220. }
  221. return 1;
  222. }
  223.  
  224. CMD:getwet( playerid, params[] )
  225. {
  226. if( GetPlayerState( playerid ) == PLAYER_STATE_WASTED )
  227. return SendClientMessage( playerid, LIME, "Command is temporary disabled because you're wasted." );
  228. else if( Minigamer_{ playerid } != false )
  229. return SendClientMessage( playerid, LIME, "You have already signed up for "COL_ORANGE"Don't Get Wet"COL_LIME" minigame." );
  230. else if( inProgress > 1 )
  231. return SendClientMessage( playerid, ORANGE, "Don't Get Wet "COL_LIME"minigame is currently in progress, please wait." );
  232. else if( Iter_Count(_Minigamer ) > MAX_SLOTS-1 )
  233. return SendClientMessage( playerid, ORANGE,"Don't Get Wet "COL_LIME"minigame is already full. Please wait untill it ends." );
  234. if( inProgress < 1 )
  235. {
  236. if( strcmp( params, "1", true ) == 0 )
  237. VIEW_FROM_ABOVE = true;
  238. else if( strcmp( params, "2", true ) == 0 )
  239. VIEW_FROM_ABOVE = false;
  240. else return SendClientMessage( playerid, WHITE, "Use: /getwet [1 or 2]" );
  241.  
  242. new str[128];
  243. Minigamer_{ playerid } = true;
  244. Iter_Add(_Minigamer, playerid );
  245. format( str, sizeof( str ), "Don't Get Wet v.%i.0 "COL_RULE"minigame will start in 20 seconds. Type "COL_ORANGE"/getwet "COL_RULE"to join!", strval(params) );
  246. SendClientMessageToAll( ORANGE, str );
  247. SetTimer( "MinigameCountdown", 20000, 0 );
  248. for( new i; i < MAX_SLOTS; i++ )
  249. {
  250. //The object (window) is only visible from one side
  251. Objects_[0][i] = CreateObject( 1649, gCoords[i][0], gCoords[i][1], gCoords[i][2], -90.000000, 0.000000, 0.000000, 150.0 );
  252. if(!VIEW_FROM_ABOVE) //In case /getwet 2, we need to multiply number of objects and turn them around so players would be able to see them from below
  253. Objects_[1][i] = CreateObject( 1649, gCoords[i][0], gCoords[i][1], gCoords[i][2], -270.000000, 0.000000, 0.000000, 150.0 );
  254. Iter_Add(_Objects, i );
  255. }
  256. inProgress = 1;
  257. }
  258. else
  259. {
  260. Minigamer_{ playerid } = true;
  261. Iter_Add(_Minigamer, playerid );
  262. SendClientMessage( playerid, RULE,"You have signed up for "COL_ORANGE"Don't Get Wet "COL_RULE"minigame." );
  263. }
  264. return 1;
  265. }
  266.  
  267. public MinigameCountdown( )
  268. {
  269. if( Iter_Count(_Minigamer ) < 2 ) //End minigame if there aren't enough sign ups
  270. {
  271. SendClientMessageToAll( LIME,"There wasn't enough players to start "COL_ORANGE"Don't Get Wet"COL_LIME" minigame." );
  272. foreach(_Minigamer, i) Minigamer_{ i } = false;
  273. return EndMinigame( );
  274. }
  275. if( inProgress != 2 )
  276. {
  277. new spot;
  278. foreach(_Minigamer, i )
  279. {
  280. GetPlayerPos( i, pCoords[i][0], pCoords[i][1], pCoords[i][2]);
  281. pInterior[i] = GetPlayerInterior( i );
  282. for( new a; a < 13; a++ )
  283. {
  284. GetPlayerWeaponData( i, a, pWeaponData[i][a], pSavedAmmo[i][a] );
  285. }
  286. ResetPlayerWeapons( i );
  287. SetPlayerInterior( i, 0 );
  288. spot = Iter_Random(_Objects );
  289. GameTextForPlayer( i, pReadyText[ random( sizeof( pReadyText ) ) ], 2050, 3 );
  290. Iter_Remove(_Objects, spot );
  291. SetPlayerCameraPos( i, -5298.4814,-218.4391,42.1386);
  292. SetPlayerCameraLookAt( i, -5298.1616,-189.6903,23.6564);
  293. TogglePlayerControllable( i, false );
  294. SetPlayerPos( i, gCoords[spot][0], gCoords[spot][1], gCoords[spot][2] +0.5 );
  295. }
  296. Iter_Clear(_Objects);
  297. for( new i; i < MAX_SLOTS; i++ ) Iter_Add(_Objects, i );
  298. SetTimer( "MinigameCountdown", 2000, 0 );
  299. inProgress = 2;
  300. }
  301. else
  302. {
  303. foreach(_Minigamer, i )
  304. {
  305. if(!VIEW_FROM_ABOVE)
  306. SetCameraBehindPlayer( i );
  307. PlayerPlaySound( i, 1057, 0.0, 0.0, 0.0 );
  308. TogglePlayerControllable( i, true );
  309. }
  310. uTimer = SetTimer( "MinigameUpdate", 2500, 1 );
  311. }
  312. return 1;
  313. }
  314.  
  315. public MinigameUpdate( )
  316. {
  317. if( Iter_Count(_Minigamer ) < 1 ) return EndMinigame( );
  318.  
  319. new str[128], Float:playerx, Float:playery, Float:playerz[ALL_PLAYERS];
  320. foreach(_Minigamer, i )
  321. {
  322. GetPlayerPos( i, playerx, playery, playerz[i] );
  323. if( playerz[i] < 2.0 ) //Checks if player is in the water
  324. {
  325. format( str, sizeof( str ), "* %s "COL_RULE"has dropped out of "COL_ORANGE"Don't Get Wet"COL_RULE" minigame, "COL_LIME"rank %d", PlayerName( i ), Iter_Count(_Minigamer ) );
  326. SendClientMessageToAll( LIME, str );
  327. GameTextForPlayer( i, pFellOffText[ random( sizeof( pFellOffText ) ) ], 2500, 3 );
  328. Iter_Remove(_Minigamer, i );
  329. Minigamer_{ i } = false;
  330. RespawnPlayer( i );
  331. }
  332. }
  333. if( Iter_Count(_Minigamer ) < 2 )
  334. {
  335. foreach(_Minigamer, i ) MinigameWinner( i );
  336. }
  337. new objectid, Float:ObjectX, Float:ObjectY, Float:ObjectZ;
  338.  
  339. if(!VIEW_FROM_ABOVE)
  340. {
  341. foreach(_Objects, i )
  342. {
  343. if( isodd( random( 10 ) ) )
  344. {
  345. GetObjectPos( Objects_[0][i], ObjectX, ObjectY, ObjectZ );
  346. MoveObject( Objects_[0][i], ObjectX, ObjectY, ObjectZ -1.5, 0.2 );
  347. MoveObject( Objects_[1][i], ObjectX, ObjectY, ObjectZ -1.5, 0.2 );
  348. }
  349. else
  350. {
  351. GetObjectPos( Objects_[0][i], ObjectX, ObjectY, ObjectZ );
  352. MoveObject( Objects_[0][i], ObjectX, ObjectY, ObjectZ +1.5, 0.2 );
  353. MoveObject( Objects_[1][i], ObjectX, ObjectY, ObjectZ +1.5, 0.2 );
  354. }
  355. }
  356. }
  357.  
  358. objectid = Iter_Random(_Objects );
  359. GetObjectPos( Objects_[0][objectid], ObjectX, ObjectY, ObjectZ );
  360. SetTimerEx("SpeedUp", 500, 0, "ifff", objectid, ObjectX, ObjectY, ObjectZ);
  361. MoveObject( Objects_[0][objectid], ObjectX, ObjectY, ObjectZ -5, 1 );
  362. if(!VIEW_FROM_ABOVE)
  363. MoveObject( Objects_[1][objectid], ObjectX, ObjectY, ObjectZ -5, 1 );
  364. Iter_Remove(_Objects, objectid );
  365. return 1;
  366. }
  367.  
  368. public SpeedUp( object, Float:x, Float:y, Float:z )
  369. {
  370. MoveObject( Objects_[0][object], x, y, z -150, 20 );
  371. if(!VIEW_FROM_ABOVE)
  372. MoveObject( Objects_[1][object], x, y, z -150, 20 );
  373. foreach(_Minigamer, i ) PlayerPlaySound( i, 1039, 0.0, 0.0, 0.0 );
  374. }
  375.  
  376. public EndMinigame( )
  377. {
  378. for( new i; i < MAX_SLOTS; i++ )
  379. {
  380. DestroyObject( Objects_[0][i] );
  381. if(!VIEW_FROM_ABOVE)
  382. DestroyObject( Objects_[1][i] );
  383. }
  384. inProgress = 0;
  385. Iter_Clear(_Objects );
  386. Iter_Clear(_Minigamer );
  387. KillTimer( uTimer );
  388. return 1;
  389. }
  390.  
  391. public MinigameWinner( player )
  392. {
  393. new str[128];
  394. format( str, sizeof( str ), "* %s "COL_RULE"has won "COL_ORANGE"Don't Get Wet "COL_RULE"minigame!", PlayerName( player ) );
  395. SendClientMessageToAll( LIME, str );
  396. GivePlayerMoney( player, PRIZE_MONEY );
  397. Minigamer_{ player } = false;
  398. Iter_Remove(_Minigamer, player );
  399. SetTimerEx( "RespawnPlayer", 1400, 0, "i", player );
  400. SetTimer( "EndMinigame", 1700, 0);
  401. }
  402.  
  403. public RespawnPlayer ( player )
  404. {
  405. for( new i = 12; i > -1; i-- )
  406. {
  407. GivePlayerWeapon( player, pWeaponData[player][i], pSavedAmmo[player][i] );
  408. }
  409. SetPlayerPos( player, pCoords[player][0], pCoords[player][1], pCoords[player][2] );
  410. SetPlayerInterior( player, pInterior[player] );
  411. SetCameraBehindPlayer( player );
  412. }
  413.  
  414. stock PlayerName( playerid )
  415. {
  416. new Name[MAX_PLAYER_NAME];
  417. GetPlayerName( playerid, Name, sizeof( Name ) );
  418. return Name;
  419. }
Advertisement
Add Comment
Please, Sign In to add comment