AccueilMembresFAQRechercherGroupesS'enregistrerConnexion

Partagez | 
 

 Le Net Code

Aller en bas 
AuteurMessage
LordMacrage
Admin
avatar

Nombre de messages : 242
Age : 37
Date d'inscription : 02/11/2005

MessageSujet: Le Net Code   Mar 22 Aoû - 3:12

=== VOCABULAIRE ===
Diverses commandes entrent en jeu, et nous allons les énumérer et les décrire.
(CLIENT) signifie que ces commandes peuvent être configurées sur vos postes.
(SERVER) signifie que ces commandes sont configurées uniquement côtés serveur.

a) rate (CLIENT): Le débit maximal en octets par seconde que le client peut demander au server. Par défaut, le rate est à 2 500, ce qui veut donc dire 2 500 octets par secondes.
2500/1024 = 2.44kb/sec. La valeur maximum autorisée est de 25 000. Si vous avez une bonne connexion Internet (de type ADSL), je vous conseille de mettre la valeur au maximum, c'est à dire 25 000. Si vous parcourez votre config.cfg, vous allez trouver une commande similaire (cl_rate) mais cette dernière est dépréciée.

b) sv_minrate et sv_maxrate (SERVER): Ces 2 commandes spécifient le débit minimal en octets par seconde et le débit maximal en octets par seconde que le serveur peut envoyer à un client.
Ces valeurs sont prioritaires à la votre. Par exemple, si le sv_minrate est à 5 000 et que vous avez un rate de 2 500, vous serez réellement en rate 5 000. A contrario, si le sv_maxrate est à 20 000 et que vous avez un rate de 25 000, vous serez réellement en rate 20 000.
Pour la configuration serveur, un sv_minrate de 2 500 et un sv_maxrate de 25 000 sont à proscrire.

c) cl_cmdrate (CLIENT): Le nombre de fois par seconde que le client émet des paquets vers le serveur. Si vous avez une connexion de type ADSL, je vous conseille un cl_cmdrate de 100.

d) cl_updaterate (CLIENT): Le nombre de fois par seconde que le client demande des paquets du serveur. Si vous avez une connexion de type ADSL, je vous conseille un cl_updaterate de 100.

e) sv_minupdaterate et sv_maxupdaterate (SERVER). Ces 2 commandes spécifient le nombre de fois par seconde (minimal et maximal) de transfert du serveur vers le client. Ces valeurs sont prioritaires à la votre. Par exemple, si le sv_minupdaterate est à 66 et que vous avez un cl_updaterate à 20, vous serez réellement en cl_updaterate 66. A contrario, si le sv_maxupdaterate est à 80 et que vous avez un cl_updaterate à 100, vous serez réellement en cl_updaterate 80. Pour la configuration serveur, un sv_minupdaterate de 20 et un sv_maxupdaterate de 100 sont à proscrire.

f) tickrate (SERVER): Le nombre de fois que le serveur rafraîchit le monde. Le serveur récupère toutes les données émises par les clients, recalcule de nouveau monde au moment T à partir de l'ancien monde du moment T-(1000/tickrate) en prenant en considération les règles physiques, des dégâts, etc... puis décide ou non d'envoyer une copie de ce monde à un client. Cette commande ne peut pas être changé si le serveur est allumé. Elle s'ajoute dans les commandes de démarrage en ajoutant un "-tickrate X". Un tickrate de 100 est conseillé sur une bonne machine.
PS: Je ne sais pas depuis quand mais la variable du tickrate est sys_ticrate maintenant.
Un 'tickrate 66' est à peu près égal à un 'sys_ticrate 300', et un 'tickrate 100' à un 'sys_ticrate 1000' (illimité).
Vous devez donc mettre un sys_ticrate de 1000.

g) fps_max (CLIENT - SERVER): Côté client, le fps_max détermine le nombre d'image par secondes. La valeur a mettre est de 100. Quand vous créez un serveur et que vous jouez dessus, les tickrate sont encapsulés dans vos fps_max.
Il se passe la même chose sur un serveur dédié. Comme pour le tickrate, la commande ne peut pas être changée si le serveur est allumé. Elle s'ajoute dans les commandes de démarrage en ajoutant un "-fps_max X". Un fps_max de 100 est conseillé sur une bonne machine.

=== COMMENT CA MARCHE ===
Le client et le serveur sont configurés comme je l'ai expliqué plus haut.
Vous avez un cl_cmdrate de "100" => vous envoyez les données toutes les 10ms (1000/100).
Vous avez un cl_updaterate de "100" => vous recevez les informations du serveur toutes les 10ms (1000/100).

Prenons un cas (extrème au niveau des délais) où vous tirez une balle dans un mur.
A l'instant T, vous cliquez sur la souris
A T+10ms, les données sont envoyées au serveur.
A T+XX+10ms, les données sont reçues par le serveur
A T+XX+20ms, le serveur calcul le nouveau monde et décide de vous envoyer les données.
A T+XX+30ms, vous recevez les données du serveur et vous voyez la balle dans le mur.
Si vous pinger le serveur à 20ms, il s'est passé 50ms entre le moment où vous avez tirés et le moment où vous voyez la balle dans le mur.

Heureusement, Valve a introduit le Lag Compensation.
Quand vous visez une personne à une coordonnée X,Y,Z à un moment T, cette personne au même moment, du point de vue du serveur, a certainement déjà bouger. Le serveur est capable alors de remonter le temps pour savoir si vous l'avez bel et bien touché.

Parlons de l'ex_interp maintenant.
ex_interp pour interpolation.
Prenons le cas où vous avez 100fps et que vous envoyez et recevez des informations toutes les 10ms et que le serveur a un sys_ticrate de 1000 (calcule le monde toutes les10ms). Vous jouez avec une personne qui elle envoie et reçoit des informations toutes les 50ms (cl_cmdrate de "20" et cl_updaterate de "20"). Lorsque le serveur vous envoie des informations, vous ne recevez la position du joueur adverse qu'1 fois sur 5. L'interpolation permet à votre ordinateur d'inventer" les positions manquantes du joueur adverse. En gros, dans vos 100fps par secondes, il y a 80fps dans lesquels le joueur adverse n'a pas une vraie position mais une position interpolée. Le problème c'est que par défaut (ex_interp à 0.1 pour 100ms), votre CS prend 100ms de temps pour calculer toutes les interpolations. Par conséquent, au moment où vous voyez un adversaire qui court de gauche à droite, il faut tirer légèrement devant lui car sa position réelle (notament les HITBOXS) à 100ms d’avance sur la position (MODEL GRAPHIQUE) que vous voyez réellement à l'écran. Si vous régler l'ex_interp à 0.05, les HITBOXS n'auront que 50ms d'avance sur le personnage. Si le serveur pouvait prendre en compte la valeur ex_interp des clients, il serait à même capable de compenser le temps de l'interpolation mais ce n'est pas le cas dans HL. Par conséquent, si vous interpolez par défaut et qu'un ennemi va de gauche à droite, et que vous tirez sur la partie la plus à gauche du model, vous verrez que çà touche pas. A 0.05, votre moteur de jeu interpole un peu moins par conséquent au lieu d'avoir 80fps inventé, vous en aurez plus que 40fps interpolée, les 40 autres étant la copie des interpolée. Vous verrez donc la personne avancée en saccadant mais les HITBOXS colleront mieux au personnage.
Vous pouvez alors feinter le système. En jouant avec un cl_cmdrate de 10 et un cl_upderate de 100 vous n'envoyez vos positions que toutes les 100ms mais vous recevez les données toutes les 10ms.
Les joueurs qui jouent à 100fps avec une valeur d'ex_interp à défaut doivent interpoler vos positions 90fps sur 100. Et donc par conséquent, 9fois sur 10, vos HITBOXS sont en avance sur votre corps.
En contre partie, vous ne toucherez pas non plus en envoyant très peu de données :p
En mettant ex_interp encore plus bas (ex_interp 0.01), le moteur du jeu n'a plus assez de temps pour calculer l'interpolation correctement et il place le model légèrement devant les HITBOXS cette fois ci.
Donc si vous jouez contre un adversaire qui a ex_interp à 0.1 et qui a un cl_updaterate et cl_cmdrate plus bas que le sys_tickrate du server, il devra inventer des points (car il a moins d’information que le serveur sur votre position) et, vous allez le voir avant que lui ne vous voit (vous interpolez car son cl_cmdrate est trop bas). Mais pour le toucher, cette fois ci il faudra toucher légèrement derrière lui.
La bonne valeur sur Internet est de jouer avec une ex_interp de 0.05.

Pour tester le tout, allez sur votre server, demandez à un coéquipier de se mettre en
cl_cmdrate "20", cl_updaterate "20" et mettez la pause, et changez les valeurs de ex_interp.
Vous verrez le model bougé. Répéter les mêmes opérations avec le même joueur mais qui cette fois ci joue en cl_updaterate "100" et cl_cmdrate "100".
Voila pourquoi sur le net, on attend souvent: "ça touche pas!". C'est à la fois du à la configuration du serveur (les commandes vus plus hautes) mais aussi les commandes de tous les joueurs présents sur le serveur.
En LAN, vu que tout le monde joue en 25000/100/100, il n'y a pas besoin d'interpolation. En LAN entre ex_interp 0.1 et 0.05, il n'y a aucune différence puisque l'interpolation n'est pas sollicitée.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.team-fobs.com
 
Le Net Code
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [achat] carapaces de tortues + code bonus à gagner
» Promotional code and 3 month trial of Full-Friends?
» Livre III : Du Code Pénal
» code de securité pour ht pola!!
» [Hors-Sujet] Code lyoko

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
 :: Strats :: Divers-
Sauter vers: