Guest User

eddy

a guest
Jul 16th, 2009
457
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.95 KB | None | 0 0
  1. // Short Desert Race Filterscript
  2. // Made by: eddy
  3. // Version: 1.0
  4.  
  5. #include <a_samp>
  6.  
  7. #define COLOR_RED 0xFF0000AA
  8. #define COLOR_GREEN 0x33FF33AA
  9.  
  10. #define MIN_RACE_DRIVERS 1
  11. #define MAX_RACE_DRIVERS 2
  12.  
  13. #define RACE_POSITION_ONE 2471.7903, 2770.8059, 10.7101
  14. #define RACE_POSITION_TWO 2471.5359, 2775.8389, 10.7085
  15.  
  16. #define RACE_POSITION_ANGLE 90.0000
  17.  
  18. #define RACE_CHECKPOINT 274.8427, 1411.6853, 10.4438
  19.  
  20. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  21.  
  22. enum PlayerInfo
  23. {
  24. InRace
  25. }
  26.  
  27. enum RaceInfo
  28. {
  29. Created,
  30. Started
  31. }
  32.  
  33. enum PlayerRaceInfo
  34. {
  35. Creator,
  36. RaceDriver1,
  37. RaceDriver2
  38. }
  39.  
  40. new PlayerData[MAX_PLAYERS][PlayerInfo];
  41.  
  42. new RaceData[RaceInfo];
  43.  
  44. new PlayerRaceData[MAX_PLAYERS][PlayerRaceInfo];
  45.  
  46. new RaceCountDown = -1;
  47.  
  48. new RaceDrivers;
  49.  
  50. new RaceCar1;
  51.  
  52. new RaceCar2;
  53.  
  54. new Text:TextDrawRace;
  55.  
  56. public OnFilterScriptInit()
  57. {
  58. TextDrawRace = TextDrawCreate(20.0, 260.0, "Short Desert Race by eddy");
  59. TextDrawUseBox(TextDrawRace, false);
  60. TextDrawColor(TextDrawRace, COLOR_RED);
  61. TextDrawFont(TextDrawRace, 1);
  62. RaceData[Created] = 0;
  63. RaceData[Started] = 0;
  64. return 1;
  65. }
  66.  
  67.  
  68. public OnPlayerConnect(playerid)
  69. {
  70. PlayerData[playerid][InRace] = 0;
  71. PlayerRaceData[playerid][Creator] = 0;
  72. PlayerRaceData[playerid][RaceDriver1] = 0;
  73. PlayerRaceData[playerid][RaceDriver2] = 0;
  74. return 1;
  75. }
  76.  
  77. public OnPlayerSpawn(playerid)
  78. {
  79. TogglePlayerControllable(playerid, true);
  80. TextDrawHideForPlayer(playerid, TextDrawRace);
  81. PlayerData[playerid][InRace] = 0;
  82. PlayerRaceData[playerid][Creator] = 0;
  83. PlayerRaceData[playerid][RaceDriver1] = 0;
  84. PlayerRaceData[playerid][RaceDriver2] = 0;
  85. return 1;
  86. }
  87.  
  88. public OnPlayerDeath(playerid)
  89. {
  90. TextDrawHideForPlayer(playerid, TextDrawRace);
  91. return 1;
  92. }
  93.  
  94. public OnPlayerEnterRaceCheckpoint(playerid)
  95. {
  96. new string[256];
  97. new PlayerName[MAX_PLAYER_NAME];
  98. GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
  99. GivePlayerMoney(playerid, 5000);
  100. for(new i = 0; i < MAX_PLAYERS; i++)
  101. DisablePlayerRaceCheckpoint(i);
  102. format(string, sizeof(string), "~g~%s won the Race!", PlayerName);
  103. GameTextForAll(string, 5000, 3);
  104. SetTimer("DestroyRace", 10000, 0);
  105. return 1;
  106. }
  107.  
  108. dcmd_race(playerid, params[])
  109. {
  110. #pragma unused params
  111. if(RaceData[Created] == 0)
  112. {
  113. if(PlayerData[playerid][InRace] == 0)
  114. {
  115. new string[256];
  116. new string2[256];
  117. new string3[256];
  118. new string4[256];
  119. new PlayerName[MAX_PLAYER_NAME];
  120. new PlayerVehicle;
  121. PlayerVehicle = GetPlayerVehicleID(playerid);
  122. GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
  123. SetCameraBehindPlayer(playerid);
  124. DestroyVehicle(PlayerVehicle);
  125. RaceCar1 = CreateVehicle(411, RACE_POSITION_ONE, RACE_POSITION_ANGLE, -1, -1, 5000);
  126. PutPlayerInVehicle(playerid, RaceCar1, 0);
  127. TogglePlayerControllable(playerid, false);
  128. TextDrawShowForPlayer(playerid, TextDrawRace);
  129. format(string, sizeof(string), "%s has created a Race! Type /joinrace to join him/her!", PlayerName);
  130. format(string3, sizeof(string2), "Short Desert Race made by eddy");
  131. format(string2, sizeof(string3), "Type /startrace to start the Race", PlayerName);
  132. format(string3, sizeof(string4), "Type /quitrace to quit the Race");
  133. SendClientMessageToAll(COLOR_GREEN, string);
  134. SendClientMessage(playerid, COLOR_RED, string2);
  135. SendClientMessage(playerid, COLOR_GREEN, string3);
  136. SendClientMessage(playerid, COLOR_GREEN, string4);
  137. RaceDrivers++;
  138. RaceData[Created] = 1;
  139. RaceData[Started] = 0;
  140. PlayerData[playerid][InRace] = 1;
  141. PlayerRaceData[playerid][Creator] = 1;
  142. PlayerRaceData[playerid][RaceDriver1] = 1;
  143. return 1;
  144. }
  145. else return SendClientMessage(playerid, COLOR_RED, "You are already in a Race");
  146. }
  147. else return SendClientMessage(playerid, COLOR_RED, "A Race has already been created");
  148. }
  149.  
  150. dcmd_joinrace(playerid, params[])
  151. {
  152. #pragma unused params
  153. if(RaceData[Created] == 1)
  154. {
  155. if(PlayerData[playerid][InRace] == 0)
  156. {
  157. if(RaceData[Started] == 0)
  158. {
  159. if(RaceDrivers <= MAX_RACE_DRIVERS)
  160. {
  161. new string[256];
  162. new string2[256];
  163. new string3[256];
  164. new string4[256];
  165. new PlayerName[MAX_PLAYER_NAME];
  166. new PlayerVehicle;
  167. PlayerVehicle = GetPlayerVehicleID(playerid);
  168. GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
  169. SetCameraBehindPlayer(playerid);
  170. DestroyVehicle(PlayerVehicle);
  171. RaceCar2 = CreateVehicle(411, RACE_POSITION_TWO, RACE_POSITION_ANGLE, -1, -1, 5000);
  172. PutPlayerInVehicle(playerid, RaceCar2, 0);
  173. TogglePlayerControllable(playerid, false);
  174. TextDrawShowForPlayer(playerid, TextDrawRace);
  175. format(string, sizeof(string), "%s has joined the Race!", PlayerName);
  176. format(string3, sizeof(string2), "Short Desert Race made by eddy");
  177. format(string2, sizeof(string3), "The Creator of the Race has to start the Race, please wait...", PlayerName);
  178. format(string3, sizeof(string4), "Type /quitrace to quit the Race");
  179. SendClientMessageToAll(COLOR_GREEN, string);
  180. SendClientMessage(playerid, COLOR_RED, string2);
  181. SendClientMessage(playerid, COLOR_GREEN, string3);
  182. SendClientMessage(playerid, COLOR_GREEN, string4);
  183. RaceDrivers++;
  184. PlayerData[playerid][InRace] = 1;
  185. PlayerRaceData[playerid][RaceDriver2] = 1;
  186. return 1;
  187. }
  188. else return SendClientMessage(playerid, COLOR_RED, "The limit of Race Drivers has been reached");
  189. }
  190. else return SendClientMessage(playerid, COLOR_RED, "You cannot join a started Race");
  191. }
  192. else return SendClientMessage(playerid, COLOR_RED, "You are already in a Race");
  193. }
  194. else return SendClientMessage(playerid, COLOR_RED, "There are no Races to join");
  195. }
  196.  
  197. dcmd_startrace(playerid, params[])
  198. {
  199. #pragma unused params
  200. if(PlayerData[playerid][InRace] == 1)
  201. {
  202. if(PlayerRaceData[playerid][Creator] == 1)
  203. {
  204. if(RaceDrivers >= MIN_RACE_DRIVERS)
  205. {
  206. new string[256];
  207. new PlayerName[MAX_PLAYER_NAME];
  208. GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
  209. format(string, sizeof(string), "%s has started the Race!", PlayerName);
  210. SendClientMessageToAll(COLOR_GREEN, string);
  211. RaceCountDown = 6;
  212. SetTimer("RaceCountDownTimer", 1000, 0);
  213. return 1;
  214. }
  215. else return SendClientMessage(playerid, COLOR_RED, "There needs to be 2 Race Drivers");
  216. }
  217. else return SendClientMessage(playerid, COLOR_RED, "You are not the Creator of this Race");
  218. }
  219. else return SendClientMessage(playerid, COLOR_RED, "You are not in a Race");
  220. }
  221.  
  222. dcmd_quitrace(playerid, params[])
  223. {
  224. #pragma unused params
  225. for(new i = 0; i < MAX_PLAYERS; i++)
  226. {
  227. if(PlayerData[playerid][InRace] == 1)
  228. {
  229. if(PlayerRaceData[playerid][RaceDriver1] == 1 && PlayerRaceData[playerid][Creator] == 1 && PlayerData[i][InRace] == 1)
  230. {
  231. new string[256];
  232. new PlayerName[MAX_PLAYER_NAME];
  233. GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
  234. DestroyVehicle(RaceCar1);
  235. DestroyVehicle(RaceCar2);
  236. DisablePlayerRaceCheckpoint(i);
  237. SetPlayerHealth(i, 0);
  238. SetPlayerArmour(i, 0);
  239. format(string, sizeof(string), "The Race has been cancelled! (Creator left)");
  240. SendClientMessageToAll(COLOR_GREEN, string);
  241. RaceDrivers = 0;
  242. RaceData[Created] = 0;
  243. RaceData[Started] = 0;
  244. PlayerData[i][InRace] = 0;
  245. PlayerRaceData[i][Creator] = 0;
  246. PlayerRaceData[i][RaceDriver1] = 0;
  247. PlayerRaceData[i][RaceDriver2] = 0;
  248. return 1;
  249. }
  250. if(PlayerRaceData[playerid][RaceDriver2] == 1)
  251. {
  252. new string[256];
  253. new PlayerName[MAX_PLAYER_NAME];
  254. GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
  255. DestroyVehicle(RaceCar2);
  256. DisablePlayerRaceCheckpoint(playerid);
  257. SetPlayerHealth(playerid, 0);
  258. SetPlayerArmour(playerid, 0);
  259. format(string, sizeof(string), "%s has left the Race!", PlayerName);
  260. SendClientMessageToAll(COLOR_GREEN, string);
  261. RaceDrivers--;
  262. PlayerData[playerid][InRace] = 0;
  263. PlayerRaceData[playerid][RaceDriver2] = 0;
  264. return 1;
  265. }
  266. return 1;
  267. }
  268. else return SendClientMessage(playerid, COLOR_RED, "You are not in a Race");
  269. }
  270. return 1;
  271. }
  272.  
  273. public OnPlayerCommandText(playerid, cmdtext[])
  274. {
  275. dcmd(race, 4, cmdtext);
  276. dcmd(joinrace, 8, cmdtext);
  277. dcmd(startrace, 9, cmdtext);
  278. dcmd(quitrace, 8, cmdtext);
  279. return 0;
  280. }
  281.  
  282. forward RaceCountDownTimer();
  283. public RaceCountDownTimer()
  284. {
  285. RaceCountDown--;
  286. if(RaceCountDown == 0)
  287. {
  288. GameTextForAll("~b~Go ~g~Go ~r~Go!", 3000, 3);
  289. for(new i = 0; i < MAX_PLAYERS; i++)
  290. TogglePlayerControllable(i, true);
  291. for(new i = 0; i < MAX_PLAYERS; i++)
  292. SetPlayerRaceCheckpoint(i, 1, RACE_CHECKPOINT, RACE_CHECKPOINT, 20);
  293. RaceData[Started] = 1;
  294. RaceCountDown = -1;
  295. return 0;
  296. }
  297. else
  298. {
  299. new text[7]; format(text, sizeof(text), "~g~%d", RaceCountDown);
  300. GameTextForAll(text, 1000, 3);
  301. }
  302. SetTimer("RaceCountDownTimer", 1000, 0);
  303. return 0;
  304. }
  305.  
  306. forward DestroyRace();
  307. public DestroyRace()
  308. {
  309. for(new i = 0; i < MAX_PLAYERS; i++)
  310. if(PlayerData[i][InRace] == 1)
  311. {
  312. DisablePlayerRaceCheckpoint(i);
  313. TextDrawHideForPlayer(i, TextDrawRace);
  314. RaceData[Created] = 0;
  315. RaceData[Started] = 0;
  316. DestroyVehicle(RaceCar1);
  317. DestroyVehicle(RaceCar2);
  318. SetPlayerHealth(i, 0);
  319. SetPlayerArmour(i, 0);
  320. SpawnPlayer(i);
  321. RaceData[Created] = 0;
  322. RaceData[Started] = 0;
  323. PlayerData[i][InRace] = 0;
  324. PlayerRaceData[i][Creator] = 0;
  325. PlayerRaceData[i][RaceDriver1] = 0;
  326. PlayerRaceData[i][RaceDriver2] = 0;
  327. return 0;
  328. }
  329. return 1;
  330. }
Advertisement
Add Comment
Please, Sign In to add comment