Juste curieux. Imaginons que les deux équipes jouent un combat d'équipe en 4 contre 4, pendant que chacune d'elles backdoor le nexus.
Que se passerait-il si les deux équipes faisaient en même temps le "coup fatal" sur le nexus ?
Juste curieux. Imaginons que les deux équipes jouent un combat d'équipe en 4 contre 4, pendant que chacune d'elles backdoor le nexus.
Que se passerait-il si les deux équipes faisaient en même temps le "coup fatal" sur le nexus ?
Alors, la chose évidente à dire est la suivante :
Cela est dû au fonctionnement du "temps" dans les jeux informatiques : des intervalles discrets qui ne sont en aucun cas les "plus petites quantités d'une seconde".
C'est ainsi que la plupart des serveurs de jeux sont écrits, en raison de la nature des réseaux informatiques modernes basés sur des paquets (c'est-à-dire, en rafales de bits plutôt qu'en un flux continu de données) :
pendant que le jeu se déroule :
collectez les entrées des joueurs
mettez à jour l'état du jeu en conséquence
si quelqu'un remplit les conditions de victoire :
declarez-le vainqueur
arrêtez le jeu
envoyez aux joueurs le nouvel état du jeu
Cette boucle peut être implémentée de nombreuses manières — en particulier la partie "mettre à jour le monde en conséquence" — mais le fait demeure que c'est une boucle, et elle n'effectue qu'un certain nombre d'itérations chaque seconde.
Un objectif de performance typique est ici de 30 ou 60 mises à jour (ou ticks) par seconde, ou une mise à jour toutes les 33 ou 16 millisecondes (c'est court, mais certainement pas court en microsecondes !). Tant que les Nexus... Nexi... les bases finales tombent dans le même tick, alors elles sont tombées en même "temps". Exemple avec des chiffres inventés :
Numéro de tick 96987 96988 96989 96990 96991 96992
Nexus de l'équipe bleue 69 60 55 30 15 0
Nexus de l'équipe violette 45 45 30 25 10 0
Quel Nexus est mort en premier ici ? Vous ne pouvez pas le dire.
Compliquant davantage les choses est le décalage du réseau et sa compensation. De la Communauté de Développeurs Valve vient ce graphique pratique pour le moteur Source :
Comme les paquets prennent du temps pour atteindre les clients, cela signifie que les clients jouent dans le passé (et le temps qu'ils prennent dans le passé dépend de leur ping), et leurs entrées utilisateur viennent de plus loin encore. En conséquence, le serveur doit essentiellement "réécrire l'histoire" autour d'eux.
Dans le paquet "entrée utilisateur tick 105" d'un joueur, vous pouvez prétendre tirer une balle directement à travers le crâne d'un autre joueur. Le paquet "entrée utilisateur tick 105" de cet autre joueur arrive quelques instants plus tard, disant qu'il a fait un pas sur la droite. Oups !
Évidemment, le serveur ne peut pas maintenir les choses en suspens indéfiniment ; il y a un temps de grâce après lequel le serveur doit enfin mettre à jour l'état du monde une fois pour toutes, et si le paquet du deuxième joueur arrive trop tard, alors le tir comptera tout de même comme un tir à la tête.
Coin des tatillons. En réalité, dans ce cas, le moteur Source accordera toujours le tir à la tête ; c'est pourquoi, par exemple, les heavy peuvent vous tuer "à travers" les murs.
Donc, en fin de compte, il est toujours possible que les deux nexuses tombent en même temps.
Maintenant, comme le Nexus ne peut pas se déplacer, il y a une foule d'optimisations qui peuvent être faites ou non qui compliquent significativement les choses. Malheureusement, cette logique se trouve entièrement du côté serveur de Riot ; à moins qu'un groupe de 10 joueurs suffisamment proches de leurs centres de données puisse consacrer une quantité significative de temps à la SCIENCE, il y a peu d'espoir que nous puissions comprendre comment League of Legends résout effectivement les égalités, car il est assez évident que le jeu n'autorise pas les égalités.
Riot s'est vanté qu'en janvier 2014, 27 millions de joueurs jouaient à League of Legends quotidiennement. Ainsi, le nombre minimal de parties jouées sur le service chaque jour est de 2,7 millions.
Coin des tatillons. Selon la manière dont vous définissez "joueur", il est peut-être possible que certains des 27 millions de joueurs ne jouent en réalité pas du tout et se connectent simplement pour vérifier leur page de profil ou le tribunal ou quoi que ce soit d'autre que les joueurs de LoL font. D'autre part, beaucoup joueront plus d'une partie. De toute façon, je n'ai pas de meilleur chiffre sur lequel travailler.
Maintenant, il est vrai que je ne peux trouver aucun rapport sur la possibilité de faire match nul dans les parties de League of Legends sur internet. Cette discussion a déjà eu lieu plusieurs fois sur les forums de League of Legends (forums EU NE, forums EU W, forums NA, ...); si un joueur avait vécu un match nul, nous le saurions.
Essayons d'estimer les probabilités :
Cela signifie que le nombre de matchs nuls qui se produiraient chaque jour est de 2,7 millions × 0,01 × 0,00001 ~= 3. Il y aurait 3 matchs nuls par jour. Le jeu a gagné en popularité au fil du temps depuis 2009, donc disons que cela équivaut en moyenne à seulement 2 partie nulle par jour. Le jeu est sorti il y a 1 768 jours aujourd'hui, donc cela fait 3 536 matchs nuls depuis toujours.
Pourquoi ne connaissons-nous alors aucun match nul ?
Si les matchs nuls sont si rares, ils constitueraient au moins une excellente vidéo YouTube, ou des captures d'écran intéressantes. "Vous ne croirez pas comment cette partie de League of Legends s'est terminée !" Donc, vous pouvez parier que les gens en parleraient, écriraient à ce sujet, téléchargeraient des vidéos à ce sujet. À défaut, les gens en parleraient dans les fils de discussion qui ont déjà été ouverts. De plus, des vidéos comme celle-ci incluraient des phrases sur la fin de la partie en match nul, avec toutes les lignes inutilisées, mais elles ne le font pas.
Le silence est assourdissant.
La seule explication rationnelle est qu'il ne peut y avoir de matchs nuls dans League of Legends et que le serveur de jeu, d'une manière ou d'une autre, résout les égalités et attribue la victoire à une seule équipe.
Il existe plusieurs façons dont cela pourrait se produire, et nous sommes peu susceptibles de savoir laquelle est utilisée, toutes choses étant égales par ailleurs :
Si je devais deviner, je tendrais vers une variation sur l'idée de "favoriser l'équipe X plutôt que l'équipe Y à chaque fois", car c'est la solution la plus simple pour gérer une situation que vous ne voulez clairement pas ou ne pouvez pas gérer.
Étant donné comment les choses se sont passées sur d'autres réponses, je ne vais pas répondre aux commentaires; désolé. Si je pense que vous avez raison, je vais simplement modifier la réponse en conséquence.
Donc, même conclusion/réponse que toutes les autres réponses et massivement approuvées, et toutes les autres massivement désapprouvées. Bien sûr, il y a plus de détails, mais quand même...
Je pense que cette réponse entre dans beaucoup plus de détails que nécessaire... cela dit, en tant que développeur, je suis d'accord avec tout ce qui est écrit ici (y compris la façon dont les liens sont probablement résolus)
L'événement que vous décrivez, en raison des raisons exposées par badp, ne peut pas se produire.
Cependant, si vous détruisez le nexus ennemi et que votre équipe se rend immédiatement après, leur nexus explose, mais l'écran de jeu se déplace vers votre nexus, qui explose aussi et VOUS finissez par perdre la partie.
Personnellement, j'ai vu cela se produire plusieurs fois.
Ça ne peut pas arriver. Dans un système informatique, tout tourne essentiellement avec une seule chose se produisant à la fois. Cela se produit tellement rapidement que vous ne remarquez pas qu'une seule chose se produit à la fois.
Quelqu'un pourrait dire que ce n'est peut-être pas le cas avec un serveur, mais le serveur traitera toujours 1 nexus avant l'autre.
Maintenant, disons théoriquement qu'ils soient effectivement attaqués en même temps. Le serveur traitera toujours l'un avant l'autre et vous pourriez même argumenter que celui qui explose en premier sera déterminé de manière aléatoire puisque vous ne savez pas où dans l'état des choses quel objet est prêt à être affecté ensuite.
EDIT: Bien pour ceux qui veulent vraiment souligner la seule situation où cela pourrait se produire SI les développeurs décidaient imprudemment de coder de cette façon.
1) Nous supposons qu'il y a une boucle de changement d'état.
2) Après la boucle de changement d'état, nous supposerons qu'il y a une boucle de processus de jeu.
3) Ils devraient coder spécifiquement quelque chose comme if (nexus1.isDead() && nexus2.isDead())
.
Même avec ces informations, je maintiendrai ma réponse en raison du caractère irréaliste que cela représenterait de coder pour cela puisque le jeu n'autorise pas les égalités en ce moment.
@Vality Je pense que vous pourriez être confus au sujet de ce qu'est le threading sans verrouillage. Cela n'a rien à voir avec le verrouillage. C'est simplement quand 1 condition est atteinte en premier. Que quelque chose soit verrouillé ou non, 1 condition sera toujours atteinte en premier.
@dphil Je pense qu'il dit qu'il est possible que plusieurs variables soient mises à jour par différents threads avant que la boucle de jeu ne soit relancée ou peut-être pas
AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Bien que je suppose que c'est possible, les chances que cela se produise sont extrêmement improbables, car la première personne touchée (même à quelques millisecondes d'intervalle) meurt et tout devient immunisé. Réussir cela prendrait de nombreuses nombreuses tentatives. Sans parler du fait que ce que le réseau voit peut être différent de ce que vous voyez, donc synchroniser les attaques avec un ami ne fonctionnera pas.
1 votes
Tout est possible, il suffit de croire ! C'est extrêmement, extrêmement, extrêmement improbable, au niveau de la probabilité d'être mordu par un requin. Ils utilisent des millisecondes pour les chronomètres, donc vous devriez aligner les attaques automatiques sur des chronomètres séparés, à la même milliseconde, et infliger suffisamment de dégâts pour détruire le nexus.
0 votes
Comme beaucoup l'ont dit, cela dépend entièrement de la façon dont le jeu a été codé. S'ils devaient vérifier les deux Nexus pour la mort avant de déclencher GameOver (), alors une égalité est possible. Mais je pense que si c'était possible, nous aurions déjà entendu parler d'une égalité.
3 votes
En tant que preuve que c'est au moins possible dans certains jeux PvP en ligne, il y a une partie de Starcraft 1 (youtube.com/watch?v=00l7BvBApQE#t=167) où les deux joueurs ont détruit le dernier bâtiment de l'autre en même temps, entraînant une défaite pour les deux joueurs.
0 votes
@xnor c'est exactement là où vont mes pensées. Puisque Starcraft l'a, je pensais que LoL aurait également ce potentiel, mais maintenant que je vois la réponse...
2 votes
J'ai été témoin de cela une fois dans Dota et le résultat a été "Les Radiants ont gagné" mais le résultat réel du jeu (comptant pour le ratio victoire/défaite) était une victoire des Dire.
3 votes
Et voici un premier sang simultané dans LoL, où un joueur est affiché comme obtenant le premier sang mais l'autre reçoit l'or du premier sang : youtube.com/watch?v=ey4kGO90Vtg#t=15
8 votes
Je ne suis pas sûr pourquoi personne n'a posté la méta-question ici : meta.gaming.stackexchange.com/questions/9901 tl;dr ce n'est pas hors-sujet.