-
Автор темы
- #1
Посвящается всем школьникам, фанатеющим от скита.
P.S. код не мой и требует доработки.
SS: (держу в курсе, индикаторы LC и DT тоже есть)
P.S. код не мой и требует доработки.
SS: (держу в курсе, индикаторы LC и DT тоже есть)
JavaScript:
//germany indicators boss
var menu = {};
var menu_elements = {};
const menu_spacer = " ";
/**
* Concats two elements into an array without increasing the array length.
* Prevents the memory leak in 2.0.0 from happening
*
* @param a {array}
* @param b {any}
*/
menu.concat = function(a, b)
{
// Creates a new array.
var arr = [];
// Push all items from the array 'a' into our array.
for (var c in a)
{
arr.push(a[c]);
}
// Push the value 'b' into our array.
arr.push(b);
// Return the new array.
return arr;
}
/**
* Creates a new menu label
*
* @param label {string}
*/
menu.label = function(label)
{
// Creates the label
UI.AddLabel(label);
};
/**
* Creates a new menu element
*
* @param func {function}
* @param name {string}
* @param label {string},
* @param properties {array}
*/
menu.new = function(func, name, label, properties, initial_value)
{
// Fix values
properties = properties || [];
initial_value = initial_value || undefined;
// Get properties
const final_name = name + menu_spacer + label;
var final_props = [final_name];
const element_info_t = {
path: ["Misc", "JAVASCRIPT", "Script items", final_name],
cache: initial_value,
func: func
};
// If our properties aren't null, then pack them together.
if (properties != null)
{
for (var i = 0; i < properties.length; i++)
{
final_props.push(properties[i]);
}
}
// Create our menu element and return properties
func.apply(null, final_props);
// Initialize our menu element if it has an initializer.
if (initial_value)
{
switch (func)
{
case UI.AddColorPicker:
UI.SetColor.apply(null, this.concat(element_info_t.path, initial_value));
break;
case UI.AddHotkey:
break;
default:
UI.SetValue.apply(this, this.concat(element_info_t.path, initial_value));
break;
}
}
menu_elements[label] = element_info_t;
return element_info_t;
};
/**
* Creates a new menu reference
*
* @param path {array}
*/
menu.reference = function(path, func)
{
return {
path: path,
func: func
};
};
/**
* Gets the value of a menu element
*
* @param elem {array}
* @return {*}
*/
menu.get = function(elem)
{
// If the element doesn't exist
if (!(elem.path))
throw new Error("[Menu] This element doesn't exist!");
// Returns the element's value
switch (elem.func)
{
case UI.AddColorPicker:
return UI.GetColor.apply(null, elem.path);
case UI.AddHotkey:
return UI.IsHotkeyActive.apply(null, elem.path);
default:
return UI.GetValue.apply(null, elem.path);
}
};
/**
* Sets the value of a menu element
*
* @param elem {array}
* @param value {*}
*/
menu.set = function(elem, value)
{
// If the label doesn't exist
if (!(elem.path))
throw new Error("[Menu] This element doesn't exist!");
// Set the element's value
switch (elem.func)
{
case UI.AddColorPicker:
UI.SetColor.apply(null, this.concat(elem.path, value));
break;
case UI.AddHotkey:
if (menu.get(elem) !== value)
UI.ToggleHotkey.apply(null, elem.path);
break;
default:
UI.SetValue.apply(null, this.concat(elem.path, value));
break;
}
};
/**
* Changes the visibility of a menu elements
*
* @param elem {array}
* @param visible {boolean}
*/
menu.visibility = function(elem, visible)
{
// If the label doesn't exist
if (!(elem.path))
throw new Error("[Menu] This element doesn't exist!");
// Change the element's visibility
UI.SetEnabled.apply(null, this.concat(elem.path, visible));
};
/**
* Adds an event to a menu element which is triggered everytime this element's value is changed.
*
* @param elem {array}
* @param func {function}
*/
menu.add_event = function(elem, func)
{
if (!elem.path)
throw new Error("[Menu] This element doesn't exist!");
if (!elem.func)
throw new Errror("[Menu] This element does not have a valid type. Please, specify one.");
elem.callback = func;
}
/**
* Handles the menu elements' events. Call this inside a Draw or FSN callback.
*/
menu.handle_events = function()
{
for (var label in menu_elements)
{
const elem = menu_elements[label];
if (!elem.path || !elem.callback)
continue;
const value = menu.get(elem);
if (elem.cache === undefined)
elem.cache = value;
if (elem.cache !== value)
{
elem.callback.apply(null, [elem]);
elem.cache = value;
}
}
}
/**
* @brief Normalizes an yaw angle.
* @param angle {number}
* @returns {number}
*/
function normalize_yaw(angle)
{
var adjusted_yaw = angle;
if (adjusted_yaw < -180)
adjusted_yaw += 360;
if (adjusted_yaw > 180)
adjusted_yaw -= 360;
return adjusted_yaw;
}
Render.Arc = function(x, y, r1, r2, s, d, col)
{
for (var i = s; i < s + d; i++)
{
const rad = i * Math.PI / 180;
Render.Line(x + Math.cos(rad) * r1, y + Math.sin(rad) * r1, x + Math.cos(rad) * r2, y + Math.sin(rad) * r2, col);
}
}
//endregion
//region menu
const voffset = menu.new(UI.AddSliderInt, "| Indicators vertical offset", "", [0, 1000]);
const ref_antiaim_enabled = menu.reference(["Anti-Aim", "Fake angles", "Enabled"]);
const ref_fakelag_enabled = menu.reference(["Anti-Aim", "Fake-Lag", "Enabled"]);
const ref_doubletap = menu.reference(["Rage", "GENERAL", "Exploits", "Doubletap"]);
const ref_doubletap_hk = menu.reference(["Rage", "GENERAL", "Exploits", "Doubletap"], UI.AddHotkey);
const ref_hideshots_hk = menu.reference(["Rage", "GENERAL", "Exploits", "Hide shots"], UI.AddHotkey);
//endregion
//region locals
var last_time = 0;
var planted = false;
var bombsite = -1;
var offset = 0;
const modules = [
{
label: "DSY",
condition: function() {
return menu.get(ref_antiaim_enabled);
},
colors: {
dormant: [186, 0, 16, 225],
active: [154, 205, 50, 255]
},
logic: function() {
const self = modules[0];
const real = Local.GetRealYaw(), fake = Local.GetFakeYaw();
const delta = Math.abs(normalize_yaw(real % 360 - fake % 360)) / 2;
return delta / 60;
},
extra: function(x, y, color) {
const real = Local.GetRealYaw(), fake = Local.GetFakeYaw();
const delta = Math.abs(normalize_yaw(real % 360 - fake % 360)) / 2;
const frac = delta / 60;
Render.Arc(x+5, y, 6, 13, 0, 360, [10, 10, 10, 60]);
Render.Arc(x+5, y, 7, 11, 0, 360 * frac, color);
}
},
{
label: "LC",
condition: function() {
const me = Entity.GetLocalPlayer();
const on_ground = Entity.GetProp(me, "CBasePlayer", "m_fFlags") & 1;
return menu.get(ref_fakelag_enabled) & (!on_ground || Input.IsKeyPressed(0x20)) & !menu.get(ref_doubletap_hk) & !menu.get(ref_hideshots_hk);
},
colors: {
dormant: [186, 0, 16, 225],
active: [163, 232, 44, 255]
},
logic: function() {
const self = modules[1];
const me = Entity.GetLocalPlayer();
const vec = Entity.GetProp(me, "CBasePlayer", "m_vecVelocity[0]");
const vel = Math.sqrt(vec[0] ** 2 + vec[1] ** 2 + vec[2] ** 2);
if (vel > 370)
return 1;
return 0;
}
},
{
label: "DT",
condition: function() {
return menu.get(ref_doubletap) & menu.get(ref_doubletap_hk);
},
colors: {
dormant: [235, 235, 235, 255],
active: [235, 235, 235, 255]
},
logic: function() {
const self = modules[2];
const charge = Exploit.GetCharge();
self.colors.active = charge === 1 ? [235, 235, 235, 255] : [186, 0, 16, 225];
return 1;
}
},
{
label: "Bombsite A",
condition: function() {
return bombsite % 2 == 1;
},
colors: {
dormant: [240, 235, 60, 255],
active: [240, 235, 60, 255]
},
logic: function() {
return 1;
},
extra: function(x, y) {
const self = modules[3];
const frac = (Globals.Curtime() - last_time) / 3.125;
Render.Arc(x, y, 6, 11, 0, 360, [10, 10, 10, 25]);
Render.Arc(x, y, 7, 10, -90, 360 * frac, [232, 232, 232, 255]);
}
},
{
label: "Bombsite B",
condition: function() {
return bombsite % 2 == 0;
},
colors: {
dormant: [240, 235, 60, 255],
active: [240, 235, 60, 255]
},
logic: function() {
return 1;
},
extra: function(x, y, color) {
const self = modules[4];
const frac = (Globals.Curtime() - last_time) / 3.125;
Render.Arc(x, y, 6, 11, 0, 360, [10, 10, 10, 25]);
Render.Arc(x, y, 7, 10, -90, 360 * frac, [232, 232, 232, 255]);
}
},
{
label: "",
condition: function() {
return planted;
},
colors: {
dormant: [235, 235, 235, 255],
active: [235, 235, 235, 255]
},
logic: function() {
const self = modules[5];
var c4 = Entity.GetEntitiesByClassID(128)[0];
if (!c4)
return 0;
var timer = (Entity.GetProp(c4, "CPlantedC4", "m_flC4Blow") - Globals.Curtime());
return 1;
}
},
{
label: "",
condition: function() {
return planted;
},
colors: {
dormant: [135, 15, 15, 255],
active: [195, 255, 0, 255]
},
logic: function() {
const self = modules[6];
const me = Entity.GetLocalPlayer();
if (!me || !Entity.IsAlive(me))
return 0;
const c4 = Entity.GetEntitiesByClassID(128)[0];
if (!c4)
return 0;
const armor = Entity.GetProp(me, "CCSPlayerResource", "m_iArmor");
const health = Entity.GetProp(me, "CBasePlayer", "m_iHealth");
const origin = Entity.GetRenderOrigin(c4);
const my_origin = Entity.GetRenderOrigin(me);
const distance = Math.sqrt((origin[0] - my_origin[0]) ** 2 + (origin[1] - my_origin[1]) ** 2 + (origin[2] - my_origin[2]) ** 2);
// Ultranite
const a = 450.7;
const b = 75.68;
const c = 789.2;
const d = (distance - b) / c;
var damage = a * Math.exp(-d * d);
if (armor > 0) {
var newDmg = damage * 0.5;
var armorDmg = (damage - newDmg) * 0.5;
if (armorDmg > armor) {
armor = armor * (1 / .5);
newDmg = damage - armorDmg;
}
damage = Math.round(newDmg);
}
return Math.max(1 -damage / health, 0);
}
}
];
//endregion
//region functions
function draw_timer()
{
if (!planted)
return;
const me = Entity.GetLocalPlayer();
if (!me)
return;
if (!Entity.IsAlive(me))
{
if (Entity.GetProp(me, "CBasePlayer", "m_iObserverMode") < 4)
return;
me = Entity.GetProp(me, "CBasePlayer", "m_hObserverTarget");
}
var c4 = Entity.GetEntitiesByClassID(128)[0];
if (!c4)
return;
const y = Render.GetScreenSize()[1];
const color = [235, 235, 235, 255];
var bombsite_label = bombsite % 2 == 0 ? "" : "";
var timer = (Entity.GetProp(c4, "CPlantedC4", "m_flC4Blow") - Globals.Curtime());
Render.FilledRect(0, y - bar_length, 10, bar_length, color);
}
function draw_indicators()
{
const offset_y = menu.get(voffset);
const y = Render.GetScreenSize()[1] - offset_y;
const drawn = 0;
for (var i = 0; i < modules.length; i++)
{
const mod = modules[i];
if (!mod.condition()) continue;
const result = mod.logic();
const label_width = Render.TextSize(mod.label, 4)[0];
const color = [
mod.colors.dormant[0] + (mod.colors.active[0] - mod.colors.dormant[0]) * result,
mod.colors.dormant[1] + (mod.colors.active[1] - mod.colors.dormant[1]) * result,
mod.colors.dormant[2] + (mod.colors.active[2] - mod.colors.dormant[2]) * result,
255
];
Render.GradientRect(15 + offset, y - 130 - 55 * drawn, label_width + 15, 45, 1, [10, 10, 10, 50], [10, 10, 10, 0]);
Render.String(25 + offset, y - 125 - 55 * drawn, 0, mod.label, color, 4);
if (mod.extra)
mod.extra(40 + offset + label_width, y - 106 - 55 * drawn, color);
drawn++;
}
}
function on_draw() {
const me = Entity.GetLocalPlayer();
if (!me || !Entity.IsAlive(me))
return;
draw_indicators();
draw_timer();
}
function on_bomb_beginplant()
{
bombsite = Event.GetInt("site");
last_time = Globals.Curtime();
}
function on_bomb_planted()
{
planted = true;
bombsite = -1;
offset = 15;
}
function on_bomb_abortplant()
{
bombsite = -1;
}
function on_bomb_exploded()
{
planted = false;
offset = 0;
}
function on_round_prestart()
{
planted = false;
offset = 0;
bombsite = -1;
last_time = 0;
}
function on_player_connect()
{
var c4 = Entity.GetEntitiesByClassID(128)[0];
last_time = 0;
if (!c4)
{
planted = false;
offset = 0;
bombsite = -1;
return;
}
planted = true;
offset = 15;
bombsite = Entity.GetProp(c4, "CPlantedC4", "m_nBombSite");
}
Cheat.RegisterCallback("Draw", "on_draw");
Cheat.RegisterCallback("bomb_beginplant", "on_bomb_beginplant");
Cheat.RegisterCallback("bomb_planted", "on_bomb_planted");
Cheat.RegisterCallback("bomb_abortplant", "on_bomb_abortplant");
Cheat.RegisterCallback("bomb_exploded", "on_bomb_exploded");
Cheat.RegisterCallback("round_prestart", "on_round_prestart");
Cheat.RegisterCallback("player_connect_full", "on_player_connect");
//endregion
Последнее редактирование: