[RESOLU] [DB-RS] Je ne comprend rien à la fonction clientMoveCallback3D

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Autodidactelife
Messages : 47
Inscription : 21 Fév 2018 23:04
Localisation : France

[RESOLU] [DB-RS] Je ne comprend rien à la fonction clientMoveCallback3D

Message par Autodidactelife » 28 Mai 2018 18:07

Bonjour à tous !

J'étais venu pour un soucis en février (sur un sujet de téléportation d'un joueur) et on avait parlait rapidement de l'anti triche de déplacement et depuis je n'ai toujours pas la réponse. Je pensais en cherchant seul pouvoir trouver avec du temps mais malheureusement je n'y arrive toujours pas et à vrais dire sur la docs unity il y à même un script dont je n'arrive pas du tout à saisir ... La fonction clientMoveCallback3D (qui ce trouve ici)

Déjà la class est un NetworkManager, pas de soucis, je l'utilisais déjà directement en tant que script pour plusieurs avantages.

Mais le moment où vraiment mon serveur fait un crash et reboot a l'infini c'est la partie "OnStartServer", je ne comprend pas ce que fait un NetworkTransform dans un NetworkManager.

Le résultat qui ce produit c'est l'obligation d'ajouter un NetworkIdentity et ... Bah si on est ni serveur, ni client l'objet contenant le NetworkIdentity n'existe simplement pas.

J'aimerais donc comprendre ce que je n'ai pas du tout compris au niveau des serveurs car malheureusement j'ai trouver beaucoup de choses similaire mais je n'ai jamais réussis à comprendre le script.

Donc il y à un soucis qui doit être tout bête dont je dois forcément savoir (ou du moins déduire ce qu'il faut faire) mais vraiment rien me viens :/ Peut être ma façon de lancer le serveur qui est pas bonne? Je n'ai trouver aucun script d'exemple, que du c/c ou des exemples pratiquement identique à l'exemple de la doc.

Je vous remercie pour votre lecture !

Cordialement

Edit:

Bon ... Je viens de remarquer que ceci marche complètement mais pas le script de la doc dont je n'ai toujours pas compris:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class Move : NetworkTransform {

    public int cheatCount = 0;

    public void Start() {
        GetComponent<NetworkTransform>().clientMoveCallback3D = ValidateMove;
    }

    public bool ValidateMove(ref Vector3 position, ref Vector3 velocity, ref Quaternion rotation) {
        Debug.Log("pos:" + position);
        if (position.y > 9) {
            position.y = 9;
            cheatCount += 1;
            if (cheatCount == 10) {
                Invoke("DisconnectCheater", 0.1f);
            }
        }

        return true;
    }

    void DisconnectCheater() {
        GetComponent<NetworkIdentity>().connectionToClient.Disconnect();
    }
}
Ceci est sur le joueur, le ValidateMove s'execute bien côté serveur, cela ne marche pas si le client et le serveur sont sur la même instance de jeu. Il faut ouvrir le client à part du serveur. :gene2:

Edit N°2:
Je viens de faire des tests, en faite le ValidateMove ne FONCTIONNE PAS en localhost !

J'ai mis mon IP et mon port et ça marche ! Et garder l'update de base sinon ça désactive tout :/

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: [RESOLU] [DB-RS] Je ne comprend rien à la fonction clientMoveCallback3D

Message par Farstone » 04 Juin 2018 14:05

Le sujet est résolu mais ça peux toujours t'être utile, un serveur authoritative n'est pas simple à faire, heureusement pour toi il existe une vidéo qui en parle et qui utilise UNET :frime: de quoi te mettre sur la bonne voie.
https://www.youtube.com/watch?v=Glm0nJ4sO5E

Autodidactelife
Messages : 47
Inscription : 21 Fév 2018 23:04
Localisation : France

Re: [RESOLU] [DB-RS] Je ne comprend rien à la fonction clientMoveCallback3D

Message par Autodidactelife » 05 Juin 2018 18:58

Twiixy a écrit :
04 Juin 2018 14:05
Le sujet est résolu mais ça peux toujours t'être utile, un serveur authoritative n'est pas simple à faire, heureusement pour toi il existe une vidéo qui en parle et qui utilise UNET :frime: de quoi te mettre sur la bonne voie.
https://www.youtube.com/watch?v=Glm0nJ4sO5E
Je met de côté mais j'ai bien l'impression que mon système fonctionne parfaitement, j'ai essayer de généré des clients modifier (simulation de triches) et je n'ai ni réussis à me téléporter, ni réussis à passer à travers les murs ni réussis à speed hack et tout ça sans problème de ralentissement, normalement même les mauvaises connections ne seront impactés.

Je comptes pas faire un truc complexe sur l'anti triche, uniquement le déplacement m'importe tout le reste sera géré par le serveur donc je n'ai pas vraiment peur ^^

Mais je gardes quand même, je jetterais un coup d’œil merci ! :)
Ça ne peut que m'apprendre des choses étant assez nul dans ce domaine :X

Et au final ce que moi je comprends (peut être c'est totalement une connerie) avec le moveCallBack j'ai l'impression que c'est en temps réel et que si le client essaye un truc pas bien le joueur le voit et il ce fait téléporter. Contrairement à l'autre façon où les autres joueurs ne le voient pas faire vu que le serveur empêche dès le début.

Quelques essaies suffit pour être kick (pour le moment je met pas le ban, tant que c'est pas nécessaire).
Et avec ça je n'ai aucun soucis de latence avec une actualisation à 0.01 pour 29/s je n'ai pas besoin de prédiction client, je me fiche que les joueurs voient la personne essayer de tricher ^^

Je vais peut être découvrir une autre réalité plus tard, qui sait :D

Répondre

Revenir vers « (C#) CSharp »