Skip to content

Anti-cheat

Anti-cheat

पैसा और स्टॉक से जुड़ा हर निर्णय सर्वर पर लिया जाता है। क्लाइंट केवल पंप को ड्रा करता है और रिपोर्ट करता है कि क्या हुआ; यह कभी तय नहीं करता कि किसी चीज़ की कीमत क्या है या कितना ईंधन अंदर गया।

सर्वर क्या लागू करता है

  • Pump sessions. पंप खोलने पर सर्वर से एक सेशन टोकन मांगा जाता है। भुगतान के लिए उस टोकन की आवश्यकता होती है, और बिल किए गए लीटर इस बात से सीमित होते हैं कि कॉन्फ़िगर किए गए फ्लो रेट पर सेशन वास्तव में कितनी देर तक खुला रहा था। कोई क्लाइंट पंप द्वारा भौतिक रूप से दिए जा सकने वाले ईंधन से अधिक का दावा करता है, तो उसे घड़ी के अनुसार अनुमति प्राप्त सीमा तक सीमित कर दिया जाता है।
  • Session expiry. टोकन सिंगल-यूज होते हैं, उस प्लेयर से जुड़े होते हैं जिसने उन्हें खोला है, और PumpSessionTimeout के बाद हटा दिए जाते हैं। एक एक्सपायर्ड सेशन का कोई बिल नहीं बनता है।
  • Distance checks. खरीदना, ईंधन भरना, चार्ज करना, बैटरी बदलना, कैन भरना, स्टॉक ऑर्डर करना और हर डैशबोर्ड एक्शन सर्वर पर फिर से चेक किया जाता है कि प्लेयर वास्तव में उस स्टेशन पर है या नहीं, जिसमें पेड पोजीशन लैग के लिए DistanceSlack मीटर का मार्जिन होता है।
  • Rate limiting. हर इवेंट और कॉलबैक की कीमत प्रति-प्लेयर बकेट से एक टोकन होती है जो PerSecond के हिसाब से रिफिल होती है और कभी भी Burst से आगे नहीं जाती। अटकी हुई कीबिंद अभी भी काम करती है; स्पैम लूप लगभग तुरंत ब्लॉक हो जाता है।
  • Value clamping. कीमतें, वेतन, ऑर्डर, निकासी और जमा राशि सभी की सर्वर-साइड सीमा और टाइप की जाँच की जाती है। MaxAmount से ऊपर की किसी भी चीज़ को बिल्कुल स्वीकार नहीं किया जाता है, और कीमतें Config.Refuel.PriceLimits के भीतर रखी जाती हैं।
  • Permission checks on every action. स्टाफ की परमिशन को हर अनुरोध पर सर्वर-साइड पर फिर से सत्यापित किया जाता है, कभी भी UI पर भरोसा नहीं किया जाता है। किसी ऐसे व्यक्ति को काम पर रखना, निकालना और एडिट करना जिसके पास employees की परमिशन है, वह केवल ओनर के लिए है, ताकि कोई कर्मचारी खुद को प्रमोट न कर सके। ट्रांसफर और सेल-बैक केवल ओनर के लिए हैं और इसके लिए स्टेशन के नाम को वापस टाइप करने की आवश्यकता होती है।
  • Stock and bank are 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,
}
Setting Purpose
RateLimit प्रति-प्लेयर इवेंट बकेट का बर्स्ट साइज़ और रिफिल रेट
MaxLitresPerPay एक सिंगल पंप या चार्जर सेशन पर हार्ड सीलिंग, टाइमिंग कुछ भी हो
LitreGrace टाइमिंग चेक पर छूट, लीटर में। लैगी टिक को कवर करता है
PumpSessionTimeout वह सेकंड जितने समय तक सेशन वैध रहता है
DistanceSlack स्टेशन के रेडियस के ऊपर अनुमति दिए गए अतिरिक्त मीटर
MaxAmount क्लाइंट से स्वीकार की जाने वाली किसी भी पैसे की वैल्यू पर सीलिंग
MaxWage वह अधिकतम वेतन जो एक ओनर किसी कर्मचारी को दे सकता है
JerryPourTimeout वह सेकंड जितने समय तक अधूरा पौर याद रखा जाता है इससे पहले कि बचे हुए ईंधन का दावा न किया जा सके

Tuning

डिफ़ॉल्ट सेटिंग्स एक सामान्य सर्वर के अनुकूल हैं। दो ऐसी सेटिंग्स जिन पर ध्यान देना चाहिए:

  • LitreGrace — अगर खराब कनेक्शन वाले प्लेयर्स को पंप पर कम ईंधन मिल रहा है तो इसे एक या दो लीटर बढ़ा दें। इसे कम रखें; यह मुफ्त ईंधन है।
  • RateLimit.Burst — अगर कोई वास्तव में व्यस्त फोरकोर्ट एक्शन से इनकार करना शुरू कर दे तो इसे बढ़ा दें। यदि आप इसे और सख्त करना चाहते हैं तो इसे कम करें।

MaxLitresPerPay या DistanceSlack को बहुत ज़्यादा ढीला करने से वह सीमा हट जाती है जिसके लिए ये चेक मौजूद हैं। इन्हें तभी बदलें जब स्पष्ट रूप से ईमानदार प्लेयर्स को ब्लॉक किया जा रहा हो।