itzRealFisherYT

Fisher MM2 Tools

Nov 8th, 2025 (edited)
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.53 KB | None | 0 0
  1. --// Fisher MM2 Tools
  2. --// Credits: @ItzOnlyFisher
  3.  
  4. local Players = game:GetService("Players")
  5. local UserInputService = game:GetService("UserInputService")
  6. local Debris = game:GetService("Debris")
  7.  
  8. local LocalPlayer = Players.LocalPlayer
  9. local Camera = workspace.CurrentCamera
  10.  
  11. local FisherMM2 = {}
  12.  
  13. --==================================================
  14. -- CONFIG
  15. --==================================================
  16.  
  17. local Config = {
  18. ToggleKey = Enum.KeyCode.RightControl,
  19. EspKey = Enum.KeyCode.F2,
  20.  
  21. EspEnabled = false,
  22. ShowBoxes = true,
  23. ShowNames = true,
  24. ShowRoles = true,
  25. ShowDistance = true,
  26. MaxDistance = 1000,
  27.  
  28. Colors = {
  29. Murderer = Color3.fromRGB(255, 70, 70),
  30. Sheriff = Color3.fromRGB(70, 140, 255),
  31. Innocent = Color3.fromRGB(80, 220, 120),
  32. Unknown = Color3.fromRGB(255, 255, 255)
  33. }
  34. }
  35.  
  36. local Connections = {}
  37. local EspObjects = {}
  38.  
  39. local Gui
  40. local Main
  41. local ToggleButton
  42. local PlayerList
  43. local StatusLabel
  44. local EspButton
  45.  
  46. local destroyed = false
  47.  
  48. --==================================================
  49. -- CONNECTION HELPER
  50. --==================================================
  51.  
  52. local function Connect(signal, callback)
  53. local connection = signal:Connect(callback)
  54.  
  55. table.insert(Connections, connection)
  56.  
  57. return connection
  58. end
  59.  
  60. --==================================================
  61. -- ROLE DETECTION
  62. --==================================================
  63.  
  64. local function HasTool(player, toolName)
  65. local character = player.Character
  66. local backpack = player:FindFirstChild("Backpack")
  67.  
  68. if character and character:FindFirstChild(toolName) then
  69. return true
  70. end
  71.  
  72. if backpack and backpack:FindFirstChild(toolName) then
  73. return true
  74. end
  75.  
  76. return false
  77. end
  78.  
  79. function FisherMM2:GetRole(player)
  80. if not player then
  81. return "Unknown"
  82. end
  83.  
  84. -- Attribute support
  85. local roleAttribute = player:GetAttribute("Role")
  86.  
  87. if roleAttribute then
  88. return tostring(roleAttribute)
  89. end
  90.  
  91. -- Value support
  92. local roleValue = player:FindFirstChild("Role")
  93.  
  94. if roleValue and roleValue:IsA("StringValue") then
  95. return roleValue.Value
  96. end
  97.  
  98. -- MM2-style tool detection
  99. if HasTool(player, "Knife") then
  100. return "Murderer"
  101. end
  102.  
  103. if HasTool(player, "Gun") then
  104. return "Sheriff"
  105. end
  106.  
  107. return "Innocent"
  108. end
  109.  
  110. function FisherMM2:GetRoleColor(role)
  111. return Config.Colors[role] or Config.Colors.Unknown
  112. end
  113.  
  114. --==================================================
  115. -- UI HELPERS
  116. --==================================================
  117.  
  118. local function CreateCorner(parent, radius)
  119. local corner = Instance.new("UICorner")
  120.  
  121. corner.CornerRadius = UDim.new(0, radius or 6)
  122. corner.Parent = parent
  123.  
  124. return corner
  125. end
  126.  
  127. local function CreateButton(parent, text)
  128. local button = Instance.new("TextButton")
  129.  
  130. button.Size = UDim2.new(1, 0, 0, 32)
  131. button.BackgroundColor3 = Color3.fromRGB(48, 48, 48)
  132. button.TextColor3 = Color3.fromRGB(255, 255, 255)
  133.  
  134. button.Text = text
  135. button.TextSize = 14
  136. button.Font = Enum.Font.GothamMedium
  137.  
  138. button.BorderSizePixel = 0
  139. button.AutoButtonColor = true
  140.  
  141. CreateCorner(button, 6)
  142.  
  143. button.Parent = parent
  144.  
  145. return button
  146. end
  147.  
  148. local function SetToggleButton(button, state, prefix)
  149. button.Text = prefix .. ": " .. (state and "ON" or "OFF")
  150.  
  151. if state then
  152. button.BackgroundColor3 = Color3.fromRGB(45, 120, 70)
  153. else
  154. button.BackgroundColor3 = Color3.fromRGB(48, 48, 48)
  155. end
  156. end
  157.  
  158. --==================================================
  159. -- TELEPORT
  160. --==================================================
  161.  
  162. function FisherMM2:TeleportToPlayer(player)
  163. if not player then
  164. return
  165. end
  166.  
  167. local localCharacter = LocalPlayer.Character
  168. local targetCharacter = player.Character
  169.  
  170. if not localCharacter or not targetCharacter then
  171. StatusLabel.Text = "Character unavailable"
  172. return
  173. end
  174.  
  175. local localRoot = localCharacter:FindFirstChild("HumanoidRootPart")
  176. local targetRoot = targetCharacter:FindFirstChild("HumanoidRootPart")
  177.  
  178. if not localRoot or not targetRoot then
  179. StatusLabel.Text = "RootPart unavailable"
  180. return
  181. end
  182.  
  183. localRoot.CFrame = targetRoot.CFrame * CFrame.new(0, 3, 3)
  184.  
  185. StatusLabel.Text = "Teleported to " .. player.Name
  186.  
  187. local marker = Instance.new("Part")
  188.  
  189. marker.Name = "FisherTeleportMarker"
  190. marker.Shape = Enum.PartType.Ball
  191. marker.Size = Vector3.new(1, 1, 1)
  192. marker.Anchored = true
  193. marker.CanCollide = false
  194. marker.Material = Enum.Material.Neon
  195. marker.Transparency = 0.4
  196. marker.Color = Color3.fromRGB(80, 180, 255)
  197. marker.CFrame = targetRoot.CFrame
  198. marker.Parent = workspace
  199.  
  200. Debris:AddItem(marker, 1.5)
  201. end
  202.  
  203. --==================================================
  204. -- ESP
  205. --==================================================
  206.  
  207. function FisherMM2:RemoveEsp(player)
  208. local data = EspObjects[player]
  209.  
  210. if not data then
  211. return
  212. end
  213.  
  214. for _, object in pairs(data) do
  215. if typeof(object) == "Instance" then
  216. object:Destroy()
  217. end
  218. end
  219.  
  220. EspObjects[player] = nil
  221. end
  222.  
  223. function FisherMM2:CreateEsp(player)
  224. if player == LocalPlayer then
  225. return
  226. end
  227.  
  228. self:RemoveEsp(player)
  229.  
  230. local character = player.Character
  231.  
  232. if not character then
  233. return
  234. end
  235.  
  236. local root = character:FindFirstChild("HumanoidRootPart")
  237.  
  238. if not root then
  239. return
  240. end
  241.  
  242. -- Highlight / box style ESP
  243. local highlight = Instance.new("Highlight")
  244.  
  245. highlight.Name = "FisherHighlight"
  246. highlight.Adornee = character
  247. highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
  248. highlight.FillTransparency = 0.75
  249. highlight.OutlineTransparency = 0
  250. highlight.Parent = character
  251.  
  252. -- Billboard
  253. local billboard = Instance.new("BillboardGui")
  254.  
  255. billboard.Name = "FisherESP"
  256. billboard.Size = UDim2.new(0, 220, 0, 55)
  257. billboard.StudsOffset = Vector3.new(0, 3.2, 0)
  258. billboard.AlwaysOnTop = true
  259. billboard.Adornee = root
  260. billboard.Parent = root
  261.  
  262. local label = Instance.new("TextLabel")
  263.  
  264. label.Size = UDim2.new(1, 0, 1, 0)
  265. label.BackgroundTransparency = 1
  266.  
  267. label.TextColor3 = Color3.fromRGB(255, 255, 255)
  268. label.TextStrokeTransparency = 0.3
  269. label.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
  270.  
  271. label.TextSize = 14
  272. label.Font = Enum.Font.GothamBold
  273. label.Parent = billboard
  274.  
  275. EspObjects[player] = {
  276. Highlight = highlight,
  277. Billboard = billboard,
  278. Label = label
  279. }
  280.  
  281. task.spawn(function()
  282. while
  283. not destroyed
  284. and Config.EspEnabled
  285. and player.Parent
  286. and EspObjects[player]
  287. do
  288. local currentCharacter = player.Character
  289.  
  290. local currentRoot =
  291. currentCharacter
  292. and currentCharacter:FindFirstChild("HumanoidRootPart")
  293.  
  294. if currentCharacter and currentRoot then
  295. local role = self:GetRole(player)
  296. local color = self:GetRoleColor(role)
  297.  
  298. local distance =
  299. (Camera.CFrame.Position - currentRoot.Position).Magnitude
  300.  
  301. local visible =
  302. distance <= Config.MaxDistance
  303.  
  304. highlight.Adornee = currentCharacter
  305. highlight.FillColor = color
  306. highlight.OutlineColor = color
  307.  
  308. highlight.Enabled =
  309. visible
  310. and Config.ShowBoxes
  311.  
  312. billboard.Adornee = currentRoot
  313.  
  314. billboard.Enabled =
  315. visible
  316. and (
  317. Config.ShowNames
  318. or Config.ShowRoles
  319. )
  320.  
  321. local textParts = {}
  322.  
  323. if Config.ShowNames then
  324. table.insert(textParts, player.Name)
  325. end
  326.  
  327. if Config.ShowRoles then
  328. table.insert(textParts, "[" .. role .. "]")
  329. end
  330.  
  331. if Config.ShowDistance then
  332. table.insert(
  333. textParts,
  334. math.floor(distance) .. "m"
  335. )
  336. end
  337.  
  338. label.Text =
  339. table.concat(textParts, " ")
  340.  
  341. label.TextColor3 = color
  342. else
  343. billboard.Enabled = false
  344. highlight.Enabled = false
  345. end
  346.  
  347. task.wait(0.1)
  348. end
  349. end)
  350. end
  351.  
  352. function FisherMM2:RefreshEsp()
  353. for player in pairs(EspObjects) do
  354. self:RemoveEsp(player)
  355. end
  356.  
  357. if not Config.EspEnabled then
  358. return
  359. end
  360.  
  361. for _, player in ipairs(Players:GetPlayers()) do
  362. if player ~= LocalPlayer then
  363. self:CreateEsp(player)
  364. end
  365. end
  366. end
  367.  
  368. --==================================================
  369. -- PLAYER LIST
  370. --==================================================
  371.  
  372. function FisherMM2:CreatePlayerEntry(player)
  373. local entry = Instance.new("Frame")
  374.  
  375. entry.Name = player.Name .. "_Entry"
  376. entry.Size = UDim2.new(1, -6, 0, 46)
  377. entry.BackgroundColor3 = Color3.fromRGB(42, 42, 42)
  378. entry.BorderSizePixel = 0
  379.  
  380. CreateCorner(entry, 6)
  381.  
  382. -- Display name
  383. local nameLabel = Instance.new("TextLabel")
  384.  
  385. nameLabel.Size = UDim2.new(0.55, 0, 0.5, 0)
  386. nameLabel.Position = UDim2.new(0, 10, 0, 2)
  387. nameLabel.BackgroundTransparency = 1
  388.  
  389. nameLabel.Text = player.DisplayName
  390. nameLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
  391.  
  392. nameLabel.TextXAlignment = Enum.TextXAlignment.Left
  393. nameLabel.Font = Enum.Font.GothamMedium
  394. nameLabel.TextSize = 13
  395.  
  396. nameLabel.Parent = entry
  397.  
  398. -- Username
  399. local usernameLabel = Instance.new("TextLabel")
  400.  
  401. usernameLabel.Size = UDim2.new(0.55, 0, 0.4, 0)
  402. usernameLabel.Position = UDim2.new(0, 10, 0.5, 0)
  403. usernameLabel.BackgroundTransparency = 1
  404.  
  405. usernameLabel.Text = "@" .. player.Name
  406. usernameLabel.TextColor3 = Color3.fromRGB(150, 150, 150)
  407.  
  408. usernameLabel.TextXAlignment = Enum.TextXAlignment.Left
  409. usernameLabel.Font = Enum.Font.Gotham
  410. usernameLabel.TextSize = 11
  411.  
  412. usernameLabel.Parent = entry
  413.  
  414. -- Role
  415. local roleLabel = Instance.new("TextLabel")
  416.  
  417. roleLabel.Size = UDim2.new(0, 85, 0, 20)
  418. roleLabel.Position = UDim2.new(1, -145, 0.5, -10)
  419. roleLabel.BackgroundTransparency = 1
  420.  
  421. roleLabel.Font = Enum.Font.GothamBold
  422. roleLabel.TextSize = 12
  423.  
  424. roleLabel.Parent = entry
  425.  
  426. -- Teleport button
  427. local tpButton = Instance.new("TextButton")
  428.  
  429. tpButton.Size = UDim2.new(0, 50, 0, 28)
  430. tpButton.Position = UDim2.new(1, -55, 0.5, -14)
  431.  
  432. tpButton.BackgroundColor3 = Color3.fromRGB(60, 110, 180)
  433. tpButton.TextColor3 = Color3.fromRGB(255, 255, 255)
  434.  
  435. tpButton.Text = "TP"
  436. tpButton.TextSize = 12
  437. tpButton.Font = Enum.Font.GothamBold
  438.  
  439. tpButton.BorderSizePixel = 0
  440.  
  441. tpButton.Parent = entry
  442.  
  443. CreateCorner(tpButton, 5)
  444.  
  445. Connect(tpButton.MouseButton1Click, function()
  446. self:TeleportToPlayer(player)
  447. end)
  448.  
  449. task.spawn(function()
  450. while
  451. not destroyed
  452. and entry.Parent
  453. and player.Parent
  454. do
  455. local role = self:GetRole(player)
  456.  
  457. roleLabel.Text = role
  458. roleLabel.TextColor3 =
  459. self:GetRoleColor(role)
  460.  
  461. task.wait(0.5)
  462. end
  463. end)
  464.  
  465. return entry
  466. end
  467.  
  468. function FisherMM2:RefreshPlayerList()
  469. if not PlayerList then
  470. return
  471. end
  472.  
  473. for _, child in ipairs(PlayerList:GetChildren()) do
  474. if child:IsA("Frame") then
  475. child:Destroy()
  476. end
  477. end
  478.  
  479. local count = 0
  480.  
  481. for _, player in ipairs(Players:GetPlayers()) do
  482. local entry =
  483. self:CreatePlayerEntry(player)
  484.  
  485. entry.Parent = PlayerList
  486.  
  487. count += 1
  488. end
  489.  
  490. PlayerList.CanvasSize =
  491. UDim2.new(
  492. 0,
  493. 0,
  494. 0,
  495. count * 52
  496. )
  497.  
  498. StatusLabel.Text =
  499. tostring(count) .. " players"
  500. end
  501.  
  502. --==================================================
  503. -- GUI
  504. --==================================================
  505.  
  506. function FisherMM2:CreateGui()
  507. local existing =
  508. LocalPlayer.PlayerGui:FindFirstChild("FisherMM2")
  509.  
  510. if existing then
  511. existing:Destroy()
  512. end
  513.  
  514. Gui = Instance.new("ScreenGui")
  515.  
  516. Gui.Name = "FisherMM2"
  517. Gui.ResetOnSpawn = false
  518. Gui.Parent = LocalPlayer.PlayerGui
  519.  
  520. --==================================================
  521. -- FLOATING TOGGLE BUTTON
  522. --==================================================
  523.  
  524. ToggleButton = Instance.new("TextButton")
  525.  
  526. ToggleButton.Name = "FisherToggleButton"
  527.  
  528. ToggleButton.Size =
  529. UDim2.new(0, 52, 0, 52)
  530.  
  531. ToggleButton.Position =
  532. UDim2.new(0, 15, 0.5, -26)
  533.  
  534. ToggleButton.BackgroundColor3 =
  535. Color3.fromRGB(30, 30, 30)
  536.  
  537. ToggleButton.TextColor3 =
  538. Color3.fromRGB(255, 255, 255)
  539.  
  540. ToggleButton.Text = "F"
  541. ToggleButton.TextSize = 22
  542. ToggleButton.Font = Enum.Font.GothamBold
  543.  
  544. ToggleButton.BorderSizePixel = 0
  545.  
  546. ToggleButton.Active = true
  547. ToggleButton.Draggable = true
  548. ToggleButton.AutoButtonColor = true
  549.  
  550. ToggleButton.Parent = Gui
  551.  
  552. local ToggleCorner =
  553. Instance.new("UICorner")
  554.  
  555. ToggleCorner.CornerRadius =
  556. UDim.new(1, 0)
  557.  
  558. ToggleCorner.Parent =
  559. ToggleButton
  560.  
  561. local ToggleStroke =
  562. Instance.new("UIStroke")
  563.  
  564. ToggleStroke.Thickness = 1.5
  565. ToggleStroke.Transparency = 0.25
  566. ToggleStroke.Color =
  567. Color3.fromRGB(100, 100, 100)
  568.  
  569. ToggleStroke.Parent =
  570. ToggleButton
  571.  
  572. --==================================================
  573. -- MAIN WINDOW
  574. --==================================================
  575.  
  576. Main = Instance.new("Frame")
  577.  
  578. Main.Size =
  579. UDim2.new(0, 340, 0, 500)
  580.  
  581. Main.Position =
  582. UDim2.new(
  583. 1,
  584. -355,
  585. 0.5,
  586. -250
  587. )
  588.  
  589. Main.BackgroundColor3 =
  590. Color3.fromRGB(24, 24, 24)
  591.  
  592. Main.BorderSizePixel = 0
  593. Main.Active = true
  594. Main.Draggable = true
  595.  
  596. Main.Parent = Gui
  597.  
  598. CreateCorner(Main, 10)
  599.  
  600. local title =
  601. Instance.new("TextLabel")
  602.  
  603. title.Size =
  604. UDim2.new(1, 0, 0, 35)
  605.  
  606. title.Position =
  607. UDim2.new(0, 0, 0, 5)
  608.  
  609. title.BackgroundTransparency = 1
  610.  
  611. title.Text = "Fisher MM2 Tools"
  612.  
  613. title.TextColor3 =
  614. Color3.fromRGB(255, 255, 255)
  615.  
  616. title.TextSize = 20
  617. title.Font = Enum.Font.GothamBold
  618.  
  619. title.Parent = Main
  620.  
  621. -- Credits
  622. local credits =
  623. Instance.new("TextLabel")
  624.  
  625. credits.Size =
  626. UDim2.new(1, 0, 0, 18)
  627.  
  628. credits.Position =
  629. UDim2.new(0, 0, 0, 34)
  630.  
  631. credits.BackgroundTransparency = 1
  632.  
  633. credits.Text =
  634. "by @ItzOnlyFisher"
  635.  
  636. credits.TextColor3 =
  637. Color3.fromRGB(140, 140, 140)
  638.  
  639. credits.TextSize = 11
  640. credits.Font = Enum.Font.Gotham
  641.  
  642. credits.Parent = Main
  643.  
  644. -- Status
  645. StatusLabel =
  646. Instance.new("TextLabel")
  647.  
  648. StatusLabel.Size =
  649. UDim2.new(1, -20, 0, 25)
  650.  
  651. StatusLabel.Position =
  652. UDim2.new(0, 10, 0, 58)
  653.  
  654. StatusLabel.BackgroundColor3 =
  655. Color3.fromRGB(35, 35, 35)
  656.  
  657. StatusLabel.TextColor3 =
  658. Color3.fromRGB(120, 220, 150)
  659.  
  660. StatusLabel.Text = "Ready"
  661.  
  662. StatusLabel.TextSize = 12
  663. StatusLabel.Font = Enum.Font.Gotham
  664.  
  665. StatusLabel.Parent = Main
  666.  
  667. CreateCorner(StatusLabel, 5)
  668.  
  669. -- Player list
  670. PlayerList =
  671. Instance.new("ScrollingFrame")
  672.  
  673. PlayerList.Size =
  674. UDim2.new(1, -20, 0, 275)
  675.  
  676. PlayerList.Position =
  677. UDim2.new(0, 10, 0, 95)
  678.  
  679. PlayerList.BackgroundColor3 =
  680. Color3.fromRGB(30, 30, 30)
  681.  
  682. PlayerList.BorderSizePixel = 0
  683. PlayerList.ScrollBarThickness = 5
  684.  
  685. PlayerList.CanvasSize =
  686. UDim2.new()
  687.  
  688. PlayerList.Parent = Main
  689.  
  690. CreateCorner(PlayerList, 7)
  691.  
  692. local listLayout =
  693. Instance.new("UIListLayout")
  694.  
  695. listLayout.Padding =
  696. UDim.new(0, 5)
  697.  
  698. listLayout.SortOrder =
  699. Enum.SortOrder.Name
  700.  
  701. listLayout.Parent =
  702. PlayerList
  703.  
  704. -- Controls
  705. local controls =
  706. Instance.new("Frame")
  707.  
  708. controls.Size =
  709. UDim2.new(1, -20, 0, 105)
  710.  
  711. controls.Position =
  712. UDim2.new(0, 10, 0, 382)
  713.  
  714. controls.BackgroundTransparency = 1
  715. controls.Parent = Main
  716.  
  717. local layout =
  718. Instance.new("UIListLayout")
  719.  
  720. layout.Padding =
  721. UDim.new(0, 5)
  722.  
  723. layout.Parent =
  724. controls
  725.  
  726. EspButton =
  727. CreateButton(
  728. controls,
  729. "ESP: OFF"
  730. )
  731.  
  732. local refreshButton =
  733. CreateButton(
  734. controls,
  735. "Refresh Players"
  736. )
  737.  
  738. local destroyButton =
  739. CreateButton(
  740. controls,
  741. "DESTROY GUI"
  742. )
  743.  
  744. destroyButton.BackgroundColor3 =
  745. Color3.fromRGB(135, 45, 45)
  746.  
  747. --==================================================
  748. -- BUTTON CONNECTIONS
  749. --==================================================
  750.  
  751. Connect(
  752. ToggleButton.MouseButton1Click,
  753. function()
  754. Main.Visible =
  755. not Main.Visible
  756. end
  757. )
  758.  
  759. Connect(
  760. EspButton.MouseButton1Click,
  761. function()
  762. Config.EspEnabled =
  763. not Config.EspEnabled
  764.  
  765. SetToggleButton(
  766. EspButton,
  767. Config.EspEnabled,
  768. "ESP"
  769. )
  770.  
  771. self:RefreshEsp()
  772.  
  773. StatusLabel.Text =
  774. Config.EspEnabled
  775. and "ESP enabled"
  776. or "ESP disabled"
  777. end
  778. )
  779.  
  780. Connect(
  781. refreshButton.MouseButton1Click,
  782. function()
  783. self:RefreshPlayerList()
  784.  
  785. if Config.EspEnabled then
  786. self:RefreshEsp()
  787. end
  788. end
  789. )
  790.  
  791. Connect(
  792. destroyButton.MouseButton1Click,
  793. function()
  794. self:Destroy()
  795. end
  796. )
  797.  
  798. self:RefreshPlayerList()
  799. end
  800.  
  801. --==================================================
  802. -- PLAYER CONNECTIONS
  803. --==================================================
  804.  
  805. function FisherMM2:SetupConnections()
  806. Connect(
  807. Players.PlayerAdded,
  808. function(player)
  809. task.wait(0.5)
  810.  
  811. if destroyed then
  812. return
  813. end
  814.  
  815. self:RefreshPlayerList()
  816.  
  817. if Config.EspEnabled then
  818. self:CreateEsp(player)
  819. end
  820.  
  821. Connect(
  822. player.CharacterAdded,
  823. function()
  824. task.wait(0.5)
  825.  
  826. if Config.EspEnabled then
  827. self:CreateEsp(player)
  828. end
  829. end
  830. )
  831. end
  832. )
  833.  
  834. Connect(
  835. Players.PlayerRemoving,
  836. function(player)
  837. self:RemoveEsp(player)
  838.  
  839. task.defer(function()
  840. if not destroyed then
  841. self:RefreshPlayerList()
  842. end
  843. end)
  844. end
  845. )
  846.  
  847. for _, player in ipairs(Players:GetPlayers()) do
  848. if player ~= LocalPlayer then
  849. Connect(
  850. player.CharacterAdded,
  851. function()
  852. task.wait(0.5)
  853.  
  854. if Config.EspEnabled then
  855. self:CreateEsp(player)
  856. end
  857. end
  858. )
  859. end
  860. end
  861.  
  862. -- Keyboard controls
  863. Connect(
  864. UserInputService.InputBegan,
  865. function(input, processed)
  866. if processed or destroyed then
  867. return
  868. end
  869.  
  870. if input.KeyCode == Config.ToggleKey then
  871. Main.Visible =
  872. not Main.Visible
  873.  
  874. elseif input.KeyCode == Config.EspKey then
  875. Config.EspEnabled =
  876. not Config.EspEnabled
  877.  
  878. SetToggleButton(
  879. EspButton,
  880. Config.EspEnabled,
  881. "ESP"
  882. )
  883.  
  884. self:RefreshEsp()
  885. end
  886. end
  887. )
  888. end
  889.  
  890. --==================================================
  891. -- DESTROY
  892. --==================================================
  893.  
  894. function FisherMM2:Destroy()
  895. if destroyed then
  896. return
  897. end
  898.  
  899. destroyed = true
  900.  
  901. Config.EspEnabled = false
  902.  
  903. -- Remove ESP
  904. for player in pairs(EspObjects) do
  905. self:RemoveEsp(player)
  906. end
  907.  
  908. -- Disconnect events
  909. for _, connection in ipairs(Connections) do
  910. if connection.Connected then
  911. connection:Disconnect()
  912. end
  913. end
  914.  
  915. table.clear(Connections)
  916.  
  917. -- Remove GUI + floating button
  918. if Gui then
  919. Gui:Destroy()
  920. end
  921.  
  922. print("Fisher MM2 Tools destroyed")
  923. end
  924.  
  925. --==================================================
  926. -- INIT
  927. --==================================================
  928.  
  929. function FisherMM2:Initialize()
  930. self:CreateGui()
  931. self:SetupConnections()
  932.  
  933. print("================================")
  934. print("Fisher MM2 Tools")
  935. print("Credits: @ItzOnlyFisher")
  936. print("RightControl = Toggle GUI")
  937. print("F2 = Toggle ESP")
  938. print("Floating F button = Toggle GUI")
  939. print("================================")
  940.  
  941. return self
  942. end
  943.  
  944. FisherMM2:Initialize()
  945.  
  946. return FisherMM2
Advertisement
Add Comment
Please, Sign In to add comment