How do you rate my level of scripting?

Hi, i’m curious about how things i’ve done are advanced, i need motivation because i’m making open world game now, and i really like to know what you think about my knowledge.

Soo i’ve done some things and systems, main are:

  • Grid building system that snaps to the plane
  • Working Third person gun controlled by mouse
  • Data stores that detect attributes
  • Inventory system
  • Pet unision system
  • Working train using cframes only
  • Script for standing on moving CFrame platform (sticking to it)
  • Procedural generated tree like from lumber tycon 2
  • Shop with items to buy
  • Animation replicator on client
  • Platform minigame where you have custom events on platforms
  • Working car that you can control
  • Sentry turret that shoots at the player
  • Bullet spread system
  • Boosts that run out, when you leave it subtract time you’ve spend offline
  • Fireworks with curves
  • Polygon generator (depending on given verticles)
  • InGame Effect system using Collection Service
  • String manipulations
  • Serialization module
  • Magical abilities on click

those are the best thinngs i’ve done, what do you think about my scripting level?

  • beginner
  • decent
  • advanced
  • professional

0 voters

thank for your feedback

7 Likes

Your scripting is good! I cant even make invetory system, I can only make simulators,

1 Like

thank you, every time i play other games i think i’m total noob with scripting, soo i wanted to ask there, because talking is better than all of those colors and illusions that they are very hard to make

2 Likes

we’d have to see some code examples

2 Likes

Just don’t think your a total noob. It make you lost your motivation

oh yeah we need to see some code examples.

2 Likes

maybe platform minigame event code, it was clean, for example fire event module:

local Fire = {}

local Min = 2
local Max = 5

local TweenService = game:GetService("TweenService")
local Debris = game:GetService("Debris")


local touched = {}
local rate = 0.1
local damage = 10




function Fire.Event(platform:BasePart)
	
	local db = true
	
	local randomCount = math.random(Min,Max)
	
	local goal = {Transparency = 0}
	local info = TweenInfo.new(1)
	
	local parts = {}
	
	local thread = coroutine.create(function()
		
		while db do

			for i, v in touched do
			
				i.Humanoid:TakeDamage(damage)

			end
			task.wait(rate)

		end
	end)

	coroutine.resume(thread)
	for i = 1,randomCount*platform.Double.Value do
		local randomPosition = Vector3.new(
			math.random(platform.Position.X-platform.Size.X/2+2,platform.Position.X+platform.Size.X/2-2),
			platform.Position.Y+platform.Size.Y/2+1,
			math.random(platform.Position.Z-platform.Size.Z/2+2,platform.Position.Z+platform.Size.Z/2-2)
		)
		
		


		local burningPart = Instance.new("Part")
		
		parts[i] = burningPart
		
		burningPart.CastShadow = false
		burningPart.CanCollide = false
		burningPart.Anchored = false
		
		burningPart.Name = "BurningPart"..i
	
		burningPart.Size = Vector3.new(2,1,2)
		burningPart.Position = randomPosition
		
		burningPart.Color = Color3.new(1, 0.4, 0)
		burningPart.Material = Enum.Material.Neon
		
		burningPart.Parent = game.Workspace.Game.Effects
		
		
		
		local weld = Instance.new("WeldConstraint")
		weld.Part0 = burningPart
		weld.Part1 = platform
		weld.Parent = platform
	
		
		local tween = TweenService:Create(burningPart,info,goal)
		tween:Play()
		
		Debris:AddItem(weld,10)
		Debris:AddItem(burningPart,10)
		
		
		
		burningPart.Touched:Connect(function(hit)
			
			if hit and hit.Parent:FindFirstChild("Humanoid") and not touched[hit.Parent] then
				
				touched[hit.Parent] = 1
			end
		end)
		burningPart.TouchEnded:Connect(function(hit)
			
			if hit and touched[hit.Parent] then
				
				touched[hit.Parent] = nil
			end
		end)
	end
	
	game.ReplicatedStorage.Remotes.EffectVisual:FireAllClients("Fire",platform,"Parts",parts)
	
end
return Fire


1 Like

This is good too:


local function GeneratePath(A:Vector3,B:Vector3,Settings:{})
	local points = {}
	local maxPoints = (A-B).Magnitude / Settings.Lenght
	
	for i = 2, maxPoints do
		local newPoint = A:Lerp(B,1/maxPoints*i)+Vector3.new(math.random(-Settings.Width,Settings.Width),math.random(-2,2),math.random(-Settings.Width,Settings.Width))
		points[i] = newPoint
	end
	points[maxPoints+1] = B
	points[1] = A
	for i = 1, maxPoints do
		
		local v = points[i]
		local n = points[i+1]
		
		local newPart = Instance.new("Part")
		newPart.Anchored = true
		newPart.Name = "Bolt"..i
		newPart.Material = "Neon"
		newPart.Color = Settings.Color
		
		
		newPart.Position = v:Lerp(n,0.5)
			
		newPart.Size = Vector3.new(0.5,0.5,(v-n).Magnitude)
		newPart.CFrame = CFrame.lookAt(newPart.Position,n)
		
		newPart.Parent = script.Parent.Parts
		
		task.wait(0)
		
	end

end

task.wait(2)
local s = {
	Lenght = 5,
	Width = 3,
	Color = Color3.new(0, 0.5, 1)
}
GeneratePath(Vector3.new(0,20,0),Vector3.new(0,20,100),s)

or this:

local A = script.Parent.Player
local B = script.Parent.Object




while task.wait(1/5) do
	local PlayerLook = Vector2.new(A.CFrame.LookVector.Z,A.CFrame.LookVector.Y).Unit

	local ObjectPosition2D = (Vector2.new(A.Position.Z,A.Position.Y)-Vector2.new(B.Position.Z,B.Position.Y)).Unit
	local UPAngle = 180 - math.acos(Vector2.new(PlayerLook.X,PlayerLook.Y):Dot(ObjectPosition2D)) * (180/math.pi)
	
	
	
	
	
	print(PlayerLook)
	print("Angle: "..UPAngle)
end

With due respect I would say your decent at scripting and definitely not a professional or close to it yet. A professional should have knowledge of the following:

  • Complex CFrame manipulation.
  • Knowhow of advance physics calculations and projectile predictions.
  • Knowhow of simulation physics.
  • Knowhow of LuaU OOP, (Object Oriented Programming).

And a HECK ton more.
I would consider myself a professional-advanced.

2 Likes

you know, it’s only code example, i know how to manipulate CFrames like platform that move player or something, i can’t find code about building system or trains soo you know, OOP is something i sometimes use, and simulating physics? what do you mean by that? making raycasts to detect bullet trajectory?

I have example here, sorry for unredable code, i writed this a 2 years ago:

local folder = script.Parent

local PetsFolder = folder.Pets

local template = folder.Pet

local Player = folder.Player

local Count = folder.Count
local collumn = 3
local startPos = Player.Position + Vector3.new(2,0,2)

local spacing = 2


local function OnRemove()
	wait(0)
	
	for i, p in pairs(PetsFolder:GetChildren()) do
		if p and p:IsA("BasePart") then
		i-= 1
		
		local x = i%collumn
		
		local z = math.floor(i/collumn)
		
		
		
			
			p.CFrame =  Player.CFrame * CFrame.new(2,0,2) * CFrame.new(-x*spacing,0,z*spacing)
		end
		if i == #PetsFolder:GetChildren() then
			break
		end
	
		
	end
end
local function OnAdded(object:BasePart)
	for i = 0, #PetsFolder:GetChildren()-1 do
		
			
			local x = i % collumn
			
			local z = math.floor(i/collumn)
			
	
		
			
		object.CFrame = Player.CFrame * CFrame.new(2,0,2) * CFrame.new(-x*spacing,0,z*spacing)
		
		object.Parent.ChildRemoved:Connect(function(obj)
		OnRemove()
		end)
	
		
		if i == #PetsFolder:GetChildren()-1 then
			break
		end
	end
end

PetsFolder.ChildAdded:Connect(function(object)
	OnAdded(object)
	
end)
local function OnAdd()
	for i = 1, 3 do
		template:Clone().Parent = PetsFolder
		end
end

wait(0.5)
OnAdd()

or this:

local template = script.Template
local template2 = script.Template2
local new_seed = tick()

print(new_seed," seed")

local default_parameter = { -- parametry
	name = "default";
	offset = CFrame.identity; 
	parent = workspace;
	temp = template;
	temp2 = template2;
	base_Size = Vector3.new(3,20,3); -- wielkośc
	multiplier = 3; -- ilość powtórzeń generacji
	split = 5; -- ilość gałęzi
	seed = new_seed;
	scale = Vector3.new(0.8,1,0.8); -- skala gałęzi, mnożnik wielkości
	angle = math.pi/5; -- kąt rozchylenia
	
}
local counterGen = 1
local random = Random.new(default_parameter.seed or tick()) -- generacja losowej liczby
local function values(A,B) for i, v in pairs(B) do A[i] = v end end -- zmiana ustawień arraya

local function Main(parameter,option)
	if option then values(parameter,option) end -- zmiana wartości
	
	local tree = Instance.new("Model")
	tree.Name = parameter.Name or "Tree"
	tree.Parent = parameter.parent
	
	local base = parameter.temp:Clone()
	base.Name = "Base"
	base.Size = parameter.base_Size

	base.CFrame = script.Template.CFrame*CFrame.new(0,parameter.base_Size.Y/2,0)
	base.Parent = tree
	
	local level = {
		[0]={base}
	}

	
	for i = 1, parameter.multiplier do
		local new_level = {}
		
		for j, branch in pairs(level[i-1]) do -- branch is last level part, soo the new branches are branches on new level, soo position set to it is the part that ends last level
			for k = 1, parameter.split do
				
				local rot_Y = CFrame.Angles(0,(random:NextNumber()-0.25)*math.pi*2,0) -- using random numbers and multiplying by Tau to get random angle
				
				local new_Angle = CFrame.Angles(parameter.angle,0,0) -- Getting Angle up from pi
				
			local new_branch = parameter.temp:Clone()
				new_branch.Name = "Branch"
				local sized_new = branch.Size * parameter.scale
				new_branch.Parent = tree -- przypisanie parenta gałęzi
				new_branch.Size = sized_new -- nowa wielkość
				new_branch.CFrame = branch.CFrame * CFrame.new(0,branch.Size.Y/2,0)*rot_Y*new_Angle*CFrame.new(0,sized_new.Y/2,0) -- offseting and rotating branch
				
				-- 
				table.insert(new_level,new_branch) -- przypisanie gałęzi do tabeli
				local leveled = level[parameter.multiplier-1] -- checks if this is last level
				
				if leveled then
				
				
				
				local leaves = parameter.temp2:Clone()
				leaves.Name = "Leaves"
				local sizes = Vector3.new(sized_new.X*7,sized_new.Y/2,sized_new.Z*7)
				leaves.Size = sizes
				leaves.Parent = tree
				leaves.CFrame = new_branch.CFrame * CFrame.new(0,sizes.Y/7+(new_branch.Size.Y/2)-sized_new.Y/5,0)
				end
			
			wait(0)
				if k == parameter.split then
					break
				end
			end
			wait(0)
			if j == #level[i-1] then
				break
			end
		end
	
	

		
		table.insert(level,new_level) -- making new levels
		
	end
	
end
for i = 1,counterGen do
Main(default_parameter,{offset = CFrame.new(0,10,0)})
wait(0.5)
end

NOTE: This script was 40% of youtube, i remade it and analyse it to make it work better
or:

local step = 2

local start = workspace.Start.Position
local brick = workspace.Brick


local function Round(n:number,m:number,s:number):number
	
	return (math.floor(n/m+0.5)*m)+s
	
end

local mouse = game.Players.LocalPlayer:GetMouse()

mouse.TargetFilter = brick

local function GetSystem(n:number,m:number)
	
	local a = (math.floor(n/m+0.5)*m) 
	
	local b = math.floor(a/2)
	
	local c = b%2
	
	
	
	
	
	
	return c
	
	
end
mouse.Move:Connect(function()
	local pos = mouse.Hit.Position
	
	local X = Round(pos.X,step,start.X)
	
	local Z = Round(pos.Z,step,start.Z)
	
	local x = math.floor(X-pos.X)
	local z = math.floor(Z-pos.Z)
	
	local n = X-Round(x,step,0)
	local m  = Z-Round(z,step,0)
	
	local i = workspace.Start.Size.X
	local v = workspace.Start.Size.Z
	
	local a = GetSystem(i,step)
	local b = GetSystem(v,step)
	
	if a == 0 then
		n = n + brick.Size.X/2
		
	end
	if b == 0 then
		m = m + brick.Size.Z/2
	end
	brick.Position = Vector3.new(n,12,m)
end)

My comrade, You… do not understand me. I said complex cframe manipulation which includes the creation of customized camera system with manipulation of the CFrame matrix.

1 Like

oh right, i’m not advanced in cframes but more in math and effects like you know, i should learn camera manipulation, it’s good that i know metatables, they are good for working too

Yes, metatables imo aren’t really used in camera manipulation but you can also try manipulating Motor 6D’s thats also used in complex cframing.

1 Like

You know, i know how to make everything you mention above in some way, but i hate Camera CFrames, they are dark magic for me

If you do then show me some. I would like to see them.

1 Like

this is advanced, I mean if you really understand it, not just copy what others have done. could you tell us a little bit about that

These are really basic things.
Advanced stuff would be something like replication of custom objects like a football ball, or an NPC with custom AI (not just attack blindly, but attack strategically, evade attacks or escape when about to die).

2 Likes

I did mention “a HECK ton more” so basically consider those things in it.

And yes I agree those are basic things my mind is already too mushy today so I wasn’t able to think of hard stuff lol.

1 Like

I’ll do theory, i’m too lazy to think xd, for example OOP, i don’t know definition but i know what it is, like example below:

local tree = {}


function tree:Chop()
 -- some code
end
function tree:Grow()
 -- some code
end

OOP means that every object are described by variables, functions and methoods, tree in code can’t be a realistic tree, but it could be a name, a class of object, a age of it, color, material, species ect.

Advanced physics, it’s usually math, projectile calculations are mostly a few raycasts in line, every rayacst detects collision, raycasts are placed, i making it that way:

personally, i use some math to determine when next ray is placed

Simulating Physics, it’s math too, i don’t use it because i really don’t need it, it works like the previous point.

Camera Manipulation - this is thing that i don’t know because i didn’t in camera effects, i scripting in data bases and vectors on server, camera is dark magic for me

We can’t rate your scripting level just by seing a list of what you are able to do lol

That fine to do things, but that’s better to code them well.

2 Likes