hi for those who read this
so like this i intend to make a weapon but when i try it on moblie and i press R in the ContextActionService Reload it doesn’t work
I’ve tried several times but still fail
so there is a solution for this problem???
Code script
local localPlayer = game.Players.LocalPlayer
local sp=script.Parent
local Player = game.Players.LocalPlayer
local c = Player.Character
if not c or not c.Parent then
c = Player.CharacterAdded:wait()
end
sp:WaitForChild("Handle")
sp:WaitForChild("Ammo")
sp.Handle:WaitForChild("Equip")
sp.Handle:WaitForChild("Fire")
sp.Handle:WaitForChild("Reload")
sp.Handle:WaitForChild("Trigger")
sp.Handle:WaitForChild("PointLight")
sp.Handle.Flare:WaitForChild("BillboardGui")
local CanTeamkill = false
local FirstPersonArms = true
local HeadshotDamage = true
local IgnoreHats = true
local ClipSize=30
local ReloadTime=2.3
local Firerate=.14
local MinSpread=0.15
local MaxSpread=0.15
local SpreadRate=0.3
local BaseDamage= 79
local Spread=0.15
local automatic=true
local burst=false
local shot=false --Shotgun
local BarrlePos=Vector3.new(-3.5,.60,0)
local Cursors={"rbxasset://textures\\GunCursor.png"}
local ReloadCursor="rbxasset://textures\\GunWaitCursor.png"
local contextActionService = game:GetService("ContextActionService")
local equiped=false
local enabled=true
local reloading=false
local down=false
local r=game:service("RunService")
local Ans = {}
local function Load(h)
Ans["Hold"] = h:LoadAnimation(script.Parent.Hold)
Ans["Fire"] = h:LoadAnimation(script.Parent.Fire)
Ans["Reload"] = h:LoadAnimation(script.Parent.Reload)
end
local function Play(a,speed)
if Ans[a] then
Ans[a]:Play(nil,nil,speed)
end
end
local function Stop(a)
if Ans[a] then
Ans[a]:Stop()
end
end
local Bullet=Instance.new("Part")
Bullet.Name="Bullet"
Bullet.BrickColor=BrickColor.new("Institutional white")
Bullet.Anchored=true
Bullet.CanCollide=false
Bullet.Locked=true
Bullet.Size=Vector3.new(1,1,1)
Bullet.formFactor=0
Bullet.TopSurface=0
Bullet.BottomSurface=0
Bullet.Transparency= 0.9
Bullet.Material = Enum.Material.Neon
local Mesh=Instance.new("SpecialMesh")
Mesh.Parent=Bullet
Mesh.MeshType="Brick"
Mesh.Name="Mesh"
Mesh.Scale=Vector3.new(.15,.15,1)
local pointLight = sp.Handle.PointLight
local BillboardGui = sp.Handle.Flare.BillboardGui
local Debris = game:GetService("Debris")
local gunServer = game:GetService("ReplicatedStorage"):WaitForChild("GunRemotes")
local remote = {
TagHumanoid = gunServer:WaitForChild("TagHumanoid"),
FireServer = gunServer:WaitForChild("FireServer"),
TakeDamage = gunServer:WaitForChild("TakeDamage"),
PlaySound = gunServer:WaitForChild("PlaySound"),
}
game.Workspace.ChildAdded:Connect(function(child)
if child.Name == localPlayer.Name.."Bullet" then
child.Transparency = 0.6
end
end)
local function reload(mouse)
Play("Reload",.7)
remote.PlaySound:FireServer(sp.Handle.Reload)
reloading=true
mouse.Icon=ReloadCursor
while sp.Ammo.Value<ClipSize and reloading and enabled do
wait(ReloadTime/ClipSize)
if reloading then
sp.Ammo.Value=sp.Ammo.Value+1
else
break
end
end
mouse.Icon=Cursors[1]
reloading=false
end
local function reload_Mob()
reloading=false
while sp.Ammo.Value<ClipSize and reloading and enabled do
wait(ReloadTime/ClipSize)
if reloading then
sp.Ammo.Value=sp.Ammo.Value+1
else
break
end
end
reloading=false
end
local function onKeyDown(key,mouse)
key=key:lower()
if key=="r" and not reloading then
reload(mouse)
end
end
function onButtonPress(button)
wait(0.1)
if onButtonPress() and not reloading then
if script.Parent.Ammo.Value < 30 then
wait(0.1)
reload_Mob()
end
script.Parent:reload(button)
end
end
local function getIgnoreList()
local list = {localPlayer.Character}
for _,child in pairs(game.Workspace:GetDescendants()) do
if child:IsA("BasePart") then
if not child.CanCollide then
if child.Name == "Handle" and IgnoreHats then
table.insert(list,child)
elseif child.Name ~= "Handle" and not child.Parent:FindFirstChild("Humanoid") then
table.insert(list,child)
end
end
end
end
return list
end
local function bulletEffect(bullet,distance)
if distance > 30 then
local bulletLength = distance/2
bullet.Mesh.Scale=Vector3.new(.15,.15,bulletLength)
bullet.Mesh.Offset=Vector3.new(0,0,bulletLength/2)
while bullet.Mesh.Offset.Z > (bulletLength/2)*-1 do
wait()
bullet.Mesh.Offset=Vector3.new(0,0,bullet.Mesh.Offset.Z-20)
end
else
bullet.Mesh.Scale=Vector3.new(.15,.15,distance)
bullet.Mesh.Offset=Vector3.new(0,0,distance/2)
wait(0.03)
end
bullet:Destroy()
end
local function fire(aim)
Play("Fire")
if sp.Parent.Humanoid.Health < 1 then
return
end
remote.PlaySound:FireServer(sp.Handle.Fire)
t=r.Stepped:wait()
last6=last5
last5=last4
last4=last3
last3=last2
last2=last
last=t
local bullet=Bullet:clone()
local startpoint=sp.FirePart.CFrame*BarrlePos
local ray = Ray.new(startpoint, (aim - startpoint).unit * 300)
local hit, position = workspace:FindPartOnRayWithIgnoreList(ray, getIgnoreList(), false, true)
local distance = (startpoint - position).magnitude
bullet.Parent=game.Workspace.CurrentCamera
remote.FireServer:FireServer(startpoint,position,pointLight)
remote.FireServer:FireServer(startpoint,position,BillboardGui)
if hit~=nil then
local humanoid=hit.Parent:FindFirstChild("Humanoid")
if not humanoid then
humanoid = hit.Parent.Parent:FindFirstChild("Humanoid")
end
if humanoid~=nil then
local damage=math.random(BaseDamage-(BaseDamage*.25),BaseDamage+(BaseDamage*.25))
local headshot = false
if hit.Name=="Head" and HeadshotDamage then
damage=damage*1.3
--headshot = true
else
damage=damage*.75
end
if humanoid.Health>0 then
local eplr=game.Players:playerFromCharacter(humanoid.Parent)
local plr=game.Players:playerFromCharacter(sp.Parent)
if eplr~=nil and plr~=nil then
if CanTeamkill then
remote.TagHumanoid:FireServer(humanoid)
remote.TakeDamage:FireServer(humanoid,damage,headshot)
else
if eplr.TeamColor~=plr.TeamColor or eplr.Neutral or plr.Neutral then
remote.TagHumanoid:FireServer(humanoid)
remote.TakeDamage:FireServer(humanoid,damage,headshot)
end
end
else
remote.TagHumanoid:FireServer(humanoid)
remote.TakeDamage:FireServer(humanoid,damage,headshot)
end
end
end
end
if distance > 30 then
bullet.CFrame=CFrame.new(startpoint, position) * CFrame.new(0, 0, -distance / 2)
else
bullet.CFrame=CFrame.new(startpoint, position) * CFrame.new(0, 0, -distance)
end
spawn(function()
bulletEffect(bullet,distance)
end)
end
local ObjectLocalTransparencyModifier
local RunService = game:GetService("RunService")
local LocalObjects = {}
local function setArmsTransparency(Limb)
if FirstPersonArms then
local value = {Object = Limb, Transparency = 0, AutoUpdate = true}
pcall(function()
local ObjectFound = false
for i, v in pairs(LocalObjects) do
if v == value then
ObjectFound = true
end
end
if not ObjectFound then
table.insert(LocalObjects, value)
if ObjectLocalTransparencyModifier then
ObjectLocalTransparencyModifier:disconnect()
end
ObjectLocalTransparencyModifier = RunService.RenderStepped:connect(function()
local Camera = game:GetService("Workspace").CurrentCamera
for i, v in pairs(LocalObjects) do
if v.Object and v.Object.Parent then
local CurrentTransparency = v.Object.LocalTransparencyModifier
local ViewDistance = (Camera.CoordinateFrame.p - sp.Parent.Head.Position).Magnitude
if ((not v.AutoUpdate and (CurrentTransparency == 1 or CurrentTransparency == 0)) or v.AutoUpdate) then
if ((v.Distance and ViewDistance <= v.Distance) or not v.Distance) then
v.Object.LocalTransparencyModifier = v.Transparency
else
v.Object.LocalTransparencyModifier = 0
end
end
else
table.remove(LocalObjects, i)
end
end
end)
end
end)
end
end
local function onButton1Up(mouse)
down=false
end
local function onButton1Down(mouse)
local h=sp.Parent:FindFirstChild("Humanoid")
if not enabled or reloading or down or h==nil then
return
end
if sp.Ammo.Value>0 and h.Health>0 then
down=true
enabled=false
while down do
if sp.Ammo.Value<=0 then
break
end
if burst then
local startpoint=sp.Handle.CFrame*BarrlePos
local mag=(mouse.Hit.p-startpoint).magnitude
local rndm=Vector3.new(math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag))
fire(mouse.Hit.p+rndm)
sp.Ammo.Value=sp.Ammo.Value-1
if sp.Ammo.Value<=0 then
break
end
wait(.05)
local startpoint=sp.Handle.CFrame*BarrlePos
local mag2=((mouse.Hit.p+rndm)-startpoint).magnitude
local rndm2=Vector3.new(math.random(-(.1/10)*mag2,(.1/10)*mag2),math.random(-(.1/10)*mag2,(.1/10)*mag2),math.random(-(.1/10)*mag2,(.1/10)*mag2))
fire(mouse.Hit.p+rndm+rndm2)
sp.Ammo.Value=sp.Ammo.Value-1
if sp.Ammo.Value<=0 then
break
end
wait(.05)
fire(mouse.Hit.p+rndm+rndm2+rndm2)
sp.Ammo.Value=sp.Ammo.Value-1
elseif shot then
sp.Ammo.Value=sp.Ammo.Value-1
local startpoint=sp.Handle.CFrame*BarrlePos
local mag=(mouse.Hit.p-startpoint).magnitude
local rndm=Vector3.new(math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag))
fire(mouse.Hit.p+rndm)
local mag2=((mouse.Hit.p+rndm)-startpoint).magnitude
local rndm2=Vector3.new(math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2))
fire(mouse.Hit.p+rndm+rndm2)
local rndm3=Vector3.new(math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2))
fire(mouse.Hit.p+rndm+rndm3)
local rndm4=Vector3.new(math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2),math.random(-(.2/10)*mag2,(.2/10)*mag2))
fire(mouse.Hit.p+rndm+rndm4)
else
sp.Ammo.Value=sp.Ammo.Value-1
local startpoint=sp.Handle.CFrame*BarrlePos
local mag=(mouse.Hit.p-startpoint).magnitude
local rndm=Vector3.new(math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag),math.random(-(Spread/10)*mag,(Spread/10)*mag))
fire(mouse.Hit.p+rndm)
end
wait(Firerate)
if not automatic then
break
end
end
enabled=true
sp.Handle.Flare.BillboardGui.Enabled = false
else
remote.PlaySound:FireServer(sp.Handle.Trigger)
end
end
local function onEquippedLocal(mouse)
local mobilebutton = contextActionService:BindAction("MobileButton",onButtonPress,true,"r")
contextActionService:SetPosition("MobileButton",UDim2.new(0.72,-25,0.20,-25))
contextActionService:SetImage("MobileButton","http://www.roblox.com/asset/?id=3206285422")
remote.PlaySound:FireServer(sp.Handle.Equip)
Load(c.Humanoid)
Play("Hold")
if mouse==nil then
print("Mouse not found")
return
end
mouse.Icon=Cursors[1]
mouse.KeyDown:connect(function(key) onKeyDown(key,mouse) end)
mouse.Button1Down:connect(function() onButton1Down(mouse) end)
mouse.Button1Up:connect(function() onButton1Up(mouse) end)
equiped=true
if #Cursors>1 then
while equiped do
t=r.Stepped:wait()
local action=sp.Parent:FindFirstChild("Pose")
if action~=nil then
if sp.Parent.Pose.Value=="Standing" then
Spread=MinSpread
else
Spread=MinSpread+((4/10)*(MaxSpread-MinSpread))
end
else
Spread=MinSpread
end
if t-last<SpreadRate then
Spread=Spread+.1*(MaxSpread-MinSpread)
end
if t-last2<SpreadRate then
Spread=Spread+.1*(MaxSpread-MinSpread)
end
if t-last3<SpreadRate then
Spread=Spread+.1*(MaxSpread-MinSpread)
end
if t-last4<SpreadRate then
Spread=Spread+.1*(MaxSpread-MinSpread)
end
if t-last5<SpreadRate then
Spread=Spread+.1*(MaxSpread-MinSpread)
end
if t-last6<SpreadRate then
Spread=Spread+.1*(MaxSpread-MinSpread)
end
if not reloading then
local percent=(Spread-MinSpread)/(MaxSpread-MinSpread)
for i=0,#Cursors-1 do
if percent>(i/(#Cursors-1))-((1/(#Cursors-1))/2) and percent<(i/(#Cursors-1))+((1/(#Cursors-1))/2) then
mouse.Icon=Cursors[i+1]
end
end
end
wait(Firerate*.9)
end
end
end
local function onUnequippedLocal(mouse)
local mobilebutton = contextActionService:BindAction("MobileButton",onButtonPress,false,"r")
contextActionService:SetPosition("MobileButton",UDim2.new(0.72,-25,0.20,-25))
contextActionService:SetImage("MobileButton","http://www.roblox.com/asset/?id=3206285422")
Stop("Fire")
for i,v in pairs(Ans) do
Stop(i)
end
if ObjectLocalTransparencyModifier then
ObjectLocalTransparencyModifier:disconnect()
end
local camera = game.Workspace.CurrentCamera
if (camera.focus.p - camera.CoordinateFrame.p).magnitude <= 1 then
for i, v in pairs(LocalObjects) do
if v.Object then
v.Object.LocalTransparencyModifier = 1
end
end
end
LocalObjects = {}
equiped=false
reloading=false
end
sp.Equipped:connect(onEquippedLocal)
sp.Unequipped:connect(onUnequippedLocal)
Video
robloxapp-20220520-2039455.wmv (1.2 MB)