Run it
Copy the script and paste it into your executor.
ReplicatedStorage = :()
Players = :()
UserInputService = :()
RunService = :()
WeaponModule = {}
WeaponModule.__index = WeaponModule
WEAPON_CONFIGS = {
[] = {
Damage = ,
FireRate = ,
MagazineSize = ,
ReloadTime = ,
MaxAmmo = ,
Spread = ,
Range =
},
[] = {
Damage = ,
FireRate = ,
MagazineSize = ,
ReloadTime = ,
MaxAmmo = ,
Spread = ,
Range =
}
}
WeaponModule.(weaponType, owner)
self = ({}, WeaponModule)
self.WeaponType = weaponType
self.Owner = owner
self.Config = WEAPON_CONFIGS[weaponType] WEAPON_CONFIGS[]
self.CurrentAmmo = self.Config.MagazineSize
self.TotalAmmo = self.Config.MaxAmmo
self.IsReloading =
self.CanFire =
self.Equipped =
self
WeaponModule:(mousePosition)
self.CanFire self.IsReloading self.CurrentAmmo <=
self.CanFire =
self.CurrentAmmo -=
self:()
hitResult = self:(mousePosition)
hitResult hitResult.Instance
self:(hitResult)
self:()
self.CurrentAmmo <=
self:()
.(self.Config.FireRate)
self.CanFire =
WeaponModule:(mousePosition)
character = self.Owner.Character
character
humanoidRootPart = character:()
humanoidRootPart
spread = .(self.Config.Spread)
direction = (mousePosition - humanoidRootPart.Position).Unit
direction = direction + .(
(.() - ) * spread,
(.() - ) * spread,
(.() - ) * spread
)
raycastParams = RaycastParams.()
raycastParams.FilterDescendantsInstances = {character}
raycastParams.FilterType = .RaycastFilterType.Exclude
raycastResult = :(
humanoidRootPart.Position,
direction * self.Config.Range,
raycastParams
)
raycastResult
WeaponModule:(hitResult)
hitPart = hitResult.Instance
humanoid = hitPart.Parent:()
humanoid
humanoid:(self.Config.Damage)
self:(hitResult.Position)
self:()
WeaponModule:()
self.IsReloading self.CurrentAmmo == self.Config.MagazineSize
ammoNeeded = self.Config.MagazineSize - self.CurrentAmmo
self.TotalAmmo <= ammoNeeded <=
self.IsReloading =
self.CanFire =
self:()
self:()
.(self.Config.ReloadTime)
ammoToReload = .(ammoNeeded, self.TotalAmmo)
self.CurrentAmmo += ammoToReload
self.TotalAmmo -= ammoToReload
self.IsReloading =
self.CanFire =
self:()
WeaponModule:()
WeaponModule:(position)
hitEffect = .()
hitEffect.Size = .(, , )
hitEffect.Position = position
hitEffect.Material = .Material.Neon
hitEffect.Color = .(, , )
hitEffect.Anchored =
hitEffect.CanCollide =
hitEffect.Parent =
.Debris:(hitEffect, )
WeaponModule:()
WeaponModule:()
WeaponModule:()
WeaponModule:(soundType)
WeaponController = {}
WeaponController.__index = WeaponController
WeaponController.(player)
self = ({}, WeaponController)
self.Player = player
self.CurrentWeapon =
self.Weapons = {}
self:()
self
WeaponController:()
playerGui = self.Player:()
UserInputService.InputBegan:((input, gameProcessed)
gameProcessed
input.UserInputType == .UserInputType.MouseButton1
self:()
input.KeyCode == .KeyCode.R
self:()
input.KeyCode == .KeyCode.One
self:()
input.KeyCode == .KeyCode.Two
self:()
)
WeaponController:()
self.CurrentWeapon
mouse = self.Player:()
self.CurrentWeapon:(mouse.Hit.Position)
WeaponController:()
self.CurrentWeapon
self.CurrentWeapon:()
WeaponController:(weaponType)
self.Weapons[weaponType]
self.CurrentWeapon = self.Weapons[weaponType]
self:()
self:(weaponType)
WeaponController:(weaponType)
newWeapon = WeaponModule.(weaponType, self.Player)
self.Weapons[weaponType] = newWeapon
self.CurrentWeapon = newWeapon
self:()
WeaponController:()
(player)
controller = WeaponController.(player)
.()
controller:()
controller:()
Players.PlayerAdded:(onPlayerAdded)
_, player (Players:())
.(onPlayerAdded, player)
WeaponModule
Universal