私は現在RTSゲームに取り組んでいます。ゲームが実行されているシステム時間に基づいて帝国がリソースを取得する場所。問題は、システム時間を前方に変更した場合です。ゲームが再び実行されると、リソースは即座に急増します。繰り返しになりますが、私はこのゲームを iPad でプレイしました。Injustice: Gods between us です。時間を上げればエネルギーが回復し、エネルギーの補充を待たずにプレイできます。この種のハッキングは非常に簡単で、大企業にとっても煩わしいものです。このような大企業が作ったゲームには、非常に多くの欠陥があります。完璧な時間ベースのゲームを実装して、この問題を克服するにはどうすればよいですか? 私もこの投稿を読みましたが、完璧な答えはありませんでした。
2 に答える
インターネット アクセスに関する Gemoron の投稿の拡張として、私は最近、Game Maker でインターネットからデータを取得する方法を発見しました。
WGet と呼ばれる小さな無料のオープン ソース プログラムを使用できます。個別に実行する VBS スクリプトを介して GM8 のコードで実行するだけで (Studio はこれを実行できません)、指定したリンクからデータを作業ディレクトリに保存します。
プログラムを実行し、待機ループ (タイムアウト エスケープあり) に入れ、ファイルが存在する場合は、テキスト ファイルとして開き、その行を変数に読み取り、テキスト ファイルを閉じて削除し、戻ります。文字列を含む変数。
スクリプトが作成されると、情報を取得するのに合計 1 行かかります。
time=getOnlineData(" http://www.example.com/path/to/data ")
もちろん、インターネット接続が必要であり、WGet プログラムがファイアウォールを通過できるようにする必要があります。私はこれを非常に効果的に使用しました、そしてそれは素晴らしく機能します. これより大きなファイルでテストしたことはありませんが、私のテストでは 500B のファイルが完了し、文字列が一瞬で読み込まれました。
したがって、このスクリプトを時間 (および時間のみ) を保持する Web ページで実行し、ゲームで使用できるように時間を解析します。
したがって、次のようにまとめることができます。
//Get game start time from previously saved file.
startTime=getStartTime()
//Get current time from site
currTime=getOnlineData("http://whatsthetimemrwolf.com")
//If it is in standard javascript date format, it's easy from here. Subtraction gives the time passed in milliseconds.
passedTime=currTime-startTime
システムをセットアップすれば簡単です。警告として、開始時刻は保存ファイルで変更される可能性がありますが、ゲームに組み込まれている単純な暗号化プロセスにより改ざんを防ぐことができます。
がんばって、楽しいプログラミングを。:)
インターネット上の他のデバイスと通信せずに適切な方法はありません。大企業が多額の費用がかかる問題を解決できない場合、GM の制限された環境でそれを解決する方法はありません。
あなたの最善の策は、リンクされた投稿に記載されています。他の場所で時間を取得してください。1 つの方法は、システム時刻を返す以外に何もしないサーバー上で実行できる小さなツールを作成することです。
別の方法は、時間が戻された場合に獲得したリソースを削除し、負の値を許可することで、そのようなチートを罰することです.