Nous avons eu ce problème avec certaines GCC en ligne sur lesquelles j'ai travaillé. Meilleure solution que j'ai vue:
1) Les joueurs DOIVENT se connecter au serveur, pas directement les uns aux autres, et vous ne devez JAMAIS transmettre les adresses IP des adversaires dans les données que vous diffusez aux joueurs. Cela empêche les attaques par déni de service où un joueur force son adversaire hors ligne pour la victoire.
2) Connexion abandonnée = vous perdez, l'adversaire gagne. Nous devons supposer que si vous tombiez, c'était une goutte pour éviter certaines pertes.
3) Les déconnexions tentent de se reconnecter pendant un certain temps, de sorte qu'un léger hoquet net ne vous oblige pas à perdre sans faute de votre part. Idéalement, le temps est suffisamment long pour permettre à quelqu'un de se reconnecter s'il a accidentellement lancé le câble, mais suffisamment court pour que l'adversaire ne soit pas frustré et ne s'endorme pas en attendant. Je pense que nous avons trouvé qu'environ 45 à 60 secondes se sentaient bien.
4) Autoriser les joueurs à signaler leurs adversaires. Il s'agit d'un fourre-tout nécessaire pour empêcher quiconque de trouver un moyen ennuyeux de contourner votre politique. Par exemple, être peut-être tellement violent verbalement que l'adversaire tombe juste pour sortir de là, ou se déconnecter et se reconnecter continuellement pour allonger la durée du jeu, ou obstruction pour éviter une perte, ou autre chose. Vous ne pouvez pas arrêter TOUS les mauvais comportements, mais vous pouvez inclure un mécanisme en jeu pour le signaler, puis laisser votre service d'assistance à la clientèle gérer le reste.
J'ai dû résoudre ce problème une fois dans un jeu de course en ligne où les joueurs qui perdaient éteignaient souvent leurs consoles pour éviter que la perte n'apparaisse dans leurs records. Cependant, cela s'applique très bien à toute situation PvP.
Ma solution est allée comme ceci:
Au début du match, une fois que tous les joueurs se sont joints et que le jeu est sur le point de commencer, calculez le résultat si notre joueur perd le match. Dans notre jeu de course, «perdu» signifie «arrivé en dernière position» et le résultat habituel serait «moins N points du classement des joueurs».
Enregistrez le résultat dans un emplacement sécurisé (Savegame, leaderboard, zone de données en ligne, etc.).
Parallèlement au résultat, stockez un indicateur «GameStarted». Cela signifie simplement que le jeu a commencé. Nous en aurons besoin plus tard.
Une fois le jeu terminé, calculez le résultat réel et appliquez-le au score / aux statistiques des joueurs. Désactivez le drapeau "GameStarted". Il s'agit du processus normal d'achèvement du jeu.
Cependant, si le joueur se déconnecte, débranche son câble ou s'éteint, il finira par revenir au menu des jeux. Dans le code du menu, nous vérifions le drapeau 'GameStarted'. S'il est défini, nous sommes sûrs que nous avons détecté une déconnexion en jeu plus tôt. Nous pouvons ensuite appliquer le résultat enregistré au score / aux statistiques des joueurs. Ce sera la même chose que si le joueur perd la partie. C'est aussi une bonne idée de lancer une alerte informant le joueur de ce qui se passe. Ensuite, une fois qu'il verra qu'il y a des conséquences à se déconnecter en cours de partie, vous verrez que le comportement commence à changer.
la source
Je pense que la seule façon d'y parvenir serait une question de structure de votre jeu. Il y a deux façons de rendre la tricherie moins souhaitable: la punition ou la récompense. Donc, si vous ne voulez pas de punition défavorable, pensez à des moyens de récompenser le joueur qui n'a pas abandonné.
Au lieu que la récompense du PvP soit le butin du corps conquis (ce qui rend la chute une très mauvaise chose), gagner confère une récompense comme l'exp., L'or ou autre chose (Points? Classement?). Si l'un des joueurs est expulsé, le joueur restant reçoit la récompense et le joueur qui a été expulsé ne gagne rien mais ne perd rien. À moins qu'il ne s'agisse d'un système de classement, auquel cas le joueur partant pourrait perdre des points de classement.
la source
Lineage II le fait comme ceci:
Personnellement, je le ferais de la même manière, autoriser uniquement les joueurs à prédéfinir les actions que leur personnage entreprend lors de la déconnexion (rester et se battre, courir vers la zone de sécurité la plus proche en évitant l'aggro, utiliser un parchemin régulier d'évasion, utiliser un parchemin béni de échapper, ...) et faire persister les personnages dans le monde du jeu même si le joueur n'est pas connecté.
la source
Celui qui s'est déconnecté mourra une fois qu'il aura été suffisamment poignardé, et l'autre sera crédité du meurtre. Tout ce qui est plus indulgent sera exploité.
Généralement, il y a une minuterie de 1 à 5 minutes avant que votre corps ne quitte le monde.
la source
Il n'y a aucun moyen de déterminer la cause de la déconnexion (le courant a-t-il été coupé? Ai-je mis ma machine en colère contre un mur?), Vous ne pouvez donc que supposer que l'utilisateur essaie (ou essaierait) de tricher et de le rendre vulnérable pendant X minutes.
la source
La façon dont cela est géré par EVE Online est la suivante:
Le vaisseau commence à engager la déformation 15 secondes après la déconnexion. S'il est déformé, le vaisseau ne se déformera pas. (Le vaisseau de votre personnage commencera à "s'enfuir" après 15 secondes, à moins qu'il ne soit "piégé" par un autre joueur)
Le chronomètre PVP (temps jusqu'à ce que le joueur "s'enfuit" lorsqu'il est engagé dans un combat PvP) est réglé sur 3 minutes. (C'est pour contrer un certain nombre d'autres minuteries).
Le minuteur NPC reste à 1 minute, mais le vaisseau se déforme après 15 secondes à moins que la chaîne ne soit brouillée par le NPC.
Lorsqu'un navire est une cible verrouillée par le joueur, il doit passer au minuteur pvp (pour le contrer en utilisant le minuteur 1 min s'il se déconnecte dans des circonstances où il ne peut pas être ciblé jusqu'à ce que le minuteur soit réglé).
la source
Si vous avez un moyen de modéliser les schémas habituels des joueurs au combat, vous pouvez les envoyer en mode AI jusqu'à ce qu'ils se reconnectent ou que la bataille se termine selon la première éventualité. Mais ne leur donnez aucune récompense (exp, objets, etc.) pour la bataille à moins qu'ils ne reviennent dans X temps.
la source
J'implémenterais une sorte d'hystérésis. Vous pouvez utiliser la carotte et le bâton. Mais choisir lequel utiliser peut être basé sur les antécédents (vous pouvez également faire une analyse de leur connexion et de leur "capacité de gain" actuelle et l'utiliser). C'est comme ça que vous le feriez en personne, espérons-le. Modèle simple:
Vous pouvez en abuser oui. Mais cela pourrait prendre plus d'efforts que de simplement mordre la balle. (S'il a fallu 2 DD pour être mauvais par exemple, vous pourriez techniquement vous débarrasser de la moitié de vos pertes. Mais cela atténue certains abus et dans le cas de joueurs moins qu'intelligents tous abusent).
Accordé en utilisant cela signifie que les tableaux de bord ne totaliseront pas 100%. Puisque vous pouvez DC tout en étant bon et ne pas enregistrer de perte. Mais l'autre bon joueur peut enregistrer une victoire. Le fait de ne pas additionner à 100% signifie que 2 joueurs peuvent coopérer en éteignant le joueur DC pour empiler les gains.
Donc, pas infaillible, mais une analyse bayésienne supplémentaire de la connexion gamestate + pourrait probablement détecter le funkiness et rendre ce schéma à l'épreuve des balles. (Vous pouvez vaincre l'analyse bayésienne, mais les humains ne sont pas bons pour le faire et les calculs sont hors de portée pour la plupart des gens, sans parler de l'investissement en temps pour "amorcer" un combat pour passer à travers DC étant d'accord).
la source