> ## 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.

# الإنجازات

> عرِّف الإنجازات كإعدادات تتعقّب تقدّم اللاعبين تلقائيًا.

export const Scope = ({children}) => <Info>
    <b>النطاق:</b> {children}
  </Info>;

الإنجاز في Flock نوع من **الإعدادات/القوالب** — يُعرَّف إلى جانب
[إعدادات لعبتك](/ar/guides/remote-config) و[قوالب اللاعبين](/ar/concepts/players) —
و**يُولّد تلقائيًا مدخل بيانات لاعب** لتتبّع تقدّم كل لاعب. فأنت لا تستدعي واجهة برمجية منفصلة
للإنجازات: تضبط الإنجاز، وتُهيّئ Flock [بيانات اللاعب](/ar/guides/player-data) المقابلة لتقرأها
وتحدّثها.

<Scope>تُضبط الإنجازات لكل **إصدار لعبة** (كإعدادات لعبة + قوالب لاعبين).</Scope>

<Tabs>
  <Tab title="لوحة التحكم">
    عرِّف الإنجازات من صفحة **إعدادات الإنجازات** — وهي المرجع الأوحد. يصبح كل إنجاز جزءًا من
    إعدادات لعبتك وقوالب اللاعبين، وتُنشئ Flock مدخل بيانات لاعب يحمل التقدّم.

    <Frame caption="عرِّف الإنجازات من صفحة إعدادات الإنجازات.">
      <img src="https://mintcdn.com/qwacks/TGGmq_oWzDacAqHl/images/guides/achievements.png?fit=max&auto=format&n=TGGmq_oWzDacAqHl&q=85&s=8b9d1efa540dfe8a1b13a502e3bd6176" alt="إعدادات الإنجازات" width="1440" height="866" data-path="images/guides/achievements.png" />
    </Frame>
  </Tab>

  <Tab title="Unity">
    تأخذ `UnlockAchievementAsync` اسم الإنجاز، أو تعدادًا مُولَّدًا بعد مزامنة المخططات فيستحيل
    أن تخطئ في كتابته. وتتولّى حزمة التطوير استنتاج الصف الموسوم `achievement` نيابةً عنك.

    ```csharp theme={null}
    PlayerData row = await FlockClient.Instance.Commands.UnlockAchievementAsync("first_win");

    // بعد المزامنة — مُحدَّد النوع، فالاسم غير الموجود على الخادم يفشل عند الترجمة:
    row = await FlockClient.Instance.Commands.UnlockAchievementAsync(FlockAchievementId.FirstWin);
    ```

    والنسخة المُحدَّدة النوع **إضافية** — إذ تبقى نسخة النص الخام متاحة — لكن فضّلها عليها.

    وإن كنت تحتفظ بتفاصيل الإنجاز (الاسم المعروض، والوصف، والمكافأة) في إعداد موسوم
    `achievement`، فإن توليد الكود يربطها بالتعداد نفسه، فتمنح الإنجاز وتقرأ تفاصيله بقيمة واحدة:

    ```csharp theme={null}
    // تُعيد المدخل المطابق — نوع مُولَّد من إعدادك أنت.
    var firstWin = await FlockClient.Instance.Config.GetAchievementDetailsAsync(FlockAchievementId.FirstWin);
    ```

    وتُصفّ عمليات الفتح في طابور دون اتصال وتُعاد عند عودة الاتصال.
  </Tab>

  <Tab title="Unreal">
    تأخذ `Flock Unlock Achievement` اسم الإنجاز، أو قائمة منسدلة مُولَّدة بعد مزامنة المخطّط
    بحيث يستحيل أن تخطئ في كتابته. وتتكفّل حزمة التطوير بإيجاد الصف الموسوم بـ `achievement`
    نيابةً عنك.

    ```cpp theme={null}
    Sdk->GetCommandProvider()->UnlockAchievement(TEXT("first_win"), OnUnlocked);

    // After a sync, with the id baked in:
    FFlockGenerated::UnlockAchievement(this, EFlockAchievementId::FirstWin, OnUnlocked);
    ```

    وعمليات الفتح تُصفّ في طابور عند انقطاع الاتصال وتُعاد عند عودته.
  </Tab>
</Tabs>

<Note>
  الإنجازات تُضبط ولا تُبرمج. عرِّفها من صفحة **إعدادات الإنجازات**، ثم تكشفها لك حزمة التطوير
  عبر إعدادات اللعبة وبيانات اللاعب.
</Note>
