→ همه‌ی آموزش‌ها
آموزش 5

اولین بازی دزدی و دفاعت را بساز

هر بازیکن یک پایگاه دارد. جواهر را از وسط بردار، به خانه برسان تا امتیاز بگیری و هر کسی را که آن را حمل می‌کند لمس کن.

رایگان70 دقیقه · مبتدی، آخرین آموزش · Roblox Studio
1
قدم 1 / 8

مکان را آماده کن

  1. Roblox Studio را باز کن، روی New Experience کلیک کن و قالب Baseplate را انتخاب کن.
  2. جواهر وسط نقشه می‌ماند. چهار پایگاه دورش می‌ایستند، هر کدام حدود 60 studs از وسط فاصله دارد.
  3. این بازی حداقل دو بازیکن لازم دارد، پس آخر کار آن را با دو بازیکن آزمایشی امتحان می‌کنی.

جزئیات بیشتر

  • قالب Baseplate در فهرست قالب‌های صفحه‌ی شروع است.
  • فیلد Position در Properties نشان می‌دهد قطعه کجاست. Position 60, 0.5, 0 یعنی 60 studs از وسط نقشه.
  • SpawnLocation، سکویی که بازیکن‌ها رویش ظاهر می‌شوند، را به نزدیک وسط ببر تا همه‌ی بازیکن‌ها از یک فاصله از گوهر شروع کنند.
  • روی Mac هر جا این آموزش Ctrl می‌گوید، کلید Cmd را بزن.
این قدم برای من کار نمی‌کند

اول این سه چیز را بررسی کن

  • اسم هر قطعه و اسکریپت دقیقاً مثل آموزش است، با همان حروف بزرگ.
  • اسکریپت داخل شیء درست است. به برچسب بالای کادر کد نگاه کن.
  • پنجره‌ی Output را از منوی Window باز کن. متن قرمز اسکریپت و خطی را که مشکل دارد نشان می‌دهد.

هنوز گیر کرده‌ای؟ برای ما بنویس ←

2
قدم 2 / 8

پایگاه‌ها را بساز

  1. در Explorer موس را روی Workspace ببر، روی + کلیک کن و یک Folder اضافه کن. اسمش را Bases بگذار.
  2. یک Part بگذار. Size را 16, 1, 16 کن، Anchored را روشن کن و خاکستری‌اش کن. آن را بکش داخل Bases و اسمش را Base1 بگذار.
  3. با Ctrl+D سه بار کپی‌اش کن. اسم کپی‌ها را Base2 و Base3 و Base4 بگذار و هر کدام را به یک طرف نقشه ببر.

جزئیات بیشتر

  • برای گذاشتن قطعه داخل پوشه، اسمش را در Explorer روی اسم Bases بکش.
  • کپی‌هایی که با Ctrl+D ساخته می‌شوند از قبل داخل پوشه‌ی Bases هستند. اسم هر کدام را با F2 عوض کن.
  • اسم‌ها باید دقیقاً Base1 و Base2 و Base3 و Base4 باشند، بدون فاصله قبل از عدد.
  • در سروری که بیشتر از چهار بازیکن دارد، بازیکن‌ها از پایه‌ها بیشترند. بعداً می‌توانی اندازه‌ی سرور را در تنظیمات بازی در Creator Hub روی 4 بگذاری.
نکته. هر چهار پایگاه را به یک فاصله از وسط بگذار. آن‌وقت بازی برای همه منصفانه است.
این قدم برای من کار نمی‌کند

اول این سه چیز را بررسی کن

  • اسم هر قطعه و اسکریپت دقیقاً مثل آموزش است، با همان حروف بزرگ.
  • اسکریپت داخل شیء درست است. به برچسب بالای کادر کد نگاه کن.
  • پنجره‌ی Output را از منوی Window باز کن. متن قرمز اسکریپت و خطی را که مشکل دارد نشان می‌دهد.

هنوز گیر کرده‌ای؟ برای ما بنویس ←

3
قدم 3 / 8

جواهر را بساز

  1. یک Part وسط نقشه، حدود 4 studs بالاتر از کف بگذار. Size را 2, 2, 2 کن، یک رنگ روشن انتخاب کن و Material را Neon بگذار. اسمش را Gem بگذار.
  2. Anchored و Massless را روشن کن و CanCollide را خاموش کن.
  3. موس را روی Gem ببر، روی + کلیک کن و یک ProximityPrompt اضافه کن. ActionText را Take و HoldDuration را 1 بگذار.

هر بخش چه کار می‌کند

  • ProximityPrompt وقتی بازیکن نزدیک می‌ایستد یک دکمه نشان می‌دهد. نگه داشتنش برای 1 ثانیه آن را فعال می‌کند.
  • روشن بودن Massless و خاموش بودن CanCollide جلوی این را می‌گیرند که جواهر بازیکنِ حمل‌کننده را کند کند یا هل بدهد.

جزئیات بیشتر

  • Anchored و Massless و CanCollide کادرهای انتخاب در Properties هستند.
  • وقتی روی + کلیک می‌کنی، ProximityPrompt را بنویس تا پیدایش کنی. رویش کلیک کن، بعد ActionText و HoldDuration را در Properties عوض کن.
  • در بازی وقتی نزدیک گوهر می‌ایستی، یک دکمه‌ی کوچک با حرف E و کلمه‌ی Take ظاهر می‌شود.
  • روی گوشی بازیکن‌ها انگشتشان را روی آن دکمه نگه می‌دارند.
این قدم برای من کار نمی‌کند

اول این سه چیز را بررسی کن

  • اسم هر قطعه و اسکریپت دقیقاً مثل آموزش است، با همان حروف بزرگ.
  • اسکریپت داخل شیء درست است. به برچسب بالای کادر کد نگاه کن.
  • پنجره‌ی Output را از منوی Window باز کن. متن قرمز اسکریپت و خطی را که مشکل دارد نشان می‌دهد.

هنوز گیر کرده‌ای؟ برای ما بنویس ←

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)

هر بخش چه کار می‌کند

  • خط‌های اول پایگاه‌ها و جواهر را پیدا می‌کنند و یادشان می‌ماند جواهر از کجا شروع کرده بود.
  • SetAttribute مقدار UserId صاحب را روی اولین پایگاه خالی می‌نویسد.
  • PlayerRemoving وقتی صاحب پایگاه می‌رود، آن را دوباره آزاد می‌کند.

جزئیات بیشتر

  • اسکریپت در یک تب جدید باز می‌شود. داخل کد کلیک کن، Ctrl+A و بعد Ctrl+V را بزن تا همه‌چیز عوض شود.
  • اینکه کدام پایه سبز می‌شود به ترتیب پایه‌ها در پوشه بستگی دارد. دور و بر بگرد تا پایه‌ی خودت را پیدا کنی.
  • فهرست بازیکن‌ها در گوشه‌ی بالا سمت راست Score 0 را نشان می‌دهد.
  • هنوز وقتی به گوهر می‌روی و E را نگه می‌داری اتفاقی نمی‌افتد. آن در قدم بعدی می‌آید.
این قدم برای من کار نمی‌کند

اول این سه چیز را بررسی کن

  • اسم هر قطعه و اسکریپت دقیقاً مثل آموزش است، با همان حروف بزرگ.
  • اسکریپت داخل شیء درست است. به برچسب بالای کادر کد نگاه کن.
  • پنجره‌ی Output را از منوی Window باز کن. متن قرمز اسکریپت و خطی را که مشکل دارد نشان می‌دهد.

هنوز گیر کرده‌ای؟ برای ما بنویس ←

5
قدم 5 / 8

بازیکن‌ها بتوانند جواهر را بردارند

  1. اسکریپت Game را دوباره باز کن.
  2. این کد را زیر کد قدم قبل بچسبان.
  3. Play را بزن، سمت جواهر برو و E را نگه دار. جواهر می‌پرد بالای سرت و دنبالت می‌آید.
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 یادش می‌ماند چه کسی جواهر را دارد. تا وقتی حمل می‌شود هیچ‌کس دیگر نمی‌تواند آن را بردارد.
  • WeldConstraint جواهر را به بازیکن می‌چسباند، پس با او حرکت می‌کند.
  • resetGem چسب را برمی‌دارد و جواهر را دوباره وسط می‌گذارد.

جزئیات بیشتر

  • برای باز کردن دوباره‌ی اسکریپت، روی Game در Explorer دو بار کلیک کن.
  • بعد از آخرین حرف کد کلیک کن و دو بار Enter را بزن. بعد Ctrl+V را بزن. این بار Ctrl+A را نزن، وگرنه بخش اول را عوض می‌کنی.
  • گوهر وقتی حملش می‌کنی 4 studs بالای سرت شناور است.
  • برای آزمایش: گوهر را بردار، بعد ببین تا وقتی حملش می‌کنی دکمه‌ی Take رفته است.
این قدم برای من کار نمی‌کند

اول این سه چیز را بررسی کن

  • اسم هر قطعه و اسکریپت دقیقاً مثل آموزش است، با همان حروف بزرگ.
  • اسکریپت داخل شیء درست است. به برچسب بالای کادر کد نگاه کن.
  • پنجره‌ی Output را از منوی Window باز کن. متن قرمز اسکریپت و خطی را که مشکل دارد نشان می‌دهد.

هنوز گیر کرده‌ای؟ برای ما بنویس ←

6
قدم 6 / 8

امتیازدهی و لمس کردن را اضافه کن

  1. این بخش آخر را درست در انتهای اسکریپت Game بچسبان.
  2. Play را بزن، جواهر را بردار و روی پایگاه سبزت بدو. Score یکی بالا می‌رود و جواهر به وسط برمی‌گردد.
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

هر بخش چه کار می‌کند

  • هر پایگاه سه چیز را چک می‌کند: بازیکنی به آن خورده، آن بازیکن جواهر را حمل می‌کند و پایگاه مال خود اوست.
  • حلقه‌ی پایین، 5 بار در ثانیه اجرا می‌شود. اگر بازیکن دیگری از 5 studs به حمل‌کننده نزدیک‌تر شود، جواهر برمی‌گردد.
  • حلقه همچنین اگر حمل‌کننده از بازی برود یا از نقشه بیفتد، جواهر را برمی‌گرداند.

جزئیات بیشتر

  • دوباره بعد از آخرین حرف اسکریپت کلیک کن، دو بار Enter را بزن و بچسبان.
  • اسکریپت کامل سه بخش دارد به این ترتیب: پایه‌ها و امتیاز، برداشتن گوهر، امتیاز گرفتن و لمس کردن بازیکن‌های دیگر.
  • پایه‌ی خاکستری که مال هیچ‌کس نیست امتیاز نمی‌دهد. فقط پایه‌ی سبز خودت حساب می‌شود.
  • تنها نمی‌توانی لمس کردن را امتحان کنی. آن را در قدم بعدی با دو بازیکن انجام می‌دهی.
اشتباه رایج. چسباندن این بخش وسط اسکریپت. حلقه‌ی while هیچ‌وقت تمام نمی‌شود، پس کدی که زیرش باشد هیچ‌وقت اجرا نمی‌شود.
این قدم برای من کار نمی‌کند

اول این سه چیز را بررسی کن

  • اسم هر قطعه و اسکریپت دقیقاً مثل آموزش است، با همان حروف بزرگ.
  • اسکریپت داخل شیء درست است. به برچسب بالای کادر کد نگاه کن.
  • پنجره‌ی Output را از منوی Window باز کن. متن قرمز اسکریپت و خطی را که مشکل دارد نشان می‌دهد.

هنوز گیر کرده‌ای؟ برای ما بنویس ←

7
قدم 7 / 8

با دو بازیکن امتحان کن

  1. کنار دکمه‌ی Play منوی کوچک را باز کن و Server & Clients را انتخاب کن. تعداد بازیکن‌ها را 2 بگذار و Play را بزن.
  2. Studio دو پنجره‌ی بازی باز می‌کند. هر کدام یک بازیکن متفاوت با یک پایگاه متفاوت است.
  3. در یک پنجره جواهر را بردار. در پنجره‌ی دیگر به آن بازیکن بخور. جواهر به وسط برمی‌گردد.
  4. امتحان را با دکمه‌ی قرمز Stop در پنجره‌ی اصلی Studio متوقف کن، بعد منو را دوباره روی Test بگذار.

جزئیات بیشتر

  • منوی کوچک همان فلشی است که درست کنار دکمه‌ی Play در بالای Studio است.
  • دو پنجره‌ی بازی روی هم باز می‌شوند. یکی را کنار بکش تا هر دو را ببینی.
  • قبل از استفاده از صفحه‌کلید داخل یک پنجره کلیک کن. کلیدها به پنجره‌ای می‌روند که آخرین بار رویش کلیک کرده‌ای.
  • آزمایش با دو پنجره کامپیوتری با حافظه‌ی کافی می‌خواهد. اگر خیلی کند بود، اول برنامه‌های دیگر را ببند.
این قدم برای من کار نمی‌کند

اول این سه چیز را بررسی کن

  • اسم هر قطعه و اسکریپت دقیقاً مثل آموزش است، با همان حروف بزرگ.
  • اسکریپت داخل شیء درست است. به برچسب بالای کادر کد نگاه کن.
  • پنجره‌ی Output را از منوی Window باز کن. متن قرمز اسکریپت و خطی را که مشکل دارد نشان می‌دهد.

هنوز گیر کرده‌ای؟ برای ما بنویس ←

8
قدم 8 / 8

منتشرش کن

  1. File → Publish to Roblox را انتخاب کن. به بازی یک اسم و یک توضیح کوتاه بده.
  2. در سایت Creator Hub بازی‌ات را باز کن و پرسشنامه‌ی Maturity را پر کن.
  3. بازی را روی Public بگذار و لینکش را برای یک دوست بفرست.

جزئیات بیشتر

  • بار اول که منتشر می‌کنی، Studio اسم و توضیح می‌خواهد. روی Create کلیک کن.
  • Creator Hub همان وب‌سایت create.roblox.com است. با همان حساب وارد شو و در فهرست روی بازی‌ات کلیک کن.
  • ممکن است Roblox قبل از عمومی شدن بازی چیزهای بیشتری بخواهد، مثلاً تأیید سن حساب. صفحه می‌گوید چه چیزی کم است.
  • اگر زیر 18 سال داری، این قدم را با یکی از والدینت انجام بده.
نکته. این بازی فقط با بازیکن‌های دیگر جذاب است. برای اولین مسابقه دو سه دوست را به همان سرور دعوت کن.
این قدم برای من کار نمی‌کند

اول این سه چیز را بررسی کن

  • اسم هر قطعه و اسکریپت دقیقاً مثل آموزش است، با همان حروف بزرگ.
  • اسکریپت داخل شیء درست است. به برچسب بالای کادر کد نگاه کن.
  • پنجره‌ی Output را از منوی Window باز کن. متن قرمز اسکریپت و خطی را که مشکل دارد نشان می‌دهد.

هنوز گیر کرده‌ای؟ برای ما بنویس ←

حالا خودت تغییرش بده

  • وقتی بازیکنی به 5 امتیاز رسید دور را تمام کن و همه‌ی Score ها را دوباره 0 کن.
  • یک جواهر دوم با رنگ متفاوت اضافه کن.
  • حمل‌کننده را کندتر کن. راهنمایی: وقتی جواهر برداشته می‌شود Humanoid.WalkSpeed را 12 بگذار و در resetGem دوباره 16 کن.