System: You will be given a Luau script (that has been decompiled). You will rename the variables and functions to sound better, make the script more coherent, and add comments to areas of the script. Return the fixed script without adding ``` as we handle that. If no script has been given, do not produce any output. Do not respond with anything but the script
User: -- Decompiler will be improved soon!
-- Decompiled with Konstant V2.1, a fast Luau decompiler made in Luau by plusgiant5 (https://discord.gg/wyButjTMhM)
-- Decompiled on 2025-02-02 08:40:05
-- Luau version 6, Types version 3
-- Time taken: 0.003300 seconds

local Assets_upvr = game:GetService("ReplicatedStorage").Assets
local Shared_upvr = require(game:GetService("ReplicatedStorage").Modules.Core.Shared)
local module_upvr = {
	Damage = 500;
	["Critical Hits"] = {
		Enabled = true;
		Chance = 5;
		Max = 100;
		Multiplier = 1.5;
	};
	["Damage vs Classes"] = {
		Laser = 1;
		Armored = 1;
		MeleeOnly = 1.5;
		RangedOnly = 0;
		Organic = 1;
		MiniBoss = 1;
		Structure = 1;
		Calamity = 2;
		Boss = 1;
		Noobantuan = 1.2;
		["Mega Noobantuan"] = 2.2;
	};
	Element = {
		Type = nil;
		Color = nil;
	};
	["Special Attack"] = {
		Enabled = false;
		Chance = 0;
		Max = 100;
		Kill = false;
		Luck = false;
		Hit = false;
	};
	Amount = 1;
	Knockback = 0;
	Lifesteal = 0.05;
	Explosive = {
		Enabled = false;
		Range = 0;
	};
	Particle = nil;
	Radial = false;
	Piercing = true;
	Projectile = {
		Object = Assets_upvr.Gameplay.Projectiles:WaitForChild("Arc");
		SizeMult = 2.5;
		Velocity = 350;
		Color = Color3.fromRGB(255, 100, 0);
		Spread = 45;
		Mesh = {
			ID = nil;
			Texture = nil;
			Scale = nil;
			VertexColor = nil;
		};
		Attachment = {
			Particle = nil;
			Pos = nil;
		};
	};
	SFX = {
		Hit = {
			ID = 6093783053;
			Volume = 0.5;
			Pitch = 1;
		};
		Explode = {
			ID = nil;
			Volume = 0.5;
			Pitch = 1;
		};
		Summon = {
			ID = 3052201463;
			Volume = 0.5;
			Pitch = 1;
		};
	};
}
local function Create_upvr(arg1, arg2, arg3, arg4) -- Line 91, Named "Create"
	--[[ Upvalues[3]:
		[1]: module_upvr (readonly)
		[2]: Assets_upvr (readonly)
		[3]: Shared_upvr (readonly)
	]]
	if not arg1 or not arg1.Parent then
	else
		local clone = module_upvr.Projectile.Object:Clone()
		local BodyForce = Instance.new("BodyForce")
		local cframe = CFrame.new(arg1.Character:WaitForChild("HumanoidRootPart").CFrame.p)
		if Assets_upvr.ServerData.Players:FindFirstChild(tostring(arg1)) then
		end
		if not module_upvr.Radial or not arg4 then
		end
		local radians_2 = math.rad(0)
		local radians = math.rad(Random.new():NextInteger(-module_upvr.Projectile.Spread, module_upvr.Projectile.Spread))
		if not arg3 or not (CFrame.new(cframe.Position, arg3) * CFrame.fromEulerAnglesXYZ(0, 0, radians)) then
			if not module_upvr.Radial or not (cframe * CFrame.Angles(0, radians_2, 0)) then
			end
		end
		clone.Size *= module_upvr.Projectile.SizeMult
		clone.Color = module_upvr.Projectile.Color
		clone.CFrame = arg1.Character:WaitForChild("HumanoidRootPart").CFrame * CFrame.Angles(0, radians_2, 0) * CFrame.fromEulerAnglesXYZ(0, 0, radians)
		clone.CFrame += clone.CFrame.lookVector * clone.Size.Z / 2
		clone.Velocity = clone.CFrame.lookVector * module_upvr.Projectile.Velocity
		BodyForce.Force = Vector3.new(0, clone:GetMass() * workspace.Gravity, 0)
		BodyForce.Parent = clone
		local tbl = {
			Object = clone;
		}
		tbl.Owner = arg1
		tbl.Settings = module_upvr
		tbl.Humanoid = arg1.Character:WaitForChild("Humanoid")
		tbl.Team = arg1.Character:FindFirstChild("TEAM")
		tbl.Damage = module_upvr.Damage
		tbl.Knockback = module_upvr.Knockback
		tbl.Lifesteal = module_upvr.Lifesteal
		tbl.CritChance = module_upvr["Critical Hits"].Chance
		tbl.DamageVsClass = module_upvr["Damage vs Classes"]
		tbl.Piercing = module_upvr.Piercing
		tbl.Explosive = module_upvr.Explosive.Enabled
		tbl.Range = module_upvr.Explosive.Range
		tbl.Particle = module_upvr.Particle
		tbl.SFX = module_upvr.SFX.Hit
		tbl.Element = module_upvr.Element
		clone.Touched:Connect(Shared_upvr.ProjectileFunction(tbl))
		clone.Parent = workspace.JunkHolder
		clone:SetNetworkOwner(nil)
		Shared_upvr.Overshoot(clone)
		game:GetService("Debris"):AddItem(clone, module_upvr.Projectile.Duration or 5)
	end
end
function module_upvr.UseEffect(arg1, arg2, arg3, arg4) -- Line 156
	--[[ Upvalues[3]:
		[1]: module_upvr (readonly)
		[2]: Shared_upvr (readonly)
		[3]: Create_upvr (readonly)
	]]
	if module_upvr.SFX.Summon and module_upvr.SFX.Summon.ID then
		Shared_upvr.CreateSound(module_upvr.SFX.Summon, arg1.Character:WaitForChild("HumanoidRootPart"), false, false)
	end
	if 1 < module_upvr.Amount then
		for i = 1, module_upvr.Amount do
			Create_upvr(arg1, arg2, arg3, i / module_upvr.Amount * 360)
		end
	else
		Create_upvr(arg1, arg2, arg3)
	end
end
return module_upvr
Assistant: