アンチチート
Anti-cheat
すべての金銭および在庫の決定はサーバー側で行われます。クライアントはポンプを描画し、何が起きたかを報告するだけであり、価格や投入量を決定することは一切ありません。
サーバーが強制する保護機能
- ポンプセッション: ポンプを開く際、サーバーにセッション・トークンの発行を要求します。支払いの際にはそのトークンが必要となり、請求されるリットル数は、設定された流量においてセッションが実際に開いていた時間に基づき上限が制限されます。クライアントが物理的に供給可能な量を超える主張をした場合、タイマーで許容される量に切り詰められます。
- セッションの有効期限: トークンは使い捨てであり、セッションを開始したプレイヤーに紐付けられ、
PumpSessionTimeoutの経過後に破棄されます。期限切れのセッションでは一切請求が行われません。 - 距離チェック: 購入、給油、充電、バッテリーの交換、ジェリ缶への給油、在庫の発注、およびすべてのダッシュボード操作において、プレイヤーが実際にそのスタンドにいることがサーバー側で再確認され、ペダルの位置ズレを考慮して
DistanceSlackメートルのマージンが設けられます。 - レート制限: すべてのイベントとコールバックには、プレイヤーごとのバケットからトークンが消費されます。このバケットは
PerSecondで補充され、Burstを超えて蓄積されることはありません。スタックしたキーバインドは機能しますが、スパムループはほぼ瞬時に制限に引っかかります。 - 値のクランプ: 価格、給与、注文、出金、入金はすべて、サーバー側で範囲チェックと型チェックが行われます。
MaxAmountを超える値は一切受け付けられず、価格はConfig.Refuel.PriceLimitsの範囲内に厳格に維持されます。 - すべての操作における権限チェック: スタッフ権限はリクエストごとにサーバー側で再検証され、UIからの情報は決して信頼されません。従業員の採用、解雇、および
employees権限を持つ人物の編集はオーナーのみに制限されているため、従業員が自分で自分を昇格させることはできません。譲渡と買い戻しもオーナーのみ可能であり、スタンド名の再入力が必須となります。 - 在庫と銀行口座はサーバーのステート: 販売は、スタンドに実際にそのリットル数が存在し、かつ顧客に実際に資金がある場合にのみ成立します。双方の残高変動は、サーバー側の同一のステップ内で同時に処理されます。
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 |
タイミングの計測結果に関わらず、1回のポンプまたは充電セッションに適用される厳格な上限 |
LitreGrace |
タイミングチェックにおけるリットル単位の猶予。ラグのあるティックをカバーします |
PumpSessionTimeout |
セッションが有効状態を維持する秒数 |
DistanceSlack |
スタンドの半径に加えて許可される追加のメートル数 |
MaxAmount |
クライアントから受け入れる金銭値の最大上限 |
MaxWage |
オーナーが従業員に設定できる最高給与 |
JerryPourTimeout |
未完了の注油作業において、残りの燃料を回収できなくなるまでに作業内容が記憶される秒数 |
チューニング
デフォルト設定は一般的なサーバーに適しています。調整する価値があるのは以下の2点です:
LitreGrace— 回線環境の悪いプレイヤーがポンプで損をしている場合に、1〜2リットル増やしてください。ただし、無料の燃料となるため小さく維持してください。RateLimit.Burst— ガソリンスタンドが非常に混雑し、正当な操作が拒否され始めた場合に増やしてください。より厳しく制限したい場合は下げてください。
⚠
MaxLitresPerPay や DistanceSlack を大幅に緩和すると、それらのチェックが存在する理由である安全上限が失われます。本当に誠実なプレイヤーが目に見えてブロックされている場合を除き、変更しないでください。