Advertisement
Guest User

Untitled

a guest
Feb 18th, 2016
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 8.26 KB | None | 0 0
  1. unit BulletProjectiveLine;
  2.  
  3. const
  4.     //Increase to see the long trajectories. Decrease to reduce the range to indicate the trajectory.
  5.     //The higher the need for greater power cpu.
  6.     Range = 255;
  7.    
  8.     //Dont Edit
  9.     Gravity = 0.06;
  10.     g_ = 0.135;
  11.     k_ = 0.01;
  12.     ik_ = 1.0 - k_;
  13.  
  14. type
  15.     tTVector = record
  16.         x, y, vx, vy: single;
  17.         t: word;
  18.     end;
  19.    
  20. var
  21.     WeaponSpeed: array [0..16] of single;
  22.     Vec: tTVector;
  23.     CheckPlayerID: byte;
  24.  
  25. function BallisticAim(x1, y1, x2, y2, v, gravity: single): single; external 'ballistic_aim@aim.dll';
  26.  
  27. function atan(Value: Double): Double;
  28. var
  29. HelpValue, Score: Double;
  30. begin
  31.     HelpValue := 10;
  32.     Value := StrToFloat(FormatFloat('0.####', Value));
  33.     if (Value < -90) then begin
  34.         Score := -pi/2;
  35.         Result := Score;
  36.         exit;
  37.     end;
  38.     if (Value > 90) then begin
  39.         Score := pi/2;
  40.         Result := Score;
  41.         exit;
  42.     end;
  43.     if (Value > -90) AND (Value < 0) then begin
  44.         HelpValue := Value;
  45.         Value := -Value;
  46.     end;
  47.     case Value of
  48.         0..0.0174: Score := 0;
  49.         0.0175..0.0348: Score := 0.0174982138698566;
  50.         0.0349..0.0523: Score := 0.0348858408298337;
  51.         0.0524..0.0698: Score := 0.0523521195814978;
  52.         0.0699..0.0874: Score := 0.0697864885524836;
  53.         0.0875..0.1050: Score := 0.0872777129494614;
  54.         0.1051..0.1227: Score := 0.104715566127497;
  55.         0.1228..0.1404: Score := 0.12218825740471;
  56.         0.1405..0.1583: Score := 0.139586296165376;
  57.         0.1584..0.1583: Score := 0.157094811546099;
  58.         0.1763..0.1943: Score := 0.174506757938147;
  59.         0.1944..0.2125: Score := 0.192005191605331;
  60.         0.2126..0.2308: Score := 0.209481070481662;
  61.         0.2309..0.2492: Score := 0.226923001799405;
  62.         0.2493..0.2678: Score := 0.244319731162834;
  63.         0.2679..0.2866: Score := 0.261753490071652;
  64.         0.2867..0.3056: Score := 0.279210742282217;
  65.         0.3057..0.3248: Score := 0.296677913828006;
  66.         0.3249..0.3248: Score := 0.314141449845828;
  67.         0.3443..0.3639: Score := 0.331587871239654;
  68.         0.3640..0.3838: Score := 0.349092133951802;
  69.         0.3839..0.4039: Score := 0.366550488612585;
  70.         0.4040..0.4244: Score := 0.383949889672296;
  71.         0.4245..0.4451: Score := 0.401447066726006;
  72.         0.4452..0.4662: Score := 0.41885508046026;
  73.         0.4663..0.4876: Score := 0.436326022619059;
  74.         0.4877..0.5094: Score := 0.4537592791353;
  75.         0.5095..0.5316: Score := 0.471218693664511;
  76.         0.5317..0.5542: Score := 0.488684837639843;
  77.         0.5543..0.5773: Score := 0.506138559055801;
  78.         0.5774..0.6008: Score := 0.523636072902899;
  79.         0.6009..0.6248: Score := 0.541081002224753;
  80.         0.6249..0.6493: Score := 0.558527401999266;
  81.         0.6494..0.6744: Score := 0.575953312325017;
  82.         0.6745..0.7001: Score := 0.593406092001082;
  83.         0.7002..0.7264: Score := 0.610860179965463;
  84.         0.7265..0.7535: Score := 0.628290695214164;
  85.         0.7536..0.7812: Score := 0.645801130293335;
  86.         0.7813..0.8097: Score := 0.663234041073618;
  87.         0.8098..0.8390: Score := 0.680688051447693;
  88.         0.8391..0.8692: Score := 0.698131917231749;
  89.         0.8693..0.9003: Score := 0.715592547229579;
  90.         0.9004..0.9324: Score := 0.733036052312088;
  91.         0.9325..0.9656: Score := 0.750483509050129;
  92.         0.9657..0.9999: Score := 0.767950679318179;
  93.         1..1.0354: Score := 0.785398163397448;
  94.         1.0355..1.0723: Score := 0.802836827768543;
  95.         1.0724..1.1105: Score := 0.820319301858688;
  96.         1.1106..1.1503: Score := 0.837752437585743;
  97.         1.1504..1.1917: Score := 0.855224931221501;
  98.         1.1918..1.2348: Score := 0.872683799981186;
  99.         1.2349..1.2798: Score := 0.890119044653214;
  100.         1.2799..1.3296: Score := 0.907555430491315;
  101.         1.3270..1.3763: Score := 0.925008269653536;
  102.         1.3764..1.4280: Score := 0.942484042346821;
  103.         1.4281..1.4825: Score := 0.959915294505986;
  104.         1.4826..1.5398: Score := 0.977396585913373;
  105.         1.5399..1.6002: Score := 0.994848066312935;
  106.         1.6003..1.6642: Score := 1.01228126975339;
  107.         1.6643..1.7320: Score := 1.02974970122561;
  108.         1.7321..1.8039: Score := 1.04720984904242;
  109.         1.8040..1.8806: Score := 1.06463961907269;
  110.         1.8807..1.9625: Score := 1.08209830311626;
  111.         1.9626..2.0502: Score := 1.09955526348515;
  112.         2.0503..2.1444: Score := 1.11700998304179;
  113.         2.1445..2.2459: Score := 1.13446277774716;
  114.         2.2460..2.3558: Score := 1.15191122255343;
  115.         2.3559..2.4750: Score := 1.16937787106011;
  116.         2.4751..2.6050: Score := 1.18682573620912;
  117.         2.6051..2.7474: Score := 1.20427858826594;
  118.         2.7475..2.9041: Score := 1.2217331177989;
  119.         2.9042..3.0776: Score := 1.23918261593696;
  120.         3.0777..3.2708: Score := 1.25663863348819;
  121.         3.2709..3.4873: Score := 1.27409440413169;
  122.         3.4874..3.7320: Score := 1.29154254908704;
  123.         3.7321..4.0107: Score := 1.30900023422327;
  124.         4.0108..4.3314: Score := 1.32645134739846;
  125.         4.3315..4.7045: Score := 1.34390474486222;
  126.         4.7046..5.1445: Score := 1.36135551499702;
  127.         5.1446..5.6712: Score := 1.378811783251;
  128.         5.6713..6.3137: Score := 1.39626394979936;
  129.         6.3138..7.1153: Score := 1.41371788062687;
  130.         7.1154..8.1442: Score := 1.43117057308465;
  131.         8.1443..9.5143: Score := 1.44862258959679;
  132.         9.5144..11.4300: Score := 1.46607696005406;
  133.         11.4301..14.3006: Score := 1.48353022650779;
  134.         14.3007..19.0810: Score := 1.50098332090842;
  135.         19.0811..28.6362: Score := 1.51843634874527;
  136.         28.6363..57.2899: Score := 1.53588979865515;
  137.         57.290..90: Score := 1.5533430459617;
  138.     end;
  139.     if HelpValue < 0 then Score := -Score;
  140.     Result := Score;
  141. end;
  142.  
  143. function arctan2(X, Y: single): single;
  144. begin
  145.   if X < 0 then Result := atan(Y/X) + Pi else
  146.   if X > 0 then Result := atan(Y/X) else
  147.   if Y > 0 then Result := 2.3562 else
  148.   Result := -0.7854;
  149. end;
  150.  
  151. function GetWeaponName(Weapon: Byte): String;
  152. begin
  153.     case (Weapon) of
  154.         0: Result := 'USSOCOM';
  155.         1: Result := 'Desert Eagles';
  156.         2: Result := 'HK MP5';
  157.         3: Result := 'Ak-74';
  158.         4: Result := 'Steyr AUG';
  159.         5: Result := 'Spas-12';
  160.         6: Result := 'Ruger 77';
  161.         7: Result := 'M79';
  162.         8: Result := 'Barret M82A1';
  163.         9: Result := 'FN Minimi';
  164.         10: Result := 'XM214 Minigun';
  165.         11: Result:= 'Combat Knife';
  166.         12: Result:= 'Chainsaw';
  167.         13: Result:= 'M72 LAW';
  168.         14: Result:= 'Flamer';
  169.         15: Result:= 'Rambo Bow';
  170.         16: Result:= 'Flamed Arrows';
  171.         else Result := '';
  172.     end;
  173. end;
  174.  
  175. procedure CastAndDraw(x, y, g: single; var vec: tTVector; CheckPlayerOnly, CheckBulletOnly: boolean);
  176. var x2, y2: single;
  177. begin
  178.     while vec.t > 0 do begin
  179.         vec.t := vec.t - 1;
  180.         x2 := x;
  181.         x := x + vec.vx;
  182.         vec.vx := vec.vx * ik_;
  183.         vec.vy := vec.vy + g;
  184.         y2 := y;
  185.         y := y + vec.vy;
  186.         vec.vy := vec.vy * ik_;
  187.         if Map.RayCast(x, y, x2, y2, CheckPlayerOnly, false, CheckBulletOnly, CheckBulletOnly, 0) then begin
  188.             vec.X := x2;
  189.             vec.Y := y2;
  190.             Players.WorldText(vec.t, '.', 60, $33CC00, 0.09, x2-2.5, y2-12.3);
  191.             exit;
  192.         end else
  193.         begin
  194.             Players.WorldText(vec.t, '.',60, $FF0000, 0.08, x2-2.5, y2-12.3);
  195.         end;
  196.     end;
  197.     vec.X := x2;
  198.     vec.Y := y2;
  199. end;
  200.  
  201. procedure DrawBulletProjectiveLines(Player: TActivePlayer);
  202. var Speed, Angle: single;
  203. begin
  204.     if (Player.Primary.WType<>255) then begin
  205.         Speed   := iif(Player.Primary.WType<>11, WeaponSpeed[Player.Primary.WType],8.95);
  206.  
  207.         Angle   := arctan2(-Player.X + single(Player.MouseAimX), -Player.Y+5.9 + single(Player.MouseAimY));
  208.  
  209.         Vec.vx  := (cos(angle)*Speed);
  210.         Vec.vy  := (sin(angle)*Speed);
  211.         Vec.T   := Range;
  212.         CastAndDraw(Player.X, Player.Y-12, g_*Gravity/Gravity, vec, true, true);
  213.     end;
  214. end;
  215.  
  216. procedure Check(Ticks: integer);
  217. begin
  218.     if (CheckPlayerID<>255) then if (Players[CheckPlayerID].Active) and (Players[CheckPlayerID].Alive) then begin
  219.         DrawBulletProjectiveLines(Players[CheckPlayerID]);
  220.         Players.WorldText(255+CheckPlayerID, '+', 60, $DCB2010, 0.10, single(Players[CheckPlayerID].MouseAimX)-6.3, single(Players[CheckPlayerID].MouseAimY)-11.1);
  221.     end;
  222. end;
  223.  
  224. procedure ReadWeaponsSpeed();
  225. var i: byte; WeaponINI: TIniFile;
  226. begin
  227.     if (Game.Realistic) then WeaponINI := File.CreateINI('weapons.ini') else WeaponINI := File.CreateINI('weapons_realistic.ini');
  228.     for i := 0 to 16 do WeaponSpeed[i] := (WeaponINI.ReadInteger(GetWeaponName(i), 'Speed', 0)/10);
  229. end;
  230.  
  231. function Commands(Player: TActivePlayer; Text: string): Boolean;
  232. var i: integer;
  233. begin
  234.     if (Player.IsAdmin) then begin
  235.         if (Copy(Text,1,12) = '/trajectory ') then begin
  236.             i := StrToInt(Copy(Text,12,length(Text)));
  237.             if (CheckPlayerID=i) then CheckPlayerID:=255 else if (i<33) and (i>0) then CheckPlayerID:=i;
  238.         end;
  239.     end;
  240.     Result:=false;
  241. end;
  242.  
  243. var Decl:byte;
  244. begin
  245.     CheckPlayerID:=255;
  246.     ReadWeaponsSpeed();
  247.     Game.TickThreshold  := 1;
  248.     Game.OnClockTick    := @Check;
  249.     for Decl := 1 to 32 do Players[Decl].OnCommand := @Commands;
  250. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement