Hello Developers!
I made a local-script Inside of StarterPlayerServices which allows the user to see what weapon they have on a first person view (Basically, a First Person Shooter Game) with the help of this tutorial: https://www.youtube.com/watch?v=c96NS9dxP60 (There Is multiple parts, around 5.5) The Issue Is that I want every player In the server to see what gun you have, as well of you being able to see the other players weapons, however, I currently don't know how to do this
Script:
local Player = game.Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Camera = game.Workspace.CurrentCamera
local aimCFrame = CFrame.new()
local IsAiming = false
local IsShooting = false
local IsReloaing = false
local CanShoot = true
local currentSwayAMT = .2
local SwayAMT = .2
local aimSwayAMT = .2
local SwayCF = CFrame.new()
local Mouse = Player:GetMouse()
local lastCameraCF = CFrame.new()
local Fireanim = nil
local Firesound = nil
local Frameworks = {
Inventory = {
"XLS Mark"
};
module = nil;
viewmodel = nil;
CurrentWeapon = 1;
}
function loadSlot(Item)
if IsReloaing == false then
local viewModelFolder = game.ReplicatedStorage.ViewModels
local moduleFolder = game.ReplicatedStorage.Modules
for i,v in pairs(Camera:GetChildren()) do
if v:IsA("Model") then
v:Destroy()
end
end
if moduleFolder:FindFirstChild(Item) then
Frameworks.module = require(moduleFolder:FindFirstChild(Item))
if viewModelFolder:FindFirstChild(Item) then
Frameworks.viewmodel = viewModelFolder:FindFirstChild(Item):Clone()
Frameworks.viewmodel.Parent = Camera
if Frameworks.viewmodel and Frameworks.module and Character then
Fireanim = Instance.new("Animation")
Fireanim.Parent = Frameworks.viewmodel
Fireanim.Name = "Fire"
Fireanim.AnimationId = Frameworks.module.fireAnim
Fireanim = Frameworks.viewmodel.AnimationController.Animator:LoadAnimation(Fireanim)
game.ReplicatedStorage.Events.LoadSlot:FireServer(Frameworks.module.fireSound.SoundId, Frameworks.module.fireSound.Volume)
end
end
end
end
end
local OldCamCF = CFrame.new()
function UpdateCamSH()
local NewCamCF = Frameworks.viewmodel.FakeCam.CFrame:ToObjectSpace(Frameworks.viewmodel.PrimaryPart.CFrame)
Camera.CFrame = Camera.CFrame * NewCamCF:ToObjectSpace(OldCamCF)
OldCamCF = NewCamCF
end
local hud = Player.PlayerGui:WaitForChild("HUD")
RunService.RenderStepped:Connect(function()
local rot = Camera.CFrame:ToObjectSpace(lastCameraCF)
local X,Y,Z = rot:ToOrientation()
SwayCF = SwayCF:Lerp(CFrame.Angles(math.sin(X)*currentSwayAMT, math.sin(Y)*currentSwayAMT, 0), .1)
lastCameraCF = Camera.CFrame
if Frameworks.viewmodel and Frameworks.module then
hud.GunName.Text = "Current weapon: "..Frameworks.Inventory[Frameworks.CurrentWeapon]
hud.AMMO.Text = "AMMO: "..Frameworks.module.Ammo.."/"..Frameworks.module.MaxAmmo
end
local Humanoid = Character:WaitForChild("Humanoid")
if Humanoid then
local Boboffset = CFrame.new()
if Humanoid.MoveDirection.Magnitude > 0 then
if Humanoid.WalkSpeed == 16 then
Boboffset = CFrame.new(math.cos(tick() * 5) * .1, -Humanoid.CameraOffset.Y/3, -Humanoid.CameraOffset.Z/3) * CFrame.Angles(0, math.sin(tick() * -4) * -.05, math.cos(tick() * -4) * .05)
elseif Humanoid.WalkSpeed >= 24 then
Boboffset = CFrame.new(math.cos(tick() * 9) * .15, -Humanoid.CameraOffset.Y/3, -Humanoid.CameraOffset.Z/3) * CFrame.Angles(math.cos(tick() * 4) * .05, math.sin(tick() * 8) * .1, 0)
end
else
Boboffset = Boboffset:Lerp(CFrame.new(0, -Humanoid.CameraOffset.Y/3, 0), .1)
end
for i,v in pairs(Camera:GetChildren()) do
if v:IsA("Model") then
v:PivotTo(Camera.CFrame * SwayCF * aimCFrame * Boboffset)
--UpdateCamSH()
end
end
end
if IsAiming and Frameworks.viewmodel ~= nil and Frameworks.module.canAim then
local offset = Frameworks.viewmodel.AimPart.CFrame:ToObjectSpace(Frameworks.viewmodel.PrimaryPart.CFrame)
aimCFrame = aimCFrame:Lerp(offset, Frameworks.module.aimSmooth)
currentSwayAMT = aimSwayAMT
else
local offset = CFrame.new()
aimCFrame = aimCFrame:Lerp(offset, Frameworks.module.aimSmooth)
currentSwayAMT = SwayAMT
end
end)
loadSlot(Frameworks.Inventory[1])
UIS.InputBegan:Connect(function(input)
if input.KeyCode == Enum.KeyCode.One then
if Frameworks.CurrentWeapon ~= 1 and IsReloaing == false then
loadSlot(Frameworks.Inventory[1])
Frameworks.CurrentWeapon = 1
end
end
if input.UserInputType == Enum.UserInputType.MouseButton2 then
IsAiming = true
end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
if Character and Frameworks.viewmodel and Frameworks.module and Frameworks.module.Ammo ~= 0 then
if Frameworks.module.fireMode == "Semi" then
Fireanim:Play()
game.ReplicatedStorage.Events.Shoot:FireServer()
Frameworks.module.Ammo -= 1
end
if Frameworks.module.fireMode == "Full Auto" then
IsShooting = true
end
end
end
if input.KeyCode == Enum.KeyCode.R then
IsReloaing = true
CanShoot = false
task.wait(Frameworks.module.ReloadingTime)
Frameworks.module.Ammo = Frameworks.module.MaxAmmo
IsReloaing = false
CanShoot = true
end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
if Character and Frameworks.viewmodel and Frameworks.module and Frameworks.module.Ammo == 0 then
IsReloaing = true
CanShoot = false
task.wait(Frameworks.module.ReloadingTime)
Frameworks.module.Ammo = Frameworks.module.MaxAmmo
IsReloaing = false
CanShoot = true
end
end
end)
UIS.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
IsAiming = false
end
end)
while wait() do
if IsShooting and Frameworks.module.Ammo > 0 then
game.ReplicatedStorage.Events.Shoot:FireServer()
Fireanim:Play()
Frameworks.module.Ammo -= 1
Mouse.Button1Up:Connect(function()
IsShooting = false
end)
wait(Frameworks.module.fireRate)
end
end
