Skip to main content
لا يعمل أيٌّ مما يلي إلا إذا شغّله الاختبار في Protokite وسمح به اللاعب، ولكلٍّ منه عقد Blueprint آمنة في كل بناء: فمع عدم وجود اختبار لعب قائم تجيب بـfalse أو بفراغ أو بـTurned Off ولا تغيّر شيئًا. أما إعداد البناء نفسه ففي صفحة إضافة Unreal.

ما الذي سمح به اللاعب

يسأل البناء لاعبه عمّا يجوز لاختبار اللعب أن يجمعه قبل أن يجمع شيئًا، وإجابته هي التي تقرّر ما تفعله بقية هذه الصفحة: وتجيب Flock Is Playtest Feature Enabled عن الأمرين معًا أصلًا: فميزة يشغّلها الاختبار ويستثنيها اللاعب تُقرأ مُطفأة في كل موضع. وتعطي Flock Get Playtest Consent الإجابة نفسها، أما السؤال وكيف تطرحه لعبتك بشاشاتها والإعداد الذي يوقفه ففي صفحة إضافة Unreal.
ولا يدخل نموذج الملاحظات في تلك الإجابة. فهو لا يُرسل إلا حين يملؤه اللاعب ويضغط «إرسال»، وذلك فعله هو في الحالين — ونموذجٌ تعذّر على تشغيل سابق إرساله يُرسل لاحقًا مهما كانت إجابته بعد ذلك.

تسجيل الفيديو

تُسجَّل شاشة اللعبة منذ اللحظة التي يُحمّل فيها الاختبار، بتسجيل واحد لكل تشغيل، في ملف WebM يشغّله المتصفّح. ولا يُسجَّل الوقت الذي تكون فيه اللعبة في الخلفية. وتضبط إعدادات Video Recording في Flock Playtest Settings المقاس ومعدّل الإطارات ومعدّل البتّ — ‏1280×720 و30 إطارًا في الثانية وVideo Bitrate (kbps) بقيمة 2000 افتراضيًا — وحدّين أيهما جاء أولًا: Recording Length Limit (Minutes) بقيمة 60، وRecording Size Limit (MB) بقيمة 1536. ويُرفع التسجيل إلى جلسته:
  • حين ينهيه حدّ الطول أو حدّ الحجم؛
  • حين تطلب اللعبة ذلك، عبر Flock Stop And Upload Playtest Recording أو زر Upload your recording في نموذج الملاحظات؛
  • حين توقفه اللعبة نهائيًا، عبر Flock Stop Video Recording؛
  • وفي بداية تشغيل لاحق، لكل ما لم يستطع تشغيل سابق إرساله: رفع فاشل، أو خروج، أو انهيار.
الخروج من اللعبة لا يرفع. فلا يمكن إرسال تسجيل كامل أثناء الإغلاق، ولذلك يُحفظ ويرسله التشغيل التالي. ويُحذف التسجيل بعد رفعه، كما يحذف التشغيل التالي تسجيلًا لم تبدأ له جلسة اختبار قط، إذ لا سبيل إلى إرساله أبدًا.
وتنتظر التسجيلات تحت Saved/FlockPlaytest/Recordings/، ضمن Recordings Disk Budget (MB) بقيمة 4096. وحين تضيق المساحة تُحذف أقدم مقاطع الاختبار أولًا، وتُحذف التسجيلات المنتظرة للرفع أخيرًا. ولا تعرض على اللاعب طريقةً لإرسال تسجيله إلا ما دامت Flock Can Send Playtest Recording صحيحة. فهي كاذبة حين لا تكون جلسة قد بدأت للتسجيل، والضغط على زر حينها سيوقف التسجيل ولن يرسل شيئًا. ولتخبر اللاعب بما جرى، اربط On Recording Upload Finished: يُطلق مرة واحدة حين ينتهي تسجيل التشغيل — مرفوعًا، أو غير مرفوع مع السبب، بما في ذلك تعذّر بدء الرفع من أصله. ولا يُطلق أثناء إغلاق اللعبة.

التحليلات الثقيلة

ترسل الإضافة ما يلي عبر تحليلات حزمة Flock، ضمن فئة playtest، وتُقرأ في Dashboards → Game Metrics:
  • performance_window لكل عشر ثوانٍ من اللعب: وسيط زمن الإطار والنسبتان المئويتان 95 و99 منه، والتلعثمات، والذاكرة المستخدَمة وذروتها؛
  • level_loaded لكل مرحلة يحمّلها نسخة اللعبة هذه، ومعها المرحلة السابقة، ومدة التحميل إن كان تحميلًا حاجزًا؛
  • وأحداثك أنت، عبر Flock Record Playtest Event. وابنِ خصائصها بعقد Set Command.
ولا يُرسل شيء ما دام Analytics Enabled في حزمة Flock مُطفأً؛ ويقول السجل ذلك مرة واحدة. وانظر التحليلات والأحداث لتعرف كيف تتكامل الفئة مع لوحات المعلومات.

الاستثناءات

تبقى الاستثناءات من شأن حزمة Flock. فهي تلتقط أسطر الأخطاء، وفشل التحققات، وأخطاء Blueprint مثل Accessed None، والانهيارات، بإعداداتها هي تحت Analytics | Exceptions، وتبلّغ عنها في Diagnostics → Errors. ولا يشغّل مفتاح الاستثناءات في اختبار اللعب ذلك ولا يطفئه؛ وحين يطلب الاختبار الاستثناءات ويكون Analytics Capture Exceptions مُطفأً، يحذّر السجل مرة واحدة عند بدء الجلسة. وللتحقّق من وصول الاستثناءات إلى لوحة التحكم، اكتب Flock.RaiseTestException error أو Flock.RaiseTestException blueprint 100 في طرفية بناء Development. فمئة حالة من العطل نفسه تصل بلاغًا واحدًا، ثم بلاغ تكرار واحدًا يعدّ التسعة والتسعين الباقية بعد أن تُغلق نافذة التكرار.

نموذج الملاحظات

حين ينشر الاختبار نموذجًا، يفتحه اللاعبون بمفتاح Feedback Form Key (‏F9 افتراضيًا؛ واضبطه على none لتعطيل المفتاح)، أو تفتحه لعبتك عبر Flock Open Feedback Form — من قائمة الإيقاف المؤقت مثلًا. وتحقّق من Flock Can Open Feedback Form أولًا: فهي كاذبة حين لا ينشر الاختبار نموذجًا، فتستطيع لعبتك إخفاء مدخلها الخاص بدل أن تعرض ما لا وجود له.
نموذج ملاحظات فوق اللعبة، فيه تقييم واختيار وإجابات نصية وزر «ارفع تسجيلك»

نموذج منشور، مبني من اختبار اللعب: كل أسئلته، والزر الذي يرسل التسجيل.

وما دام النموذج مفتوحًا يظهر المؤشر وتذهب الكتابة إليه؛ وإغلاقه أو إرساله يعيد الأمرين إلى ما كانا عليه. وPause The Game While The Form Is Open مُطفأ افتراضيًا، لأن الإيقاف المؤقت لا يفعل شيئًا في لعبة متعددة اللاعبين ويضيّع ما كان لاعب فردي على وشك وصفه. وكل سؤال يأتي من الاختبار، فتحرير النموذج في Protokite يغيّر ما يراه اللاعبون بلا بناء جديد. وتُفحص الإجابات قبل إرسالها، مع عرض كل مشكلة عند سؤالها. والنموذج الذي يتعذّر إرساله يُحفظ ويرسله تشغيل لاحق، وإرساله مرة أخرى في الجلسة نفسها يحلّ محلّ الإجابات السابقة.

نموذج من عندك

تسلّم Flock Get Feedback Form واجهتك الأسئلة: معرّف كل سؤال ونوعه وعنوانه ونصّه المساعد وخياراته وهل يحتاج إلى إجابة. وسجّل الإجابات بـSet Feedback Text Answer وSet Feedback Rating Answer (من 1 إلى 5) وSet Feedback Checkbox Answer وSet Feedback Chosen Option، وافحصها بـFind Feedback Form Problems، وأرسلها بـFlock Send Feedback Form Answers. وقارن نوع السؤال بعقد Flock Feedback Question Kind بدل كتابته، وعامِل نوعًا لا تعرفه معاملة النص، فهكذا يقرؤه الخادم.
قاعدتان يسهل إغفالهما. اضبط كل مربع اختيار، مؤشَّرًا كان أو غير مؤشَّر: فالخادم يعدّ المربع غير المؤشَّر إجابةً، ومربعًا مطلوبًا لم يُضبط قط يُعدّ ناقصًا. والخيار المختار يجب أن يطابق حرفًا بحرف — فالخادم يقارن الخيارات تمامًا، وcrash ليست Crash.

عقد Blueprint

جميعها تحت Flock | Playtest. وكل عقدة تستدلّ على اختبار اللعب من الرسم الذي استدعاها.

تجريبه في المحرّر

قبل وجود أي اختبار لعب، أشّر على Record Video In Play In Editor في Project Settings → Plugins → Flock Playtest Local Settings واضغط Play، أو اكتب FlockPlaytest.RecordTestVideo 30 في طرفية بناء Development. وتُحفظ مقاطع الاختبار تحت Saved/FlockPlaytest/Recordings/TestVideos/ ولا تُرفع أبدًا. وأمام اختبار لعب حقيقي، اضغط Play بالإعدادات المذكورة في صفحة الإعداد وسجّل الدخول بـ Flock.LoginWithDevice. ثم، في طرفية بناء Development: وأوقات الانتظار موجودة لأن كل أمر في -ExecCmds يُنفَّذ في الإطار الأول، قبل أن يكون قد سُجِّل شيء أو بدأت جلسة.

فحص بناء اختبار اللعب

يفحص FlockPlaytest.SelfTest كل ما يفعله بناء اختبار اللعب أمام Protokite الحقيقي دفعةً واحدة، ويسجّل سطرًا لكل خطوة وعدًّا في النهاية: Playtest self-test finished: 16 passed, 0 failed, 1 skipped. وأبنية Development فقط. ويقف كل فحص إلى جوار طلب يجب أن يرفضه Protokite: مفتاح واجهة خاطئ، ومفتاح مفقود، وإصدار لا اختبار لعب مرتبط به، وبدء جلسة لا يسمّي لاعبًا، ونموذج تنقصه إجابة مطلوبة أو يختار خيارًا ليس في القائمة، ونموذج ورابط رفع ونهاية جلسة لجلسة غير موجودة. فالفحص الذي ينجح دائمًا لا يميّز بناءً سليمًا من بناء معطوب، ولذلك لا يمرّ الرفض إلا بحالة HTTP الخاصة به، ومع النموذج بالسؤال الذي يسمّيه. وهو لا يسجّل دخول أحد، فسجّل الدخول أولًا. ومن سكربت:
  • ينهي جلسة التشغيل بوصفها خطوته الأخيرة، فشغّله في تشغيل مستقل. وأي جلسة كان ينبغي لرفضٍ أن يمنعها تُنهى فورًا، فلا يترك الفحص شيئًا مفتوحًا.
  • يترك أثرًا في لوحاتك: نموذجًا مملوءًا على جلسته، وحدث playtest_self_test واحدًا، وعطل Blueprint واحدًا أُثير مرتين ليُعدّ تكراره، وتسجيل التشغيل.
  • وتُتخطّى خطوة، مع ذكر السبب، حين لا يكون أحد قد أجاب عمّا يجوز لاختبار اللعب جمعه (أجب أولًا بـ FlockPlaytest.AnswerConsent video_and_play_data)؛ وحين لا يشغّل الاختبار ميزتها؛ وحين لا يكون في البناء مُرمِّز فيديو، وهو كل منصة عدا Windows بنواة 64 بت؛ وحين لا يستطيع التشغيل الرسم (‏-nullrhi)، إذ لا يُسجَّل شيء؛ وحين يكون Analytics Cache Failed Events مُطفأً، إذ لا يمكن مراقبة بلاغ يُرسل لحظة إنشائه؛ ولاختبار مغلق ما لم تسمِّ واحدًا.

ما الذي يبقى على جهاز اللاعب