Guest User

Untitled

a guest
Aug 27th, 2021
1,026
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 104.02 KB | None | 0 0
  1. -- discord.gg/godeless
  2. -- derjawin#0001
  3.  
  4. local username = cheat.GetCheatUserName()
  5.  
  6. menu.Text("| Main", "Hello " .. username .. "!")
  7. menu.Text("| Main", "Welcome to Grenade Helper by derjawin")
  8. menu.Text("| Main", "Join my discord discord.gg/godeless")
  9. menu.Text("| Main", "Developer : derjawin#0001")
  10.  
  11. cheat.AddNotify("Grenade Helper", "Welcome, " .. username .. " ")
  12.  
  13. ffi.cdef[[
  14. void* CreateFileA(
  15. const char* lpFileName,
  16. unsigned long dwDesiredAccess,
  17. unsigned long dwShareMode,
  18. unsigned long lpSecurityAttributes,
  19. unsigned long dwCreationDisposition,
  20. unsigned long dwFlagsAndAttributes,
  21. void* hTemplateFile
  22. );
  23. bool ReadFile(
  24. void* hFile,
  25. char* lpBuffer,
  26. unsigned long nNumberOfBytesToRead,
  27. unsigned long* lpNumberOfBytesRead,
  28. int lpOverlapped
  29. );
  30. bool WriteFile(
  31. void* hFile,
  32. char* lpBuffer,
  33. unsigned long nNumberOfBytesToWrite,
  34. unsigned long* lpNumberOfBytesWritten,
  35. void* lpOverlapped
  36. );
  37.  
  38. unsigned long GetFileSize(
  39. void* hFile,
  40. unsigned long* lpFileSizeHigh
  41. );
  42. bool CreateDirectoryA(
  43. const char* lpPathName,
  44. void* lpSecurityAttributes
  45. );
  46. void* CloseHandle(void *hFile);
  47. typedef int(__fastcall* clantag_t)(const char*, const char*);
  48.  
  49. typedef struct _OVERLAPPED {
  50. unsigned long* Internal;
  51. unsigned long* InternalHigh;
  52. union {
  53. struct {
  54. unsigned long Offset;
  55. unsigned long OffsetHigh;
  56. } DUMMYSTRUCTNAME;
  57. void* Pointer;
  58. } DUMMYUNIONNAME;
  59. void* hEvent;
  60. } OVERLAPPED, *LPOVERLAPPED;
  61.  
  62. typedef struct _class
  63. {
  64. void** this;
  65. }aclass;
  66. ]]
  67. ffi.C.CreateDirectoryA("nl\\GrenadeHelper", nil)
  68. ffi.C.CreateDirectoryA("nl\\MovementHelper", nil)
  69.  
  70. local menu_elements =
  71. {
  72. autostrafe = g_Config:FindVar("Miscellaneous", "Main", "Movement", "Auto Strafe"),
  73. autostrafe_smooth = g_Config:FindVar("Miscellaneous", "Main", "Movement", "Smoothing"),
  74. thirdpeson = g_Config:FindVar("Visuals", "View", "Thirdperson", "Enable Thirdperson"),
  75.  
  76. fake_angle = g_Config:FindVar("Aimbot", "Anti Aim", "Fake Angle", "Enable Fake Angle"),
  77. double_tap = g_Config:FindVar("Aimbot", "Ragebot", "Exploits", "Double Tap"),
  78. fakelag = g_Config:FindVar("Aimbot", "Anti Aim", "Fake Lag", "Enable Fake Lag"),
  79. }
  80. local lua_elements =
  81. {
  82. nade_helper = menu.Switch("| Grenade Helper", "Enable Grenade Helper", false),
  83. nade_helper_nades = menu.MultiCombo("| Grenade Helper", "Nades", {"HeGrenade", "Molotov", "Smoke", "FlashBang"}, 0),
  84. nade_helper_types = menu.MultiCombo("| Grenade Helper", "Presets", {"Default", "Custom: Alpha", "Custom: Bravo", "Custom: Charlie", "Custom: Delta", "Custom: Echo", "Custom: Foxtrot", "Custom: Golf", "Custom: Hotel", "Custom: India", "Custom: Juliet"}, 0),
  85. nade_helper_fov = menu.SliderInt("| Grenade Helper", "FOV", 15, 1, 160),
  86.  
  87. create_nade = menu.Button("| Grenade Helper Redactor", "Create New Locations"),
  88.  
  89. pitch_slider = menu.SliderFloat("| Grenade Helper Redactor", "Pitch", 0, -89, 89),
  90. yaw_slider = menu.SliderFloat("| Grenade Helper Redactor", "Yaw", 0, -180, 180),
  91. throw_strengh = menu.SliderFloat("| Grenade Helper Redactor", "Throw Strength", 100, 0, 100),
  92.  
  93. properties = menu.MultiCombo("| Grenade Helper Redactor", "Properies", {"Run", "Jump", "Duck"}, 0),
  94.  
  95. run_duration = menu.SliderInt("| Grenade Helper Redactor", "Run Duration", 0, 0, 64),
  96. run_velocity = menu.SliderFloat("| Grenade Helper Redactor", "Run Velocity", 0, 0, 450),
  97. run_direction = menu.Combo("| Grenade Helper Redactor", "Run Direction", {"Forward", "Backward", "Left", "Right"}, 0),
  98. extend_forward_strenght = menu.Switch("| Grenade Helper Redactor", "Extern Forward Strength", false),
  99. backup_direction = menu.Combo("| Grenade Helper Redactor", "Backup Direction", {"None", "Forward", "Backward", "Left", "Right"}, 0),
  100. backup_strafe_duration = menu.SliderInt("| Grenade Helper Redactor", "Backup Duration", 1, 1, 64),
  101.  
  102. jump_duration = menu.SliderInt("| Grenade Helper Redactor", "Jump Delay", 0, 0, 64),
  103. jump_thresthold = menu.SliderInt("| Grenade Helper Redactor", "Jump Strength", 0, 0, 6),
  104.  
  105. nade_name = menu.TextBox("| Grenade Helper Redactor", "Position Name", 64, ""),
  106. nade_description = menu.TextBox("| Grenade Helper Redactor", "Description", 64, ""),
  107.  
  108. nade_teleport = menu.Button("| Grenade Helper Redactor", "Teleport to Location"),
  109. nade_update_pos_ang = menu.Button("| Grenade Helper Redactor", "Set new Location"),
  110.  
  111. save_nade_cfg = menu.Combo("| Grenade Helper Redactor", "Save At", {"Custom: Alpha", "Custom: Bravo", "Custom: Charlie", "Custom: Delta", "Custom: Echo", "Custom: Foxtrot", "Custom: Golf", "Custom: Hotel", "Custom: India", "Custom: Juliet"}, 0),
  112. save_nade = menu.Button("| Grenade Helper Redactor", "Confirm"),
  113. remove_nade = menu.Button("| Grenade Helper Redactor", "Decline"),
  114.  
  115. nade_helper_theme = menu.Combo("| Main", "Theme", {"Dark Blue", "Light", "Dark"}, 0),
  116.  
  117.  
  118.  
  119. user_name = cheat.GetCheatUserName(),
  120. screensize = g_EngineClient:GetScreenSize(),
  121. }
  122.  
  123. local ragebot_helpers =
  124. {
  125. DisableTargets = function(self)
  126. for i = 1, 64 do
  127. ragebot.IgnoreTarget(i)
  128. end
  129. end,
  130.  
  131. ForceHead = function(self, index)
  132. for i = 1, 64 do
  133. if(i ~= index) then
  134. ragebot.IgnoreTarget(i)
  135. else
  136. for j = 2, 18 do
  137. ragebot.EnableHitbox(i, j, false)
  138. end
  139. end
  140. end
  141. end,
  142. }
  143. local math_helpers =
  144. {
  145. normalizeangles = function(self, ang)
  146. if(ang.pitch > 180.0) then ang.pitch = ang.pitch - 360.0 end
  147. if(ang.yaw > 180.0) then ang.yaw = ang.yaw - 360.0 end
  148. return ang
  149. end,
  150.  
  151. normalizefloat = function(self, ang)
  152. if(ang > 180.0) then ang = ang - 360.0 end
  153. if(ang < -180.0) then ang = ang + 360.0 end
  154. return ang
  155. end,
  156.  
  157. calcangle = function(self, src, dst)
  158. local vecdelta = Vector.new(dst.x - src.x, dst.y - src.y, dst.z - src.z)
  159. local angles = QAngle.new(math.atan2(-vecdelta.z, vecdelta:Length2D()) * 180.0 / math.pi, (math.atan2(vecdelta.y, vecdelta.x) * 180.0 / math.pi), 0.0)
  160. return angles
  161. end,
  162.  
  163. lerp = function(self, start, vend, time)
  164. return start + (vend - start) * time
  165. end,
  166.  
  167. clamp = function(self, val, min, max)
  168. if(val > max) then
  169. val = max
  170. elseif(val < min) then
  171. val = min
  172. end
  173. return val
  174. end,
  175.  
  176. pointinscreen = function(self, point)
  177. if(point.x > 0 and point.x < lua_elements.screensize.x and point.y > 0 and point.y < lua_elements.screensize.x) then
  178. return true
  179. else
  180. return false
  181. end
  182. end,
  183.  
  184. boxinscreen = function(self, max, min)
  185. if(min.x > 0 and min.x < lua_elements.screensize.x and min.y > 0 and max.y < lua_elements.screensize.x and max.x > 0 and max.x < lua_elements.screensize.x and max.y > 0 and max.y < lua_elements.screensize.x) then
  186. return true
  187. else
  188. return false
  189. end
  190. end,
  191.  
  192. TIME_TO_TICKS = function(self, time)
  193. return math.floor(time / g_GlobalVars.interval_per_tick + 0.5)
  194. end,
  195.  
  196. TICKS_TO_TIME = function(self, tick)
  197. return tick * g_GlobalVars.interval_per_tick
  198. end,
  199. }
  200. local target_selection =
  201. {
  202. distance = function(self, localplayer)
  203. local origin = localplayer:GetProp("DT_BaseEntity", "m_vecOrigin")
  204. local bestdistance = 8192.0
  205. local bestplayer = nil
  206. for i = 1, 64 do
  207. local player = g_EntityList:GetClientEntity(i)
  208. if(player == nil) then goto continue end
  209. player = player:GetPlayer()
  210. if(player:IsTeamMate() == true or player:m_lifeState() == 0 or player:IsDormant() == true) then goto continue end
  211.  
  212. local distance = origin:DistTo(player:GetProp("DT_BaseEntity", "m_vecOrigin"))
  213. if(distance < bestdistance) then
  214. bestdistance = distance
  215. bestplayer = player
  216. end
  217. ::continue::
  218. end
  219. return bestplayer
  220. end,
  221.  
  222. fov = function(self)
  223.  
  224. end,
  225. }
  226. local movement_helper =
  227. {
  228. --icon = g_Render:LoadImageFromFile("nl/image.png", Vector2.new(32, 32)),
  229. in_run = false,
  230. closest_spot = nil,
  231. render_stuff = {},
  232. cmd_number = 1,
  233. init_size = Vector2.new(36, 36),
  234. --movement_list = nil
  235. on_draw = function(self)
  236. local localplayer = g_EntityList:GetClientEntity(g_EngineClient:GetLocalPlayer())
  237. if(localplayer == nil) then return end
  238. localplayer = localplayer:GetPlayer()
  239. local weapon = localplayer:GetActiveWeapon()
  240. if(weapon == nil) then return end
  241. local isknife = weapon:IsKnife()
  242. local map = g_EngineClient:GetLevelNameShort()
  243. local origin = localplayer:GetProp("DT_BaseEntity", "m_vecOrigin")
  244. local eyepos = localplayer:GetEyePosition()
  245. local movement_size = g_Render:CalcTextSize("movement", 16)
  246. local bestdistance = 200.0
  247. if(self.in_run == false) then self.closest_spot = nil end
  248. for startname, startspot in pairs(self.movement_list) do
  249. if(startspot.map == map and isknife == true) then
  250. local distance = #(startspot.pos - origin)
  251. if(distance < bestdistance) then
  252. distance = bestdistance
  253. if(self.in_run == false) then self.closest_spot = startspot end
  254. end
  255. end
  256. end
  257. for startname, startspot in pairs(self.movement_list) do
  258. if(startspot.map == map) then
  259. if(self.render_stuff[startname] == nil) then self.render_stuff[startname] = {} end
  260. if(self.render_stuff[startname].global_alpha == nil) then self.render_stuff[startname].global_alpha = 0.0 end
  261. if(self.render_stuff[startname].box_length == nil) then self.render_stuff[startname].box_length = self.init_size.x end
  262. if(self.render_stuff[startname].box_height == nil) then self.render_stuff[startname].box_height = self.init_size.y end
  263. if(self.render_stuff[startname].text_alpha == nil) then self.render_stuff[startname].text_alpha = 0.0 end
  264. local distance = #(startspot.pos - origin)
  265. local trace = EngineTrace.TraceRay(eyepos, startspot.pos, localplayer, 0x200400B)
  266. local name_size = g_Render:CalcTextSize(startspot.name, 15)
  267. local length = math.max(name_size.x, movement_size.x) + self.init_size.x + 8
  268. if(trace.fraction > 0.96) then
  269. self.render_stuff[startname].global_alpha = 1.0
  270. if(distance <= 250.0) then
  271. self.render_stuff[startname].box_length = math_helpers:lerp(self.render_stuff[startname].box_length, length, g_GlobalVars.frametime * 15.0)
  272. if(math.abs(length - self.render_stuff[startname].box_length) < 1) then
  273. self.render_stuff[startname].text_alpha = math_helpers:lerp(self.render_stuff[startname].text_alpha, 1.0, g_GlobalVars.frametime * 15.0)
  274. end
  275. else
  276. self.render_stuff[startname].text_alpha = math_helpers:lerp(self.render_stuff[startname].text_alpha, 0.0, g_GlobalVars.frametime * 15.0)
  277. if(self.render_stuff[startname].text_alpha < 0.01) then
  278. self.render_stuff[startname].box_length = math_helpers:lerp(self.render_stuff[startname].box_length, self.init_size.x, g_GlobalVars.frametime * 15.0)
  279. end
  280. end
  281. else
  282. self.render_stuff[startname].text_alpha = math_helpers:lerp(self.render_stuff[startname].text_alpha, 0.0, g_GlobalVars.frametime * 15.0)
  283. if(self.render_stuff[startname].text_alpha < 0.01) then
  284. self.render_stuff[startname].box_length = math_helpers:lerp(self.render_stuff[startname].box_length, self.init_size.x, g_GlobalVars.frametime * 15.0)
  285. if(math.abs(self.init_size.x - self.render_stuff[startname].box_length) < 1) then
  286. self.render_stuff[startname].global_alpha = 0.0
  287. end
  288. end
  289. end
  290. if(isknife == false or self.render_stuff[startname].global_alpha == 0.0) then goto continue end
  291. local screenpos = g_Render:ScreenPosition(Vector.new(startspot.pos.x, startspot.pos.y, startspot.pos.z + 16.0))
  292.  
  293. g_Render:BoxFilled(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2, screenpos.y - self.render_stuff[startname].box_height / 2), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2, screenpos.y + self.render_stuff[startname].box_height / 2), Color.new(0.1, 0.1, 0.1, self.render_stuff[startname].global_alpha))
  294. g_Render:Image(self.icon, Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 + 2, screenpos.y - self.render_stuff[startname].box_height / 2 + 2), Vector2.new(32, 32))
  295. g_Render:Text("Movement", Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 + self.init_size.x + 3, screenpos.y - self.render_stuff[startname].box_height / 2 + 4), Color.new(1.0, 1.0, 1.0, self.render_stuff[startname].text_alpha), 16)
  296. g_Render:Text(startspot.name, Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 + self.init_size.x + 4, screenpos.y + self.render_stuff[startname].box_height / 2 - 4 - name_size.y), Color.new(1.0, 1.0, 1.0, self.render_stuff[startname].text_alpha), 15)
  297. ::continue::
  298. end
  299. end
  300. end,
  301.  
  302. on_prediction = function(self, cmd)
  303. local localplayer = g_EntityList:GetClientEntity(g_EngineClient:GetLocalPlayer())
  304. if(localplayer == nil or self.closest_spot == nil) then return end
  305. localplayer = localplayer:GetPlayer()
  306. local origin = localplayer:GetProp("DT_BaseEntity", "m_vecOrigin")
  307. local vecdelta = (self.closest_spot.pos - origin)
  308. local distance = #vecdelta
  309. local v1 = bit.band(cmd.buttons, 8) == 8
  310. local v2 = bit.band(cmd.buttons, 16) == 16
  311. local v3 = bit.band(cmd.buttons, 512) == 512
  312. local v4 = bit.band(cmd.buttons, 1024) == 1024
  313. local in_move = (v1 or v2 or v3 or v4)
  314. if(in_move == false and self.in_run == false) then
  315. if(distance > 0.01) then
  316. local viewangles = g_EngineClient:GetViewAngles()
  317. local direction = cheat.VectorToAngle(vecdelta)
  318. direction.yaw = viewangles.yaw - direction.yaw
  319. local move = cheat.AngleToForward(direction)
  320. cmd.forwardmove = move.x * (450.0 * (math.exp(math_helpers:clamp(distance, 0.0, 5.0) - 5.0)) - 2.0)
  321. cmd.sidemove = move.y * (450.0 * (math.exp(math_helpers:clamp(distance, 0.0, 5.0) - 5.0)) - 2.0)
  322. else
  323. self.in_run = true
  324. self.cmd_number = 1
  325. end
  326. end
  327. end,
  328.  
  329. on_createmove = function(self, cmd)
  330. if(self.in_run == true) then
  331. cmd.buttons = self.closest_spot[self.cmd_number].bb
  332. cmd.forwardmove = self.closest_spot[self.cmd_number].fwd
  333. cmd.sidemove = self.closest_spot[self.cmd_number].sd
  334. cmd.viewangles.pitch = self.closest_spot[self.cmd_number].pitch
  335. cmd.viewangles.yaw = self.closest_spot[self.cmd_number].yaw
  336. cmd.weaponselect = self.closest_spot[self.cmd_number].wpnslt
  337. self.cmd_number = self.cmd_number + 1
  338. if(self.cmd_number > #self.closest_spot) then
  339. self.in_run = false
  340. end
  341. end
  342. end,
  343. }
  344. local grenade_helper =
  345. {
  346. maps = loadstring("return {" .. Http.Get("https://raw.githubusercontent.com/njkwe/hyinya/main/beta") .. "}")(),
  347. custom_maps = {},
  348. nade_type =
  349. {
  350. ["44"] = "HeGrenade",
  351. ["46"] = "Molotov",
  352. ["45"] = "Smoke",
  353. ["43"] = "FlashBang",
  354. },
  355. menu_nades =
  356. {
  357. ["44"] = 1,
  358. ["46"] = 2,
  359. ["45"] = 3,
  360. ["43"] = 4,
  361. },
  362. theme_colors =
  363. {
  364. [0] = --dark blue
  365. {
  366. head_r = 0.03,
  367. head_g = 0.03,
  368. head_b = 0.05,
  369. body_r = 0.05,
  370. body_g = 0.07,
  371. body_b = 0.12,
  372. target_r = 0.03,
  373. target_g = 0.03,
  374. target_b = 0.05,
  375. gradient_line_r = 0.027,
  376. gradient_line_g = 0.2,
  377. gradient_line_b = 0.3,
  378. text_color_r = 1,
  379. text_color_g = 1,
  380. text_color_b = 1,
  381. },
  382. [1] = --light
  383. {
  384. head_r = 1,
  385. head_g = 1,
  386. head_b = 1,
  387. body_r = 0.8,
  388. body_g = 0.8,
  389. body_b = 0.8,
  390. target_r = 1,
  391. target_g = 1,
  392. target_b = 1,
  393. gradient_line_r = 0.34,
  394. gradient_line_g = 0.32,
  395. gradient_line_b = 0.3,
  396. text_color_r = 0,
  397. text_color_g = 0,
  398. text_color_b = 0,
  399. },
  400. [2] = --dark
  401. {
  402. head_r = 0.03,
  403. head_g = 0.03,
  404. head_b = 0.03,
  405. body_r = 0.06,
  406. body_g = 0.06,
  407. body_b = 0.06,
  408. target_r = 0.03,
  409. target_g = 0.03,
  410. target_b = 0.03,
  411. gradient_line_r = 0.24,
  412. gradient_line_g = 0.23,
  413. gradient_line_b = 0.23,
  414. text_color_r = 1,
  415. text_color_g = 1,
  416. text_color_b = 1,
  417. },
  418. },
  419. config_names =
  420. {
  421. "Alpha",
  422. "Bravo",
  423. "Charlie",
  424. "Delta",
  425. "Echo",
  426. "Foxtrot",
  427. "Golf",
  428. "Hotel",
  429. "India",
  430. "Juliet",
  431. },
  432. movedirections =
  433. {
  434. [0] = 0,
  435. [1] = 180,
  436. [2] = 90,
  437. [3] = -90,
  438. },
  439. closest_nade = nil,
  440. closest_nade_position = Vector.new(0, 0, 0),
  441. render_stuff = {},
  442. should_throw = false,
  443.  
  444. run_tick = 0,
  445. jump_tick = 0,
  446.  
  447. old_autostrafe_smooth = 0,
  448. old_autostrafe = false,
  449. doubletap_call = true,
  450. old_doubletap = false,
  451.  
  452. create_nade_map = "",
  453. create_nade_weaponid = "",
  454.  
  455. init_ang = QAngle.new(0, 0, 0),
  456. init_pos = Vector.new(0, 0, 0),
  457.  
  458. load_time = utils.UnixTime(),
  459.  
  460. strafe_backup_direction = 0,
  461. strafe_backup_button = 0,
  462. strafe_backup_tick = 0,
  463. strafe_backup_duration = 0,
  464.  
  465. force_forward = false,
  466. force_forward_yaw_direction = 0.0,
  467.  
  468. extend_forward = function(self, cmd)
  469. if(self.force_forward == true) then
  470. local localplayer = g_EntityList:GetClientEntity(g_EngineClient:GetLocalPlayer())
  471. if(localplayer == nil) then return end
  472. localplayer = localplayer:GetPlayer()
  473. local weapon = localplayer:GetActiveWeapon()
  474. if(weapon == nil) then return end
  475. if(weapon:IsGrenade() == false) then return end
  476. local throwtime = weapon:GetProp("DT_BaseCSGrenade", "m_fThrowTime")
  477. local curtime = localplayer:GetProp("DT_BasePlayer", "m_nTickBase") * g_GlobalVars.interval_per_tick
  478. local direction = 0
  479. if(self.closest_nade.movedirection == 2) then
  480. direction = -45
  481. elseif(self.closest_nade.movedirection == 3) then
  482. direction = 45
  483. end
  484. local movedirection = cmd.viewangles.yaw - (self.closest_nade.ang.yaw + direction)
  485. local move = cheat.AngleToForward(QAngle.new(0, movedirection, 0))
  486. cmd.forwardmove = move.x * 450.0
  487. cmd.sidemove = move.y * 450.0
  488. end
  489. end,
  490.  
  491. on_backupstrafe = function(self)
  492. if(lua_elements.backup_direction:GetInt() > 0) then
  493. lua_elements.backup_strafe_duration:SetVisible(true)
  494. else
  495. lua_elements.backup_strafe_duration:SetVisible(false)
  496. end
  497. end,
  498.  
  499. on_properties = function(self)
  500. if(lua_elements.properties:GetBool(0) == true) then
  501. lua_elements.run_duration:SetVisible(true)
  502. lua_elements.run_velocity:SetVisible(true)
  503. lua_elements.run_direction:SetVisible(true)
  504. lua_elements.backup_direction:SetVisible(true)
  505. else
  506. lua_elements.run_duration:SetVisible(false)
  507. lua_elements.run_velocity:SetVisible(false)
  508. lua_elements.run_direction:SetVisible(false)
  509. lua_elements.backup_direction:SetVisible(false)
  510. lua_elements.backup_strafe_duration:SetVisible(false)
  511.  
  512. lua_elements.run_duration:SetInt(0)
  513. lua_elements.run_velocity:SetFloat(0)
  514. lua_elements.run_direction:SetInt(0)
  515. lua_elements.backup_direction:SetInt(0)
  516. lua_elements.backup_strafe_duration:SetInt(0)
  517. end
  518. if(lua_elements.properties:GetBool(1) == true) then
  519. lua_elements.jump_duration:SetVisible(true)
  520. lua_elements.jump_thresthold:SetVisible(true)
  521. else
  522. lua_elements.jump_duration:SetVisible(false)
  523. lua_elements.jump_thresthold:SetVisible(false)
  524.  
  525. lua_elements.jump_duration:SetInt(0)
  526. lua_elements.jump_thresthold:SetInt(0)
  527. end
  528. end,
  529.  
  530. backup_strafe = function(self, cmd)
  531. if(cmd.tick_count - self.strafe_backup_tick <= self.strafe_backup_duration and cmd.tick_count - self.strafe_backup_tick >= 0) then
  532. local movedirection = self.strafe_backup_direction
  533. local move = cheat.AngleToForward(QAngle.new(0, cmd.viewangles.yaw - movedirection, 0))
  534. cmd.forwardmove = move.x * 450.0
  535. cmd.sidemove = move.y * 450.0
  536. if(cmd.tick_count - self.strafe_backup_tick == self.strafe_backup_duration) then
  537. menu_elements.autostrafe_smooth:SetInt(self.old_autostrafe_smooth)
  538. end
  539. end
  540. end,
  541.  
  542. setup_backup_strafe = function(self, cmd)
  543. if(self.closest_nade.backupdirection ~= 0) then
  544. self.old_autostrafe_smooth = menu_elements.autostrafe_smooth:GetInt()
  545. menu_elements.autostrafe_smooth:SetInt(0)
  546. self.strafe_backup_tick = cmd.tick_count
  547. self.strafe_backup_duration = self.closest_nade.backupduration
  548. self.strafe_backup_direction = (self.closest_nade.ang.yaw + self.movedirections[self.closest_nade.backupdirection - 1])
  549. end
  550. end,
  551.  
  552. on_nade_update = function(self)
  553. local localplayer = g_EntityList:GetClientEntity(g_EngineClient:GetLocalPlayer())
  554. if(localplayer == nil) then return end
  555. localplayer = localplayer:GetPlayer()
  556. local origin = localplayer:GetProp("DT_BaseEntity", "m_vecOrigin")
  557. local viewangles = g_EngineClient:GetViewAngles()
  558. self.init_pos = Vector.new(origin.x, origin.y, origin.z)
  559. lua_elements.pitch_slider:SetFloat(viewangles.pitch)
  560. lua_elements.yaw_slider:SetFloat(viewangles.yaw)
  561. end,
  562.  
  563. update_configs = function(self)
  564. if(utils.UnixTime() - self.load_time >= 2000 ) then
  565. self.load_time = utils.UnixTime()
  566. for i = 1, 10 do
  567. if(lua_elements.nade_helper_types:GetBool(i) == false) then goto continue end
  568. local pfile = ffi.cast("void*", ffi.C.CreateFileA("nl\\GrenadeHelper\\" .. self.config_names[i] .. ".txt", 0xC0000000, 0x3, 0, 0x4, 0x80, nil))
  569. local size = ffi.C.GetFileSize(pfile, nil)
  570. local buff = ffi.new("char[" ..(size + 1).. "]")
  571. ffi.C.ReadFile(pfile, buff, size, nil, 0)
  572. ffi.C.CloseHandle(pfile)
  573. buff = ffi.string(buff)
  574. buff = "{"..buff.."}"
  575. self.custom_maps[i] = loadstring("return " .. buff)()
  576.  
  577. ::continue::
  578.  
  579. end
  580. end
  581. end,
  582.  
  583. on_save_nade = function(self)
  584. local nade = self.maps[self.create_nade_map][self.create_nade_weaponid][1][lua_elements.nade_name:GetString()]
  585. local result = string.format("[\"%s\"] =\n{\n\tpos = Vector.new(%s, %s, %s),\n\tmap = \"%s\",\n\ttype = \"%s\",\n\t[\"%s\"] = \n\t{\n\t\tang = QAngle.new(%s, %s, 0.0),\n\t\trunduration = %s,\n\t\tjumpduration = %s,\n\t\tspeed = %s,\n\t\tduck = %s,\n\t\tjump = %s,\n\t\tstrength = %s,\n\t\tjumpthresthold = %s,\n\t\tdescription = \"%s\",\n\t\tmovedirection = %s,\n\t\tbackupdirection = %s,\n\t\tbackupduration = %s,\n\t\textendforward = %s,\n\t},\n},\n", utils.UnixTime(), self.init_pos.x, self.init_pos.y, self.init_pos.z, self.create_nade_map, self.create_nade_weaponid, lua_elements.nade_name:GetString(), nade.ang.pitch, nade.ang.yaw, nade.runduration, nade.jumpduration, nade.speed, nade.duck, nade.jump, nade.strength, nade.jumpthresthold, nade.description, nade.movedirection, nade.backupdirection, nade.backupduration, nade.extendforward)
  586. local pfile = ffi.cast("void*", ffi.C.CreateFileA("nl\\GrenadeHelper\\" .. self.config_names[lua_elements.save_nade_cfg:GetInt() + 1] .. ".txt", 0xC0000000, 0x00000003, 0, 0x4, 0x80, nil))
  587. local overlapped = ffi.new("OVERLAPPED")
  588. overlapped.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Offset = 0xFFFFFFFF
  589. overlapped.DUMMYUNIONNAME.DUMMYSTRUCTNAME.OffsetHigh = 0xFFFFFFFF
  590. ffi.C.WriteFile(pfile, ffi.cast("char*", result), string.len(result), nil, ffi.cast("void*", overlapped))
  591. ffi.C.CloseHandle(pfile)
  592.  
  593. lua_elements.pitch_slider:SetVisible(false)
  594. lua_elements.yaw_slider:SetVisible(false)
  595. lua_elements.run_duration:SetVisible(false)
  596. lua_elements.run_velocity:SetVisible(false)
  597. lua_elements.jump_duration:SetVisible(false)
  598. lua_elements.jump_thresthold:SetVisible(false)
  599. lua_elements.properties:SetVisible(false)
  600. lua_elements.throw_strengh:SetVisible(false)
  601. lua_elements.nade_name:SetVisible(false)
  602. lua_elements.nade_description:SetVisible(false)
  603. lua_elements.remove_nade:SetVisible(false)
  604. lua_elements.save_nade_cfg:SetVisible(false)
  605. lua_elements.save_nade:SetVisible(false)
  606. lua_elements.create_nade:SetVisible(true)
  607. lua_elements.nade_teleport:SetVisible(false)
  608. lua_elements.nade_update_pos_ang:SetVisible(false)
  609. lua_elements.run_direction:SetVisible(false)
  610. lua_elements.backup_direction:SetVisible(false)
  611. lua_elements.backup_strafe_duration:SetVisible(false)
  612. lua_elements.extend_forward_strenght:SetVisible(false)
  613. table.remove(self.maps[self.create_nade_map][self.create_nade_weaponid], 1)
  614. end,
  615.  
  616. on_create_nade = function(self)
  617. local localplayer = g_EntityList:GetClientEntity(g_EngineClient:GetLocalPlayer())
  618. if(localplayer == nil) then return end
  619. localplayer = localplayer:GetPlayer()
  620. local weapon = localplayer:GetActiveWeapon()
  621. if(weapon == nil) then return end
  622. if(weapon:IsGrenade() == false) then return end
  623. local weapon_id = weapon:GetWeaponID()
  624. if(weapon_id == 48) then weapon_id = 46 end
  625. local origin = localplayer:GetProp("DT_BaseEntity", "m_vecOrigin")
  626. local viewangles = g_EngineClient:GetViewAngles()
  627.  
  628. self.create_nade_map = g_EngineClient:GetLevelNameShort()
  629. self.create_nade_weaponid = tostring(weapon_id)
  630.  
  631. self.init_ang = QAngle.new(viewangles.pitch, viewangles.yaw, 0.0)
  632. self.init_pos = Vector.new(origin.x, origin.y, origin.z)
  633.  
  634. lua_elements.pitch_slider:SetVisible(true)
  635. lua_elements.yaw_slider:SetVisible(true)
  636. lua_elements.properties:SetVisible(true)
  637. lua_elements.throw_strengh:SetVisible(true)
  638. lua_elements.nade_name:SetVisible(true)
  639. lua_elements.nade_description:SetVisible(true)
  640. lua_elements.create_nade:SetVisible(false)
  641. lua_elements.save_nade_cfg:SetVisible(true)
  642. lua_elements.save_nade:SetVisible(true)
  643. lua_elements.remove_nade:SetVisible(true)
  644. lua_elements.nade_teleport:SetVisible(true)
  645. lua_elements.nade_update_pos_ang:SetVisible(true)
  646.  
  647. lua_elements.pitch_slider:SetFloat(viewangles.pitch)
  648. lua_elements.yaw_slider:SetFloat(viewangles.yaw)
  649. lua_elements.run_duration:SetInt(0)
  650. lua_elements.run_velocity:SetFloat(450)
  651. lua_elements.jump_duration:SetInt(0)
  652. lua_elements.jump_thresthold:SetInt(0)
  653. for i = 0, 2 do
  654. lua_elements.properties:SetBool(i, false)
  655. end
  656. lua_elements.throw_strengh:SetFloat(100)
  657. lua_elements.nade_name:SetString("")
  658. lua_elements.nade_description:SetString("")
  659. lua_elements.run_direction:SetInt(0)
  660. lua_elements.backup_direction:SetInt(0)
  661. lua_elements.backup_strafe_duration:SetInt(1)
  662. lua_elements.extend_forward_strenght:SetBool(false)
  663.  
  664. if(self.maps[self.create_nade_map] == nil) then
  665. self.maps[self.create_nade_map] = {}
  666. end
  667. if(self.maps[self.create_nade_map][self.create_nade_weaponid] == nil) then
  668. self.maps[self.create_nade_map][self.create_nade_weaponid] = {}
  669. end
  670.  
  671. table.insert(self.maps[self.create_nade_map][self.create_nade_weaponid], {pos = self.init_pos, [""] = {ang = self.init_ang, runduration = 0, jumpduration = 0, speed = 0, duck = false, jump = false, strength = 1, description = "", movedirection = 0, backupdirection = 0,}})
  672. end,
  673.  
  674. on_remove_nade = function(self)
  675. lua_elements.pitch_slider:SetVisible(false)
  676. lua_elements.yaw_slider:SetVisible(false)
  677. lua_elements.run_duration:SetVisible(false)
  678. lua_elements.run_velocity:SetVisible(false)
  679. lua_elements.jump_duration:SetVisible(false)
  680. lua_elements.jump_thresthold:SetVisible(false)
  681. lua_elements.properties:SetVisible(false)
  682. lua_elements.throw_strengh:SetVisible(false)
  683. lua_elements.nade_name:SetVisible(false)
  684. lua_elements.nade_description:SetVisible(false)
  685. lua_elements.remove_nade:SetVisible(false)
  686. lua_elements.save_nade_cfg:SetVisible(false)
  687. lua_elements.save_nade:SetVisible(false)
  688. lua_elements.create_nade:SetVisible(true)
  689. lua_elements.nade_teleport:SetVisible(false)
  690. lua_elements.nade_update_pos_ang:SetVisible(false)
  691. lua_elements.run_direction:SetVisible(false)
  692. lua_elements.backup_direction:SetVisible(false)
  693. lua_elements.backup_strafe_duration:SetVisible(false)
  694. lua_elements.extend_forward_strenght:SetVisible(false)
  695.  
  696. table.remove(self.maps[self.create_nade_map][self.create_nade_weaponid], 1)
  697. end,
  698.  
  699. on_teleport_nade = function(self)
  700. g_EngineClient:ClientCmd("setpos " .. self.init_pos.x .. " " .. self.init_pos.y .. " " .. self.init_pos.z)
  701. g_EngineClient:ClientCmd("setang " .. self.init_ang.pitch .. " " .. self.init_ang.yaw .. " 0.0")
  702. end,
  703.  
  704. on_draw = function(self)
  705.  
  706. if(self.maps[self.create_nade_map] and self.maps[self.create_nade_map][self.create_nade_weaponid] and self.maps[self.create_nade_map][self.create_nade_weaponid][1]) then
  707. self.init_ang.pitch = lua_elements.pitch_slider:GetFloat()
  708. self.init_ang.yaw = lua_elements.yaw_slider:GetFloat()
  709. self.maps[self.create_nade_map][self.create_nade_weaponid][1] = {pos = self.init_pos, [lua_elements.nade_name:GetString()] = {ang = self.init_ang, runduration = lua_elements.run_duration:GetInt(), speed = lua_elements.run_velocity:GetFloat(), jumpduration = lua_elements.jump_duration:GetInt(), jumpthresthold = lua_elements.jump_thresthold:GetInt(), strength = lua_elements.throw_strengh:GetFloat() / 100.0, duck = lua_elements.properties:GetBool(2), jump = lua_elements.properties:GetBool(1), description = lua_elements.nade_description:GetString(), movedirection = lua_elements.run_direction:GetInt(), backupdirection = lua_elements.backup_direction:GetInt(), backupduration = lua_elements.backup_strafe_duration:GetInt(), extendforward = lua_elements.extend_forward_strenght:GetBool(),}}
  710. end
  711. local localplayer = g_EntityList:GetClientEntity(g_EngineClient:GetLocalPlayer())
  712. if(localplayer == nil) then return end
  713.  
  714. local map = g_EngineClient:GetLevelNameShort()
  715. self.closest_nade_position = nil
  716. if(self.should_throw == false) then self.closest_nade = nil end
  717.  
  718. localplayer = localplayer:GetPlayer()
  719. local vecOrigin = localplayer:GetProp("DT_BaseEntity", "m_vecOrigin")
  720. local vecEyePosition = localplayer:GetEyePosition()
  721. local angViewAngles = g_EngineClient:GetViewAngles()
  722. local weapon = localplayer:GetActiveWeapon()
  723. local screencenter = Vector2.new(lua_elements.screensize.x / 2, lua_elements.screensize.y / 2)
  724. if(weapon == nil) then return end
  725. local weapon_id = weapon:GetWeaponID()
  726. if(weapon_id == 48) then weapon_id = 46 end
  727. if(weapon_id == 47) then return end
  728.  
  729. local map_list = self.maps[map]
  730. local nade_list = nil
  731. if(map_list) then nade_list = map_list[tostring(weapon_id)] end
  732. --for i=1, #self.maps do
  733.  
  734. --end
  735. if(weapon:IsGrenade() == false) then
  736. if(self.should_throw == true) then
  737. menu_elements.autostrafe:SetBool(self.old_autostrafe)
  738. menu_elements.autostrafe_smooth:SetInt(self.old_autostrafe_smooth)
  739. end
  740. self.closest_nade = nil
  741. self.closest_nade_position = nil
  742. self.should_throw = false
  743. self.has_strength = false
  744. self.has_duck = true
  745. self.run_tick = 0
  746. self.jump_tick = 0
  747. if(map_list) then
  748. for nade_type, list in pairs(map_list) do
  749. for startname, startspot in pairs(list) do
  750. if(self.render_stuff[startname]) then
  751. self.render_stuff[startname].global_alpha = 0.0
  752. self.render_stuff[startname].text_alpha = 0.0
  753. self.render_stuff[startname].icon_alpha = 0.0
  754. self.render_stuff[startname].box_length = 16.0
  755. self.render_stuff[startname].box_height = 16.0
  756. self.render_stuff[startname].box_additions_alpha = 0.0
  757. end
  758. for endname, endspot in pairs(startspot) do
  759. if(type(endspot) == "table") then
  760. if(self.render_stuff[startname] and self.render_stuff[startname][endname]) then
  761. self.render_stuff[startname][endname].global_alpha = 0.0
  762. self.render_stuff[startname][endname].text_alpha = 0.0
  763. self.render_stuff[startname][endname].box_length = 10.0
  764. self.render_stuff[startname][endname].description_box_height = 0.0
  765. self.render_stuff[startname][endname].description_text_alpha = 0.0
  766. end
  767. end
  768. end
  769. end
  770. end
  771. end
  772.  
  773. for i = 1, 10 do
  774. if(self.custom_maps[i] and lua_elements.nade_helper_types:GetBool(i) == true ) then
  775. for startname, startspot in pairs(self.custom_maps[i]) do
  776. if(map == startspot.map) then
  777. if(self.render_stuff[startname]) then
  778. self.render_stuff[startname].global_alpha = 0.0
  779. self.render_stuff[startname].text_alpha = 0.0
  780. self.render_stuff[startname].icon_alpha = 0.0
  781. self.render_stuff[startname].box_length = 16.0
  782. self.render_stuff[startname].box_height = 16.0
  783. self.render_stuff[startname].box_additions_alpha = 0.0
  784. end
  785. for endname, endspot in pairs(startspot) do
  786. if(type(endspot) == "table") then
  787. if(self.render_stuff[startname] and self.render_stuff[startname][endname]) then
  788. self.render_stuff[startname][endname].global_alpha = 0.0
  789. self.render_stuff[startname][endname].text_alpha = 0.0
  790. self.render_stuff[startname][endname].box_length = 10.0
  791. self.render_stuff[startname][endname].description_box_height = 0.0
  792. self.render_stuff[startname][endname].description_text_alpha = 0.0
  793. end
  794. end
  795. end
  796. end
  797. end
  798. end
  799.  
  800. end
  801. return
  802. end
  803.  
  804. local color_set = self.theme_colors[lua_elements.nade_helper_theme:GetInt()]
  805.  
  806. local bestdistance = 100.0
  807. local temp_nade = nil
  808.  
  809. if(nade_list) then
  810. for startname, startspot in pairs(nade_list) do
  811. if((lua_elements.nade_helper_types:GetBool(2) == false or lua_elements.nade_helper_nades:GetBool(self.menu_nades[tostring(weapon_id)]) == false) and startname ~= 1) then goto continue end
  812. local distance = vecOrigin:DistTo(startspot.pos)
  813. if(distance < 100.0 and distance < bestdistance) then
  814. if(self.should_throw == false) then self.closest_nade_position = startspot.pos end
  815. bestdistance = distance
  816. temp_nade = startspot
  817. end
  818. ::continue::
  819. end
  820. end
  821.  
  822. for i = 1, 10 do
  823.  
  824. if(self.custom_maps[i] and lua_elements.nade_helper_types:GetBool(i) == true) then
  825. for createtime, startspot in pairs(self.custom_maps[i]) do
  826. if(map == startspot.map) then
  827. if(tostring(weapon_id) == startspot.type and lua_elements.nade_helper_nades:GetBool(self.menu_nades[startspot.type]) == true) then
  828. local distance = vecOrigin:DistTo(startspot.pos)
  829. if(distance < 100.0 and distance < bestdistance) then
  830. if(self.should_throw == false) then self.closest_nade_position = startspot.pos end
  831. bestdistance = distance
  832. temp_nade = startspot
  833. end
  834. end
  835. end
  836. end
  837. end
  838. end
  839.  
  840. if(nade_list) then
  841. for startname, startspot in pairs(nade_list) do
  842. if((lua_elements.nade_helper_types:GetBool(2) == false or lua_elements.nade_helper_nades:GetBool(self.menu_nades[tostring(weapon_id)]) == false) and startname ~= 1) then goto continue end
  843. if(self.render_stuff[startname] == nil) then self.render_stuff[startname] = {} end
  844. if(self.render_stuff[startname].global_alpha == nil) then self.render_stuff[startname].global_alpha = 0.0 end
  845. if(self.render_stuff[startname].box_length == nil) then self.render_stuff[startname].box_length = 30.0 end
  846. if(self.render_stuff[startname].box_height == nil) then self.render_stuff[startname].box_height = 30.0 end
  847. if(self.render_stuff[startname].text_alpha == nil) then self.render_stuff[startname].text_alpha = 0.0 end
  848. if(self.render_stuff[startname].icon_alpha == nil) then self.render_stuff[startname].icon_alpha = 0.0 end
  849. if(self.render_stuff[startname].box_additions_alpha == nil) then self.render_stuff[startname].box_additions_alpha = 0.0 end
  850.  
  851. local distance = vecOrigin:DistTo(startspot.pos)
  852. if(distance > 1750.0) then
  853. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  854. else
  855. local trace = EngineTrace.TraceRay(vecEyePosition, startspot.pos, localplayer, 0x200400B)
  856. if(trace.fraction > 0.98) then
  857. if(distance > 1250.0) then
  858. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 0.4, g_GlobalVars.frametime * 20.0)
  859. elseif(distance < 5.0) then
  860. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 1.0, g_GlobalVars.frametime * 20.0)
  861. else
  862. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 0.8, g_GlobalVars.frametime * 20.0)
  863. end
  864. else
  865. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  866. end
  867. end
  868.  
  869. if(self.render_stuff[startname].global_alpha < 0.01) then goto continue end
  870.  
  871. local screenpos = g_Render:ScreenPosition(Vector.new(startspot.pos.x, startspot.pos.y, startspot.pos.z + 10.0))
  872. local nade_type_size = g_Render:CalcTextSize(self.nade_type[tostring(weapon_id)], 14)
  873. local bestlength = 0
  874. local num_spots = 0
  875. local temp_fov_nade = nil
  876. local temp_fov_name = nil
  877. local bestfov = lua_elements.nade_helper_fov:GetInt()
  878.  
  879. for endname, endspot in pairs(startspot) do
  880. if(type(endspot) == "table") then
  881. local name_size = g_Render:CalcTextSize(endname, 14)
  882. if(name_size.x > bestlength) then bestlength = name_size.x end
  883.  
  884. if(self.render_stuff[startname][endname] == nil) then self.render_stuff[startname][endname] = {} end
  885. if(self.render_stuff[startname][endname].global_alpha == nil) then self.render_stuff[startname][endname].global_alpha = 0.0 end
  886. if(self.render_stuff[startname][endname].box_length == nil) then self.render_stuff[startname][endname].box_length = 10.0 end
  887. if(self.render_stuff[startname][endname].text_alpha == nil) then self.render_stuff[startname][endname].text_alpha = 0.0 end
  888. if(self.render_stuff[startname][endname].circle_color == nil) then self.render_stuff[startname][endname].circle_color = Color.new(0.15, 0.15, 0.15, 0.0) end
  889. if(self.render_stuff[startname][endname].description_box_height == nil) then self.render_stuff[startname][endname].description_box_height = 0.0 end
  890. if(self.render_stuff[startname][endname].description_text_alpha == nil) then self.render_stuff[startname][endname].description_text_alpha = 0.0 end
  891.  
  892. if(endspot.endposition == nil) then
  893. local vecStart = Vector.new(startspot.pos.x, startspot.pos.y, startspot.pos.z + 64.0)
  894. local forward = cheat.AngleToForward(endspot.ang)
  895. local vecEnd = Vector.new(vecStart.x + 800.0 * forward.x, vecStart.y + 800.0 * forward.y, vecStart.z + 800.0 * forward.z)
  896. local trace = EngineTrace.TraceRay(vecStart, vecEnd, localplayer, 0x46004003)
  897. endspot.endposition = Vector.new(trace.endpos.x, trace.endpos.y, trace.endpos.z)
  898. end
  899. if(endspot.jumpthresthold == nil) then
  900. endspot.jumpthresthold = 0
  901. end
  902. if(endspot.movedirection == nil) then
  903. endspot.movedirection = 0
  904. end
  905. if(endspot.backupdirection == nil) then
  906. endspot.backupdirection = 0
  907. end
  908. if(endspot.backupduration == nil) then
  909. endspot.backupduration = 1
  910. end
  911. if(endspot.extendforward == nil) then
  912. endspot.extendforward = false
  913. end
  914.  
  915. local angles = math_helpers:normalizeangles(math_helpers:calcangle(vecEyePosition, endspot.endposition))
  916. local fov = math.sqrt((angles.pitch - angViewAngles.pitch) ^ 2 + (angles.yaw - angViewAngles.yaw) ^ 2)
  917. fov = math_helpers:normalizefloat(fov)
  918. fov = math.abs(fov)
  919.  
  920. if(fov < bestfov and distance <= 50.0 and startspot == temp_nade) then
  921. bestfov = fov
  922. temp_fov_nade = endspot
  923. temp_fov_name = endname
  924. if(self.should_throw == false) then self.closest_nade = endspot end
  925. end
  926. num_spots = num_spots + 1
  927. end
  928. end
  929.  
  930. for endname, endspot in pairs(startspot) do
  931. if(type(endspot) ~= "table" or endspot == temp_fov_nade) then goto continue end
  932.  
  933. local screenpos = g_Render:ScreenPosition(endspot.endposition)
  934. local name_size = g_Render:CalcTextSize(endname, 14)
  935.  
  936. local r = math_helpers:lerp(self.render_stuff[startname][endname].circle_color.r, 0.3, g_GlobalVars.frametime * 15.0)
  937. local g = math_helpers:lerp(self.render_stuff[startname][endname].circle_color.g, 0.3, g_GlobalVars.frametime * 15.0)
  938. local b = math_helpers:lerp(self.render_stuff[startname][endname].circle_color.b, 0.3, g_GlobalVars.frametime * 15.0)
  939.  
  940. local desired_box_length = name_size.x + 20
  941.  
  942. if(endspot.description and string.len(endspot.description) > 0) then
  943. local desc_size = g_Render:CalcTextSize(endspot.description, 11)
  944. desired_box_height = 16
  945. if(self.render_stuff[startname][endname].description_text_alpha > 0.01) then desired_box_length = math.max(desired_box_length, desc_size.x) end
  946. end
  947.  
  948. self.render_stuff[startname][endname].description_text_alpha = math_helpers:lerp(self.render_stuff[startname][endname].description_text_alpha, 0.0, g_GlobalVars.frametime * 60.0)
  949.  
  950. if(distance > 50.0 or startspot ~= temp_nade) then
  951. self.render_stuff[startname][endname].text_alpha = math_helpers:lerp(self.render_stuff[startname][endname].text_alpha, 0.0, g_GlobalVars.frametime * 60.0)
  952. if(self.render_stuff[startname][endname].text_alpha < 0.01) then
  953. self.render_stuff[startname][endname].box_length = math_helpers:lerp(self.render_stuff[startname][endname].box_length, 10.0, g_GlobalVars.frametime * 30.0)
  954. self.render_stuff[startname][endname].description_box_height = math_helpers:lerp(self.render_stuff[startname][endname].description_box_height, 0.0, g_GlobalVars.frametime * 30.0)
  955. if(self.render_stuff[startname][endname].box_length - 10.0 < 0.1 and self.render_stuff[startname][endname].description_box_height < 0.1) then
  956. self.render_stuff[startname][endname].global_alpha = math_helpers:lerp(self.render_stuff[startname][endname].global_alpha, 0.0, g_GlobalVars.frametime * 60.0)
  957. end
  958. end
  959. else
  960. if(screenpos.x + self.render_stuff[startname][endname].box_length + 2 > lua_elements.screensize.x or screenpos.x < 12 or screenpos.y + 10 > lua_elements.screensize.y or screenpos.y < 10) then
  961. self.render_stuff[startname][endname].global_alpha = math_helpers:lerp(self.render_stuff[startname][endname].global_alpha, 1.0, g_GlobalVars.frametime * 60.0)
  962. else
  963. self.render_stuff[startname][endname].global_alpha = math_helpers:lerp(self.render_stuff[startname][endname].global_alpha, 0.6, g_GlobalVars.frametime * 60.0)
  964. end
  965. if(self.render_stuff[startname][endname].global_alpha > 0.58) then
  966. self.render_stuff[startname][endname].box_length = math_helpers:lerp(self.render_stuff[startname][endname].box_length, desired_box_length, g_GlobalVars.frametime * 30.0)
  967. if(desired_box_length - self.render_stuff[startname][endname].box_length < 0.1) then
  968. self.render_stuff[startname][endname].text_alpha = math_helpers:lerp(self.render_stuff[startname][endname].text_alpha, self.render_stuff[startname][endname].global_alpha, g_GlobalVars.frametime * 60.0)
  969. if(self.render_stuff[startname][endname].description_text_alpha < 0.01) then
  970. self.render_stuff[startname][endname].description_box_height = math_helpers:lerp(self.render_stuff[startname][endname].description_box_height, 0.0, g_GlobalVars.frametime * 60.0)
  971. end
  972. end
  973. end
  974. end
  975. self.render_stuff[startname][endname].circle_color = Color.new(r, g, b, self.render_stuff[startname][endname].global_alpha)
  976. if(self.render_stuff[startname][endname].global_alpha < 0.01) then goto continue end
  977.  
  978. if(screenpos.x + self.render_stuff[startname][endname].box_length + 2 > lua_elements.screensize.x or screenpos.x < 12 or screenpos.y + 10 > lua_elements.screensize.y or screenpos.y < 10) then
  979. local vecdelta = Vector2.new(screenpos.x - screencenter.x, screenpos.y - screencenter.y)
  980. local length = #vecdelta
  981. local cos = vecdelta.x / length
  982. local sin = vecdelta.y / length
  983. local max_legnth = #screencenter
  984.  
  985. local newpos = Vector2.new(screencenter.x + max_legnth * cos, screencenter.y + max_legnth * sin)
  986. if(newpos.x + self.render_stuff[startname][endname].box_length > lua_elements.screensize.x) then newpos.x = lua_elements.screensize.x - self.render_stuff[startname][endname].box_length - 18
  987. elseif(newpos.x < 16) then newpos.x = 28 end
  988. if(newpos.y + 16 > lua_elements.screensize.y) then newpos.y = lua_elements.screensize.y - 28
  989. elseif(newpos.y < 16) then newpos.y = 28 end
  990.  
  991. screenpos = newpos
  992. end
  993. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y - 8), Vector2.new(screenpos.x + self.render_stuff[startname][endname].box_length, screenpos.y + 8), Color.new(color_set.target_r, color_set.target_g, color_set.target_b, self.render_stuff[startname][endname].global_alpha))
  994. g_Render:Text(endname, Vector2.new(screenpos.x + 10, screenpos.y - name_size.y / 2), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname][endname].text_alpha), 14)
  995. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y + 8), Vector2.new(screenpos.x + self.render_stuff[startname][endname].box_length, screenpos.y + 8 + self.render_stuff[startname][endname].description_box_height), Color.new(color_set.body_r, color_set.body_g, color_set.body_b, self.render_stuff[startname][endname].global_alpha))
  996.  
  997. g_Render:CircleFilled(screenpos, 5, 15, self.render_stuff[startname][endname].circle_color)
  998. g_Render:Circle(screenpos, 5, 15, Color.new(0.1, 0.1, 0.1, self.render_stuff[startname][endname].global_alpha))
  999.  
  1000. ::continue::
  1001. end
  1002.  
  1003. if(temp_fov_nade) then
  1004. local screenpos = g_Render:ScreenPosition(temp_fov_nade.endposition)
  1005. local name_size = g_Render:CalcTextSize(temp_fov_name, 14)
  1006.  
  1007. local r = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].circle_color.r, 0.01, g_GlobalVars.frametime * 15.0)
  1008. local g = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].circle_color.g, 0.65, g_GlobalVars.frametime * 15.0)
  1009. local b = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].circle_color.b, 0.96, g_GlobalVars.frametime * 15.0)
  1010.  
  1011. self.render_stuff[startname][temp_fov_name].global_alpha = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].global_alpha, 0.9, g_GlobalVars.frametime * 30.0)
  1012. self.render_stuff[startname][temp_fov_name].circle_color = Color.new(r, g, b, self.render_stuff[startname][temp_fov_name].global_alpha)
  1013.  
  1014. local desired_box_length = name_size.x + 20
  1015. local desired_box_height = 0
  1016.  
  1017. if(temp_fov_nade.description and string.len(temp_fov_nade.description) > 0) then
  1018. local desc_size = g_Render:CalcTextSize(temp_fov_nade.description, 11)
  1019. desired_box_height = 16
  1020. if(desc_size.x > desired_box_length) then desired_box_length = math.max(desired_box_length, desc_size.x) end
  1021. end
  1022.  
  1023. if(self.render_stuff[startname][temp_fov_name].global_alpha > 0.88) then
  1024. self.render_stuff[startname][temp_fov_name].box_length = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].box_length, desired_box_length, g_GlobalVars.frametime * 30.0)
  1025. self.render_stuff[startname][temp_fov_name].description_box_height = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].description_box_height, desired_box_height, g_GlobalVars.frametime * 30.0)
  1026. if(desired_box_length - self.render_stuff[startname][temp_fov_name].box_length < 0.1 and desired_box_height - self.render_stuff[startname][temp_fov_name].description_box_height < 0.1) then
  1027. self.render_stuff[startname][temp_fov_name].text_alpha = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].text_alpha, 1.0, g_GlobalVars.frametime * 30.0)
  1028. self.render_stuff[startname][temp_fov_name].description_text_alpha = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].description_text_alpha, 1.0, g_GlobalVars.frametime * 30.0)
  1029. end
  1030. end
  1031.  
  1032. if(screenpos.x + self.render_stuff[startname][temp_fov_name].box_length + 2 > lua_elements.screensize.x or screenpos.x < 12 or screenpos.y + 10 > lua_elements.screensize.y or screenpos.y < 10) then
  1033. local vecdelta = Vector2.new(screenpos.x - screencenter.x, screenpos.y - screencenter.y)
  1034. local length = #vecdelta
  1035. local cos = vecdelta.x / length
  1036. local sin = vecdelta.y / length
  1037. local max_legnth = #screencenter
  1038.  
  1039. local newpos = Vector2.new(screencenter.x + max_legnth * cos, screencenter.y + max_legnth * sin)
  1040. if(newpos.x + self.render_stuff[startname][temp_fov_name].box_length > lua_elements.screensize.x) then newpos.x = lua_elements.screensize.x - self.render_stuff[startname][temp_fov_name].box_length - 18
  1041. elseif(newpos.x < 16) then newpos.x = 28 end
  1042. if(newpos.y + 16 > lua_elements.screensize.y) then newpos.y = lua_elements.screensize.y - 28
  1043. elseif(newpos.y < 16) then newpos.y = 28 end
  1044.  
  1045. screenpos = newpos
  1046. end
  1047.  
  1048. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y - 8), Vector2.new(screenpos.x + self.render_stuff[startname][temp_fov_name].box_length, screenpos.y + 8), Color.new(color_set.target_r, color_set.target_g, color_set.target_b, self.render_stuff[startname][temp_fov_name].global_alpha))
  1049. g_Render:Text(temp_fov_name, Vector2.new(screenpos.x + 10, screenpos.y - name_size.y / 2), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname][temp_fov_name].text_alpha), 14)
  1050. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y + 8), Vector2.new(screenpos.x + self.render_stuff[startname][temp_fov_name].box_length, screenpos.y + 8 + self.render_stuff[startname][temp_fov_name].description_box_height), Color.new(color_set.body_r, color_set.body_g, color_set.body_b, self.render_stuff[startname][temp_fov_name].global_alpha))
  1051.  
  1052. if(temp_fov_nade.description and string.len(temp_fov_nade.description) > 0) then
  1053. local desc_size = g_Render:CalcTextSize(temp_fov_nade.description, 11)
  1054. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y + 8), Vector2.new(screenpos.x + self.render_stuff[startname][temp_fov_name].box_length, screenpos.y + 9), Color.new(color_set.gradient_line_r, color_set.gradient_line_g, color_set.gradient_line_b, self.render_stuff[startname][temp_fov_name].global_alpha))
  1055. g_Render:Text(temp_fov_nade.description, Vector2.new(screenpos.x - 5, screenpos.y + 8 + self.render_stuff[startname][temp_fov_name].description_box_height / 2 - desc_size.y / 2), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname][temp_fov_name].description_text_alpha), 11)
  1056. end
  1057.  
  1058. g_Render:CircleFilled(screenpos, 5, 15, self.render_stuff[startname][temp_fov_name].circle_color)
  1059. g_Render:Circle(screenpos, 5, 15, Color.new(0.1, 0.1, 0.1, self.render_stuff[startname][temp_fov_name].global_alpha))
  1060. end
  1061.  
  1062. if(bestlength < nade_type_size.x) then bestlength = nade_type_size.x end
  1063.  
  1064. if(distance < 400.0 and (temp_nade and temp_nade == startspot or temp_nade == nil or lua_elements.nade_helper:GetBool() == false)) then
  1065. self.render_stuff[startname].box_length = math_helpers:lerp(self.render_stuff[startname].box_length, bestlength, g_GlobalVars.frametime * 20.0)
  1066. self.render_stuff[startname].box_height = math_helpers:lerp(self.render_stuff[startname].box_height, num_spots * 16 + 12, g_GlobalVars.frametime * 20.0)
  1067. self.render_stuff[startname].icon_alpha = math_helpers:lerp(self.render_stuff[startname].icon_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  1068. self.render_stuff[startname].box_additions_alpha = math_helpers:lerp(self.render_stuff[startname].box_additions_alpha, self.render_stuff[startname].global_alpha, g_GlobalVars.frametime * 20.0)
  1069. if(bestlength - self.render_stuff[startname].box_length < 0.1) then
  1070. self.render_stuff[startname].box_additions_alpha = math_helpers:lerp(self.render_stuff[startname].box_additions_alpha, self.render_stuff[startname].global_alpha, g_GlobalVars.frametime * 20.0)
  1071. self.render_stuff[startname].text_alpha = math_helpers:lerp(self.render_stuff[startname].text_alpha, self.render_stuff[startname].global_alpha, g_GlobalVars.frametime * 20.0)
  1072. end
  1073. elseif(distance > 400 or (temp_nade and temp_nade ~= startspot)) then
  1074. self.render_stuff[startname].text_alpha = math_helpers:lerp(self.render_stuff[startname].text_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  1075. if(self.render_stuff[startname].text_alpha < 0.01) then
  1076. self.render_stuff[startname].box_additions_alpha = math_helpers:lerp(self.render_stuff[startname].box_additions_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  1077. self.render_stuff[startname].icon_alpha = math_helpers:lerp(self.render_stuff[startname].icon_alpha, self.render_stuff[startname].global_alpha, g_GlobalVars.frametime * 20.0)
  1078. self.render_stuff[startname].box_length = math_helpers:lerp(self.render_stuff[startname].box_length, 16, g_GlobalVars.frametime * 20.0)
  1079. self.render_stuff[startname].box_height = math_helpers:lerp(self.render_stuff[startname].box_height, 16, g_GlobalVars.frametime * 20.0)
  1080. end
  1081. end
  1082.  
  1083. g_Render:BoxFilled(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 - 3, screenpos.y + 1), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2 + 3, screenpos.y - self.render_stuff[startname].box_height - 3), Color.new(color_set.body_r, color_set.body_g, color_set.body_b, 0.95 * self.render_stuff[startname].global_alpha)) -- тело
  1084. g_Render:BoxFilled(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 - 3, screenpos.y - self.render_stuff[startname].box_height + 12), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2 + 3, screenpos.y - self.render_stuff[startname].box_height - 4), Color.new(color_set.head_r, color_set.head_g, color_set.head_b, self.render_stuff[startname].box_additions_alpha)) -- рамка
  1085. g_Render:Text(self.nade_type[tostring(weapon_id)], Vector2.new(screenpos.x - nade_type_size.x / 2, screenpos.y - self.render_stuff[startname].box_height + 12 - nade_type_size.y), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname].text_alpha), 14)
  1086. g_Render:BoxFilled(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 - 3, screenpos.y - self.render_stuff[startname].box_height + 12), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2 + 3, screenpos.y - self.render_stuff[startname].box_height + 13), Color.new(color_set.gradient_line_r, color_set.gradient_line_g, color_set.gradient_line_b, self.render_stuff[startname].box_additions_alpha)) -- градиент
  1087.  
  1088. g_Render:Box(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 - 3, screenpos.y + 1), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2 + 3, screenpos.y - self.render_stuff[startname].box_height - 3), Color.new(0.1, 0.15, 0.2, self.render_stuff[startname].global_alpha))
  1089.  
  1090. local icon_size = g_Render:CalcWeaponIconSize(weapon_id, 20)
  1091. g_Render:WeaponIcon(weapon_id, Vector2.new(screenpos.x - icon_size.x / 2, screenpos.y - icon_size.y - 1), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname].icon_alpha), 20)
  1092.  
  1093. num_spots = 0
  1094. for endname, endspot in pairs(startspot) do
  1095. if(type(endspot) == "table") then
  1096. local name_size = g_Render:CalcTextSize(endname, 14)
  1097. g_Render:Text(endname, Vector2.new(screenpos.x - name_size.x / 2, screenpos.y - (15 * num_spots) - name_size.y), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname].text_alpha), 14)
  1098. num_spots = num_spots + 1
  1099. end
  1100. end
  1101. ::continue::
  1102. end
  1103. end
  1104.  
  1105. for i = 1, 10 do
  1106. if(self.custom_maps[i] and lua_elements.nade_helper_types:GetBool(i) == true) then
  1107. for startname, startspot in pairs(self.custom_maps[i]) do
  1108. if(lua_elements.nade_helper_types:GetBool(i) == false or lua_elements.nade_helper_nades:GetBool(self.menu_nades[tostring(weapon_id)]) == false or startspot.map ~= map or tostring(weapon_id) ~= startspot.type) then goto continue end
  1109. if(self.render_stuff[startname] == nil) then self.render_stuff[startname] = {} end
  1110. if(self.render_stuff[startname].global_alpha == nil) then self.render_stuff[startname].global_alpha = 0.0 end
  1111. if(self.render_stuff[startname].box_length == nil) then self.render_stuff[startname].box_length = 30.0 end
  1112. if(self.render_stuff[startname].box_height == nil) then self.render_stuff[startname].box_height = 30.0 end
  1113. if(self.render_stuff[startname].text_alpha == nil) then self.render_stuff[startname].text_alpha = 0.0 end
  1114. if(self.render_stuff[startname].icon_alpha == nil) then self.render_stuff[startname].icon_alpha = 0.0 end
  1115. if(self.render_stuff[startname].box_additions_alpha == nil) then self.render_stuff[startname].box_additions_alpha = 0.0 end
  1116.  
  1117. local distance = vecOrigin:DistTo(startspot.pos)
  1118. if(distance > 1750.0) then
  1119. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  1120. else
  1121.  
  1122. local trace = EngineTrace.TraceRay(vecEyePosition, startspot.pos, localplayer, 0x200400B)
  1123. if(trace.fraction > 0.98) then
  1124. if(distance > 1250.0) then
  1125. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 0.4, g_GlobalVars.frametime * 20.0)
  1126. elseif(distance < 5.0) then
  1127. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 1.0, g_GlobalVars.frametime * 20.0)
  1128. else
  1129. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 0.8, g_GlobalVars.frametime * 20.0)
  1130. end
  1131. else
  1132. self.render_stuff[startname].global_alpha = math_helpers:lerp(self.render_stuff[startname].global_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  1133. end
  1134. end
  1135.  
  1136. if(self.render_stuff[startname].global_alpha < 0.01) then goto continue end
  1137.  
  1138. local screenpos = g_Render:ScreenPosition(Vector.new(startspot.pos.x, startspot.pos.y, startspot.pos.z + 10.0))
  1139. local nade_type_size = g_Render:CalcTextSize(self.nade_type[tostring(weapon_id)], 14)
  1140. local bestlength = 0
  1141. local num_spots = 0
  1142. local temp_fov_nade = nil
  1143. local temp_fov_name = nil
  1144. local bestfov = lua_elements.nade_helper_fov:GetInt()
  1145.  
  1146. for endname, endspot in pairs(startspot) do
  1147. if(type(endspot) == "table") then
  1148. local name_size = g_Render:CalcTextSize(endname, 14)
  1149. if(name_size.x > bestlength) then bestlength = name_size.x end
  1150.  
  1151. if(self.render_stuff[startname][endname] == nil) then self.render_stuff[startname][endname] = {} end
  1152. if(self.render_stuff[startname][endname].global_alpha == nil) then self.render_stuff[startname][endname].global_alpha = 0.0 end
  1153. if(self.render_stuff[startname][endname].box_length == nil) then self.render_stuff[startname][endname].box_length = 10.0 end
  1154. if(self.render_stuff[startname][endname].text_alpha == nil) then self.render_stuff[startname][endname].text_alpha = 0.0 end
  1155. if(self.render_stuff[startname][endname].circle_color == nil) then self.render_stuff[startname][endname].circle_color = Color.new(0.15, 0.15, 0.15, 0.0) end
  1156. if(self.render_stuff[startname][endname].description_box_height == nil) then self.render_stuff[startname][endname].description_box_height = 0.0 end
  1157. if(self.render_stuff[startname][endname].description_text_alpha == nil) then self.render_stuff[startname][endname].description_text_alpha = 0.0 end
  1158.  
  1159. if(endspot.endposition == nil) then
  1160. local vecStart = Vector.new(startspot.pos.x, startspot.pos.y, startspot.pos.z + 64.0)
  1161. local forward = cheat.AngleToForward(endspot.ang)
  1162. local vecEnd = Vector.new(vecStart.x + 800.0 * forward.x, vecStart.y + 800.0 * forward.y, vecStart.z + 800.0 * forward.z)
  1163. local trace = EngineTrace.TraceRay(vecStart, vecEnd, localplayer, 0x46004003)
  1164. endspot.endposition = Vector.new(trace.endpos.x, trace.endpos.y, trace.endpos.z)
  1165. end
  1166. if(endspot.jumpthresthold == nil) then
  1167. endspot.jumpthresthold = 0
  1168. end
  1169. if(endspot.movedirection == nil) then
  1170. endspot.movedirection = 0
  1171. end
  1172. if(endspot.backupdirection == nil) then
  1173. endspot.backupdirection = 0
  1174. end
  1175. if(endspot.backupduration == nil) then
  1176. endspot.backupduration = 1
  1177. end
  1178. if(endspot.extendforward == nil) then
  1179. endspot.extendforward = false
  1180. end
  1181.  
  1182. local angles = math_helpers:normalizeangles(math_helpers:calcangle(vecEyePosition, endspot.endposition))
  1183. local fov = math.sqrt((angles.pitch - angViewAngles.pitch) ^ 2 + (angles.yaw - angViewAngles.yaw) ^ 2)
  1184. fov = math_helpers:normalizefloat(fov)
  1185. fov = math.abs(fov)
  1186.  
  1187. if(fov < bestfov and distance <= 50.0 and startspot == temp_nade) then
  1188. bestfov = fov
  1189. temp_fov_nade = endspot
  1190. temp_fov_name = endname
  1191. if(self.should_throw == false) then self.closest_nade = endspot end
  1192. end
  1193. num_spots = num_spots + 1
  1194. end
  1195. end
  1196.  
  1197. for endname, endspot in pairs(startspot) do
  1198. if(type(endspot) ~= "table" or endspot == temp_fov_nade) then goto continue end
  1199.  
  1200. local screenpos = g_Render:ScreenPosition(endspot.endposition)
  1201. local name_size = g_Render:CalcTextSize(endname, 14)
  1202.  
  1203. local r = math_helpers:lerp(self.render_stuff[startname][endname].circle_color.r, 0.3, g_GlobalVars.frametime * 15.0)
  1204. local g = math_helpers:lerp(self.render_stuff[startname][endname].circle_color.g, 0.3, g_GlobalVars.frametime * 15.0)
  1205. local b = math_helpers:lerp(self.render_stuff[startname][endname].circle_color.b, 0.3, g_GlobalVars.frametime * 15.0)
  1206.  
  1207. local desired_box_length = name_size.x + 20
  1208.  
  1209. if(endspot.description and string.len(endspot.description) > 0) then
  1210. local desc_size = g_Render:CalcTextSize(endspot.description, 11)
  1211. desired_box_height = 16
  1212. if(self.render_stuff[startname][endname].description_text_alpha > 0.01) then desired_box_length = math.max(desired_box_length, desc_size.x) end
  1213. end
  1214.  
  1215. self.render_stuff[startname][endname].description_text_alpha = math_helpers:lerp(self.render_stuff[startname][endname].description_text_alpha, 0.0, g_GlobalVars.frametime * 60.0)
  1216.  
  1217. if(distance > 50.0 or startspot ~= temp_nade) then
  1218. self.render_stuff[startname][endname].text_alpha = math_helpers:lerp(self.render_stuff[startname][endname].text_alpha, 0.0, g_GlobalVars.frametime * 60.0)
  1219. if(self.render_stuff[startname][endname].text_alpha < 0.01) then
  1220. self.render_stuff[startname][endname].box_length = math_helpers:lerp(self.render_stuff[startname][endname].box_length, 10.0, g_GlobalVars.frametime * 30.0)
  1221. self.render_stuff[startname][endname].description_box_height = math_helpers:lerp(self.render_stuff[startname][endname].description_box_height, 0.0, g_GlobalVars.frametime * 30.0)
  1222. if(self.render_stuff[startname][endname].box_length - 10.0 < 0.1 and self.render_stuff[startname][endname].description_box_height < 0.1) then
  1223. self.render_stuff[startname][endname].global_alpha = math_helpers:lerp(self.render_stuff[startname][endname].global_alpha, 0.0, g_GlobalVars.frametime * 60.0)
  1224. end
  1225. end
  1226. else
  1227. if(screenpos.x + self.render_stuff[startname][endname].box_length + 2 > lua_elements.screensize.x or screenpos.x < 12 or screenpos.y + 10 > lua_elements.screensize.y or screenpos.y < 10) then
  1228. self.render_stuff[startname][endname].global_alpha = math_helpers:lerp(self.render_stuff[startname][endname].global_alpha, 1.0, g_GlobalVars.frametime * 60.0)
  1229. else
  1230. self.render_stuff[startname][endname].global_alpha = math_helpers:lerp(self.render_stuff[startname][endname].global_alpha, 0.6, g_GlobalVars.frametime * 60.0)
  1231. end
  1232. if(self.render_stuff[startname][endname].global_alpha > 0.58) then
  1233. self.render_stuff[startname][endname].box_length = math_helpers:lerp(self.render_stuff[startname][endname].box_length, desired_box_length, g_GlobalVars.frametime * 30.0)
  1234. if(desired_box_length - self.render_stuff[startname][endname].box_length < 0.1) then
  1235. self.render_stuff[startname][endname].text_alpha = math_helpers:lerp(self.render_stuff[startname][endname].text_alpha, self.render_stuff[startname][endname].global_alpha, g_GlobalVars.frametime * 60.0)
  1236. if(self.render_stuff[startname][endname].description_text_alpha < 0.01) then
  1237. self.render_stuff[startname][endname].description_box_height = math_helpers:lerp(self.render_stuff[startname][endname].description_box_height, 0.0, g_GlobalVars.frametime * 60.0)
  1238. end
  1239. end
  1240. end
  1241. end
  1242. self.render_stuff[startname][endname].circle_color = Color.new(r, g, b, self.render_stuff[startname][endname].global_alpha)
  1243. if(self.render_stuff[startname][endname].global_alpha < 0.01) then goto continue end
  1244.  
  1245. if(screenpos.x + self.render_stuff[startname][endname].box_length + 2 > lua_elements.screensize.x or screenpos.x < 12 or screenpos.y + 10 > lua_elements.screensize.y or screenpos.y < 10) then
  1246. local vecdelta = Vector2.new(screenpos.x - screencenter.x, screenpos.y - screencenter.y)
  1247. local length = #vecdelta
  1248. local cos = vecdelta.x / length
  1249. local sin = vecdelta.y / length
  1250. local max_legnth = #screencenter
  1251.  
  1252. local newpos = Vector2.new(screencenter.x + max_legnth * cos, screencenter.y + max_legnth * sin)
  1253. if(newpos.x + self.render_stuff[startname][endname].box_length > lua_elements.screensize.x) then newpos.x = lua_elements.screensize.x - self.render_stuff[startname][endname].box_length - 18
  1254. elseif(newpos.x < 16) then newpos.x = 28 end
  1255. if(newpos.y + 16 > lua_elements.screensize.y) then newpos.y = lua_elements.screensize.y - 28
  1256. elseif(newpos.y < 16) then newpos.y = 28 end
  1257.  
  1258. screenpos = newpos
  1259. end
  1260. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y - 8), Vector2.new(screenpos.x + self.render_stuff[startname][endname].box_length, screenpos.y + 8), Color.new(color_set.target_r, color_set.target_g, color_set.target_b, self.render_stuff[startname][endname].global_alpha))
  1261. g_Render:Text(endname, Vector2.new(screenpos.x + 10, screenpos.y - name_size.y / 2), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname][endname].text_alpha), 14)
  1262. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y + 8), Vector2.new(screenpos.x + self.render_stuff[startname][endname].box_length, screenpos.y + 8 + self.render_stuff[startname][endname].description_box_height), Color.new(color_set.body_r, color_set.body_g, color_set.body_b, self.render_stuff[startname][endname].global_alpha))
  1263.  
  1264. g_Render:CircleFilled(screenpos, 5, 15, self.render_stuff[startname][endname].circle_color)
  1265. g_Render:Circle(screenpos, 5, 15, Color.new(0.1, 0.1, 0.1, self.render_stuff[startname][endname].global_alpha))
  1266.  
  1267. ::continue::
  1268. end
  1269.  
  1270. if(temp_fov_nade) then
  1271. local screenpos = g_Render:ScreenPosition(temp_fov_nade.endposition)
  1272. local name_size = g_Render:CalcTextSize(temp_fov_name, 14)
  1273.  
  1274. local r = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].circle_color.r, 0.01, g_GlobalVars.frametime * 15.0)
  1275. local g = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].circle_color.g, 0.65, g_GlobalVars.frametime * 15.0)
  1276. local b = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].circle_color.b, 0.96, g_GlobalVars.frametime * 15.0)
  1277.  
  1278. self.render_stuff[startname][temp_fov_name].global_alpha = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].global_alpha, 0.9, g_GlobalVars.frametime * 30.0)
  1279. self.render_stuff[startname][temp_fov_name].circle_color = Color.new(r, g, b, self.render_stuff[startname][temp_fov_name].global_alpha)
  1280.  
  1281. local desired_box_length = name_size.x + 20
  1282. local desired_box_height = 0
  1283.  
  1284. if(temp_fov_nade.description and string.len(temp_fov_nade.description) > 0) then
  1285. local desc_size = g_Render:CalcTextSize(temp_fov_nade.description, 11)
  1286. desired_box_height = 16
  1287. if(desc_size.x > desired_box_length) then desired_box_length = math.max(desired_box_length, desc_size.x) end
  1288. end
  1289.  
  1290. if(self.render_stuff[startname][temp_fov_name].global_alpha > 0.88) then
  1291. self.render_stuff[startname][temp_fov_name].box_length = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].box_length, desired_box_length, g_GlobalVars.frametime * 30.0)
  1292. self.render_stuff[startname][temp_fov_name].description_box_height = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].description_box_height, desired_box_height, g_GlobalVars.frametime * 30.0)
  1293. if(desired_box_length - self.render_stuff[startname][temp_fov_name].box_length < 0.1 and desired_box_height - self.render_stuff[startname][temp_fov_name].description_box_height < 0.1) then
  1294. self.render_stuff[startname][temp_fov_name].text_alpha = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].text_alpha, 1.0, g_GlobalVars.frametime * 30.0)
  1295. self.render_stuff[startname][temp_fov_name].description_text_alpha = math_helpers:lerp(self.render_stuff[startname][temp_fov_name].description_text_alpha, 1.0, g_GlobalVars.frametime * 30.0)
  1296. end
  1297. end
  1298.  
  1299. if(screenpos.x + self.render_stuff[startname][temp_fov_name].box_length + 2 > lua_elements.screensize.x or screenpos.x < 12 or screenpos.y + 10 > lua_elements.screensize.y or screenpos.y < 10) then
  1300. local vecdelta = Vector2.new(screenpos.x - screencenter.x, screenpos.y - screencenter.y)
  1301. local length = #vecdelta
  1302. local cos = vecdelta.x / length
  1303. local sin = vecdelta.y / length
  1304. local max_legnth = #screencenter
  1305.  
  1306. local newpos = Vector2.new(screencenter.x + max_legnth * cos, screencenter.y + max_legnth * sin)
  1307. if(newpos.x + self.render_stuff[startname][temp_fov_name].box_length > lua_elements.screensize.x) then newpos.x = lua_elements.screensize.x - self.render_stuff[startname][temp_fov_name].box_length - 18
  1308. elseif(newpos.x < 16) then newpos.x = 28 end
  1309. if(newpos.y + 16 > lua_elements.screensize.y) then newpos.y = lua_elements.screensize.y - 28
  1310. elseif(newpos.y < 16) then newpos.y = 28 end
  1311.  
  1312. screenpos = newpos
  1313. end
  1314.  
  1315. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y - 8), Vector2.new(screenpos.x + self.render_stuff[startname][temp_fov_name].box_length, screenpos.y + 8), Color.new(color_set.target_r, color_set.target_g, color_set.target_b, self.render_stuff[startname][temp_fov_name].global_alpha))
  1316. g_Render:Text(temp_fov_name, Vector2.new(screenpos.x + 10, screenpos.y - name_size.y / 2), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname][temp_fov_name].text_alpha), 14)
  1317. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y + 8), Vector2.new(screenpos.x + self.render_stuff[startname][temp_fov_name].box_length, screenpos.y + 8 + self.render_stuff[startname][temp_fov_name].description_box_height), Color.new(color_set.body_r, color_set.body_g, color_set.body_b, self.render_stuff[startname][temp_fov_name].global_alpha))
  1318.  
  1319. if(temp_fov_nade.description and string.len(temp_fov_nade.description) > 0) then
  1320. local desc_size = g_Render:CalcTextSize(temp_fov_nade.description, 11)
  1321. g_Render:BoxFilled(Vector2.new(screenpos.x - 10, screenpos.y + 8), Vector2.new(screenpos.x + self.render_stuff[startname][temp_fov_name].box_length, screenpos.y + 9), Color.new(color_set.gradient_line_r, color_set.gradient_line_g, color_set.gradient_line_b, self.render_stuff[startname][temp_fov_name].global_alpha))
  1322. g_Render:Text(temp_fov_nade.description, Vector2.new(screenpos.x - 5, screenpos.y + 8 + self.render_stuff[startname][temp_fov_name].description_box_height / 2 - desc_size.y / 2), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname][temp_fov_name].description_text_alpha), 11)
  1323. end
  1324.  
  1325. g_Render:CircleFilled(screenpos, 5, 15, self.render_stuff[startname][temp_fov_name].circle_color)
  1326. g_Render:Circle(screenpos, 5, 15, Color.new(0.1, 0.1, 0.1, self.render_stuff[startname][temp_fov_name].global_alpha))
  1327. end
  1328.  
  1329. if(bestlength < nade_type_size.x) then bestlength = nade_type_size.x end
  1330.  
  1331. if(distance < 400.0 and (temp_nade and temp_nade == startspot or temp_nade == nil or lua_elements.nade_helper:GetBool() == false)) then
  1332. self.render_stuff[startname].box_length = math_helpers:lerp(self.render_stuff[startname].box_length, bestlength, g_GlobalVars.frametime * 20.0)
  1333. self.render_stuff[startname].box_height = math_helpers:lerp(self.render_stuff[startname].box_height, num_spots * 16 + 12, g_GlobalVars.frametime * 20.0)
  1334. self.render_stuff[startname].icon_alpha = math_helpers:lerp(self.render_stuff[startname].icon_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  1335. self.render_stuff[startname].box_additions_alpha = math_helpers:lerp(self.render_stuff[startname].box_additions_alpha, self.render_stuff[startname].global_alpha, g_GlobalVars.frametime * 20.0)
  1336. if(bestlength - self.render_stuff[startname].box_length < 0.1) then
  1337. self.render_stuff[startname].box_additions_alpha = math_helpers:lerp(self.render_stuff[startname].box_additions_alpha, self.render_stuff[startname].global_alpha, g_GlobalVars.frametime * 20.0)
  1338. self.render_stuff[startname].text_alpha = math_helpers:lerp(self.render_stuff[startname].text_alpha, self.render_stuff[startname].global_alpha, g_GlobalVars.frametime * 20.0)
  1339. end
  1340. elseif(distance > 400 or (temp_nade and temp_nade ~= startspot)) then
  1341. self.render_stuff[startname].text_alpha = math_helpers:lerp(self.render_stuff[startname].text_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  1342. if(self.render_stuff[startname].text_alpha < 0.01) then
  1343. self.render_stuff[startname].box_additions_alpha = math_helpers:lerp(self.render_stuff[startname].box_additions_alpha, 0.0, g_GlobalVars.frametime * 20.0)
  1344. self.render_stuff[startname].icon_alpha = math_helpers:lerp(self.render_stuff[startname].icon_alpha, self.render_stuff[startname].global_alpha, g_GlobalVars.frametime * 20.0)
  1345. self.render_stuff[startname].box_length = math_helpers:lerp(self.render_stuff[startname].box_length, 16, g_GlobalVars.frametime * 20.0)
  1346. self.render_stuff[startname].box_height = math_helpers:lerp(self.render_stuff[startname].box_height, 16, g_GlobalVars.frametime * 20.0)
  1347. end
  1348. end
  1349.  
  1350. g_Render:BoxFilled(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 - 3, screenpos.y + 1), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2 + 3, screenpos.y - self.render_stuff[startname].box_height - 3), Color.new(color_set.body_r, color_set.body_g, color_set.body_b, 0.95 * self.render_stuff[startname].global_alpha)) -- тело
  1351. g_Render:BoxFilled(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 - 3, screenpos.y - self.render_stuff[startname].box_height + 12), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2 + 3, screenpos.y - self.render_stuff[startname].box_height - 4), Color.new(color_set.head_r, color_set.head_g, color_set.head_b, self.render_stuff[startname].box_additions_alpha)) -- рамка
  1352. g_Render:Text(self.nade_type[tostring(weapon_id)], Vector2.new(screenpos.x - nade_type_size.x / 2, screenpos.y - self.render_stuff[startname].box_height + 12 - nade_type_size.y), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname].text_alpha), 14)
  1353. g_Render:BoxFilled(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 - 3, screenpos.y - self.render_stuff[startname].box_height + 12), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2 + 3, screenpos.y - self.render_stuff[startname].box_height + 13), Color.new(color_set.gradient_line_r, color_set.gradient_line_g, color_set.gradient_line_b, self.render_stuff[startname].box_additions_alpha)) -- градиент
  1354.  
  1355. g_Render:Box(Vector2.new(screenpos.x - self.render_stuff[startname].box_length / 2 - 3, screenpos.y + 1), Vector2.new(screenpos.x + self.render_stuff[startname].box_length / 2 + 3, screenpos.y - self.render_stuff[startname].box_height - 3), Color.new(0.1, 0.15, 0.2, self.render_stuff[startname].global_alpha))
  1356.  
  1357. local icon_size = g_Render:CalcWeaponIconSize(weapon_id, 20)
  1358. g_Render:WeaponIcon(weapon_id, Vector2.new(screenpos.x - icon_size.x / 2, screenpos.y - icon_size.y - 1), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname].icon_alpha), 20)
  1359.  
  1360. num_spots = 0
  1361. for endname, endspot in pairs(startspot) do
  1362. if(type(endspot) == "table") then
  1363. local name_size = g_Render:CalcTextSize(endname, 14)
  1364. g_Render:Text(endname, Vector2.new(screenpos.x - name_size.x / 2, screenpos.y - (15 * num_spots) - name_size.y), Color.new(color_set.text_color_r, color_set.text_color_g, color_set.text_color_b, self.render_stuff[startname].text_alpha), 14)
  1365. num_spots = num_spots + 1
  1366. end
  1367. end
  1368. ::continue::
  1369. end
  1370. end
  1371. end
  1372. end,
  1373.  
  1374. on_pre_prediction = function(self, cmd)
  1375. self:backup_strafe(cmd)
  1376. self:extend_forward(cmd)
  1377. if(self.should_throw == true) then
  1378. if(self.closest_nade.duck == true) then cmd.buttons = bit.bor(cmd.buttons, 4)
  1379. else cmd.buttons = bit.band(cmd.buttons, bit.bnot(4)) end
  1380. end
  1381. end,
  1382.  
  1383. on_prediction = function(self, cmd)
  1384. self:update_configs()
  1385. local localplayer = g_EntityList:GetClientEntity(g_EngineClient:GetLocalPlayer())
  1386. if(localplayer == nil) then return end
  1387. localplayer = localplayer:GetPlayer()
  1388. local velocity = Vector.new(localplayer:GetProp("DT_BasePlayer", "m_vecVelocity[0]"), localplayer:GetProp("DT_BasePlayer", "m_vecVelocity[1]"), localplayer:GetProp("DT_BasePlayer", "m_vecVelocity[2]"))
  1389. local weapon = localplayer:GetActiveWeapon()
  1390. if(weapon == nil) then return end
  1391. local throwtime = weapon:GetProp("DT_BaseCSGrenade", "m_fThrowTime")
  1392. local duckamount = localplayer:GetProp("DT_BasePlayer", "m_flDuckAmount")
  1393. local throwstrengh = weapon:GetProp("DT_BaseCSGrenade", "m_flThrowStrength")
  1394. if(self.should_throw == true) then
  1395. cmd.buttons = bit.bor(cmd.buttons, 1)
  1396. if(self.closest_nade.duck == true and duckamount ~= 1.0) then return end
  1397. if(self.closest_nade.duck == false and duckamount ~= 0.0) then return end
  1398. if(self.closest_nade.strength ~= 1.0 and throwstrengh > self.closest_nade.strength) then cmd.buttons = bit.bor(cmd.buttons, 2048); cmd.buttons = bit.band(cmd.buttons, bit.bnot(1)); return end
  1399. if(throwstrengh < self.closest_nade.strength) then cmd.buttons = bit.bor(cmd.buttons, 1) end
  1400. if(self.run_tick == 0) then self.run_tick = cmd.tick_count end
  1401. if(self.closest_nade.runduration > 0 and self.force_forward == false) then
  1402. local speedfactor = 1.0
  1403. if(self.closest_nade.duck) then speedfactor = 2.93 end
  1404. local movedirection = cmd.viewangles.yaw - (self.closest_nade.ang.yaw + self.movedirections[self.closest_nade.movedirection])
  1405. local move = cheat.AngleToForward(QAngle.new(0, movedirection, 0))
  1406. cmd.forwardmove = (move.x) * (self.closest_nade.speed * speedfactor)
  1407. cmd.sidemove = (move.y) * (self.closest_nade.speed * speedfactor)
  1408. end
  1409. if(cmd.tick_count - self.run_tick >= self.closest_nade.runduration) then
  1410. if(self.jump_tick == 0) then self.jump_tick = cmd.tick_count end
  1411. if(self.closest_nade.jump and self.closest_nade.jumpthresthold <= 0) then
  1412. cmd.buttons = bit.bor(cmd.buttons, 2)
  1413. end
  1414. if(cmd.tick_count - self.jump_tick >= self.closest_nade.jumpduration or self.closest_nade.jumpthresthold > 0) then
  1415. cmd.buttons = bit.band(cmd.buttons, bit.bnot(1))
  1416. cmd.buttons = bit.band(cmd.buttons, bit.bnot(2048))
  1417. cmd.viewangles = self.closest_nade.ang
  1418. self.force_forward = self.closest_nade.extendforward
  1419. end
  1420. if(self.closest_nade.jumpthresthold > 0 and cmd.tick_count - self.jump_tick >= self.closest_nade.jumpthresthold) then
  1421. cmd.buttons = bit.bor(cmd.buttons, 2)
  1422. end
  1423. end
  1424. if(throwtime > 0.0 and throwtime < g_GlobalVars.curtime) then
  1425. self:setup_backup_strafe(cmd)
  1426. self.closest_nade = nil
  1427. self.closest_nade_position = nil
  1428. self.should_throw = false
  1429. self.run_tick = 0
  1430. self.jump_tick = 0
  1431. self.force_forward = false
  1432. menu_elements.autostrafe:SetBool(self.old_autostrafe)
  1433. fakelag:ForceSend()
  1434. end
  1435. elseif(self.closest_nade_position and lua_elements.nade_helper:GetBool() == true) then
  1436. cmd.buttons = bit.band(cmd.buttons, bit.bnot(2048))
  1437. local origin = localplayer:GetProp("DT_BaseEntity", "m_vecOrigin")
  1438. local onground = (bit.band(localplayer:GetProp("DT_BasePlayer", "m_fFlags"), 1) == 1)
  1439. local delta = (self.closest_nade_position - origin)
  1440. local length = #delta
  1441. if(onground == true and length < 100.0) then
  1442. local viewangles = g_EngineClient:GetViewAngles()
  1443. local direction = cheat.VectorToAngle(delta)
  1444. direction.yaw = viewangles.yaw - direction.yaw
  1445. local move = cheat.AngleToForward(direction)
  1446. local v1 = bit.band(cmd.buttons, 8) == 8
  1447. local v2 = bit.band(cmd.buttons, 16) == 16
  1448. local v3 = bit.band(cmd.buttons, 512) == 512
  1449. local v4 = bit.band(cmd.buttons, 1024) == 1024
  1450. local in_duck = bit.band(cmd.buttons, 4) == 4
  1451. local in_move = (v1 or v2 or v3 or v4)
  1452. if(in_move == false and length > 0.1) then
  1453. cmd.forwardmove = move.x * (450.0 * (math.exp(math_helpers:clamp(length, 0.0, 5.0) - 5.0)) + 1.0)
  1454. cmd.sidemove = move.y * (450.0 * (math.exp(math_helpers:clamp(length, 0.0, 5.0) - 5.0)) + 1.0)
  1455. if(in_duck == true) then
  1456. cmd.forwardmove = cmd.forwardmove * 2.93
  1457. cmd.sidemove = cmd.sidemove * 2.93
  1458. end
  1459. elseif(weapon:GetProp("DT_BaseCSGrenade", "m_bPinPulled") and self.closest_nade and velocity:Length2D() < 10.0) then
  1460. self.should_throw = true
  1461. self.old_autostrafe = menu_elements.autostrafe:GetBool()
  1462. menu_elements.autostrafe:SetBool(false)
  1463. end
  1464. end
  1465. end
  1466. end,
  1467. }
  1468.  
  1469. local function on_firebullet(shot)
  1470. end
  1471.  
  1472. local function on_ragebotshot(shot)
  1473. end
  1474.  
  1475. local function on_event(event)
  1476. end
  1477.  
  1478. local function on_pre_prediction(cmd)
  1479. grenade_helper:on_pre_prediction(cmd)
  1480. end
  1481.  
  1482. local function on_overrideview(setup)
  1483.  
  1484. end
  1485.  
  1486. local function on_draw()
  1487. lua_elements.screensize = g_EngineClient:GetScreenSize()
  1488. grenade_helper:on_draw()
  1489. --movement_helper:on_draw()
  1490. end
  1491.  
  1492. local function on_createmove(cmd)
  1493. --movement_helper:on_createmove(cmd)
  1494. end
  1495.  
  1496. local function on_prediction(cmd)
  1497. grenade_helper:on_prediction(cmd)
  1498. --movement_helper:on_prediction(cmd)
  1499. end
  1500.  
  1501. local function on_registered_shot(shot)
  1502. end
  1503.  
  1504. local function on_destroy()
  1505. end
  1506.  
  1507. local function on_create_button()
  1508. grenade_helper:on_create_nade()
  1509. end
  1510.  
  1511. local function on_remove_button()
  1512. grenade_helper:on_remove_nade()
  1513. end
  1514.  
  1515. local function on_save_button()
  1516. grenade_helper:on_save_nade()
  1517. end
  1518.  
  1519. local function on_teleport_button()
  1520. grenade_helper:on_teleport_nade()
  1521. end
  1522.  
  1523. local function on_nade_update_button()
  1524. grenade_helper:on_nade_update()
  1525. end
  1526.  
  1527. local function on_properties_combo()
  1528. grenade_helper:on_properties()
  1529. end
  1530.  
  1531. local function on_backupdirection_combo()
  1532. grenade_helper:on_backupstrafe()
  1533. end
  1534.  
  1535. local function on_run_direction_combo()
  1536. if(lua_elements.run_direction:GetInt() > 0) then
  1537. lua_elements.extend_forward_strenght:SetVisible(true)
  1538. else
  1539. lua_elements.extend_forward_strenght:SetVisible(false)
  1540. end
  1541. end
  1542.  
  1543. local function check_sub()
  1544. for name, element in pairs(lua_elements) do
  1545. if(name == "user_name" or name == "screensize") then goto continue end
  1546. element:SetVisible(false)
  1547. ::continue::
  1548. end
  1549.  
  1550. return 0
  1551. end
  1552.  
  1553. local sub_state = check_sub()
  1554.  
  1555. if(sub_state == 0) then
  1556. for name, element in pairs(lua_elements) do
  1557. if(string.find(name, "nade_helper") ~= nil or name == "create_nade") then
  1558. element:SetVisible(true)
  1559. end
  1560. end
  1561. menu.Text("| Information", "RU: Для использование grenade helper вам нужно забиндить 'Enable Grenade Helper' - на удобную вам клавишу, после того вам нужно загрузить локации под именем: Default - и можешь начинать спокойно дальше играть.")
  1562. menu.Text("| Information", "ENG: To use the grenade helper, you need to bind 'Enable Grenade Helper' - to a key convenient for you, after that you need to load locations under the name: Default - and you can start playing peacefully.")
  1563. cheat.RegisterCallback("createmove", on_createmove)
  1564. cheat.RegisterCallback("draw", on_draw)
  1565. cheat.RegisterCallback("override_view", on_overrideview)
  1566. cheat.RegisterCallback("fire_bullet", on_firebullet)
  1567. cheat.RegisterCallback("ragebot_shot", on_ragebotshot)
  1568. cheat.RegisterCallback("events", on_event)
  1569. cheat.RegisterCallback("pre_prediction", on_pre_prediction)
  1570. cheat.RegisterCallback("prediction", on_prediction)
  1571. cheat.RegisterCallback("registered_shot", on_registered_shot)
  1572. cheat.RegisterCallback("destroy", on_destroy)
  1573. lua_elements.create_nade:RegisterCallback(on_create_button)
  1574. lua_elements.remove_nade:RegisterCallback(on_remove_button)
  1575. lua_elements.save_nade:RegisterCallback(on_save_button)
  1576. lua_elements.nade_teleport:RegisterCallback(on_teleport_button)
  1577. lua_elements.nade_update_pos_ang:RegisterCallback(on_nade_update_button)
  1578. lua_elements.properties:RegisterCallback(on_properties_combo)
  1579. lua_elements.backup_direction:RegisterCallback(on_backupdirection_combo)
  1580. lua_elements.run_direction:RegisterCallback(on_run_direction_combo)
  1581. end
Add Comment
Please, Sign In to add comment