now i really dont know how to equip a tool using a scroll wheel, its it even possible to make a script to do it?
i have tried to research about it, but i dont see thing that can help
No, unfortunately to the best of my knowledge, you cannot define the scroll wheel in Enum.Keycode
.
The scroll wheel is automatically part of the Roblox game play as a zoom in/out tool.
If you want to use it for other things in UserInputService then try this out:
https://developer.roblox.com/en-us/api-reference/class/Mouse
Even though mouse is deprecated and shouldn’t be used, I know that Mouse | Roblox Creator Documentation exists, and so does Mouse | Roblox Creator Documentation. Use those to change the tool depending on which is which.
This is how far I was able to get it:
--LocalScript inside StarterCharacterScripts
local Players = game:GetService("Players")
local Player = Players.LocalPlayer
local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")
local Mouse = Player:GetMouse()
local equipped = 0
local max = 0
function GetTools(equippedTool)
local tools = Player.Backpack:GetChildren()
table.insert(tools, equippedTool)
table.sort(tools, function(a, b) --sort by name
return a.Name < b.Name
end)
return tools
end
function Equip(equippedTool)
local tools = GetTools(equippedTool)
local index = (equipped % #tools)+1
Humanoid:EquipTool(tools[index])
end
function Update(direction)
local equippedTool = Character:FindFirstChildWhichIsA("Tool")
if not equippedTool then return end --only run code if they have a tool equipped
equipped += direction
Equip(equippedTool)
end
Mouse.WheelForward:Connect(function()
Update(1)
end)
Mouse.WheelBackward:Connect(function()
Update(-1)
end)
Three issues:
- The scrolling wheel index isn’t in sync with other methods of equipping tools(example directly clicking a tool)
-
WheelForward/WheelBackward
also zooms in and out the player camera, couldn’t find how to disable that feature while keeping the camera as it is. - Sorting misbehaves when multiple tools have the same name.
you can do that but you don’t use Enum.Keycode
you still use UserInputService but in a different way, Check this
Ah, much appreciated. Thanks for that information.
local Players = game:GetService("Players")
local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local HRP = Character:WaitForChild("HumanoidRootPart")
local Mouse = Player:GetMouse()
local Backpack = Player:WaitForChild("Backpack")
local Tools = Backpack:GetChildren()
local Camera = workspace.CurrentCamera
local CameraMinZoom = Player.CameraMinZoomDistance
local CameraMaxZoom = Player.CameraMaxZoomDistance
local Toggle = false
local function ChangeZoom()
if Toggle then
Player.CameraMinZoomDistance = CameraMinZoom
Player.CameraMaxZoomDistance = CameraMaxZoom
elseif not Toggle then
local CurrentZoom = (Camera.CFrame.Position - HRP.CFrame.Position).Magnitude
Player.CameraMinZoomDistance = CurrentZoom
Player.CameraMaxZoomDistance = CurrentZoom
end
end
ChangeZoom()
local function SortTools()
table.sort(Tools, function(Left, Right)
return Left.Name < Right.Name
end)
for _, Tool in ipairs(Tools) do
Tool.Parent = nil
end
for _, Tool in ipairs(Tools) do
Tool.Parent = Backpack
end
end
SortTools()
local function OnToolAdded(Child)
if Child:IsA("Tool") then
if table.find(Tools, Child) then
return
end
table.insert(Tools, Child)
SortTools()
end
end
local function OnMouseScroll(Context)
local Tool = Character:FindFirstChildOfClass("Tool")
if Tool then
local Index = table.find(Tools, Tool)
if Index then
if Context == "Up" then
if Index == #Tools then
Tool = Tools[1]
else
Tool = Tools[Index + 1]
end
elseif Context == "Down" then
if Index == 1 then
Tool = Tools[#Tools]
else
Tool = Tools[Index - 1]
end
end
Humanoid:EquipTool(Tool)
end
elseif not Tool then
if Context == "Up" then
Tool = Tools[1]
elseif Context == "Down" then
Tool = Tools[#Tools]
end
Humanoid:EquipTool(Tool)
end
end
local function OnMouseScrollUp()
OnMouseScroll("Up")
end
local function OnMouseScrollDown()
OnMouseScroll("Down")
end
local function OnKeyDown(Key)
if Key:lower() == "c" then
Toggle = not Toggle
ChangeZoom()
end
end
Mouse.KeyDown:Connect(OnKeyDown)
Mouse.WheelForward:Connect(OnMouseScrollUp)
Mouse.WheelBackward:Connect(OnMouseScrollDown)
Backpack.ChildAdded:Connect(OnToolAdded)
Character.ChildAdded:Connect(OnToolAdded)
Here’s a version with all of those issues resolved, the current scrolling position is synchronised with other ways in which a tool can be equipped i.e; manually clicking on the icon, manually pressing the number key which the tool is bound to, picking up a tool with its “ManualActivationOnly” property disabled etc. Scrolling through tools works when two or more tools share the same name. The script incorporates a camera lock feature which is bound to the “c” key (it’s enabled by default), this lock prevents the camera from zooming but allows all other camera actions to take place. Finally, equipping a tool isn’t required, if a tool isn’t equipped and the player attempts to scroll upwards through their tools then they will equip the tool in the first slot, similarly, if a tool isn’t equipped and the player attempts to scroll downwards through their tools then they will equip the tool in the final slot.
oh its fine the camera problem irs already fix i force the camera to be in first person
althought im getting a problem of the Tools Not Equipting everytime i scroll
uh it dupicates it and also it still dosent equip the tools every time you scroll oof
sorry my bad there was a script thats bugging the tools But Thanks You FoR The help