LoginSignup
15
15

More than 5 years have passed since last update.

お手軽な端末時間を進めるチートの対策

Posted at

対象の方

  • cocos2d-xを用いて開発をしている
  • 時間管理を伴うゲーム開発をしている
  • サーバプログラムは書きたくない
  • そんなに厳密でなくて良い

手順

下記のリポジトリからファイルをコピーして自分のプロジェクトに取り込んでよしなに使う
(cocos2d-x v2.X系のコードになっているので適宜書き換えて使って頂ければ)

下記は画面遷移時にボーナスを付与する使用例(仮に画面をSampleSceneとしてます)

SampleScene.h
#include "NtpChecker.h"

class SampleScene 
: public CCLayer
〜略〜
void bonus(NtpResult result); // コールバック関数の定義
};

SampleScene.cpp

void SampleScene::onEnter()
{
〜略〜
    // 時間があっているかチェックする
    NtpChecker::sharedInstance()->check(this, ntpchecker_selector(SampleScene::bonus));
}

void SampleScene::bonus(NtpResult result)
{
    switch(result) {
        case NtpResult::OK:
            // TODO:ここにボーナス付与の処理を書く
        case NtpResult::NG:
            // チートしてる可能性あり、懲らしめたい人はなんかやって下さい
        case NtpResult::Unknown:
        default:
            // 通信途絶など
    }
}

仕組み

ボーナス付与時に標準時刻と端末の時間を照らし合わせて合っていればボーナスあげるよ、という仕組みになっています、端末時間がずれていればチートの可能性が高いことにしています
最近はデフォルトで端末は標準時刻に合わせるようになっていますしよほどのことがない限りは端末時間がずれるということはありません(海外旅行とか行くとずれますけどね)
詳しい仕組みについてはこちらの記事をご参照下さい

上記の記事でより厳密に対応されているのですが、下記のモチベーションでちょっと調べてました

  • iOSしか対応してない、Androidも対応したい
  • 依存ライブラリがあるからなくしたい

iOS,Android両対応するためにすべてC++で書きたかったのですが、自分の技術力ではどうにもUDP通信がダルくて色々調べたところ、HTTPで時間がここから取得できることが分かったので書いてみました
HTTPであればcocos2d-xの機能を使えば実現できます

NICTのレスポンスがHTMLだったのでそれを適当にパースして合わせてます。割と長いこと運用されているみたいなのでそんなにフォーマット変わるものでもなさそうなので、まあいいかなーというどんぶり感で作ってます。

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15