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.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 को बहुत ज़्यादा ढीला करने से वह सीमा हट जाती है जिसके लिए ये चेक मौजूद हैं। इन्हें तभी बदलें जब स्पष्ट रूप से ईमानदार प्लेयर्स को ब्लॉक किया जा रहा हो।