How does one deal with cheating while using Realtime?

As I understand it, Realtime allows us to connect to Photon cloud using messages from each client in a match. In this situation, the server acts only as a messaging system and won't validate any input the players give to it, only sends the messages to the relevant players in the match. Naturally, I may have misunderstood the way the system works so feel free to educate me! ;)

In light of that, how do we deal with cheating in competitive games using this service? I am working on a fast paced competitive VR game and this is something that has come up while I was testing the demo for Unreal Engine 4, as I noticed for the first time that there is no server code necessary in the demo.

cheers!

Best Answer

Answers

  • JohnTube
    JohnTube ✭✭✭✭✭
    edited February 2017
    Thanks @Kaiserludi for your valuable contribution as always.
  • CASBraga
    CASBraga
    edited February 2017
    Thank you @Kaiserludi! This was exactly what I had thought and dismissed as not possible. There are other things that Photon Cloud won't allow me to do (bots to substitute disconnected players, for instance), but this makes using the cloud still viable, as it would be the most finnacially and logistically better solution.
  • Hi @CASBraga,
    I really like this thread. There was a similar question (http://forum.photonengine.com/discussion/comment/32939) where I awaited an answer and Kaiserludi just forwarded me here.

    I'm interested in your note in the last comment about "bots to substitute disconnected players". Did you find a solution for this or is there a thread in the forum where this topic is discussed?
    I'm prototyping an 1 vs 1 game where I wanted to have that functionality.
    Thanks
  • Hi @CASBraga, hi @rlonau.

    An option for Remote Bots would be to run them on a separate server that is hosted by you and to let them connect like normal clients. Keep in mind however that that way they count against your CCU.


    I'm prototyping an 1 vs 1 game where I wanted to have that functionality.

    When you want do substitute disconnected players in a 1vs1, I don't see anything speaking against just running them locally on the client of the remaining player. At that point it's practically a singleplayer game against the AI.
  • CASBraga
    CASBraga
    edited March 2017
    @Kaiserludi Thanks again! I was thinking of a different way to have bots, but only in 2v2 and up games. Your solution seems better for that.

    @rlonau You could also just let the disconnecting player lose the match and the match ends.
  • Hi @CASBraga.


    @rlonau You could also just let the disconnecting player lose the match and the match ends.

    Oh yes. Absolutely!

    @rlonau:
    If player A disconnects, we can't really let him win or give him a tie, otherwise loosing players would just disconnect to avoid a loose. So in a 1v1 player B can't loose the game against player A anyway anymore at this point, even if the AI that replaced player A beats him. So whats the point for player B in continuing to play against the AI instead of just starting a new game against another human opponent? If he wanted to play against AI instead of a human, then he would not have chosen multiplayer mode in the first place.

    If you want a player to be able to reconnect after he got disconnected, I would strongly recommend against replacing him by a bot while he is gone. As a player it would be an absolute no go for me, if a bot takes over for me and does any moved that I absolutely never want to happen. I would strongly prefer if just no moves at all happen from on my behalf, while I am gone.
  • Thanks for your feedback guys.

    Since it'll be a mobile game I'm mostly thinking about connection related disconnects. Meaning also the player who's winning could have a disconnect. So a bot replacing him could still manage to win that game or at least handle some decissions until the player is reconnected.

    I guess for the prototype I'll skip this tricky topic for now. I should focus on the gameplay at first.