لعبة البحث عن الكنز

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

تمنح ScavengerHunt وحدة المطور اللاعبين طريقة ممتعة لاستكشاف تجربتك، مما يقدم لهم بشكل طبيعي المكان بأكمله. تقدم تقدم اللاعبين مستمر، لذا يمكن أن تستمر عمليات البحث عن الكنز عبر الجلسات.

استخدام الوحدة

التثبيت

لاستخدام وحدة ScavengerHunt في تجربة:

  1. من قائمة نافذة في الاستوديو أو شريط أدوات الصفحة الرئيسية، افتح صندوق الأدوات واختر علامة متجر المنشئ.

  2. تأكد من تحديد فرز النماذج، ثم انقر على زر عرض الكل لعلامات الفئات.

  3. ابحث وانقر على مربع الحزم.

  4. ابحث عن وحدة البحث عن الكنز وانقر عليها، أو قم بسحبها وإفلاتها في عرض ثلاثي الأبعاد.

  5. في نافذة المستكشف، انقل النموذج كامل ScavengerHunt إلى ReplicatedStorage. عند تشغيل التجربة، ستبدأ الوحدة في العمل.

استخدام الرموز

تستخدم وحدة البحث عن الكنز الرموز كالأشياء التي يبحث عنها اللاعبون ويجمعونها. تأتي الوحدة مع نموذج رمز واحد يمكنك وضعه في العالم ثلاثي الأبعاد.

  1. ابحث عن مصفوفة Token1 داخل مجلد Workspace في مجلد الوحدة الرئيسي.

  2. انقل Token1 إلى التسلسل الهرمي من المستوى الأعلى Workspace وضعه في المكان المرغوب.

  3. أعط الرمز اسمًا فريدًا؛ هذا الاسم هو الطريقة التي تتبع بها الوحدة الرموز التي جمعها كل لاعب.

  4. لإضافة رموز أكثر، قم بنسخ رمز موجود وأعطه اسمًا فريدًا.

إذا كنت لا ترغب في استخدام الرموز المصفوفة المضمنة، فإن أي Model أو BasePart ستعمل، طالما أنها تلبي المعايير التالية:

  • يجب أن تحتوي الكائن على وسم CollectionService باسم ScavengerHuntPart. إذا رغبت، يمكن تغيير اسم وسم CollectionService الذي تستخدمه الوحدة عن طريق تعيين قيمة مختلفة لـ tokenTag في استدعاء configureServer.

  • يجب أن يحتوي الكائن على مثيل فرعي من StringValue مُعد على "النص المميز" ليتم عرضه عند جمع الرمز.

    النموذج
    جزء الشبكة

استخدام المناطق

تختلف المناطق قليلاً عن الرموز، حيث أنها مناطق كبيرة يتم وضع علامة عليها كـ "جمعت" بمجرد دخول اللاعب إليها. بالإضافة إلى ذلك، عندما يغادر اللاعب المنطقة، يتم إغلاق نافذة النص المميز تلقائيًا وتتم إزالة المنطقة نفسها من مساحة العمل.

  1. أنشئ جزءًا مثبتًا حول المنطقة، مثل كتلة أو كرة. ستقوم الوحدة تلقائيًا بتعطيل خاصية CanCollide أثناء وقت التشغيل حتى لا يتصادم اللاعبون جسديًا مع المنطقة.

  2. أعطها اسمًا فريدًا. هذا الاسم هو الطريقة التي تتبع بها الوحدة المناطق التي دخلها كل لاعب.

  3. باستخدام قسم العلامات من خصائص الجزء، ضع الوسم ScavengerHuntPart على الجزء حتى يتمكن CollectionService من اكتشافه. إذا رغبت، يمكن تغيير اسم الوسم الذي تستخدمه الوحدة عن طريق تعيين قيمة مختلفة لـ tokenTag في استدعاء configureServer.

  4. ضمن مثيل فرعي من StringValue يظهر "النص المميز" عند دخول المنطقة.

التكوين

تم تكوين الوحدة مسبقًا لتعمل لمعظم حالات الاستخدام، ولكن يمكن تخصيصها بسهولة. على سبيل المثال، لتغيير سرعة دوران الرموز وتخصيص رسالة معلومات النافذة:

  1. في StarterPlayerScripts، أنشئ LocalScript جديد وأعد تسميته إلى ConfigureScavengerHunt.

  2. ألصق التعليمات البرمجية التالية في البرنامج النصي الجديد.

    LocalScript - ConfigureScavengerHunt

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
    ScavengerHunt.configureClient({
    infoModalText = "مرحبًا في لعبة البحث عن الكنز الخاصة بي!",
    completeModalText = "شكرًا للعب في لعبة البحث عن الكنز الخاصة بي!",
    tokenRotationSpeed = 60,
    })

أحداث الجمع

كلما جمع لاعب رمزًا أو دخل منطقة، يتم تشغيل حدث collected. يمكنك الاستماع إلى هذا الحدث من برنامج نصي على جانب الخادم والرد وفقًا لذلك. يستقبل الدالة المتصلة Player الذي تصادم مع الرمز أو دخل المنطقة واسم هذا الرمز أو المنطقة.

وبالمثل، عندما يجمع لاعب جميع الرموز أو يدخل جميع المناطق المعلمة، يتم تشغيل حدث allCollected وتتلقى الدالة المتصلة Player المرتبط. يتم تشغيل هذه الدالة مرة واحدة لكل لاعب ويمكن استخدامها لمكافأة ذلك اللاعب بـ شارة، أو الوصول إلى منطقة جديدة، أو عملة داخل التجربة، إلخ.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " أكمل البحث!")
end)

واجهة المستخدم المخصصة

تقدم هذه الوحدة عدة خيارات لتخصيص واجهة المستخدم الافتراضية الخاصة بها، ولكن يمكنك اختيار عرض عناصر واجهة مستخدم مخصصة بدلاً من ذلك.

عندما يتم تعيين useCustomModals إلى true في دالة configureClient، يتم تشغيل حدث showInfoModal كلما قام اللاعب بتنشيط متتبع الرموز. وبالمثل، يتم تشغيل حدث showCompleteModal عندما يجمع اللاعب كل شيء في لعبة البحث عن الكنز. يمكن الاستماع إلى كلا الحدثين في LocalScript.

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
-- عرض نافذة معلومات مخصصة
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- عرض نافذة إكمال مخصصة
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)

رؤية واجهة المستخدم

بشكل افتراضي، تخفي لعبة البحث عن الكنز جميع ScreenGuis و CoreGuis (باستثناء قائمة اللاعبين) عندما تظهر نافذة المعلومات أو نافذة الإكمال. إذا كنت ترغب في تجاوز هذا السلوك التلقائي وإعادة تحديد أي واجهات يجب أن تظل مرئية، قم بإدراج ردود الفعل hideOtherGuis و showOtherGuis ورد على ذلك بمنطقك المخصص.

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- إنشاء واجهة مستخدم شاشة لن يتم إخفاؤها
local specialGuiInstance = Instance.new("ScreenGui")
-- رسم واجهة مستخدم الشاشة فوق واجهة لعبة البحث عن الكنز
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- إضافة تسمية نصية إلى واجهة المستخدم
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "تظل مرئية عند عرض النوافذ"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- إخفاء جميع واجهات `ScreenGui` المعرفة بواسطة المطور
local instances = playerGui:GetChildren()
for _, instance in instances do
if instance:IsA("ScreenGui") and not instance.Name == "ScavengerHunt" and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- إخفاء بعض واجهات Core
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- عرض جميع واجهات `ScreenGui` المعرفة بواسطة المطور التي كانت مخفية
for _, instance in.hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- عرض واجهات Core المحددة التي كانت مخفية
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

مرجع API

الوظائف

configureClient

configureClient(config: table)

يتجاوز خيارات التكوين الافتراضية على جانب العميل من خلال المفاتيح/القيم التالية في جدول config. لا يمكن استدعاء هذه الوظيفة إلا من LocalScript.

المفتاحالوصفالافتراضي
autoDismissTimeالوقت بالثواني قبل أن تغلق النافذة نفسها تلقائيًا أو تنتقل إلى الصفحة التالية إذا كانت موجودة. اضبط على 0 لتعطيل.20
closeModalGamepadزر اللعبة المستخدم لإغلاق النوافذ (Enum.KeyCode).ButtonA
closeModalKeyboardزر لوحة المفاتيح المستخدم لإغلاق النوافذ (Enum.KeyCode).E
completeModalTextالنص الذي يظهر في النافذة التي تظهر بعد النقر على متتبع الرموز عند اكتمال لعبة البحث عن الكنز."شكرًا للمشاركة!"
infoModalTextالنص الذي يظهر في النافذة التي تظهر بعد النقر على متتبع الرموز."ابحث عن جميع الرموز لإكمال البحث"
tokenRotationSpeedسرعة دوران الرموز، بالدرجات في الثانية. اضبط على 0 لمنع الدوران.20
nextArrowImageالصورة المستخدمة للإشارة إلى وجود المزيد من صفحات النوافذ يجب عرضها بعد الصفحة الحالية."rbxassetid://8167172095"
openTokenTrackerGamepadزر اللعبة المستخدم لإظهار النوافذ التي تظهر بعد تنشيط متتبع الرموز (Enum.KeyCode).ButtonY
openTokenTrackerKeyboardزر لوحة المفاتيح المستخدم لإظهار النوافذ التي تظهر بعد تنشيط متتبع الرموز (Enum.KeyCode).Y
openTokenTrackerGamepadButtonImageالصورة لزر التحكم المستخدم لتنشيط متتبع الرموز."rbxassetid://8025860488"
regionIconرمز يتم عرضه بجوار متتبع الرموز عند دخول المناطق."rbxassetid://8073794624"
tokenIconرمز يتم عرضه بجوار متتبع الرموز عند جمع الرموز."rbxassetid://8073794477"
tokenTrackerPositionSmallDeviceموضع واجهة المستخدم الخاصة بمتتبع الرموز على الأجهزة الصغيرة مثل الهواتف (UDim2).(1, 0, 0, 84)
tokenTrackerPositionLargeDeviceموضع واجهة المستخدم الخاصة بمتتبع الرموز على الأجهزة الأكبر مثل الأجهزة اللوحية وأجهزة الكمبيوتر (UDim2).(1, 0, 1, -16)
useRegionsبدلاً من الرموز، استخدم المناطق.false
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureClient({
infoModalText = "مرحبًا في لعبة البحث عن الكنز الخاصة بي!",
completeModalText = "شكرًا للعب في لعبة البحث عن الكنز الخاصة بي!",
tokenRotationSpeed = 60,
navigationBeam = {
lightEmission = 1
},
modal = {
textSize = 14
},
})

configureServer

configureServer(config: table)

يتجاوز خيارات التكوين الافتراضية على جانب الخادم من خلال المفاتيح/القيم التالية في جدول config. لا يمكن استدعاء هذه الوظيفة إلا من Script.

المفتاحالوصفالافتراضي
tokenTagالوسم المستخدم بواسطة CollectionService للعثور على جميع الرموز أو المناطق المستخدمة في لعبة البحث عن الكنز."ScavengerHuntPart"
datastoreNameاسم DataStore المستخدم من قبل لعبة البحث عن الكنز لتخزين تقدم مجموعة كل لاعب."ScavengerHuntTokens"
resetOnPlayerRemovingإذا كانت القيمة صحيحة، تعيد تعيين تقدم المستخدم عندما يغادر التجربة؛ وهي مفيدة لعدم حفظ التقدم أثناء اختبار لعبة البحث عن الكنز.false
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureServer({
tokenTag = "GreenGem",
})

disable

disable()

يخفي جميع واجهة المستخدم للبحث عن الكنز، وينقطع جميع مستمعي أحداث الإدخال، ويتجنب من جمع اللاعبين للرموز أو التفاعل مع المناطق. لا يمكن استدعاء هذه الوظيفة إلا من Script.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.disable()

enable

enable()

يعرض جميع واجهة المستخدم للبحث عن الكنز، ويربط جميع مستمعي أحداث الإدخال، ويسمح للاعبين بجمع الرموز والتفاعل مع المناطق. لا يمكن استدعاء هذه الوظيفة إلا من Script.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.enable()

الأحداث

collected

يتم تشغيله عندما يتصادم لاعب مع رمز أو يدخل منطقة. ستستقبل الدالة المتصلة Player الذي تصادم مع الرمز أو دخل المنطقة واسم الرمز الذي تم التصادم معه أو المنطقة التي تم الدخول إليها. يمكن توصيل هذا الحدث فقط في Script.

المعلمات
player: Playerالمستخدم الذي تصادم مع رمز أو دخل منطقة.
itemName: string اسم الرمز الذي تم التصادم معه أو المنطقة المدى التي تم الدخول إليها.
totalCollected: numberإجمالي عدد الرموز التي جمعها المستخدم الممثل بواسطة player.
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)

allCollected

يتم تشغيله عندما يجمع لاعب جميع الرموز أو يدخل جميع المناطق في لعبة البحث عن الكنز. ستستقبل الدالة المتصلة Player الذي جمع جميع الرموز، وهذا الحدث يتم تشغيله مرة واحدة لكل لاعب فقط. يمكن توصيل هذا الحدث فقط في Script.

المعلمات
player: Playerاللاعب الذي جمع جميع الرموز أو دخل جميع المناطق.
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " أكمل البحث!")
end)

showInfoModal

يتم تشغيله عندما ينقر اللاعب على متتبع الرموز عندما تكون قيمة خيار التكوين useCustomModals معدلة إلى true. يمكن توصيل هذا الحدث فقط في LocalScript.

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
local infoModal = Players.LocalPlayer.PlayerGui.InfoModal
infoModal.Enabled = true
end)

showCompleteModal

يتم تشغيله عندما ينقر اللاعب على متتبع الرموز عندما تكون قيمة خيار التكوين useCustomModals معدلة إلى true وجمع اللاعب جميع الرموز في لعبة البحث عن الكنز. يمكن توصيل هذا الحدث فقط في LocalScript.

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showCompleteModal:Connect(function()
local completeModal = Players.LocalPlayer.PlayerGui.CompleteModal
completeModal.Enabled = true
end)

ردود الفعل

hideOtherGuis

hideOtherGuis(callback: function)

يتم تشغيل هذه الاستجابة فورًا قبل عرض نافذة، مما يتيح لك تعطيل جميع ScreenGuis أو العناصر داخلها قبل عرض النافذة. انظر رؤية واجهة المستخدم لمزيد من التفاصيل ونموذج التعليمات البرمجية.

showOtherGuis

showOtherGuis(callback: function)

يتم تنفيذ هذا الاستدعاء بعد فترة قصيرة من إغلاق نافذة، مما يتيح لك تمكين جميع ScreenGuis أو العناصر داخلها. انظر رؤية واجهة المستخدم لمزيد من التفاصيل ونموذج التعليمات البرمجية.

©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.