في الوقت الحالي، يمكن للاعبين السقوط من أي منصة دون أي عواقب. يتناول هذا القسم كيفية إنشاء خطر غير مرئي كبير بنفس ارتفاع الماء في لعبتك. عندما يسقط لاعب في الخطر، تُخفض صحته إلى صفر ويعاد ظهوره في بداية اللعبة.
إنشاء خطر مائي أساسي
إنشاء خطر مائي أساسيفي Workspace > World، أنشئ مجلدًا جديدًا باسم Hazards.داخل مجلد Hazards، أنشئ جزءًا كتلة يسمى Hazard بحجم 825، 1، 576 و CFrame.Position 174، -6.5، 38 بحيث يغطي الجزأ الجزء المائي حول الجزيرة والمنصات.قم بتعيين الشفافية إلى 1 بحيث يكون الجزء غير مرئي ويظهر الماء الفعلي كخطر، وقم بتعطيل CanCollide حتى يقع اللاعبون خلاله في الماء، وقم بتمكين Anchored حتى لا تحركه الفيزياء.
الكشف عندما يلمس اللاعبون الخطر
لا يقوم الخطر بأي شيء حتى تكتب نصًا ينص على Touched ويخفض صحة اللاعب إلى صفر.
إنشاء HazardServiceفي ServerScriptService، أنشئ نصًا باسم HazardService يحتوي على الكود التالي:```lualocal Players = game:GetService("Players")local Workspace = game:GetService("Workspace")local hazardsFolder = Workspace.World.Hazardslocal hazards = hazardsFolder:GetChildren()local function onHazardTouched(otherPart)local character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.Health = 0endendendfor _, hazard in hazards dohazard.Touched:Connect(onHazardTouched)end```
يحتوي HazardService على العديد من أوجه التشابه مع CoinService. ومع ذلك، بدلاً من جمع عملة، يتم ضبط صحة اللاعب على 0 عندما يلمسون خطرًا.
لا تتردد في تعديل أو إضافة أو إزالة كائنات الخطر في لعبتك لإنشاء عقبات فريدة. طالما أنها مدرجة في مجلد Hazards، فإن حلقة الكود تربط معالج الحدث بجميع مخاطرها.
الاتصال بدورة حياة اللاعب
تمثل دورة حياة اللاعب الأحداث التي تحدث عندما يتفاعل اللاعبون في لعبتك، مثل الانضمام، الخروج، أو إعادة الظهور. تحتاج إلى ربط المعالجات لهذه الأحداث لتنفيذ المنطق لكل حدث رئيسي في دورة الحياة.
إضافة معالجات دورة الحياة إلى CoinServiceفي ServerScriptService، أضف الكود التالي إلى أسفل نص CoinService الحالي (لا تستبدل أي من الكود الحالي — أضف هذا بعده):```lualocal function onPlayerAdded(player)-- إعادة تعيين عملات اللاعب إلى 0updatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild سيتوقف حلقة اللاعب، لذا يجب القيام بالأمر أدناه في خيط منفصلtask.spawn(function()-- عند وفاة اللاعبcharacter:WaitForChild("Humanoid").Died:Connect(function()-- إعادة تعيين عملات اللاعب إلى 0updatePlayerCoins(player, function(_)return 0end)end)end)end)end-- تهيئة أي لاعب يتم إضافته قبل الاتصال بحدث PlayerAddedfor _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)```
تعرف الكود وظائف لإعادة تعيين عدد العملات خلال الأحداث المناسبة في دورة الحياة:
- يتم إطلاق Players.PlayerAdded عندما ينضم لاعب إلى اللعبة، ويضبط عدد العملات إلى 0.
- يتم إطلاق Player.CharacterAdded عندما يتم إضافة نموذج شخصية لاعب إلى العالم. يحدث ذلك بعد PlayerAdded وكلما أعيد ظهور اللاعب.
- يتم إطلاق Humanoid.Died عندما يموت لاعب، ويعيد ضبط عدد العملات إلى 0. تنشئ task.spawn() خيطًا منفصلًا للتعامل مع هذا، بحيث يمكن تنفيذ جوانب أخرى من دورة حياة اللاعب.
- يتم إطلاق Player.PlayerRemoved عندما يغادر لاعب اللعبة لتنظيف حالة اللاعب.
- يحتوي هذا الكود على مشكلة محتملة حيث يمكن للاعبين جمع العملات قبل أن يتم تنفيذ حدث Players.PlayerAdded ثم يتم إعادة ضبط عدد العملات الخاصة بهم إلى الصفر. لتخفيف هذه المشكلة، ضع في اعتبارك حلولًا مثل جدولة الكود أو تجميد شخصية اللاعب حتى انتهاء التهيئة. ومع ذلك، تتضمن هذه الحلول مفاهيم برمجة أكثر تعقيدًا تكمل هذا الدليل.
اختبار اللعبة
اختر Test من القائمة المنسدلة وانقر على Play. اجمع بعض العملات، ثم اقفز إلى الماء. يجب أن تموت شخصيتك وتعيد الظهور في البداية، مع إعادة تعيين عدد العملات الخاصة بهم إلى 0.