Guest User

JeNkStA

a guest
Mar 31st, 2009
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.78 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #define DRIFT_MINKAT 10.0
  4. #define DRIFT_MAXKAT 90.0
  5. #define DRIFT_SPEED 30.0
  6.  
  7. new Text:Textdraw0[MAX_PLAYERS];
  8. new Text:Textdraw1[MAX_PLAYERS];
  9. new Text:Textdraw2[MAX_PLAYERS];
  10. new Text:Textdraw3[MAX_PLAYERS];
  11.  
  12. new DriftPointsNow[200];
  13. new PlayerDriftCancellation[200];
  14. new Float:ppos[200][3];
  15. enum Float:Pos{ Float:sX,Float:sY,Float:sZ };
  16. new Float:SavedPos[MAX_PLAYERS][Pos];
  17.  
  18. forward Drift();
  19. forward AngleUpdate();
  20. forward HideTextDraws(playerid);
  21. forward DriftCancellation(playerid);
  22.  
  23. public OnFilterScriptInit(){
  24. SetTimer("AngleUpdate", 200, true);
  25. SetTimer("Drift", 200, true);
  26. return 1;
  27. }
  28.  
  29. public OnPlayerConnect(playerid)
  30. {
  31. Textdraw0[playerid] = TextDrawCreate(516.000000,100.000000,"Your drifting!");
  32. Textdraw1[playerid] = TextDrawCreate(516.000000,108.000000,"Points: $000000");
  33. Textdraw2[playerid] = TextDrawCreate(516.000000,100.000000,"Drift Ended!");
  34. Textdraw3[playerid] = TextDrawCreate(516.000000,108.000000,"Earned: $000000");
  35. TextDrawAlignment(Textdraw0[playerid],0);
  36. TextDrawAlignment(Textdraw1[playerid],0);
  37. TextDrawAlignment(Textdraw2[playerid],0);
  38. TextDrawAlignment(Textdraw3[playerid],0);
  39. TextDrawBackgroundColor(Textdraw0[playerid],0x000000ff);
  40. TextDrawBackgroundColor(Textdraw1[playerid],0x000000ff);
  41. TextDrawBackgroundColor(Textdraw2[playerid],0x000000ff);
  42. TextDrawBackgroundColor(Textdraw3[playerid],0x000000ff);
  43. TextDrawFont(Textdraw0[playerid],1);
  44. TextDrawLetterSize(Textdraw0[playerid],0.299999,1.000000);
  45. TextDrawFont(Textdraw1[playerid],1);
  46. TextDrawLetterSize(Textdraw1[playerid],0.299999,1.000000);
  47. TextDrawFont(Textdraw2[playerid],1);
  48. TextDrawLetterSize(Textdraw2[playerid],0.299999,1.000000);
  49. TextDrawFont(Textdraw3[playerid],1);
  50. TextDrawLetterSize(Textdraw3[playerid],0.299999,1.000000);
  51. TextDrawColor(Textdraw0[playerid],0xffffffff);
  52. TextDrawColor(Textdraw1[playerid],0xffffffff);
  53. TextDrawColor(Textdraw2[playerid],0xffffffff);
  54. TextDrawColor(Textdraw3[playerid],0xffffffff);
  55. TextDrawSetOutline(Textdraw0[playerid],1);
  56. TextDrawSetOutline(Textdraw1[playerid],1);
  57. TextDrawSetOutline(Textdraw2[playerid],1);
  58. TextDrawSetOutline(Textdraw3[playerid],1);
  59. TextDrawSetProportional(Textdraw0[playerid],1);
  60. TextDrawSetProportional(Textdraw1[playerid],1);
  61. TextDrawSetProportional(Textdraw2[playerid],1);
  62. TextDrawSetProportional(Textdraw3[playerid],1);
  63. TextDrawSetShadow(Textdraw0[playerid],1);
  64. TextDrawSetShadow(Textdraw1[playerid],1);
  65. TextDrawSetShadow(Textdraw2[playerid],1);
  66. TextDrawSetShadow(Textdraw3[playerid],1);
  67. return 1;
  68. }
  69.  
  70. Float:GetPlayerTheoreticAngle(i) // By Luby
  71. {
  72. new Float:sin;
  73. new Float:dis;
  74. new Float:angle2;
  75. new Float:x,Float:y,Float:z;
  76. new Float:tmp3;
  77. new Float:tmp4;
  78. new Float:MindAngle;
  79. if(IsPlayerConnected(i)){
  80. GetPlayerPos(i,x,y,z);
  81. dis = floatsqroot(floatpower(floatabs(floatsub(x,ppos[i][0])),2)+floatpower(floatabs(floatsub(y,ppos[i][1])),2));
  82. if(IsPlayerInAnyVehicle(i))GetVehicleZAngle(GetPlayerVehicleID(i), angle2); else GetPlayerFacingAngle(i, angle2);
  83. if(x>ppos[i][0]){tmp3=x-ppos[i][0];}else{tmp3=ppos[i][0]-x;}
  84. if(y>ppos[i][1]){tmp4=y-ppos[i][1];}else{tmp4=ppos[i][1]-y;}
  85. if(ppos[i][1]>y && ppos[i][0]>x){
  86. sin = asin(tmp3/dis);
  87. MindAngle = floatsub(floatsub(floatadd(sin, 90), floatmul(sin, 2)), -90.0);
  88. }
  89. if(ppos[i][1]<y && ppos[i][0]>x){
  90. sin = asin(tmp3/dis);
  91. MindAngle = floatsub(floatadd(sin, 180), 180.0);
  92. }
  93. if(ppos[i][1]<y && ppos[i][0]<x){
  94. sin = acos(tmp4/dis);
  95. MindAngle = floatsub(floatadd(sin, 360), floatmul(sin, 2));
  96. }
  97. if(ppos[i][1]>y && ppos[i][0]<x){
  98. sin = asin(tmp3/dis);
  99. MindAngle = floatadd(sin, 180);
  100. }
  101. }
  102. if(MindAngle == 0.0){
  103. return angle2;
  104. } else
  105. return MindAngle;
  106. }
  107.  
  108. public DriftCancellation(playerid)
  109. { // By Luby
  110. new s[256];
  111. PlayerDriftCancellation[playerid] = 0;
  112. HideTextDraws(playerid);
  113. TextDrawShowForPlayer(playerid, Textdraw2[playerid]);
  114. format(s, sizeof(s), "Earned: $%d", tostr(DriftPointsNow[playerid]));
  115. TextDrawSetString(Textdraw3[playerid], s);
  116. TextDrawShowForPlayer(playerid, Textdraw3[playerid]);
  117. SetTimerEx("HideTextDraws", 2000, 0, "d", playerid);
  118. GivePlayerMoney(playerid, DriftPointsNow[playerid]);
  119. DriftPointsNow[playerid] = 0;
  120. }
  121.  
  122. Float:ReturnPlayerAngle(playerid)
  123. { // By Luby
  124. new Float:Ang;
  125. if(IsPlayerInAnyVehicle(playerid))GetVehicleZAngle(GetPlayerVehicleID(playerid), Ang); else GetPlayerFacingAngle(playerid, Ang);
  126. return Ang;
  127. }
  128.  
  129. public Drift()
  130. { // By Luby
  131. new Float:Angle1, Float:Angle2, Float:BySpeed, s[256];
  132. new Float:Z;
  133. new Float:X;
  134. new Float:Y;
  135. new Float:SpeedX;
  136. for(new g=0;g<200;g++){
  137. GetPlayerPos(g, X, Y, Z);
  138. SpeedX = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(X,SavedPos[ g ][ sX ])),2),floatpower(floatabs(floatsub(Y,SavedPos[ g ][ sY ])),2)),floatpower(floatabs(floatsub(Z,SavedPos[ g ][ sZ ])),2)));
  139. Angle1 = ReturnPlayerAngle(g);
  140. Angle2 = GetPlayerTheoreticAngle(g);
  141. BySpeed = floatmul(SpeedX, 12);
  142. if(IsPlayerInAnyVehicle(g) && IsCar(GetPlayerVehicleID(g)) && floatabs(floatsub(Angle1, Angle2)) > DRIFT_MINKAT && floatabs(floatsub(Angle1, Angle2)) < DRIFT_MAXKAT && BySpeed > DRIFT_SPEED){
  143. if(PlayerDriftCancellation[g] > 0)KillTimer(PlayerDriftCancellation[g]);
  144. PlayerDriftCancellation[g] = 0;
  145. DriftPointsNow[g] += floatval( floatabs(floatsub(Angle1, Angle2)) * 3 * (BySpeed*0.1) )/10;
  146. PlayerDriftCancellation[g] = SetTimerEx("DriftCancellation", 3000, 0, "d", g);
  147. }
  148. if(DriftPointsNow[g] > 0){
  149. TextDrawShowForPlayer(g, Textdraw0[g]);
  150. format(s, sizeof(s), "Points $%d", DriftPointsNow[g]);
  151. TextDrawSetString(Textdraw1[g], s);
  152. TextDrawShowForPlayer(g, Textdraw1[g]);
  153. SetTimerEx("HideTextDraws", 3000, 0, "d", g);
  154. }
  155. SavedPos[ g ][ sX ] = X;
  156. SavedPos[ g ][ sY ] = Y;
  157. SavedPos[ g ][ sZ ] = Z;
  158. }
  159. }
  160.  
  161. tostr(int)
  162. { // By Luby
  163. new st[256];
  164. format(st, 256, "%d", int);
  165. return st;
  166. }
  167.  
  168. public AngleUpdate()
  169. { // By Luby
  170. for(new g=0;g<200;g++){
  171. new Float:x, Float:y, Float:z;
  172. if(IsPlayerInAnyVehicle(g))GetVehiclePos(GetPlayerVehicleID(g), x, y, z); else GetPlayerPos(g, x, y, z);
  173. ppos[g][0] = x;
  174. ppos[g][1] = y;
  175. ppos[g][2] = z;
  176. }
  177. }
  178.  
  179. floatval(Float:val)
  180. { // By Luby
  181. new str[256];
  182. format(str, 256, "%.0f", val);
  183. return todec(str);
  184. }
  185.  
  186. IsCar(model) //By Luby
  187. {
  188. switch(model)
  189. {
  190. case 443:return 0;
  191. case 448:return 0;
  192. case 461:return 0;
  193. case 462:return 0;
  194. case 463:return 0;
  195. case 468:return 0;
  196. case 521:return 0;
  197. case 522:return 0;
  198. case 523:return 0;
  199. case 581:return 0;
  200. case 586:return 0;
  201. case 481:return 0;
  202. case 509:return 0;
  203. case 510:return 0;
  204. case 430:return 0;
  205. case 446:return 0;
  206. case 452:return 0;
  207. case 453:return 0;
  208. case 454:return 0;
  209. case 472:return 0;
  210. case 473:return 0;
  211. case 484:return 0;
  212. case 493:return 0;
  213. case 595:return 0;
  214. case 417:return 0;
  215. case 425:return 0;
  216. case 447:return 0;
  217. case 465:return 0;
  218. case 469:return 0;
  219. case 487:return 0;
  220. case 488:return 0;
  221. case 497:return 0;
  222. case 501:return 0;
  223. case 548:return 0;
  224. case 563:return 0;
  225. case 406:return 0;
  226. case 444:return 0;
  227. case 556:return 0;
  228. case 557:return 0;
  229. case 573:return 0;
  230. case 460:return 0;
  231. case 464:return 0;
  232. case 476:return 0;
  233. case 511:return 0;
  234. case 512:return 0;
  235. case 513:return 0;
  236. case 519:return 0;
  237. case 520:return 0;
  238. case 539:return 0;
  239. case 553:return 0;
  240. case 577:return 0;
  241. case 592:return 0;
  242. case 593:return 0;
  243. case 471:return 0;
  244. }
  245. return 1;
  246. }
  247.  
  248. todec(str[]){ // By Luby
  249. return strval(str);
  250. }
  251.  
  252. public HideTextDraws(playerid)
  253. {
  254. TextDrawHideForPlayer(playerid, Textdraw0[playerid]);
  255. TextDrawHideForPlayer(playerid, Textdraw1[playerid]);
  256. TextDrawHideForPlayer(playerid, Textdraw2[playerid]);
  257. TextDrawHideForPlayer(playerid, Textdraw3[playerid]);
  258. return 1;
  259. }
Advertisement
Add Comment
Please, Sign In to add comment