التوثيق

توثيق Dance minigame

ميني قيم الرقص من نوادي GTA Online، مُعاد بناؤه لـ FiveM وقابل للعب في أي مكان على خريطتك. اضغط على الإيقاع لتصعد أربعة مستويات من الحماس، وامسك لتثبّت ما وصلت إليه، وارفع الحماس أو أنزله متى شئت، وتنقّل بين عشرة أنماط وأطلق 27 حركة خاصة دون مغادرة الحلبة. كل من حولك يرى المشهد كاملًا، وسيرفرك لا ينفّذ منه سطرًا واحدًا.

  • ESX
  • QBCore
  • Qbox
  • vRP
  • Standalone
01

التثبيت

  1. ضع السكربت

    حمّل السكربت من حسابك على Tebex، وانسخ مجلد avenida_dance/ إلى مجلد resources، وأضف ensure avenida_dance إلى إعداد سيرفرك. ولا شيء يجب أن يبدأ قبله.

  2. اختر طريقة التشغيل

    افتح config/config.lua. القيمة Config.Command هي أمر الشات، ويسجّل Config.Keybind مفتاحًا قابلًا لإعادة التعيين مع Config.DefaultKey كقيمة افتراضية. أبقِ الاثنين، أو اجعل الأمر false واترك المفتاح للاعبين.

  3. اضبط اللغة

    تقبل Config.Locale أيًا من الأكواد الخمسة عشر الموجودة في locales/. الملفات خارج الإسكرو، فيمكنك إعادة كتابة كل سطر ليناسب أسلوب سيرفرك.

  4. وجّه الإشعارات إلى نظامك

    القيمة Config.Notif على auto وتكتشف ox_lib وokokNotify وQBCore وESX بهذا الترتيب. افرض هدفًا إن كنت تشغّل أكثر من واحد، أو استخدم فرع custom في bridges/notif.lua لنظامك الخاص.

  5. لا توجد خطوة خامسة

    لا SQL تشغّله، ولا framework تعلنه، ولا صلاحية تمنحها. أعِد التشغيل واكتب الأمر.

02

الإعداد

كيف يبدأ لاعبوك الرقص

أمر، أو مفتاح، أو الاثنان. يُسجَّل المفتاح في إعدادات FiveM ضمن Key Bindings، فيستطيع كل لاعب إعادة تعيينه دون المساس بالكونفيغ عندك.

lua
-- config/config.lua
Config.Command    = 'dance'   -- chat command, false to disable
Config.Keybind    = true      -- rebindable key in FiveM settings
Config.DefaultKey = 'F7'

-- The GTA:O help panel with styles, actions and controls.
-- Off, style and move changes are announced by notification instead.
Config.ShowHints = true
03

Exports

Session

  • StartDance
    exports.avenida_dance:StartDance(styleIndex?) --> boolean

    يبدأ جلسة للاعب المحلي، مع إمكانية فرض رقم نمط من 1 إلى 10. ويعيد false حين لا يستطيع اللاعب الرقص في تلك اللحظة، داخل مركبة أو في الماء أو في الهواء أو وهو يرقص أصلًا، فيقرر سكربتك ما يفعله عندها.

  • StopDance
    exports.avenida_dance:StopDance()

    ينهي الجلسة الجارية ويشغّل حركة النهاية الحقيقية بدل قطع الأنيميشن. ولا أثر له إن لم يكن أحد يرقص.

  • IsDancing
    exports.avenida_dance:IsDancing() --> boolean

    يعيد true ما دام اللاعب المحلي في جلسة. مفيد لتعطيل تفاعلاتك أو الإنفنتوري أو أي إجراء وظيفي ما دام الميني قيم ممسكًا بالتحكم.

Music

  • SetDanceBeat
    exports.avenida_dance:SetDanceBeat(bpm, msToNextBeat?)

    يغذّي الإيقاع المحاكى بإيقاع الأغنية التي يشغّلها سكربت الموسيقى عندك. والوسيط الثاني يضبط الطور، فتنبض الأيقونة على الضربة القوية الحقيقية لا بقربها. ويُتجاهَل إن لم تكن القيمة رقمًا موجبًا.

04

وصفات

اربط الميني قيم بموسيقاك أنت

الإيقاع الأصلي موجود فقط حيث وضعت Rockstar مصدر صوت. فإن كان ناديك يبثّ أغانيه الخاصة، أوقف الإيقاع الأصلي وادفع إيقاعك أنت. استدعِ الـ export مرة عند بدء الأغنية، ثم مع كل تغيير.

lua
-- config/config.lua
Config.UseNativeBeat = false
Config.FallbackBpm   = 122.0

-- in your music resource, when a track starts
exports.avenida_dance:SetDanceBeat(128.0, 180)

ابدأ رقصة من وظيفة أو من prop

مسرح، أو منصّة، أو عمود، أو وظيفة راقص: أعطِ لاعبك الرقصة بلا أمر. افرض رقم نمط لتبقى المنصّة بالمظهر نفسه دائمًا، واقرأ القيمة المعادة لتعرف إن كانت بدأت فعلًا.

lua
local started = exports.avenida_dance:StartDance(7) -- shuffle

if not started then
    -- the player is in a vehicle, in water, or already dancing
    return
end

امنح الميني قيم توزيعك الخاص

يد التحكّم لا تحتاج إلى شيء هنا، فالافتراضيات inputs في FiveM واللعبة تربطها بها أصلًا. وهذا للسيرفر الذي يريد مفاتيحه الخاصة. أبقِ الضغط والمسك على مدخلين مختلفين، فالميني قيم يقرأهما بشكل منفصل.

lua
-- config/config.lua
Config.Controls = {
    beat        = 201, -- INPUT_FRONTEND_ACCEPT
    hold        = 202, -- INPUT_FRONTEND_CANCEL
    boost       = 22,  -- INPUT_JUMP
    drop        = 23,  -- INPUT_ENTER
    flourish    = 45,  -- INPUT_RELOAD
    stop        = 73,
    -- the rest keeps its default
}

اجعل الميني قيم متساهلًا أو قاسيًا

الصعوبة أربعة أرقام. أنزِل BeatsHit فيصل الجمهور العادي إلى المستوى الرابع، وارفع BeatsFail فلا يعود ضرب الأزرار عشوائيًا يُعاقَب. وهذه أول القيم التي سيريد صاحب النادي تعديلها.

lua
-- config/config.lua
Config.BeatsHit  = 8    -- clean beats to cross a level
Config.BeatsMiss = 16   -- missed beats to drop one
Config.BeatsFail = 8    -- bad inputs to drop one

Config.Level3Min = 0.25
Config.Level4Min = 0.75
05

أسئلة

هل يحتاج إلى framework؟

لا، ولا حتى كخيار احتياطي: لا يوجد في هذا السكربت شيء يمكن لـ framework أن يوفّره. فهو لا يقرأ المال ولا الأغراض ولا الوظائف ولا الهوية. لذلك يعمل الملف نفسه على ESX وQBCore وQbox وvRP وox_core أو على سيرفر مجرّد دون ضبط أي bridge. والشيء الوحيد الذي يمكن لـ framework فعله هنا هو عرض إشعار، وذلك ملف واحد مفتوح.

هل أحتاج إلى ox_lib؟

لا. تُسلَّم Config.UseOxLib مطفأة، وفي هذه الحالة يستخدم السكربت واجهات FiveM الأصلية لكل شيء: الـ ped، وفحص المركبة، ومعرّف اللاعب. وإن شغّلتها استخدم السكربت كاشات ox_lib بدلًا منها، وهو أمر مفيد على سيرفر يشغّل منظومة ox أصلًا. والمكان الآخر الوحيد الذي يظهر فيه هو فرع من فروع bridge الإشعارات الستة.

هل هناك سكربت سيرفر أو قاعدة بيانات؟

لا هذا ولا ذاك. لا يوجد ملف سيرفر في السكربت، ولا SQL، ولا جدول، ولا event يعود من عميل. وكل ما يراه اللاعبون القريبون يأتي من أربع statebags يدفعها الراقص. وهذا خيار معماري له نتيجة يُستحسن قولها بوضوح: لا شيء يُحفظ على السيرفر، فتفضيل النمط عند لاعبك يعيش في إعدادات لعبته هو، لا في قاعدة بياناتك.

لماذا يبدو الراقصون البعيدون أقل سلاسة من شخصيتي أنا؟

شبكة الحركة التي يستخدمها GTA لهذا الميني قيم لا تُنسخ عبر OneSync، لذا تُعاد محاكاة الراقصين البعيدين محليًا من الـ statebags. وفي أغلب الأحيان يعيد ذلك إنتاج الأصل. وحين تعلق النسخة عند حركة المقدمة، يعيد السكربت المحاولة مرتين ثم يكرّر المقطع المسيطر من شبكة المقاطع السبعة والعشرين. يبقى النمط والحماس والاتجاه صحيحة، والمزج بين الوضعيات وحده أقل ثراءً. أما الحركات الخاصة بالجسم كله فتنسخها اللعبة نفسها دائمًا.

ناديي يشغّل موسيقاه الخاصة، هل يبقى الإيقاع صحيحًا؟

نعم، عبر SetDanceBeat. يُقرأ الإيقاع الأصلي من مصادر صوت Rockstar، وهي موجودة فقط حيث وضعتها Rockstar. ولأغنية خاصة، أوقف Config.UseNativeBeat وأعطِ السكربت الـ BPM عندك مع المهلة حتى الضربة التالية. عندها تنبض الأيقونة على أغنيتك، لا على تخمين.

ماذا يحدث على أغنية سريعة جدًا؟

فوق Config.MaxBpm، وهي 140 افتراضيًا، تبدأ حركات الرقص بالانفصال عن الموسيقى. ولكي لا يظهر ذلك، تنخفض سرعة الحركة بمقدار الربع فوق هذه العتبة ويبقى التشغيل بين 0.8 و1.2 من السرعة العادية. القيمتان في الكونفيغ المفتوح إن أردت رفعهما.

هل يستطيع اللاعب الرقص في أي مكان أم في النادي فقط؟

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

كم يكلّف السكربت حين لا يرقص أحد؟

0.00ms. لا يملك السكربت أي حلقة خلفية: يسجّل أمرًا، ومفتاحًا، ومعالج statebag، ثم لا يفعل شيئًا حتى يبدأ أحدهم جلسة. وكل خيط تنشئه الجلسة يموت معها.

السلة
Spirit RP
Discord