← সব গাইড
গাইড 5

তোমার প্রথম চুরি-ও-রক্ষা গেম বানাও

প্রতিটা প্লেয়ার একটা ঘাঁটি পায়। মাঝখান থেকে gem নাও, পয়েন্ট পেতে সেটা ঘরে দৌড়ে নিয়ে যাও, আর যে সেটা বয়ে নিচ্ছে তাকে ছুঁয়ে দাও।

বিনামূল্যে70 মিনিট · শুরুর স্তর, শেষ গাইড · Roblox Studio
1
ধাপ 1 / 8

place টা তৈরি করো

  1. Roblox Studio খোলো, New Experience এ ক্লিক করো আর Baseplate টেমপ্লেটটা বেছে নাও।
  2. gem টা ম্যাপের মাঝখানে থাকবে। তার চারপাশে চারটা ঘাঁটি থাকবে, প্রতিটা মাঝখান থেকে প্রায় 60 studs দূরে।
  3. এই গেমে অন্তত দুজন প্লেয়ার লাগে, তাই শেষে তুমি দুজন টেস্ট প্লেয়ার দিয়ে এটা টেস্ট করবে।

আরও বিস্তারিত

  • Baseplate টেমপ্লেটটা শুরুর স্ক্রিনের টেমপ্লেটের তালিকায় আছে।
  • Properties-এর Position ঘরটা দেখায় part কোথায় আছে। Position 60, 0.5, 0 মানে মানচিত্রের মাঝখান থেকে 60 studs দূরে।
  • SpawnLocation-টা, মানে যে প্ল্যাটফর্মে খেলোয়াড়রা আসে সেটা, সরিয়ে মাঝখানের কাছে আনো, যাতে প্রতিটা খেলোয়াড় রত্ন থেকে সমান দূরত্বে শুরু করে।
  • Mac-এ এই গাইডে যেখানেই Ctrl লেখা আছে, সেখানে প্রতিবার Cmd কী ব্যবহার করো।
এই ধাপটা আমার জন্য কাজ করছে না

আগে এই তিনটা জিনিস দেখে নাও

  • প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
  • স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
  • Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।

তবুও আটকে আছ? আমাদের লেখো →

2
ধাপ 2 / 8

ঘাঁটিগুলো বানাও

  1. Explorer এ Workspace এর উপর মাউস রাখো, + এ ক্লিক করে একটা Folder যোগ করো। নাম দাও Bases।
  2. একটা Part যোগ করো। Size করো 16, 1, 16, Anchored চালু করো আর সেটা ধূসর করো। সেটা Bases এ টেনে আনো আর নাম দাও Base1।
  3. Ctrl+D দিয়ে তিনবার কপি করো। কপিগুলোর নাম দাও Base2, Base3 আর Base4, আর ম্যাপের এক এক পাশে এক একটা সরিয়ে দাও।

আরও বিস্তারিত

  • part-টা folder-এ ঢোকাতে Explorer-এ তার নাম টেনে Bases নামের উপর ছেড়ে দাও।
  • Ctrl+D দিয়ে বানানো কপিগুলো আগে থেকেই Bases folder-এর ভেতরে থাকে। প্রতিটার নাম F2 দিয়ে বদলাও।
  • নামগুলো অবশ্যই Base1, Base2, Base3 আর Base4 হবে, সংখ্যার আগে কোনো ফাঁক ছাড়া।
  • চারজনের বেশি খেলোয়াড় থাকা সার্ভারে বেসের চেয়ে খেলোয়াড় বেশি হয়। পরে Creator Hub-এ গেম সেটিংসে সার্ভারের আকার 4 করে দিতে পারো।
টিপ. চারটা ঘাঁটিই মাঝখান থেকে সমান দূরত্বে রাখো। তাহলে গেমটা সবার জন্য ন্যায্য হয়।
এই ধাপটা আমার জন্য কাজ করছে না

আগে এই তিনটা জিনিস দেখে নাও

  • প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
  • স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
  • Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।

তবুও আটকে আছ? আমাদের লেখো →

3
ধাপ 3 / 8

gem বানাও

  1. ম্যাপের মাঝখানে, মেঝে থেকে প্রায় 4 studs উপরে একটা Part যোগ করো। Size করো 2, 2, 2, একটা উজ্জ্বল রং বেছে নাও আর Material করো Neon। নাম দাও Gem।
  2. Anchored আর Massless চালু করো, আর CanCollide বন্ধ করো।
  3. Gem এর উপর মাউস রাখো, + এ ক্লিক করে একটা ProximityPrompt যোগ করো। ActionText করো Take আর HoldDuration করো 1।

প্রতিটা অংশ কী করে

  • প্লেয়ার কাছে দাঁড়ালে ProximityPrompt একটা বোতাম দেখায়। 1 সেকেন্ড চেপে ধরলে সেটা কাজ করে।
  • Massless চালু আর CanCollide বন্ধ থাকলে gem যে প্লেয়ার বয়ে নিচ্ছে তাকে ধীর করে না, ধাক্কাও দেয় না।

আরও বিস্তারিত

  • Anchored, Massless আর CanCollide হলো Properties-এর চেকবক্স।
  • + এ ক্লিক করে ProximityPrompt লেখো, তাহলে পেয়ে যাবে। ওটায় ক্লিক করো, তারপর Properties-এ ActionText আর HoldDuration বদলাও।
  • গেমে রত্নের কাছে দাঁড়ালে E অক্ষর আর Take কথাটা লেখা একটা ছোট বোতাম দেখা যায়।
  • ফোনে খেলোয়াড়রা ওই বোতামে আঙুল চেপে ধরে রাখে।
এই ধাপটা আমার জন্য কাজ করছে না

আগে এই তিনটা জিনিস দেখে নাও

  • প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
  • স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
  • Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।

তবুও আটকে আছ? আমাদের লেখো →

4
ধাপ 4 / 8

প্রতিটা প্লেয়ারকে একটা ঘাঁটি আর একটা স্কোর দাও

  1. ServerScriptService এর উপর মাউস রাখো, + এ ক্লিক করে একটা Script যোগ করো। নাম দাও Game।
  2. ওখানে আগে থেকে যে লাইনটা আছে সেটা মুছে ফেলো আর এই কোডটা পেস্ট করো। এটা তিনটা অংশের প্রথমটা।
  3. Play চাপো। একটা ঘাঁটি সবুজ হয়ে যাবে। সেটাই তোমার।
ServerScriptService > Game (1 / 3)
local Players = game:GetService("Players")

local bases = workspace:WaitForChild("Bases")
local gem = workspace:WaitForChild("Gem")
local home = gem.CFrame
local carrier = nil

Players.PlayerAdded:Connect(function(player)
	local stats = Instance.new("Folder")
	stats.Name = "leaderstats"
	stats.Parent = player

	local score = Instance.new("IntValue")
	score.Name = "Score"
	score.Parent = stats

	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == nil then
			base:SetAttribute("Owner", player.UserId)
			base.Color = Color3.fromRGB(60, 220, 120)
			break
		end
	end
end)

Players.PlayerRemoving:Connect(function(player)
	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == player.UserId then
			base:SetAttribute("Owner", nil)
			base.Color = Color3.fromRGB(160, 160, 160)
		end
	end
end)

প্রতিটা অংশ কী করে

  • প্রথম লাইনগুলো ঘাঁটি আর gem খুঁজে বের করে আর gem কোথায় ছিল সেটা মনে রাখে।
  • SetAttribute প্রথম খালি ঘাঁটিতে মালিকের UserId লিখে দেয়।
  • মালিক চলে গেলে PlayerRemoving ঘাঁটিটা আবার খালি করে দেয়।

আরও বিস্তারিত

  • স্ক্রিপ্টটা একটা নতুন ট্যাবে খোলে। কোডের ভেতরে ক্লিক করো, Ctrl+A আর তারপর Ctrl+V চেপে সবকিছু বদলে দাও।
  • কোন বেস সবুজ হবে তা নির্ভর করে folder-এ বেসগুলোর ক্রমের উপর। ঘুরে দেখে নিজেরটা খুঁজে নাও।
  • উপরের ডান কোণের খেলোয়াড়ের তালিকায় Score 0 দেখায়।
  • এখনো রত্নের কাছে গিয়ে E চেপে ধরে রাখলে কিছু হয় না। সেটা পরের ধাপে আসবে।
এই ধাপটা আমার জন্য কাজ করছে না

আগে এই তিনটা জিনিস দেখে নাও

  • প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
  • স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
  • Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।

তবুও আটকে আছ? আমাদের লেখো →

5
ধাপ 5 / 8

প্লেয়ারদের gem নিতে দাও

  1. Game স্ক্রিপ্টটা আবার খোলো।
  2. আগের ধাপের কোডের নিচে এই কোডটা পেস্ট করো।
  3. Play চাপো, gem এর কাছে হেঁটে যাও আর E চেপে ধরো। gem টা তোমার মাথার উপরে লাফিয়ে উঠবে আর তোমার পিছু নেবে।
ServerScriptService > Game (2 / 3)
local function resetGem()
	carrier = nil

	local weld = gem:FindFirstChild("CarryWeld")
	if weld then
		weld:Destroy()
	end

	gem.Anchored = true
	gem.CFrame = home
	gem.ProximityPrompt.Enabled = true
end

gem.ProximityPrompt.Triggered:Connect(function(player)
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if carrier or not root then return end

	carrier = player
	gem.ProximityPrompt.Enabled = false
	gem.Anchored = false
	gem.CFrame = root.CFrame * CFrame.new(0, 4, 0)

	local weld = Instance.new("WeldConstraint")
	weld.Name = "CarryWeld"
	weld.Part0 = root
	weld.Part1 = gem
	weld.Parent = gem
end)

প্রতিটা অংশ কী করে

  • carrier মনে রাখে কে gem ধরে আছে। বয়ে নেওয়ার সময় আর কেউ সেটা নিতে পারে না।
  • WeldConstraint gem টাকে প্লেয়ারের সঙ্গে আঠার মতো জোড়ে, তাই সেটা তার সঙ্গে সঙ্গে চলে।
  • resetGem জোড়টা সরিয়ে gem টাকে আবার মাঝখানে বসিয়ে দেয়।

আরও বিস্তারিত

  • স্ক্রিপ্টটা আবার খুলতে Explorer-এ Game-এ ডাবল-ক্লিক করো।
  • কোডের একদম শেষ অক্ষরের পরে ক্লিক করো আর Enter দুবার চাপো। তারপর Ctrl+V চাপো। এবার Ctrl+A চাপবে না, নইলে প্রথম অংশটা বদলে যাবে।
  • রত্নটা বহন করার সময় তোমার মাথার 4 studs উপরে ভাসে।
  • টেস্ট করতে: রত্নটা নাও, তারপর দেখো যতক্ষণ সেটা বহন করছ ততক্ষণ Take বোতামটা নেই।
এই ধাপটা আমার জন্য কাজ করছে না

আগে এই তিনটা জিনিস দেখে নাও

  • প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
  • স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
  • Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।

তবুও আটকে আছ? আমাদের লেখো →

6
ধাপ 6 / 8

স্কোর আর ছোঁয়া যোগ করো

  1. এই শেষ অংশটা Game স্ক্রিপ্টের একদম শেষে পেস্ট করো।
  2. Play চাপো, gem নাও আর দৌড়ে তোমার সবুজ ঘাঁটিতে যাও। Score 1 বাড়বে আর gem টা মাঝখানে ফিরে যাবে।
ServerScriptService > Game (3 / 3)
for _, base in ipairs(bases:GetChildren()) do
	base.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player and player == carrier and base:GetAttribute("Owner") == player.UserId then
			player.leaderstats.Score.Value += 1
			resetGem()
		end
	end)
end

while true do
	task.wait(0.2)

	if carrier then
		local weld = gem:FindFirstChild("CarryWeld")
		local root = weld and weld.Part0
		local character = root and root.Parent
		local humanoid = character and character:FindFirstChildOfClass("Humanoid")

		if not humanoid or humanoid.Health <= 0 or root.Position.Y < -20 then
			resetGem()
		else
			for _, other in ipairs(Players:GetPlayers()) do
				local otherRoot = other ~= carrier and other.Character and other.Character:FindFirstChild("HumanoidRootPart")
				if otherRoot and (otherRoot.Position - root.Position).Magnitude < 5 then
					resetGem()
					break
				end
			end
		end
	end
end

প্রতিটা অংশ কী করে

  • প্রতিটা ঘাঁটি তিনটা জিনিস দেখে: একজন প্লেয়ার ছুঁয়েছে, সে gem বয়ে নিচ্ছে, আর ঘাঁটিটা তার নিজের।
  • নিচের লুপটা সেকেন্ডে 5 বার চলে। অন্য কোনো প্লেয়ার বয়ে নেওয়া প্লেয়ারের 5 studs এর চেয়ে কাছে এলে gem টা ফিরে যায়।
  • বয়ে নেওয়া প্লেয়ার গেম ছেড়ে গেলে বা ম্যাপ থেকে পড়ে গেলেও লুপটা gem টাকে রিসেট করে।

আরও বিস্তারিত

  • আবার স্ক্রিপ্টের একদম শেষ অক্ষরের পরে ক্লিক করো, Enter দুবার চাপো আর পেস্ট করো।
  • তৈরি স্ক্রিপ্টের তিনটা অংশ এই ক্রমে আছে: বেস আর স্কোর, রত্ন নেওয়া, আর পয়েন্ট পাওয়া ও ট্যাগ করা।
  • যে ধূসর বেস কারও নয় সেটা কোনো পয়েন্ট দেয় না। শুধু তোমার নিজের সবুজ বেসই গোনা হয়।
  • একা ট্যাগ করা টেস্ট করা যায় না। সেটা তুমি পরের ধাপে দুজন খেলোয়াড় নিয়ে করবে।
সাধারণ ভুল. এই অংশটা স্ক্রিপ্টের মাঝখানে পেস্ট করা। while লুপ কখনো শেষ হয় না, তাই এর নিচের কোড কখনো চলে না।
এই ধাপটা আমার জন্য কাজ করছে না

আগে এই তিনটা জিনিস দেখে নাও

  • প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
  • স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
  • Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।

তবুও আটকে আছ? আমাদের লেখো →

7
ধাপ 7 / 8

দুজন প্লেয়ার দিয়ে টেস্ট করো

  1. Play বোতামের পাশের ছোট মেনুটা খোলো আর Server & Clients বেছে নাও। প্লেয়ারের সংখ্যা 2 করো আর Play চাপো।
  2. Studio দুটো গেম উইন্ডো খোলে। প্রতিটা আলাদা প্লেয়ার, আলাদা ঘাঁটিসহ।
  3. এক উইন্ডোতে gem নাও। অন্য উইন্ডোতে সেই প্লেয়ারের দিকে দৌড়ে যাও। gem টা মাঝখানে ফিরে যাবে।
  4. মূল Studio উইন্ডোর লাল Stop বোতাম দিয়ে টেস্ট থামাও, তারপর মেনুটা আবার Test এ ফিরিয়ে দাও।

আরও বিস্তারিত

  • ছোট মেনুটা হলো Studio-র উপরে Play বোতামের ঠিক পাশের তীরচিহ্ন।
  • দুটো গেম উইন্ডো একটার উপর আরেকটা খোলে। একটাকে টেনে সরাও, যাতে দুটোই দেখা যায়।
  • কীবোর্ড ব্যবহারের আগে একটা উইন্ডোর ভেতরে ক্লিক করো। কী-গুলো যায় সেই উইন্ডোতে যেটায় তুমি শেষবার ক্লিক করেছ।
  • দুটো উইন্ডো দিয়ে টেস্ট করতে যথেষ্ট মেমরির কম্পিউটার লাগে। খুব ধীর চললে আগে অন্য প্রোগ্রামগুলো বন্ধ করো।
এই ধাপটা আমার জন্য কাজ করছে না

আগে এই তিনটা জিনিস দেখে নাও

  • প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
  • স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
  • Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।

তবুও আটকে আছ? আমাদের লেখো →

8
ধাপ 8 / 8

পাবলিশ করো

  1. File → Publish to Roblox বেছে নাও। গেমের একটা নাম আর ছোট বর্ণনা দাও।
  2. Creator Hub ওয়েবসাইটে তোমার গেমটা খোলো আর Maturity প্রশ্নমালা পূরণ করো।
  3. গেমটাকে Public করো আর লিংকটা একজন বন্ধুকে পাঠাও।

আরও বিস্তারিত

  • প্রথমবার পাবলিশ করার সময় Studio একটা নাম আর বর্ণনা চায়। Create-এ ক্লিক করো।
  • Creator Hub হলো create.roblox.com ওয়েবসাইট। একই অ্যাকাউন্ট দিয়ে সাইন ইন করো আর তালিকায় তোমার গেমে ক্লিক করো।
  • গেম সবার জন্য খোলার আগে Roblox আরও কিছু চাইতে পারে, যেমন অ্যাকাউন্টের বয়স যাচাই। পাতাটা বলে দেয় কী বাকি আছে।
  • তোমার বয়স 18-র কম হলে এই ধাপটা বাবা-মায়ের কারও সঙ্গে মিলে করো।
টিপ. এই গেমটা অন্য প্লেয়ার ছাড়া মজার হয় না। প্রথম ম্যাচের জন্য দুই-তিনজন বন্ধুকে একই সার্ভারে ডাকো।
এই ধাপটা আমার জন্য কাজ করছে না

আগে এই তিনটা জিনিস দেখে নাও

  • প্রতিটা part আর স্ক্রিপ্টের নাম ঠিক গাইডের মতো, একই বড় হাতের আর ছোট হাতের অক্ষরসহ।
  • স্ক্রিপ্টটা ঠিক অবজেক্টের ভেতরে আছে। কোডের বাক্সের উপরের লেবেলটা দেখো।
  • Window মেনু থেকে Output উইন্ডো খোলো। লাল লেখা দেখায় কোন স্ক্রিপ্টে আর কোন লাইনে সমস্যা।

তবুও আটকে আছ? আমাদের লেখো →

এবার নিজে বদলে দেখো

  • কোনো প্লেয়ার 5 পয়েন্টে পৌঁছালে রাউন্ড শেষ করো আর সব স্কোর আবার 0 করে দাও।
  • অন্য রঙের একটা দ্বিতীয় gem যোগ করো।
  • যে বয়ে নিচ্ছে তাকে ধীর করো। ইঙ্গিত: gem নেওয়া হলে Humanoid.WalkSpeed করো 12, আর resetGem এ আবার 16।