Skip to content

Anti-cheat

Anti-cheat

كل قرار متعلق بالأموال والمخزون يتم اتخاذه على الخادم (Server). العميل (Client) يقوم برسم المضخة والإبلاغ عما حدث؛ وهو لا يقرر أبداً تكلفة أي شيء أو كمية الوقود التي تم ضخها.

ما يفرضه الخادم

  • جلسات المضخة. فتح المضخة يطلب رمز جلسة (Session Token) من الخادم. عملية الدفع تتطلب هذا الرمز، واللترات المحاسب عليها تكون محدودة بالمدة الزمنية التي ظل فيها الخادم مفتوحاً بالفعل بناءً على معدل التدفق المُكوّن. العميل الذي يدعي استهلاك كمية أكبر مما يمكن للمضخة ضخه فعلياً يتم تقليصه إلى ما تسمح به الساعة.
  • انتهاء صلاحية الجلسة. الرموز للاستخدام مرة واحدة فقط، ومُرتبطة باللاعب الذي فتحها، ويتم تجاهلها بعد PumpSessionTimeout. الجلسة المنتهية الصلاحية لا تحاسب على أي شيء.
  • فحوصات المسافة. عمليات الشراء، إعادة التزود بالوقود، الشحن، تبديل البطارية، تعبئة العبوة، طلب المخزون، وكل إجراء في لوحة التحكم، يتم إعادة التحقق منها على الخادم للتأكد من أن اللاعب موجود بالفعل في تلك المحطة، مع هامش DistanceSlack بالأمتار لتجاوز تأخير موقع الشخصية (Ped).
  • الحد من معدل الطلبات (Rate Limiting). كل حدث (Event) وكل رد اتصال (Callback) يكلف رمزاً من دلو مخصص لكل لاعب يتم إعادة تعبئته بمعدل PerSecond ولا يتراكم أبداً متجاوزاً Burst. زر الاختصار العالق يستمر في العمل؛ بينما حلقة السبام (Spam Loop) تصطدم بجدار فوراً تقريبا.
  • تقييد القيم (Value Clamping). الأسعار، الأجور، الطلبات، عمليات السحب والإيداع، كلها يتم التحقق من حدودها وأنواع بياناتها من جهة الخادم. لا يُقبل أي مبلغ يزيد عن MaxAmount على الإطلاق، ويتم الاحتفاظ بالأسعار داخل Config.Refuel.PriceLimits.
  • فحوصات الصلاحيات في كل إجراء. يتم إعادة التحقق من صلاحيات الإدارة من جهة الخادم مع كل طلب، ولا يتم الوثوق بها أبداً من واجهة المستخدم (UI). التوظيف، الفصل، وتعديل أي شخص يمتلك صلاحية employees يقتصر على المالك فقط، لكي لا يتمكن أي موظف من ترقية نفسه. النقل وإعادة البيع يقتصران على المالك فقط ويتطلبان كتابة اسم المحطة مرة أخرى.
  • المخزون والبنك هما حالة الخادم (Server State). البيع لا يتم إلا إذا كانت المحطة تمتلك اللترات بالفعل وكان العميل يمتلك الأموال بالفعل؛ وكلا الجانبين يتحركان في نفس الخطوة من جهة الخادم.
config.lua
Config.AntiCheat = {
    RateLimit = { Burst = 14, PerSecond = 6 },
    MaxLitresPerPay = 200.0,
    LitreGrace = 3.0,
    PumpSessionTimeout = 900,
    DistanceSlack = 15.0,
    MaxAmount = 100000000,
    MaxWage = 25000,
    JerryPourTimeout = 600,
}
الإعداد الغرض
RateLimit حجم التدفق ومعدل إعادة التعبئة لدلو الأحداث الخاص بكل لاعب
MaxLitresPerPay الحد الأقصى الصارم لجلسة مضخة أو شاحن واحدة، بغض النظر عن التوقيت
LitreGrace سماحية فحص التوقيت باللترات. تغطي التأخير الناتج عن الـ Tick الضعيف
PumpSessionTimeout الثواني التي تظل فيها الجلسة صالحة
DistanceSlack الأمتار الإضافية المسموح بها فوق نطاق المحطة
MaxAmount الحد الأقصى لأي قيمة مالية يتم قبولها من العميل
MaxWage أعلى أجر يمكن للمالك تعيينه للموظف
JerryPourTimeout الثواني التي يتم فيها تذكر عملية الصب غير المنتهية قبل عدم القدرة على استرداد المتبقي

الضبط

القيم الافتراضية تناسب الخادم العادي. الإعدادان اللذان يستحقان التعديل هما:

  • LitreGrace — قم برفعها بمقدار لتر أو لترين إذا كان اللاعبون ذوو الاتصالات السيئة يتعرضون لنقص في حقوقهم عند المضخة. اجعلها صغيرة؛ فهو وقود مجاني.
  • RateLimit.Burst — قم برفعها إذا بدأت محطة مزدحمة بشكل شرعي في رفض الإجراءات. قم بخفضها إذا كنت تريد رقابة أشد.

تساهل كبير في MaxLitresPerPay أو DistanceSlack يؤدي إلى إزالة الحد الأقصى الذي وُجدت تلك الفحوصات لتوفيره. لا تقم بتغييرها إلا إذا كان اللاعبون الشرفاء يتعرضون للحظر بوضوح.