> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qwacks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# إضافة Unreal

> حوّل بناء Development من لعبتك في Unreal إلى بناء اختبار لعب خاص بـProtokite.

‏Flock Playtest إضافة اختيارية لـUnreal تحوّل بناء Development إلى **بناء اختبار لعب**. وما دام اختبار
اللعب قائمًا، يصبح كل تشغيل للعبة جلسةً واحدة في صفحة **Sessions** الخاصة بالاختبار، ويقرّر الاختبار
ما تجمعه تلك الجلسة.

<Card title="نزّل الإضافة" icon="download" href="https://github.com/QwackStack/FlockUnrealSdk/releases">
  يصدر الملف `FlockPlaytest-<version>.zip` إلى جوار ملف حزمة Flock نفسها، ضمن الإصدار ذاته وبالرقم
  ذاته.
</Card>

<Note>
  **لـUnreal وحدها في الوقت الحالي.** تصدر إضافة اختبار اللعب لـUnreal Engine، وتعمل فوق حزمة تطوير
  Flock لـUnreal وترسل مفتاح واجهتها البرمجية.
</Note>

<h2 id="what-a-playtest-collects">
  ما الذي يجمعه اختبار اللعب
</h2>

| ميزة اختبار اللعب   | ما يرسله البناء                                                                         | أين يظهر                                                   |
| ------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| دائمًا              | جلسة واحدة لكل تشغيل، باسم معرّف اللاعب على Steam أو معرّف الجهاز لهذا التثبيت          | صفحة **Sessions** في Protokite                             |
| تسجيل الفيديو       | تسجيل لشاشة اللعبة، يُرفع عند انتهائه                                                   | مشغّل التسجيل في الجلسة                                    |
| التحليلات الثقيلة   | نافذة أداء لكل عشر ثوانٍ من اللعب، وكل تحميل مرحلة، وأحداث اختبار اللعب الخاصة بك       | **Dashboards → Game Metrics** في Flock، ضمن فئة `playtest` |
| التقاط الاستثناءات  | لا شيء إضافي — فحزمة Flock تبلّغ عن الاستثناءات أصلًا، وكل ما يفعله الاختبار أنه يطلبها | **Diagnostics → Errors** في Flock                          |
| نموذج ملاحظات منشور | إجابات اللاعب                                                                           | بطاقة الجلسة، وصفحة **Feedback form** الخاصة بالاختبار     |

وكلٌّ منها يُشغَّل أو يُطفأ من صفحة الاختبار في Protokite، فتغيير ما يجمعه اختبار اللعب لا يحتاج إلى
بناء جديد — ويُسأل اللاعب أولًا، فلا يجمع التشغيل إلا ما سمح به. راجع
[ما الذي يُسأل عنه اللاعب](#what-the-player-is-asked).

<h2 id="before-you-start">
  قبل أن تبدأ
</h2>

* **حزمة Flock مُعدّة وتعمل** في المشروع — API URL وAPI Key وGame Name وGame Version، مع لوحة Flock
  وهي لا تعرض شيئًا يحتاج إلى إصلاح. راجع صفحة [حزمة تطوير Unreal](/ar/sdk/unreal).
* **هناك اختبار لعب في Protokite.** وإنشاء واحد يُنشئ له إصدار لعبة في Flock، اسمه `pt-` يليه معرّف
  الاختبار.
* **أبنية اختبار اللعب هي أبنية Development.** فبناء Shipping يُسقِط التسجيل عند التصريف، فلا تستطيع
  حزمة Flock أن تبلّغ منه عن أسطر الأخطاء أو عن فشل التحققات.
* **يُسجَّل الفيديو على Windows بنواة 64 بت فقط.** وأما بقية المنصّات فتشغّل سائر أجزاء اختبار اللعب،
  وتسجّل مرة واحدة أنها لا تسجّل فيديو.

<h2 id="install-the-plugin">
  تثبيت الإضافة
</h2>

<Steps>
  <Step title="فُكّ ضغطها داخل مشروعك">
    ضعها في مجلد `Plugins/` في مشروعك، بحيث يقع `Plugins/FlockPlaytest/` إلى جوار
    `Plugins/FlockUnrealSdk/`.
  </Step>

  <Step title="فعّلها">
    فعّل **Flock Playtest** من **Edit → Plugins → Online Platform**، ثم أعد تشغيل المحرّر ليبنيها.
  </Step>
</Steps>

<Tip>
  هل استنسخت مستودع الحزمة بدلًا من ذلك؟ انسخ `Plugins/FlockUnrealSdk/OptionalPlugins/FlockPlaytest/`
  إلى `Plugins/FlockPlaytest/` أو اربطه بها — فـUnreal لا تحمّل إضافة من موضع ذلك المجلد. واترك
  الإضافة خارج المشاريع التي لا تُجري اختبارات لعب.
</Tip>

<h2 id="point-the-build-at-the-playtest">
  توجيه البناء إلى اختبار اللعب
</h2>

يعثر Protokite على اختبار اللعب من إصدار اللعبة في Flock الذي يرسله البناء.

<Steps>
  <Step title="اقرأ إصدار الاختبار">
    افتح الاختبار في Protokite. تعرض كتلة **SDK** فيه **معرّف** إصدار Flock الخاص بالاختبار.
  </Step>

  <Step title="اضبط Game Version على اسم ذلك الإصدار">
    في **Project Settings → Plugins → Flock SDK Settings**، اضبط **Game Version** على `pt-` يليه
    معرّف الاختبار، مثل `pt-01JABCDEFGHJKMNPQRSTVWXYZ0`. وتحلّ حزمة Flock ذلك الاسم إلى المعرّف الذي عرضه Protokite.
  </Step>

  <Step title="شغّل اختبار اللعب">
    في **Project Settings → Plugins → Flock Playtest Settings**، اضبط **Protokite API URL** وفعّل
    **Enable Playtesting**. ويجب أن يبدأ العنوان بـ`http://` أو `https://` وألّا يحوي مسافات؛ وما لا يفي بذلك
    يُرفض ولا يُهذَّب.
  </Step>
</Steps>

<Frame caption="‏Project Settings ← Plugins ← Flock Playtest Settings: المفتاح، وعنوان Protokite، والسؤال الذي يُطرح على اللاعب، وحدود التسجيل.">
  <img src="https://mintcdn.com/qwacks/RxrocMaSLzLhfHdV/images/protokite/unreal/flock-playtest-settings.png?fit=max&auto=format&n=RxrocMaSLzLhfHdV&q=85&s=f87b67e95570c5ccb78664355b64e05f" alt="صفحة إعدادات Flock Playtest في Unreal، وفيها Playtesting وPlayer Consent وVideo Recording وFeedback Form" width="1815" height="680" data-path="images/protokite/unreal/flock-playtest-settings.png" />
</Frame>

<Warning>
  اضبط **اسم** الإصدار، لا المعرّف الذي يعرضه Protokite. فحزمة Flock تحلّ Game Version من جديد كلما
  تغيّر Game Version أو API URL أو API Key، وتستبدل أي معرّف كُتب باليد.
</Warning>

والضغط على **Play** الآن يسرد في سجل رسائل Play كل ما من شأنه أن يوقف اختبار اللعب أو يغيّره، مع رابط
إلى الصفحة التي تصلحه: عنوان Protokite API URL فارغًا أو غير صالح، وتحليلات حزمة Flock مُطفأة، وGame
Version ليس إصدار اختبار لعب، والإعدادات التي تنتظرها جلسة الاختبار. ولا يُقال شيء ما دام **Enable
Playtesting** مُطفأً.

<h2 id="what-the-player-is-asked">
  ما الذي يُسأل عنه اللاعب
</h2>

**يسأل بناء اختبار اللعب لاعبه عمّا يجوز له أن يجمعه، ولا يجمع شيئًا حتى يجيب.** ويُعرض السؤال فوق
اللعبة فور تحميل اختبار هذا البناء، وفيه أربع إجابات: تسجيل الشاشة وجمع بيانات اللعب، أو الشاشة وحدها،
أو بيانات اللعب وحدها، أو **لا شيء البتّة** — وهي إجابة تجعل البناء يتصرّف تمامًا كبناءٍ **Enable
Playtesting** مُطفأ فيه.

<Frame caption="السؤال الذي يطرحه بناء اختبار اللعب على لاعبه، فوق اللعبة، قبل أن يجمع أي شيء.">
  <img src="https://mintcdn.com/qwacks/RxrocMaSLzLhfHdV/images/protokite/unreal/playtest-consent.png?fit=max&auto=format&n=RxrocMaSLzLhfHdV&q=85&s=4ac3bc4971eb47ea24cd1a9c3d9af320" alt="بناء اختبار لعب يعرض سؤال «ما الذي قد يجمعه هذا الاختبار» بأربع إجابات" width="1296" height="759" data-path="images/protokite/unreal/playtest-consent.png" />
</Frame>

<Note>
  **إنه سؤال اختبار اللعب وحده.** أمّا **Analytics Require Explicit Consent** في حزمة Flock فسؤال آخر،
  تطرحه لعبتك بكلماتها عن تحليلات لعبتك. ولا تحرّك إحدى الإجابتين الأخرى، والسؤال يقول ذلك أمام اللاعب.
</Note>

وتُحفظ إجابته على جهازه ويعمل بها كل تشغيل لاحق، وتحمل كل بداية جلسة `playtest_consent` و
`playtest_consent_asked`، فتُقرأ جلسة بلا تسجيل على أنها لاعب طلب ألّا يُسجَّل، لا بناءٌ أصابه خلل.

ولعبتك أن تتولّى السؤال: تقرأ **Flock Get Playtest Consent** الإجابة، وتسجّل **Flock Set Playtest
Consent** إجابةً من شاشاتك أنت، وتطرح **Flock Ask For Playtest Consent** السؤال من جديد — وهو ما
يستدعيه مدخل «غيّر ما يجمعه اختبار اللعب» في قائمتك.

ولا تُطفئ **Ask The Player For Playtest Consent** في **Flock Playtest Settings** إلا حيث سُئل لاعبوك
بطريقة أخرى، أو في اختبار داخلي على أجهزتكم، أو في تشغيل آلي لا أحد فيه ليجيب؛ فعندها يجمع البناء ما
يشغّله الاختبار، وتقول كل جلسة إن اللاعب لم يُسأل. وتبقى إجابةٌ سبق أن أعطاها لاعب معمولًا بها.

<h2 id="sign-a-player-in">
  تسجيل دخول لاعب
</h2>

**لا يسجّل اختبار اللعب دخول أحد أبدًا.** فجلسة الاختبار تبدأ من جلسة Flock، وجلسة Flock تبدأ حين
تسجّل لعبتك دخول لاعب، مع تفعيل **Analytics Enabled** و**Analytics Auto Start Session** (أو باستدعاء
Start Session) ومع منح الموافقة إذا كان **Analytics Require Explicit Consent** مُفعّلًا. ويكفي تسجيل
دخول بالجهاز، وهو لا يحتاج إلى حساب.

وبناء اختبار لعب ليست له شاشة تسجيل دخول خاصة يستطيع تسجيل الدخول من طرفية بناء Development بالأمر
`Flock.LoginWithDevice`.

<h2 id="watch-it-run">
  متابعته وهو يعمل
</h2>

يقول السجل، تحت `LogFlockPlaytest`، ما الذي يفعله اختبار اللعب:

1. اختبار اللعب مُعدّ وينتظر حزمة Flock، ثم يجلب اختبار هذا البناء من Protokite.
2. اختبار اللعب جاهز، مع تسمية الاختبار والميزات التي يشغّلها.
3. بدأت جلسة Protokite لهذا التشغيل، بعد أن يسجّل لاعب دخوله وتصل جلسة Flock إلى الخادم.

ثم تظهر الجلسة في صفحة **Sessions** الخاصة بالاختبار. وتنتهي حين تُغلق اللعبة، أو قبل ذلك عبر **Flock
End Playtest Session**. وجلسة Flock لاحقة أو تسجيل خروج أو تهيئة حزمة Flock من جديد لا تُنهيها ولا
تعيد تشغيلها: فالتشغيل الواحد جلسة واحدة.

وفي Blueprint، تجيب **Flock Get Playtest Status** عن السؤال نفسه الذي يجيب عنه السجل، وتحوّل **Flock
Describe Playtest Status** الجواب إلى الجملة التي يستعملها السجل.

<h2 id="when-something-stops-the-playtest">
  حين يتوقّف اختبار اللعب
</h2>

يقول السجل السبب ويسمّي الإعداد، مرة واحدة، على هيئة تحذير.

| الحالة                       | معناها                                                            | الإصلاح                                                      |
| ---------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------ |
| Protokite API URL مفقود      | **Enable Playtesting** مُفعّل والعنوان فارغ                       | اضبط **Protokite API URL**                                   |
| Protokite API URL غير صالح   | لا `http://` ولا `https://`، أو لا مضيف، أو فيه مسافة أو سطر جديد | صحّح العنوان؛ فهو لا يُهذَّب نيابةً عنك                      |
| لا اختبار لعب مرتبط          | ليس لدى Protokite اختبار لعب لمعرّف إصدار هذا البناء              | وجّه **Game Version** إلى إصدار الاختبار الذي يبدأ بـ`pt-`   |
| ‏Protokite رفض مفتاح الواجهة | رفض Protokite مفتاح Flock                                         | تحقّق من **API Key** في إعدادات حزمة Flock                   |
| إعدادات الاختبار غير متاحة   | ظل Protokite أو الشبكة يفشلان                                     | لا شيء — تُجلب من جديد حين تبدأ جلسة Flock التالية           |
| الاختبار لم يعد يجمع         | أُغلق اختبار اللعب                                                | أعِد فتحه في Protokite، أو وجّه Game Version إلى اختبار قائم |
| في انتظار إذن اللاعب         | اختبار اللعب محمَّل ولم يقل اللاعب بعدُ ما يجوز جمعه              | لا شيء — يُسأل فوق اللعبة                                    |
| اللاعب رفض اختبار اللعب      | طلب اللاعب ألّا يُجمع شيء                                         | لا شيء — هذه إجابته                                          |

<h2 id="shipping-builds">
  أبنية Shipping
</h2>

بناء Shipping مُفعَّل فيه **Enable Playtesting**، أو يحمل إصدار اختبار لعب يبدأ بـ`pt-`، يحصل على
تحذير أثناء بنائه، ومع ذلك ينجح البناء. ويأتي التحذير من قواعد بناء الإضافة، وهي قواعد يقرؤها البناء
النظيف ويتجاوزها إعادة البناء دون تغيير — فاحزم إصدارك من بناء نظيف. ابنِ اختبارات اللعب بصيغة
Development، وأعِد توجيه Game Version إلى إصدار إطلاق قبل أن تشحن.

<h2 id="tell-your-players">
  أخبر لاعبيك
</h2>

يسجّل بناء اختبار اللعب شاشة اللاعب حين يشغّل الاختبار الفيديو، ويرسل ما يكتبه في نموذج الملاحظات.
والبناء يسألهم أولًا ويعمل بما يجيبون، ومع ذلك أخبر مختبِريك قبل أن يلعبوا: ما الذي يُسجَّل، وأنه يذهب
إلى اختبار اللعب الخاص باستوديوك في Protokite، وكيف يصلون إليك لإزالته. وذلك السؤال عن هذا الاختبار
وحده — أمّا ما تجمعه لعبتك لنفسها فيبقى عليك أنت أن تسأل عنه.

ولا يُجمع شيء ما لم يكن **Enable Playtesting** مُفعّلًا في البناء *و* يشغّل الاختبار في Protokite تلك
الميزة، وبناءٌ بلا الإضافة لا يجمع شيئًا من ذلك البتّة.

<CardGroup cols={2}>
  <Card title="ما الذي يجمعه اختبار اللعب" icon="video" href="/ar/protokite/unreal-features">
    الفيديو، ونوافذ الأداء، والاستثناءات، ونماذج الملاحظات، وعقد Blueprint الخاصة بكلٍّ منها.
  </Card>

  <Card title="حزمة تطوير Unreal" icon="cube" href="/ar/sdk/unreal">
    حزمة Flock التي يعمل فوقها اختبار اللعب: الإعداد، والمصادقة، وبيانات لعبتك.
  </Card>
</CardGroup>
