الدرس 4 من 10

فترات التهدئة

هدف الدرس

الدوال canUse وuse وremaining

01

الشرح

لكل قدرة في اللعبة فترة تهدئة (cooldown)، فكرة النار مثلًا تنطلق ثم تنتظر ثلاث ثوانٍ قبل أن تنطلق مرّة أخرى. ولا تحتاج إلى عدّ تنازلي في كل إطار، بل احفظ متى تجهز القدرة بـreadyAt[name] = now + duration، وقارن الوقت به عند الطلب، فلا يوجد شيء يتحدّث في كل إطار، ولا مؤقّت قد ينسى أحد إيقافه.

ويصل الوقت إلى الدالة في المُعامل now، ولا تقرؤه الدالة بنفسها، فهو في FiveM يأتي من GetGameTimer()، وفي LÖVE من love.timer.getTime()، وفي الفحص يكون رقمًا تختاره أنت. وبهذا تعمل الدوال نفسها على ساعة الخادم، وفي لعبة متوقّفة مؤقّتًا، وفي فحص يعطي النتيجة نفسها في كل مرّة.

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

02

المطلوب

أكمل في Cooldowns الدوال canUse(name, now) وuse(name, now) وremaining(name, now). فالقدرة التي لم تُستعمل بعد جاهزة، وبعد استعمالها تجهز حين يبلغ now وقت الاستعمال مضافًا إليه مدّتها من durations. وتُرجع use القيمة true وتبدأ فترة التهدئة، أو false دون أي تغيير، وتُرجع remaining الوقت الباقي، ولا يقلّ ما تُرجعه عن صفر.

الفحوص

6 فحوص
  1. القدرة التي لم تُستعمل جاهزة
  2. الدالة use تبدأ فترة التهدئة
  3. تجهز عند انقضاء المدّة بالضبط
  4. الدالة use تُرفض أثناء التهدئة ولا تطيلها
  5. الدالة remaining تعدّ تنازليًّا ولا تنزل تحت الصفر
  6. لكل قدرة مؤقّت خاصّ بها
03

تلميحات

0/3
main.lua
المخرجاتLua 5.4 (wasmoon)

نحمّل بيئة Lua الآن.

–/6

يبدأ الفحص حين تجهز البيئة.

تجد 6 فحوص في بطاقة «المطلوب».