Advertisement
Ultranite

semirage.js

Dec 31st, 2019
1,064
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var local = Entity.GetLocalPlayer();
  2. var shot_time = 0;
  3. var binlib = {};
  4. var prev_angle = undefined;
  5. var correct = false;
  6. var pos = [];
  7. var canShoot = false;
  8. var sens = Convar.GetFloat("sensitivity");
  9. var shooting = false;
  10. var temp = -1;
  11. var targets = ["Off"];
  12. var wepList = {
  13.     0: "Auto",
  14.     1: "AWP",
  15.     2: "Scout",
  16.     3: "Rifle",
  17.     4: "SMG",
  18.     5: "Heavy Pistol",
  19.     6: "Pistol",
  20.     7: "Heavy"
  21. };
  22.  
  23. function getAngles(localPos, pos)
  24. {
  25.     newPos = vector_sub(pos, localPos);
  26.     xyDist = Math.sqrt((newPos[0] * newPos[0] + newPos[1] * newPos[1]));
  27.     yaw = Math.atan2(newPos[1], newPos[0]) * 180 / Math.PI;
  28.     pitch = Math.atan2(-newPos[2], xyDist) * 180 / Math.PI;
  29.     roll = 0;
  30.     angles = [pitch, yaw, roll];
  31.     return angles;
  32. }
  33.  
  34. function getVec(pitch, yaw)
  35. {
  36.     var p = deg2Rad(pitch);
  37.     var y = deg2Rad(yaw)
  38.     var sin_p = Math.sin(p);
  39.     var cos_p = Math.cos(p);
  40.     var sin_y = Math.sin(y);
  41.     var cos_y = Math.cos(y);
  42.     return [cos_p * cos_y, cos_p * sin_y, -sin_p];
  43. }
  44.  
  45. function vector_sub(vec1, vec2)
  46. {
  47.     return [
  48.         vec1[0] - vec2[0],
  49.         vec1[1] - vec2[1],
  50.         vec1[2] - vec2[2]
  51.     ];
  52. }
  53.  
  54. function vector_add(vec, vec2)
  55. {
  56.     newVec = [
  57.         vec[0] + vec2[0],
  58.         vec[1] + vec2[1],
  59.         vec[2] + vec2[2]
  60.     ]
  61.     return newVec;
  62. }
  63.  
  64. function rad2deg(rad)
  65. {
  66.     return rad * 180 / Math.PI;
  67. }
  68.  
  69. function deg2Rad(angle)
  70. {
  71.     return angle * Math.PI / 180;
  72. }
  73. setup();
  74.  
  75. function setup()
  76. {
  77.     Cheat.PrintColor([255, 0, 0, 255],
  78.         "__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ \n");
  79.     Cheat.PrintColor([255, 0, 0, 255],
  80.         "____ ____ _  _ _          ____ ____ ____ ____    ___  ____ ___ \n");
  81.     Cheat.PrintColor([255, 0, 0, 255],
  82.         "[__  |___ |\\/| |    __    |__/ |__| | __ |___    |__] |  |  |  \n");
  83.     Cheat.PrintColor([255, 0, 0, 255],
  84.         "___] |___ |  | |          |  \\ |  | |__] |___    |__] |__|  |  \n");
  85.     Cheat.PrintColor([255, 0, 0, 255],
  86.         "__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ \n");
  87.     UI.AddLabel("---------------v---------------");
  88.     UI.AddCheckbox("Enable Semi-Rage");
  89.     UI.AddLabel("-------------------------------");
  90.     enabled = UI.GetValue("Enable Semi-Rage");
  91.     UI.AddHotkey("Semi-Rage Key");
  92.     UI.AddColorPicker("FOV Color");
  93.     UI.SetEnabled("FOV Color", enabled);
  94.     createDropdown("[SR] Enabled Weapons", ["Auto", "AWP", "Scout", "Rifle", "SMG", "Heavy Pistol", "Pistol", "Heavy"],
  95.         true);
  96.     UI.SetEnabled("[SR] Enabled Weapons", enabled);
  97.     opts = fetchDropdown("[SR] Enabled Weapons");
  98.     enemies = Entity.GetEnemies();
  99.     for (enemy in enemies)
  100.     {
  101.         targets.push(enemies[enemy] + " | " + Entity.GetName(enemies[enemy]));
  102.     }
  103.     UI.SetEnabled("[SR] Target Priority", enabled);
  104.     UI.AddDropdown("[SR] Target Priority", targets);
  105.     UI.AddDropdown("[SR] Weapon Config", ["Auto", "AWP", "Scout", "Rifle", "SMG", "Heavy Pistol", "Pistol", "Heavy"]);
  106.     UI.SetEnabled("[SR] Weapon Config", enabled);
  107.     for (wep in wepList)
  108.     {
  109.         weapon = wepList[wep];
  110.         UI.AddSliderInt(weapon + " FOV", 0, 80);
  111.         UI.AddSliderInt(weapon + " Min Damage", 0, 100);
  112.         UI.AddSliderFloat(weapon + " Max Inaccuracy", 0, 1200);
  113.         UI.SetEnabled(weapon + " Min Damage", enabled);
  114.         UI.SetEnabled(weapon + " Max Inaccuracy", enabled);
  115.         UI.SetEnabled(weapon + " FOV", enabled);
  116.     }
  117. }
  118.  
  119. function updateMenu()
  120. {
  121.     enabled = UI.GetValue("Enable Semi-Rage");
  122.     opts = fetchDropdown("[SR] Enabled Weapons");
  123.     conf = UI.GetString("Script items", "[SR] Weapon Config");
  124.     UI.SetEnabled("[SR] Enabled Weapons", enabled);
  125.     UI.SetEnabled("[SR] Weapon Config", enabled);
  126.     UI.SetEnabled("FOV Color", enabled);
  127.     targets = [];
  128.     for (enemy in enemies)
  129.     {
  130.         targets.push(enemies[enemy] + " | " + Entity.GetName(enemies[enemy]));
  131.     }
  132.     UI.SetValue("[SR] Target Priority", targets);
  133.     UI.SetEnabled("[SR] Target Priority", enabled);
  134.     for (wep in wepList)
  135.     {
  136.         weapon = wepList[wep];
  137.         UI.SetEnabled(weapon + " Min Damage", enabled && conf == weapon);
  138.         UI.SetEnabled(weapon + " Max Inaccuracy", enabled && conf == weapon);
  139.         UI.SetEnabled(weapon + " FOV", enabled && conf == weapon);
  140.     }
  141. }
  142.  
  143. function drawFOV()
  144. {
  145.     if (!UI.GetValue("Script items", "Enable Semi-Rage") || fetchDropdown("[SR] Enabled Weapons").indexOf(
  146.             weaponType()) == -1)
  147.         return;
  148.     weapon = weaponType();
  149.     radius = resizeFOV(weapon);
  150.     color = UI.GetColor("Script items", "FOV Color");
  151.     Render.Circle(width / 2, height / 2, radius, color);
  152. }
  153.  
  154. // adaptive fov based on cheat's FOV ty inhonia
  155.  
  156. function resizeFOV(weapon)
  157. {
  158.     width = Render.GetScreenSize()[0];
  159.     height = Render.GetScreenSize()[1];
  160.     mon_fov = (width / height / (4.0 / 3.0));
  161.     fov_real = rad2deg(2 * Math.atan(mon_fov * Math.tan(deg2Rad(UI.GetValue("Visual", "WORLD", "View",
  162.         "Field of view")) / 2)));
  163.     radius = Math.tan(deg2Rad(UI.GetValue("Script items", weapon + " FOV") / 2) / Math.tan(deg2Rad(fov_real) / 2)) *
  164.         width;
  165.     return radius;
  166. }
  167.  
  168. // actual aiming, shooting, and silent angles
  169.  
  170. function aim()
  171. {
  172.     if (!UI.IsHotkeyActive("Script items", "Semi-Rage Key") || fetchDropdown("[SR] Enabled Weapons").indexOf(
  173.             weaponType()) == -1 || UI.IsMenuOpen()) return;
  174.     if (Cheat.FrameStage() == 0)
  175.     {
  176.         if (Globals.Curtime() < Entity.GetProp(Entity.GetWeapon(Entity.GetLocalPlayer()), "CBaseCombatWeapon",
  177.                 "m_flNextPrimaryAttack"))
  178.         {
  179.             Cheat.ExecuteCommand("-attack");
  180.             return;
  181.         }
  182.         head = Entity.GetProp(local, "CBasePlayer", "m_vecOrigin");
  183.         offset = Entity.GetProp(local, "CBasePlayer", "m_vecViewOffset[2]");
  184.         eye_local = vector_add(head, [0, 0, offset[0]]);
  185.         prev_angle = Local.GetViewAngles();
  186.         if (Convar.GetFloat("sensitivity") > 0.1) sens = Convar.GetFloat("sensitivity");
  187.         angles = getAngles(eye_local, pos);
  188.         if (canShoot)
  189.         {
  190.             Convar.SetFloat("sensitivity", 0);
  191.             Cheat.ExecuteCommand("+attack");
  192.             Local.SetViewAngles(angles);
  193.             correct = true;
  194.             canShoot = false;
  195.             temp = -1;
  196.         }
  197.         else
  198.         {
  199.             temp = -1;
  200.         }
  201.     }
  202.     else
  203.     {
  204.         Convar.SetFloat("sensitivity", sens);
  205.         Cheat.ExecuteCommand("-attack");
  206.         if (!correct) return;
  207.         Local.SetViewAngles(prev_angle);
  208.         correct = !correct;
  209.         temp = -1;
  210.         pos = [];
  211.     }
  212. }
  213.  
  214. // targeting algorithm
  215. // based heavily on distance, priority does override, though
  216.  
  217. function calcEnemy()
  218. {
  219.     if (!Entity.IsAlive(local) || World.GetMapName() == "" || fetchDropdown("[SR] Enabled Weapons").indexOf(
  220.             weaponType()) == -1)
  221.         return;
  222.     head = Entity.GetProp(local, "CBasePlayer", "m_vecOrigin");
  223.     offset = Entity.GetProp(local, "CBasePlayer", "m_vecViewOffset[2]");
  224.     eye_local = vector_add(head, [0, 0, offset[0]]);
  225.     weapon = weaponType();
  226.     enemies = Entity.GetEnemies();
  227.     realPos = 0;
  228.     poses = [];
  229.     width = Render.GetScreenSize()[0];
  230.     height = Render.GetScreenSize()[1];
  231.     radius = resizeFOV(weapon);
  232.     damage = UI.GetValue("Script items", weapon + " Min Damage");
  233.     max_recoil = UI.GetValue("Script items", weapon + " Max Inaccuracy");
  234.     recoil = getRecoil();
  235.     priority = UI.GetValue("[SR] Target Priority");
  236.     priorityTarget = UI.GetString("[SR] Target Priority");
  237.     priorityTarget = priorityTarget.substring(0, 1);
  238.     priorityTarget = parseInt(priorityTarget, 10);
  239.     for (enemy in enemies)
  240.     {
  241.         if (!Entity.IsAlive(enemies[enemy]) ||
  242.             Entity.IsDormant(enemies[enemy]) || !Entity.IsValid(enemies[enemy]))
  243.         {
  244.             continue;
  245.         }
  246.         currPos = Render.WorldToScreen(Entity.GetHitboxPosition(enemies[enemy], 0));
  247.         currDistance = distance(currPos, [width / 2, height / 2]);
  248.         if (currDistance <= radius)
  249.         {
  250.             if (enemies[enemy] == priorityTarget)
  251.             {
  252.                 poses.push([enemies[enemy], 1]);
  253.                 break;
  254.             }
  255.             else
  256.             {
  257.                 poses.push([enemies[enemy], currDistance]);
  258.             }
  259.         }
  260.     }
  261.     if (poses[0] != [] && poses.length > 0)
  262.     {
  263.         poses.sort(function(a, b)
  264.         {
  265.             return a[1] - b[1];
  266.         });
  267.         if (poses[0][0] == undefined || poses[0][1] == undefined)
  268.             return canShoot = false;
  269.         trace_head = Trace.Bullet(local, eye_local, Entity.GetHitboxPosition(poses[0][0], 0));
  270.         trace_stomach = Trace.Bullet(local, eye_local, Entity.GetHitboxPosition(poses[0][0], 5));
  271.         if (recoil < max_recoil)
  272.         {
  273.             if (trace_head[1] > trace_stomach[1] && trace_head[1] > damage)
  274.             {
  275.                 canShoot = true;
  276.                 pos = Entity.GetHitboxPosition(poses[0][0], 0);
  277.             }
  278.             else if (trace_stomach[1] > damage)
  279.             {
  280.                 canShoot = true;
  281.                 pos = Entity.GetHitboxPosition(poses[0][0], 5);
  282.             }
  283.         }
  284.         else
  285.         {
  286.             canShoot = false;
  287.             pos = [];
  288.         }
  289.     }
  290. }
  291. // helper funcs
  292.  
  293. function distance(pos1, pos2)
  294. {
  295.     x = pos1[0];
  296.     y = pos1[1];
  297.     x1 = pos2[0];
  298.     y1 = pos2[1];
  299.     return Math.sqrt(((x - x1) * (x - x1)) + ((y - y1) * (y - y1)));
  300. }
  301.  
  302. function getRecoil()
  303. {
  304.     inacc = Local.GetInaccuracy();
  305.     spread = Local.GetSpread();
  306.     recoil = 501 * (inacc * (6000 * spread));
  307.     return recoil;
  308. }
  309.  
  310. function weaponType()
  311. {
  312.     var weapon = Entity.GetName(Entity.GetWeapon(local));
  313.     var weapons = {
  314.         "usp s": "Pistol",
  315.         "glock 18": "Pistol",
  316.         "p2000": "Pistol",
  317.         "dual berettas": "Pistol",
  318.         "r8 revolver": "Heavy Pistol",
  319.         "desert eagle": "Heavy Pistol",
  320.         "p250": "Pistol",
  321.         "tec 9": "Pistol",
  322.         "five seven": "Pistol",
  323.         "mp9": "SMG",
  324.         "mac 10": "SMG",
  325.         "ump 45": "SMG",
  326.         "ak 47": "Rifle",
  327.         "sg 553": "Rifle",
  328.         "aug": "Rifle",
  329.         "m4a1 s": "Rifle",
  330.         "m4a4": "Rifle",
  331.         "ssg 08": "Scout",
  332.         "awp": "AWP",
  333.         "g3sg1": "Auto",
  334.         "scar 20": "Auto",
  335.         "nova": "Heavy",
  336.         "xm1014": "Heavy",
  337.         "mag 7": "Heavy",
  338.         "m249": "Heavy",
  339.         "negev": "Heavy"
  340.     };
  341.     if (weapons[weapon] == undefined)
  342.         return "";
  343.     return weapons[weapon];
  344. }
  345.  
  346. // end other helper funcs
  347.  
  348. // start of rory's nice dropdown framework <3
  349.  
  350. function dictLength(dict)
  351. {
  352.     var count = 0;
  353.     for (_ in dict)
  354.     {
  355.         count++;
  356.     }
  357.     return count;
  358. }
  359. /**
  360.  * @param {string} name - The name displayed within the menu.
  361.  * @param {string[]} values - The options that will be shown in the dropdown.
  362.  * @param {boolean} multi - Allows you to have multiple selected options.
  363.  * @return {void}
  364.  **/
  365. function createDropdown(name, values, multi)
  366. {
  367.     UI[multi ? "AddMultiDropdown" : "AddDropdown"](name, values);
  368.     binlib[name] = {
  369.         "multi": multi,
  370.         "values":
  371.         {}
  372.     };
  373.     multi && values.reverse();
  374.     var i = 0;
  375.     for (value in values)
  376.     {
  377.         var index = multi ? (1 << (values.length - (i + 1))) : i;
  378.         binlib[name].values[index] = values[value];
  379.         i++;
  380.     }
  381. }
  382. /**
  383.  * @param {(string|undefined)} name - Fetches the selected option(s) of a specified dropdown, if undefined it will return all saved dropdowns' selected item(s).
  384.  * @return {(Array|Dictionary[])} - If name is undefined the format is {Dropdown1: ["Slecected1", "Selected2"], Dropdown2: ["Slecected1", "Selected2"]}, else it will return a single array of selected items.
  385.  **/
  386. function fetchDropdown(name)
  387. {
  388.     var selection = (name ? [] :
  389.     {})
  390.     var bin = UI.GetValue("Misc", name);
  391.     !name && function()
  392.     {
  393.         for (dropdown in binlib) selection[dropdown] = fetchDropdown(dropdown)
  394.     }();
  395.     if (name)
  396.     {
  397.         !binlib[name].multi && bin == 0 && selection.push(binlib[name].values[0]) && function()
  398.         {
  399.             return selection;
  400.         }();
  401.         for (var i = dictLength(binlib[name].values) - 1; i >= 0; i--)
  402.         {
  403.             if (!binlib[name].multi && i == 0) continue;
  404.             var index = binlib[name].multi ? (1 << i) : i;
  405.             if (bin - index >= 0)
  406.             {
  407.                 bin -= (index);
  408.                 selection.push(binlib[name].values[index]);
  409.             }
  410.         }
  411.     }
  412.     return selection;
  413. }
  414.  
  415. // end of rory's nice dropdown framework <3
  416.  
  417. Cheat.RegisterCallback("FrameStageNotify", "aim");
  418. Cheat.RegisterCallback("FrameStageNotify", "calcEnemy");
  419. Cheat.RegisterCallback("Draw", "drawFOV");
  420. Cheat.RegisterCallback("Draw", "updateMenu");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement