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

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

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

في نافذة المستكشف، انقل نموذج ScavengerHunt بالكامل إلى ReplicatedStorage. عند تشغيل اللعبة، سيبدأ النموذج في العمل.
استخدام الرموز
يستخدم نموذج البحث عن الكنز الرموز كالعناصر التي يبحث عنها اللاعبون ويجمعونها. يأتي النموذج مع نموذج رمز واحد يمكنك وضعه في العالم ثلاثي الأبعاد.
ابحث عن شبكة Token1 داخل مجلد Workspace في المجلد الرئيسي للنموذج.

انقل Token1 إلى التسلسل الهرمي Workspace في المستوى الأعلى وضعه في المكان المرغوب.
أعط الرمز اسمًا فريدًا؛ هذا الاسم هو الطريقة التي يتتبع بها النموذج الرموز التي جمعها كل لاعب.
لإضافة المزيد من الرموز، قم بتكرار رمز موجود وأعطه اسمًا فريدًا.
إذا كنت لا ترغب في استخدام رموز الشبكة المجمعة، فإن أي Model أو BasePart ستعمل، طالما أنها تلبي المعايير التالية:
يجب أن يحتوي الكائن على علامة CollectionService باسم ScavengerHuntPart. إذا رغبت، يمكن تغيير اسم علامة CollectionService التي يستخدمها النموذج عن طريق تعيين قيمة مختلفة لـ tokenTag في استدعاء configureServer.
يجب أن يحتوي الكائن على مثيل فرعي من StringValue تم تعيينه إلى "نص النكهة" ليظهر عند جمع الرمز.

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

التكوين
تم تكوين النموذج مسبقًا للعمل في معظم حالات الاستخدام، ولكن يمكن تخصيصه بسهولة. على سبيل المثال، لتغيير سرعة دوران الرمز وتخصيص رسالة معلومات النافذة:
في StarterPlayerScripts، أنشئ LocalScript جديد وأعد تسميته إلى ConfigureScavengerHunt.
الصق الكود التالي في البرنامج النصي الجديد.
LocalScript - ConfigureScavengerHuntlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureClient({infoModalText = "مرحبًا بك في بحثي عن الكنز!",completeModalText = "شكرًا للعب في بحثي عن الكنز!",tokenRotationSpeed = 60,})
أحداث الجمع
في كل مرة يجمع فيها اللاعب رمزًا أو يدخل منطقة، يتم تشغيل حدث collected. يمكنك الاستماع إلى هذا الحدث من Script على جانب الخادم والاستجابة وفقًا لذلك. تتلقى الدالة المتصلة Player الذي تصادم مع الرمز أو دخل المنطقة واسم ذلك الرمز أو المنطقة.
وبالمثل، عندما يجمع اللاعب جميع الرموز أو يدخل جميع المناطق المعلّمة، يتم تشغيل حدث allCollected وتتلقى الدالة المتصلة Player المرتبطة. يتم تشغيل هذه الدالة مرة واحدة فقط لكل لاعب ويمكن استخدامها لمكافأة ذلك اللاعب بـ شعار أو الوصول إلى منطقة جديدة أو عملة داخل اللعبة وما إلى ذلك.
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.
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 واستجب بمنطقك المخصص.
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()
-- إخفاء جميع واجهات الشاشة التي حددها المطور
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
-- إخفاء واجهات المستخدم الأساسية المحددة
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- عرض جميع واجهات الشاشة التي حددها المطور والتي تم إخفاؤها
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- عرض واجهات المستخدم الأساسية المحددة التي تم إخفاؤها
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 |
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 |
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureServer({
tokenTag = "GreenGem",
})disable
disable()
يخفي جميع واجهات المستخدم الخاصة بالبحث عن الكنز، ويفصل جميع مستمعي أحداث الإدخال، ويمنع اللاعبين من جمع الرموز أو التفاعل مع المناطق. يمكن استدعاء هذه الوظيفة فقط من Script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.disable()enable
enable()
يعرض جميع واجهات المستخدم الخاصة بالبحث عن الكنز، ويصل جميع مستمعي أحداث الإدخال، ويسمح للاعبين بجمع الرموز والتفاعل مع المناطق. يمكن استدعاء هذه الوظيفة فقط من Script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.enable()الأحداث
collected
يتم تشغيله عندما يتصادم لاعب مع رمز أو يدخل منطقة. ستتلقى الدالة المتصلة Player الذي تصادم مع الرمز أو دخل المنطقة واسم الرمز الذي تم التصادم به أو المنطقة التي تم الدخول إليها. يمكن توصيل هذا الحدث فقط في Script.
| المعلمات | |
|---|---|
| player: Player | المستخدم الذي تصادم مع رمز أو دخل منطقة. |
| itemName: string | اسم الرمز الذي تم التصادم به أو المنطقة التي تم الدخول إليها. |
| totalCollected: number | إجمالي عدد الرموز التي جمعها المستخدم الممثل بواسطة player. |
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 | اللاعب الذي جمع جميع الرموز أو دخل جميع المناطق. |
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " أكمل البحث!")
end)showInfoModal
يتم تشغيله عندما ينقر اللاعب على متتبع الرموز عندما يتم تعيين خيار التكوين useCustomModals إلى true. يمكن توصيل هذا الحدث فقط في 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.
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 بالكامل أو العناصر داخلها. انظر رؤية واجهة المستخدم للحصول على التفاصيل وعينة من الكود.