CodeKimbap Portfolio | Scripter

Hello! My name is CodeKimbap, and I have been programming since 2019. I have always had a passion for computers and computer science, which led me to learn Python, Dart, C, C++, C#, Javascript, and, most importantly, Lua. I quite enjoy the Roblox game engine due to its simplicity and gentle learning curve. I cannot wait to help you out on your next project!

Commisions
Basic Punch system

Showcase Video

AttackMovesClass

local UIS = game:GetService("UserInputService")
local event = game:GetService("ReplicatedStorage"):WaitForChild("OnKeyPressed")

local AttackMove = {}
local MT = {}

MT.__index = MT

function AttackMove.new(name, animationID, keyCode)
	local self = {}
	setmetatable(self, MT)

	self.Name = name
	self.AnimationId = "rbxassetid://".. tostring(animationID)
	self.Keycode = keyCode
	self.__type = "AttackMove"
	
	return self
end

function MT:GetName()
	return self.Name
end

function MT:PlayAnimationOnKey()
	local coolDown = false
	UIS.InputBegan:Connect(function(input, IS)
		if IS == true then return end
		if coolDown then return end
		if input.KeyCode == self.Keycode then
			coolDown = true
			print(coolDown)
			event:FireServer(self.AnimationId)
			print("Key pressed")
			wait(3)
			coolDown = false
		end
	end)
end

return AttackMove

HitBox Class

local HitBox = {}
local MT = {}

MT.__index = MT

function HitBox.new(size, offset, damageAmount,deleteTime, sfxId)
	local self = {}
	setmetatable(self, MT)
	
	self.SoundId = "rbxassetid://"..tostring(sfxId)
	self.HitBox = nil
	self.Player = nil
	self.Hits = {}
	self.DamageAmount = damageAmount
	self.Size = size
	self.DeleteTime = deleteTime
	self.Offset = offset
	return self
end

function MT:Create(plr)
	self.Player = plr
	self.HitBox = Instance.new("Part")
	self.HitBox.Anchored = true
	self.HitBox.CanCollide = false
	self.HitBox.Transparency = 1
	self.HitBox.Size = self.Size
	self.HitBox.CFrame = plr.Character:FindFirstChild("HumanoidRootPart").CFrame * self.Offset
	self.HitBox.Parent = workspace
	game.Debris:AddItem(self.HitBox, self.DeleteTime)
end


function MT:Ragdoll(character)
	for i, joint in pairs(character:GetDescendants()) do
		if joint:IsA("Motor6D") then
			local socket = Instance.new("BallSocketConstraint", joint.Parent)
			local att0 = Instance.new("Attachment", joint.Part0)
			local att1 = Instance.new("Attachment", joint.Part1)
			
			att0.CFrame = joint.C0
			att1.CFrame = joint.C1
			
			socket.Attachment0 = att0
			socket.Attachment1 = att1
			socket.TwistLimitsEnabled = true
			socket.LimitsEnabled = true
			character.Humanoid:ChangeState(Enum.HumanoidStateType.Physics)
			
			joint.Enabled = false
		end
	end
end

function MT:UnRagdoll(character)
	for i,joint in pairs(character:GetDescendants()) do
		if joint:IsA("Motor6D") then
			joint.Enabled = true
		elseif joint:IsA("BallSocketConstraint") then
			joint.Enabled = false
		end
	end
	
	character.Humanoid:ChangeState(Enum.HumanoidStateType.GettingUp)
end

function MT:OnHitboxHit(knockBackPower)
	self.HitBox.Touched:Connect(function(hit)
		if hit.Parent:FindFirstChild("Humanoid") and hit.Parent.Name ~= self.Player.Name then
			if self.Hits[hit.Parent.Name] == true then
				return
			end
			self.Hits[hit.Parent.Name] = true
			local sound = Instance.new("Sound")
			sound.SoundId = self.SoundId
			sound.Parent = hit.Parent:FindFirstChild("Humanoid")
			sound:Play()
			game.Debris:AddItem(sound, 2)
			hit:ApplyImpulse((hit.Position - self.Player.Character:FindFirstChild("HumanoidRootPart").Position).Unit * knockBackPower)
			self:Ragdoll(hit.Parent)
			hit.Parent:FindFirstChild("Humanoid"):TakeDamage(self.DamageAmount)
			wait(2)
			self:UnRagdoll(hit.Parent)
			self.Hits[hit.Parent.Name] = false
		end
	end)
end


return HitBox

SeverScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = ReplicatedStorage:WaitForChild("OnKeyPressed")

local hitBox = require(ReplicatedStorage:WaitForChild("HitBox"))
local hitBoxObject = hitBox.new(Vector3.new(5, 5, 5), CFrame.new(0, 0, -5),10, 2, 8595980577)

event.OnServerEvent:Connect(function(plr, animationId)	
	local animator = plr.Character:WaitForChild("Humanoid"):FindFirstChildOfClass("Animator")
	
	local animation = Instance.new("Animation")
	animation.AnimationId = animationId
	
	local animationTrack = animator:LoadAnimation(animation)
	animationTrack:Play()
	
	hitBoxObject:Create(plr)
	wait(0.2)
	hitBoxObject:OnHitboxHit(2000)
end)

local script

local AttackMove = require(game:GetService("ReplicatedStorage").AttackMoves)
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")

local AttackMoveObject = AttackMove.new("Punch", 87571177995955, Enum.KeyCode.E)
AttackMoveObject:PlayAnimationOnKey()
Queue system

Showcase Video

game logic script:

local gameStart = script.Parent.Parent:WaitForChild("Events"):WaitForChild("GameStart")
local gameStartRemote = script.Parent.Parent:WaitForChild("Events"):WaitForChild("GameStartRemote")

local seat = game:GetService("ReplicatedStorage").DefualtChair
local P1locaiton = script.Parent.Parent:WaitForChild("table"):WaitForChild("P1Location")
local P2locaiton = script.Parent.Parent:WaitForChild("table"):WaitForChild("P2Location")
local P3locaiton = script.Parent.Parent:WaitForChild("table"):WaitForChild("P3Location")

local billboard = script.Parent.Parent:WaitForChild("table"):WaitForChild("body"):WaitForChild("BillboardGui"):WaitForChild("TextLabel")
local deck = script.Parent.Parent:WaitForChild("table"):WaitForChild("Cards")


gameStart.Event:Connect(function(plrArray, objName)
	gameStartRemote:FireClient(plrArray[1], objName)
	gameStartRemote:FireClient(plrArray[2], objName)
	gameStartRemote:FireClient(plrArray[3], objName)
	
	local seat1 = seat:Clone()
	local seat2 = seat:Clone()
	local seat3 = seat:Clone()
	
	seat1.Parent = workspace:FindFirstChild(objName):WaitForChild("table")
	seat2.Parent = workspace:FindFirstChild(objName):WaitForChild("table")
	seat3.Parent = workspace:FindFirstChild(objName):WaitForChild("table")
	
	seat1:PivotTo(P1locaiton:GetPivot() * CFrame.Angles(0, math.rad(270), math.rad(90)) + Vector3.new(0, 1, 0))
	seat2:PivotTo(P2locaiton:GetPivot() * CFrame.Angles(0, math.rad(270), math.rad(90)) + Vector3.new(0, 1, 0))
	seat3:PivotTo(P3locaiton:GetPivot() * CFrame.Angles(0, math.rad(270), math.rad(90)) + Vector3.new(0, 1, 0))
	
	billboard.Text = ""
	
	seat1.Seat:Sit(plrArray[1].Character:WaitForChild("Humanoid"))
	seat2.Seat:Sit(plrArray[2].Character:WaitForChild("Humanoid"))
	seat3.Seat:Sit(plrArray[3].Character:WaitForChild("Humanoid"))
	
	deck.Transparency = 0
	deck:WaitForChild("Decal").Transparency = 0
	deck:WaitForChild("Decal2").Transparency = 0
	deck:WaitForChild("Decal3").Transparency = 0
	deck:WaitForChild("Decal4").Transparency = 0
	deck:WaitForChild("Decal5").Transparency = 0
	deck:WaitForChild("Decal6").Transparency = 0
end)

ProximityPromptLogic script

local PartLocation = script.Parent.Parent:WaitForChild("table"):WaitForChild("TpPart").CFrame
local PP1 = script.Parent.Parent:WaitForChild("table"):WaitForChild("PP1").ProximityPrompt
local PP2 = script.Parent.Parent:WaitForChild("table"):WaitForChild("PP2").ProximityPrompt
local PP3 = script.Parent.Parent:WaitForChild("table"):WaitForChild("PP3").ProximityPrompt
local PPLeave = script.Parent.Parent:WaitForChild("table"):WaitForChild("TpPart").ProximityPrompt

local objName = script.Parent.Parent.Name

local GameStart = script.Parent.Parent:WaitForChild("Events"):WaitForChild("GameStart")
local onQueueEvent = script.Parent.Parent:WaitForChild("Events"):WaitForChild("OnQueue")
local onQueueLeaveEvent = script.Parent.Parent:WaitForChild("Events"):WaitForChild("OnQueueLeave")

local queueText = workspace:WaitForChild("Game"):WaitForChild("table"):WaitForChild("body"):WaitForChild("BillboardGui"):WaitForChild("TextLabel")
local nInQueue = 0
local playerArray = {}
local waitTime = 13

function getTableLength(T)
	local count = 0
	for _ in pairs(T) do count = count + 1 end
	return count
end

function onTriggered(player)
	if nInQueue == 3 then
		return
	end
	nInQueue += 1
	player.Character.HumanoidRootPart.CFrame = PartLocation + Vector3.new(0, 5, 0)
	print(objName)
	onQueueEvent:FireClient(player, objName)
	table.insert(playerArray, player)
	print("Sent event")
	if nInQueue == 3  then
		for i = waitTime, 0, -1 do
			if nInQueue ~= 3 then
				break
			end
			if i == 0 then
				GameStart:Fire(playerArray, objName)
				break
			end
			queueText.Text = "game starting in: " .. i
			wait(1)			
		end
	else
		queueText.Text = "player number        " .. nInQueue .. "/3"	
	end
end
function onLeave(player)
	nInQueue -= 1
	player.Character.HumanoidRootPart.CFrame = script.Parent.Parent.table.TpOut.CFrame + Vector3.new(0, 5, 0)
	for i = 0, getTableLength(playerArray), 1 do
		if playerArray[i] == player then
			table.remove(playerArray, i)
			break
		end
	end
	onQueueLeaveEvent:FireClient(player, objName)
	queueText.Text = "player number        " .. nInQueue .. "/3"
end

PP1.Triggered:Connect(onTriggered)
PP2.Triggered:Connect(onTriggered)
PP3.Triggered:Connect(onTriggered)
PPLeave.Triggered:Connect(onLeave)

ProximityPrompt Local script

local onQueueEvent = workspace:WaitForChild("Game"):WaitForChild("Events"):WaitForChild("OnQueue")
local onQueueLeaveEvent = workspace:WaitForChild("Game"):WaitForChild("Events"):WaitForChild("OnQueueLeave")
local GameStartEvent = workspace:WaitForChild("Game"):WaitForChild("Events"):WaitForChild("GameStartRemote")

local PP1 = nil
local PP2 = nil
local PP3 = nil
local PPLeave = nil

onQueueEvent.OnClientEvent:Connect(function(gameObj)
	print(gameObj)
	print("Recived event")
	PP1 = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("PP1").ProximityPrompt
	PP2 = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("PP2").ProximityPrompt
	PP3 = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("PP3").ProximityPrompt
	PPLeave = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("TpPart").ProximityPrompt
	
	PP1.Enabled = false
	PP2.Enabled = false
	PP3.Enabled = false
	PPLeave.Enabled = true
end)

onQueueLeaveEvent.OnClientEvent:Connect(function(gameObj)
	PP1 = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("PP1").ProximityPrompt
	PP2 = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("PP2").ProximityPrompt
	PP3 = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("PP3").ProximityPrompt
	PPLeave = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("TpPart").ProximityPrompt
	PP1.Enabled = true
	PP2.Enabled = true
	PP3.Enabled = true
	PPLeave.Enabled = false
end)

GameStartEvent.OnClientEvent:Connect(function(gameObj)
	PPLeave = workspace:FindFirstChild(gameObj):WaitForChild("table"):WaitForChild("TpPart").ProximityPrompt
	PPLeave.Enabled = false
end)
Mining system with hit detection

Showcase video

Hit registration with raytracing

Showcase Video

main script

local tool = script.Parent
local GunEnd = tool:WaitForChild("GunEnd")
local remote = tool:WaitForChild("pewPew")

local Workspace = game:GetService("Workspace")
local ServerStorage = game:GetService("ServerStorage")

remote.OnServerEvent:Connect(function(player,position)
	local origin = GunEnd.Position
	local direction = (position - origin).Unit
	local result = Workspace:Raycast(GunEnd.Position, direction*200)
	
	local bulcol = result and result.Position or origin + direction*200
	local distance = (origin - bulcol).Magnitude
	
	local cloneBullet = ServerStorage.IneedMoreBullets:Clone()
	cloneBullet.Size = Vector3.new(0.1,0.1,distance)
	cloneBullet.CFrame = CFrame.new(origin, bulcol)*CFrame.new(0,0, - distance/2)
	cloneBullet.Parent = Workspace
	
	if result then
		local part = result.Instance
		local humanoid = part.Parent:FindFirstChild("Humanoid") or part.Parent.Parent:FindFirstChild("Humanoid")
		
		if humanoid  then
			humanoid:TakeDamage(15)
		end
	end
	
	wait(0.1)
	cloneBullet:Destroy()
	
end)

local script

local tool = script.Parent
local remote = tool:WaitForChild("pewPew")

local Players = game:GetService("Players")
local Client = Players.LocalPlayer
local cursor = Client:GetMouse()

tool.Activated:Connect(function()
	remote:FireServer(cursor.Hit.Position)
end)
Quest system (Data store)

Showcase video
Quest Logic Script

local RS = game:GetService("ReplicatedStorage")
local Remote = RS:WaitForChild("NPCQuestEvent")
local ProximityPrompt = workspace.QuestGiver.ProximityPrompt

ProximityPrompt.Triggered:Connect(function(player)
	Remote:FireClient(player)
	print("Sent a thing")
end)

Player xp script

local DSS = game:GetService("DataStoreService")
local LevelService = DSS:GetDataStore("PlayerLevel")
local RS = game:GetService("ReplicatedStorage")
local RemoteFunction = RS:WaitForChild("XPIncreaseFuncEvent")

local DataStoreService = game:GetService("DataStoreService")
local XPStore = DataStoreService:GetDataStore("PlayerXP")
local LevelStore = DataStoreService:GetDataStore("PlayerLevel")



local function XPIncrease(player,playerID)
	local PlayerData = XPStore:GetAsync(playerID)
	local playerXP = nil
	if PlayerData then
		print("Player Has played before")
		print("Player XP")
		playerXP = XPStore:GetAsync(playerID)
		playerXP += 100
		XPStore:SetAsync(playerID, playerXP)
	elseif not PlayerData then
		print("Player has not played before")
		playerXP = 0
		XPStore:SetAsync(playerID, playerXP)
		print(XPStore:GetAsync(playerID))
	end
	print(playerXP)
end

local function LevelIncrease(playerID, playerXP)
	local playerLVL = nil
	local RequirementToLvl = nil
	local NumInbe
	if playerLVL < 100 then
		RequirementToLvl = 100
	else
		RequirementToLvl = 1000
	end

	
end
RemoteFunction.OnServerInvoke = XPIncrease

localquest gui logic local script

local RemoteEvent = game.ReplicatedStorage:WaitForChild("NPCQuestEvent")

RemoteEvent.OnClientEvent:Connect(function()
	print("Did a thing")
	script.Parent.Frame.Visible = true
end)

I reside in the UK, so my time zone is either BST or GMT, depending on when you are reading this. Due to school, I arrive home quite late (7:30 p.m.), but I stay on until around 12 p.m. During the weekends, I am available all day. The same applies to summer holidays and half-term.

I prefer Robux or USD/GBP. However, other payment methods may be discussed. I do prefer payment to be upfront.

You can reach me on Discord with the username: j0e_bid3n