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

**الإعدادات عن بُعد** تتيح لك التحكّم في القيم ومفاتيح الميزات من الخادم، فتضبط لعبتك، وتتحكّم
في إتاحة الميزات، وتجري التجارب دون أي تحديث لدى العميل.

<Scope>تُحدَّد الإعدادات عن بُعد لكل **إصدار لعبة**، ويمكن أن تتباين حسب [الشريحة](/ar/guides/segments).</Scope>

<Tabs>
  <Tab title="لوحة التحكم">
    أدِر قيم الإعدادات ومفاتيح الميزات لإصدار لعبة من لوحة التحكم، وغيّرها حسب الشريحة.

    <Frame caption="أدِر قيم الإعدادات عن بُعد ومفاتيح الميزات من لوحة التحكم.">
      <img src="https://mintcdn.com/qwacks/TGGmq_oWzDacAqHl/images/guides/remote-config.png?fit=max&auto=format&n=TGGmq_oWzDacAqHl&q=85&s=7e64fead96a8d7574a2408bde4b34540" alt="الإعدادات عن بُعد ومفاتيح الميزات" width="1440" height="866" data-path="images/guides/remote-config.png" />
    </Frame>
  </Tab>

  <Tab title="Unity">
    شغّل **Code Generation → Sync Schemas** لتحويل كل إعداد إلى صنف C# مُحدَّد النوع. وتتولّى
    حزمة التطوير استنتاج القيم الصحيحة للاعب المسجَّل دخوله — بما في ذلك أي تجاوزات قائمة على
    الشرائح:

    ```csharp theme={null}
    var gameplay = await FlockClient.Instance.Config.GetGameplayAsync();
    float speed = gameplay.BaseMoveSpeed;
    ```

    ويأتي اسم الدالة من إعدادك نفسه (`Gameplay` ← `GetGameplayAsync`). اجلب القيم عند بدء
    التشغيل واقرأها بدل تضمينها في الكود.

    وتُحلّ القيم **بأولوية التحديث**: فحيثما ينطبق [تحديث](/ar/guides/game-patches) على إصدار
    اللعبة العامل تحصل على القيمة المحدَّثة، وإلا فقيمة الإعداد نفسه — ولا يعرف كودك أيّهما جرى.

    وتُخزَّن قراءات الإعدادات مؤقتًا وتُقدَّم من القرص حين يتعذّر الوصول إلى الخادم، فيحصل
    اللاعب العائد على قيم الضبط دون اتصال. ويحتاج المخزون المؤقت إلى قراءة ناجحة واحدة عبر
    الشبكة ليمتلئ.

    <Note>
      توليد الكود هو المسار المقصود هنا لا مجرّد تسهيل. فالدوال الخام للإعدادات في المزوّد
      `internal` — والدوال المُولَّدة المحدَّدة النوع هي الواجهة العامة.
    </Note>
  </Tab>

  <Tab title="Unreal">
    `Flock Resolve Config Data` تعيد القيم الفعّالة لإصدار اللعبة قيد التشغيل — قيم التحديث إن
    وُجد تحديث منطبق، وبيانات الإعداد نفسه فيما عدا ذلك. ولا يعرف مخطّطك أيّ الحالتين وقعت.

    ```cpp theme={null}
    Sdk->GetConfigProvider()->ResolveConfigData(ConfigId,
        [](TFlockResult<FFlockStructuredData> Data)
        {
            int32 Damage = 0;
            Data.Value.TryGetInt(TEXT("weapons.sword.damage"), Damage);
        });
    ```

    وبعد مزامنة المخطّطات تصبح **عقدة واحدة** تعيد بنية مُحدَّدة النوع:

    <Frame caption="Get Gameplay تجلب القيم وتستنتجها وتعيد بنية مُحدَّدة النوع — فكّكها للحصول على أطراف حقيقية.">
      <img src="https://mintcdn.com/qwacks/xJEjgQCFVIWLhvHB/images/sdk/unreal/codegen-get-config.png?fit=max&auto=format&n=xJEjgQCFVIWLhvHB&q=85&s=1a823c39016fda2108f524d62d8c03b2" alt="عقدة ماكرو Get Gameplay مولَّدة تغذّي عقدة Break" width="634" height="345" data-path="images/sdk/unreal/codegen-get-config.png" />
    </Frame>

    وتُخزَّن قراءات الإعدادات مؤقتًا وتُقدَّم من القرص عند تعذّر الوصول إلى الخادم، فيحصل اللاعب
    العائد على قيم ضبطك حتى دون اتصال.
  </Tab>
</Tabs>

<h2 id="patterns">
  أنماط الاستخدام
</h2>

* **مفاتيح الميزات** — اشحن الكود معطّلًا، ثم فعّله لشريحة معيّنة أو للجميع.
* **الضبط** — عدّل معدّلات الإسقاط أو الأسعار أو الصعوبة مباشرةً.
* **التجارب** — قدّم نسخًا مختلفة لشرائح مختلفة وقارن بينها عبر
  [التحليلات](/ar/guides/analytics-and-events).

<Tip>
  وفّر دائمًا قيمًا افتراضية آمنة لدى العميل حتى تبقى لعبتك قابلة للعب إذا فشل جلب الإعدادات.
</Tip>
