Anti-cheat
Anti-cheat
모든 자금 및 재고 관련 결정은 서버에서 이루어집니다. 클라이언트는 주유기를 렌더링하고 발생한 일만 보고할 뿐, 어떤 항목의 비용이 얼마인지 또는 얼마나 주입되었는지를 스스로 결정하지 않습니다.
서버가 강제하는 사항
- 주유 세션. 주유기를 열면 서버에 세션 토큰을 요청합니다. 결제하려면 해당 토큰이 필요하며, 청구되는 리터 수는 설정된 유속에 따라 세션이 실제로 열려 있던 시간으로 제한됩니다. 주유기가 물리적으로 공급할 수 있는 양보다 더 많은 양을 주장하는 클라이언트는 타이머가 허용하는 수준으로 조정됩니다.
- 세션 만료. 토큰은 일회용이며, 이를 연 플레이어에게 귀속되고
PumpSessionTimeout이후에 폐기됩니다. 만료된 세션은 아무것도 청구하지 않습니다. - 거리 확인. 구매, 주유, 충전, 배터리 교환, 제리캔 채우기, 재고 주문 및 모든 대시보드 작업은 플레이어가 실제로 해당 주유소에 있는지 서버에서 재확인하며, 보행자(ped) 위치 지연을 위해
DistanceSlack미터의 오차 범위를 허용합니다. - 속도 제한(Rate limiting). 모든 이벤트와 콜백은
PerSecond주기로 리필되고Burst를 초과하여 쌓이지 않는 플레이어별 버킷에서 토큰을 소모합니다. 멈춘 키바인딩은 계속 작동하지만, 스팸 루프는 거의 즉시 차단됩니다. - 값 클램핑. 가격, 임금, 주문, 출금 및 입금은 모두 서버 측에서 범위 검증과 타입 검증을 거칩니다.
MaxAmount를 초과하는 값은 전혀 허용되지 않으며, 가격은Config.Refuel.PriceLimits내에 유지됩니다. - 모든 작업에 대한 권한 검증. 스태프 권한은 UI를 신뢰하지 않고 요청마다 서버 측에서 다시 검증됩니다. 고용, 해고 및
employees권한을 가진 사람의 편집은 오직 소유자(owner)만 가능하므로, 직원이 스스로 승진할 수 없습니다. 이전 및 재판매는 소유자만 가능하며 주유소 이름을 다시 입력해야 합니다. - 재고와 은행은 서버 상태입니다. 판매는 주유소에 실제로 해당 리터 수가 있고 고객에게 실제로 돈이 있는 경우에만 발생하며, 양측 모두 동일한 서버 측 단계에서 처리됩니다.
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 |
완료되지 않은 주유가 기억되어 남은 양을 더 이상 청구할 수 없게 되기까지의 시간(초) |
튜닝
기본값은 일반적인 서버에 적합합니다. 조정해 볼 가치가 있는 두 가지 설정:
LitreGrace— 연결 상태가 나쁜 플레이어들이 주유소에서 손해를 보는 경우 1~2리터 정도 높이세요. 낮게 유지하세요. 공짜 연료입니다.RateLimit.Burst— 실제로 혼잡한 주유소에서 작업 거부가 발생하기 시작하면 높이세요. 더 엄격하게 제한하고 싶다면 낮추세요.
⚠
MaxLitresPerPay 또는 DistanceSlack을 크게 완화하면 해당 검증들이 존재하는 이유인 상한선이 사라집니다. 선량한 플레이어가 눈에 띄게 차단되는 경우에만 변경하세요.