تقوم Roblox بتعيين معرف مستخدم فريد محدود المجال لكل لعبة أو تطبيق يتفاعل معه المستخدم. تشرح هذه الصفحة كيفية عمل تعريف المستخدم المحدود المجال وكيفية استخدام نوع User في رمز لعبتك.
المفاهيم التالية هي الأساس في تعريف المستخدم:
| المفهوم | الوصف |
|---|---|
| المستخدم | حساب دائم على Roblox. |
| اللاعب | تمثيل المستخدم داخل نموذج بيانات لعبة قيد التشغيل (راجع اللاعبون). |
| نوع بيانات User | نوع بيانات يمثل هوية المستخدم داخل نطاق معين. هذا هو المعرف القياسي للإشارة إلى المستخدمين في رمز اللعبة. |
| معرف المستخدم محدود المجال | معرف رقمي يحدد بشكل فريد مستخدمًا داخل نطاق معين. هذا المعرف مختلف في كل لعبة وتطبيق. |
معرفات المستخدم محدودة المجال
معرف المستخدم محدود المجال هو معرف فريد يُعيّن لمستخدم في لعبة أو تطبيق معين. على عكس معرف المستخدم العالمي، فإن معرف المستخدم محدود المجال له معنى فقط داخل النطاق الذي أصدره، لذا فالمستخدم نفسه لديه معرف مستخدم محدود المجال مختلف في كل لعبة أو تطبيق يتفاعل معه. يحتفظ اللاعبون الذين انضموا إلى لعبتك قبل طرح المعرفات المحدودة بحقوقهم الأصلية في المعرف العالمي في تلك اللعبة (راجع اللاعبون العائدون).
أنواع النطاق تمثلها Enum.DomainType:
| نوع النطاق | محدد إلى | مثال |
|---|---|---|
| Enum.DomainType.EXPERIENCE | لعبة معينة (كون) | معرف اللاعب في لعبتك |
| Enum.DomainType.OAUTH | تطبيق OAuth معين | معرف المستخدم في أداتك الخارجية |
كيف تعمل المعرفات محدودة المجال
عندما ينضم لاعب إلى لعبتك، يتلقى معرف مستخدم محدود المجال يكون فريدًا لتلك اللعبة. اللاعب نفسه الذي ينضم إلى لعبة مختلفة يحصل على معرف مستخدم محدود المجال مختلف. وهذا يعني:
- معرفات المستخدم محدودة المجال هي أعداد صحيحة، مشابهة لمعرفات المستخدم العالمية الموجودة.
- لا يتعارض معرف المستخدم محدود المجال مع أي معرف شخصي عالمي موجود.
- قد يظهر نفس القيمة الرقمية في مجالات مختلفة لمستخدمين مختلفين. المفتاح الفريد هو مجموعة نوع النطاق، معرف النطاق، ومعرف المستخدم محدود المجال.
سيناريو المثال
توضح المثال التالي كيف تشير ألعاب مختلفة إلى نفس المستخدم:
| السيناريو | سياق المستخدم | معرف المستخدم الذي تراه اللعبة |
|---|---|---|
| المستخدم يتصل بـ اللعبة A | لاعب عائد (زار قبل معرفات النطاق) | 123 (معرف عالمي، غير متغير) |
| المستخدم يتصل بـ اللعبة B | أول زيارة بعد طرح معرفات النطاق | 500789 (معرف المستخدم محدودة المجال للعبة B) |
| المستخدم يتصل بـ اللعبة C | أول زيارة بعد طرح معرفات النطاق | 302441 (معرف المستخدم محدودة المجال للعبة C) |
اللاعبون العائدون
إذا كان اللاعب قد انضم بالفعل إلى لعبتك قبل طرح المعرفات المحدودة، فإنه يحتفظ بمعرفه العالمي الأصلي في تلك اللعبة. يضمن ذلك استمرار عمل مفاتيح تخزين البيانات الحالية، لوحات المتصدرين، والمخازن دون أي تغييرات.
العمل مع نوع المستخدم
User هو الطريقة القياسية لتحديد المستخدمين في رمز اللعبة. يحمل قيمة User معرف المستخدم محدودة المجال جنبًا إلى جنب مع نوع النطاق ومعرف النطاق، بحيث يسير سياق الهوية دائمًا مع المعرف. للحصول على تفاصيل API الكاملة، راجع مرجع User.
الحصول على مستخدم من لاعب
الطريقة الرئيسية للحصول على User هي من خلال Player المتصل عن طريق Player.User:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local user = player.User
print("معرف المستخدم النطاق:", user.Id)
print("نوع النطاق:", user.DomainType)
print("معرف النطاق:", user.DomainId)
end)
إنشاء مستخدم من معرف
لإنشاء User من معرف مستخدم معروف داخل اللعبة الحالية، استخدم User.fromId():
local user = User.fromId(knownUserId)
استخدام المستخدم مع واجهات API للمحرك
تقبل واجهات API للمحرك التي تقبل معلمة معرف المستخدم أيضًا قيم User مباشرة. يُوصى باستخدام User:
-- كلا الشكلين يعمل:BadgeService:AwardBadge(player.User, badgeId) -- موصى بهBadgeService:AwardBadge(player.UserId, badgeId)
-- كلا الشكلين يعمل:local target = Players:GetPlayerByUserId(player.User) -- موصى بهlocal target = Players:GetPlayerByUserId(someUserId)
عند تمرير معرف مستخدم رقمي إلى واجهة API للمحرك التي تقبل معرفات المستخدم، يتم تلقائيًا تغليفه في User داخليًا.
واجهات API للمحرك التي تعيد معرفات المستخدم
تستمر واجهات API للمحرك التي تعيد معرفات المستخدم الرقمية في استخدام نفس أسماء الحقول والأنواع. كل معرف معاد هو معرف عالمي أو معرف مستخدم محدودة المجال اعتمادًا على ما إذا كان المستخدم قد انضم إلى اللعبة قبل أو بعد طرح معرفات النطاق:
- اللاعبون العائدون (انضموا أولاً قبل إطلاق معرفات النطاق) — ترجع واجهة API معرف المستخدم العالمي.
- اللاعبون الجدد (الانضمام الأول بعد إطلاق معرفات النطاق) — ترجع واجهة API معرف المستخدم محدودة المجال.
كلا من معرّفات المستخدم العالمية ومحدودة المجال هي أعداد صحيحة قياسية لا تتعارض، لذا فإن الشيفرة الموجودة التي تقرأ هذه الحقول الرقمية تستمر في العمل.
تخزين هوية المستخدم
لمفاتيح تخزين البيانات داخل لعبة واحدة، استخدم user.Id مباشرة:
local key = ("player_%d"):format(player.User.Id)PlayerDataStore:SetAsync(key, data)
بالنسبة للقيم التي قد تقرأها أنظمة أخرى أو تحتاج إلى سياق المجال الكامل، قم بتسلسل User باستخدام ToString():
local encoded = player.User:ToString()SomeDataStore:SetAsync("support_ticket_user", encoded)-- لاحقًا، استعادة من السلسلةlocal user = User.fromString(encoded)
للحصول على مزيد من التفاصيل حول ضمانات التسلسل، راجع مرجع User.
أفضل الممارسات
- استخدم Player.User كمحدد قياسي في الشيفرات الجديدة.
- لا تستخدم معرف مستخدم رقمي من نطاق واحد لتحديد مستخدم في نطاق آخر.