Encore un tutorial sur le multijoueur!
ou
Comment faire un jeu de Plateforme Multi joueurs
Buhl Damien
alias daminetreg
http://lecbna.org/
GameMaker 6, 7 et +
Enregistr�


Bonjour !

Cela fait pas mal de temps que je n�ai plus publi� de tutoriaux, eh oui� Je les garde pour moi en g�n�ral, mais cette fois j�ai d�cid� d�en publier un. En effet � la suite d�un cours que j�ai donn� � un haut dignitaire de la communaut� (c�est bon j�arr�te J), j�ai d�cid� de reprendre le produit de ce cours et d�en faire un cours sur papier, ou sur pixel�

En fait j�ai �t� appel� � expliquer le multi et j�ai donc en m�me temps que j�expliquai �crit un petit jeu de plateforme multi joueurs, que j�ai ensuite corrig� avec mon � �l�ve � (Outch ! �a fait vieux dit ainsi.). Je vous propose de vous donner le m�me cours dans la m�me suite d��v�nement et en expliquant chaque script. J�ajouterai �galement une partie sur les routeurs de type NAT, car nous avons �t� contraints de configurer le sien pour qu�il puisse jouer en tant que client, car avec un routeur c�est trop lent pour faire serveur. A bas les routeurs !


Sommaire :

I) Cr�ons et Expliquons un Jeu de Plateforme Multijoueur.

            1) Script de Connexion

            2) Script de Cr�ation des Joueurs

            3) Script de Maintenance, le c�ur du Multijoueur

II) Les routeurs de type NAT et comment leur permettre de jouer avec des jeux Game Maker.


Source du Tutorial: Cliquez Ici


I) Cr�ons et Expliquons un Jeu de Plateforme Multijoueur.

 

L�gende:
Sprites
Sounds
Background
Paths
Scripts
Fonts
Timelines
Objects
Rooms

Groupe

Event
Action
!Information importante


Le but de ce tutorial est avant tout d�expliquer comment faire un jeu multijoueur, la programmation est une science appliqu�e nous passerons donc par-dessus la th�orie. Ce tutorial s�adresse donc aux philistins cart�siens et pragmatistes (un triple pl�onasme ma parole !).

Bon avant toute chose veuillez d�marrer Game Maker, mais aussi une musique qui soit motivante, une musique qui fait vibrer vos tripes et let go !

            1) Script de Connexion

Dans un jeu multijoueur la premi�re chose qu�on fait c�est se connecter, nous allons donc tout d�abord r�aliser le script de connexion, il faut dans ce script d�finir un serveur et un client, chez nous le serveur sera la personne qui cr�era la partie, le client celui qui s�y connectera.

Dans ce script il sera n�cessaire de d�abord demander l�ip que l�on voudra utiliser, celui qui cr�era la partie entrera sa propre ip, celui qui la joindra entrera l�ip de celui qui l�a cr��e. On peut conna�tre son ip en ex�cutant : cmd dans Windows puis en entrant : ipconfig /all, cependant il n�cessaire de faire attention si vous avez un routeur, l�ip qui va s�afficher sera celle que le routeur aura attribu� � votre ordinateur dans le r�seau local, nous verrons dans la section II comment r�gler ces probl�mes de routeur. Si vous essayez le jeu en local, c'est-�-dire si vous comptez d�marrer le client et le serveur sur votre propre PC afin de faire des tests il vous suffit de n�entrer aucune ip, ou alors pour �tre s�r : 127.0.0.1 . Qui est l�ip que l�on peut �galement nommer : localhost.

Apr�s quoi ce script de connexion fera appel � la fonction : mplay_init_tcpip(ip), fonction qui initialise une connexion tcp/ip, et qui retourne si cela r�ussit ou non. Si cette fonction ne retourne pas 1, c'est-�-dire en bool�en : true (vrai), il faudra afficher un message signifiant : connexion impossible, puis casser l�ex�cution du script avec : break. Autrement si cette fonction renvoie true, il faudra demander le nom du joueur, que nous stockerons dans : global.name pour ce tutorial ce ne sera pas n�cessaire de le demander, c�est pourquoi nous lui donnerons la cha�ne : "onsenfout" comme valeur.

!Note : Un bug r�current de Game Maker fait que si une connexion est rat�e, ensuite pendant tout le temps que l�ex�cution du programme se fera plus aucune connexion ne r�ussira, il faut donc red�marrer le jeu dans le cas o� la connexion ne fonctionne pas du premier coup.

Ensuite nous ferons appel � la fonction : mplay_session_find(), cette fonction retourne le nombre de session sur cette adresse ip qui accepte encore des joueurs, si le r�sultat de l�appel de cette fonction est �gal � 0, c'est-�-dire qu�il n�existe pas une session, ou du moins pas une session de libre sur cette ip. Nous ex�cuterons alors la fonction : mplay_session_create(sesname,playnumb,playername), cette fonction cr�era donc une session du nom de sesname, avec un maximum de playnumb joueurs et qui assignera le nom : playername au joueur qui cr�era cette session. Playername sera en fait chez nous : global.name.

Toujours dans la m�me structure nous regarderons combien de joueurs sont en ligne, en toute logique c�est 1, pour ce faire nous utiliserons la fonction : mplay_player_find(), qui retourne le nombre de joueur connect�s � la session en cours. Nous stockerons le r�sultat dans : global.number. Cela permet ainsi de d�finir qui est le joueur 1, puis nous verrons ensuite que cela permet aussi de voir qui est le joueur 2, et cela irait pour un nombre infini de joueurs.

Apr�s quoi dans cette m�me structure nous d�finirons l�id de l�objet qui sera celui du joueur 1, nous enverrons dans le slot 51 cette valeur ainsi : mplay_data_write(51,obj_jo_1);. Cela �crit donc dans le slot 51 l�id de l�objet obj_jo_1. Pourquoi le slot 51 ? C�est un choix arbitraire, �tant donn� qu�il y a 1000000 de slots on peut se permettre d�espacer les choses. Nous garderons donc les slots allant de 51 � 99 inclus pour le nom des joueurs (dans le tutorial vous n�aurez besoin que de 51 et 52, mais si vous le continuez vous pourriez bien en avoir besoin de plus). Ceux de 0 � 50 pour tout ce qui est fonctions d�administration et enfin pour chaque joueur nous utiliserons de 100 � 199 pour le joueur 1, de 200 � 299 pour le joueur 2 etc.
Ne vous inqui�tez pas nous n�en ferons usage que d�une dizaine pour chacun des joueurs, ce n�est que pour se donner de la marge afin que vous puissiez continuer le r�sultat de ce tutorial par la suite.

Revenons � mplay_session_find(), si au contraire cette fonction retourne autre chose que 0, au moins 1, alors cela signifiera que la personne qui ex�cute le script est celle qui joint la session, donc nous utiliserons : mplay_session_join(mplay_session_name(0),global.name);.
Cette fonction permet donc de se joindre � la session du nom de mplay_session_name(0), c'est-�-dire � la session num�ro 0, la premi�re, avec le nom de joueur global.name.

Apr�s quoi dans la m�me structure nous ferons appel � nouveau � :
global.number = mplay_player_find();.
Afin de d�finir quel joueur est en train de se connecter et ainsi de d�finir l�id de l�objet de ce dernier dans un des slots entre 51 et 99. Si global.number est �gal � 2, nous �crirons ainsi dans le slot 52 :
mplay_data_write(52,obj_jo_2);. Enfin nous fermerons la structure.

!Note : Pour que la connexion se fasse entre deux jeux Game Maker il faut qu�ils aient le m�me Game ID, autrement les deux ex�cutables ou fichiers sources ne pourront se connecter l�un � l�autre.


Cela nous donnera un code tel que celui-ci :

Listing 1 : scr_connexion();

ip = get_string("Ip:","127.0.0.1");

 

if (mplay_init_tcpip(ip) != 1)

    { show_message("Connexion Impossible."); break;}

    else

    {global.name = "onsenfout"}

 

if (mplay_session_find() == 0)

    {

     mplay_session_create("Ex1",2,global.name);

     global.number = mplay_player_find();

     mplay_data_write(51,obj_jo_1);

    }

    else

    {

    mplay_session_join(mplay_session_name(0),global.name);

    global.number = mplay_player_find();

    if global.number = 2

        {

        mplay_data_write(52,obj_jo_2);

        }

    }


            2) Script de Cr�ation des Joueurs

Cela fait il est temps de nous atteler au script de cr�ation des joueurs.
Ce script permet � tout moment de cr�er les joueurs dans le jeu, c'est-�-dire ceux qui se connectent, il est donc n�cessaire qu�il soit ex�cut� en permanence dans
draw, ou dans step.

Il est tr�s simple, on reprend la valeur des slots de 51 � 99 et si cette valeur v�rifi�e avec instance_number est inf�rieure � 1 on cr�e l�objet en question. Il ne g�re cependant pas la destruction des objets lors de la d�connexion, mais si on voulait le faire il suffirait de mettre dans l��v�nement room end, une ligne telle que celle-ci :

with (mplay_data_read(50+global.number)) instance_destroy(); mplay_data_write(50+global.number,obj_noone);


Ainsi l�objet serait d�truit et le script que nous sommes en train d�expliquer ne cr�erait plus rien que l�objet obj_noone, serait un objet que nous aurions pr�alablement cr�� et mit dans la room. Ne confondez cependant pas avec l�objet : noone, qui a un id de -4 et qui signifie : pas d�objet.

Le code de cr�ation des objets serait donc ainsi :

Listing 2 : scr_jo_create();

//Cr�ation Joueur 1

p1 = mplay_data_read(51);

if instance_number(p1) < 1

{

instance_create(obj_spawn.x,obj_spawn.y,p1);

}

 

//Cr�ation Joueur 2

p2 = mplay_data_read(52);

if instance_number(p2) < 1

{

instance_create(obj_spawn.x,obj_spawn.y,p2);

}


L�objet obj_spawn est un objet vide, c�est simplement un marqueur d�finissant o�, en quel x et y il faut cr�er les objets joueurs.

            3) Script de Maintenance, le c�ur du Multijoueur

Avant de passer au code central du multi, c'est-�-dire celui de synchronisation des donn�es des joueurs, nous allons cr�er les objets n�cessaire, et justement les objets joueurs en eux-m�mes.

Comme vous avez pu le remarquer nous avons cod� de fa�on � ce que les objets de chaque joueur soient des objets diff�rents, c�est un choix fait pour simplifier les explications, mais rien n�emp�che de prendre un seul objet pour chaque joueur et d�y mettre des variables fluctuantes, c�est d�ailleurs mieux pour gagner de la place dans le jeu final et du temps en d�veloppement, par contre si vous �crivez un tutorial � propos, �vitez. J�en ferai un, un jour qui prendra en compte cela, mais pour le moment j�ai assez de mal � ne pas m�emp�trer dans des explications complexes qui ne peuvent �tre comprises que par celui qui l��nonce, car il ne sait comment clarifier les choses. Ces 4 derni�res lignes en sont une preuve. :D


Par exemple pour la programmation de jeux tels que les mmorpg on n�a besoin que de deux objets, un objet joueur et un autre que l�on nomme en g�n�ral : dummy, c�est en fait le repr�sentant de tous les autres objets synchronis�s en multi par les autres joueurs. Ainsi pour dummy on peut ne synchroniser que les donn�es importantes et en cr�er des milliers d�instances qui se comporterons chaque fois de la fa�on de l�objet joueur de chaque ordinateur connect� � qui elles sont attribu�es. Un peu complexe, pour mieux comprendre r�f�rez vous � l�exemple de
SleepinJohnnyFish du GM6_Pack_4.

Bien, il est temps de cr�er les objets en question, avant cela faites donc des sprites, faites des sprites de sph�re de 16x16 du nom de spr_jo_1 et spr_jo_2, chacun d�une autre couleur. Faites un bloc de 32x32 du nom de spr_dec_bloc. Et enfin un projectile de 6x6 du nom de : spr_projectile.

Ensuite faites 7 objets : obj_connexion, dans lequel vous allez faire ex�cuter le script : scr_connexion(); dans l��v�nement create.
Puis l�objet : Ynit, dans lequel vous mettrez un �v�nement
create contenant : mplay_data_mode(false); Ce qui signifie que les donn�es seront envoy�es en mode non garanti durant le jeu, c�est moins s�r, c�est pourquoi nous le faisons apr�s l�objet obj_connexion, mais c�est extr�mement plus rapide qu�en mode garanti. Dans draw nous ferons ex�cuter le script : obj_jo_create(); et dans Keyboard Press Enter:

execute_string(get_string("Code:",""));
Il est toujours utile de pouvoir d�boguer le programme en pleine ex�cution.

Ensuite l�objet obj_spawn, que nous avons d�j� abord� et qui n�est qu�un marqueur, vous le laisserez donc ainsi.
Suivi de l�objet : obj_dec_bloc, � qui vous donnerez le sprite que vous avez cr�� et vous le r�glerez en : solid. Vous ferez �galement l�objet obj_projectile, m�me chose donnez lui son sprite mais laissez le ainsi.

Passons aux objets centraux, qui sont : obj_jo_1 et obj_jo_2, ils seront exactement pareils, simplement dans l��v�nement step vous veillerez � ce que chacun ait son script � ex�cuter, script que nous allons bient�t �crire, pour obj_jo_1 : scr_update_jo_1(); et �videmment pour obj_jo_2 : scr_update_jo_2();

Donc dans create de l�obj_jo_1 et 2 vous mettrez ce code-ci :

Vie = 100;

score_kill = 0;

selected_weapon = "pistol";

//Pistolet

cadence_pistol = 0;

munition_pistol = 60;


Il d�clare les variables de Vie du joueur, le score du nombre de tu�s, l�arme s�lectionn�e, et des variables qui vont nous servir pour la cadence et les munitions de l�arme. Toutes ces variables vont �tre utile dans les scripts principaux :
scr_update_jo. Vous verrez alors l�utilit� de ces variables.

Vous cr�erez un �v�nement : Alarm[0], dans lequel vous mettrez la variable cadence_pistol � 0.

Enfin dans step vous r�glerez la gravit� � l�aide de ce code-ci :

gravity_direction = 270;

if place_free(x,y+1) gravity=0.5;

if not place_free(x,y+1) gravity=0;

if vspeed>12 vspeed=12;

scr_update_jo_1();


Ce code est simple, il r�gle la direction de la gravit� � chaque d�but de step, ensuite si � x et y+1 il n�y a pas d�objet la gravit� est r�gl�e � 0.5 et si au contraire il y a quelque chose elle est mise � 0, enfin si sa vitesse verticale d�passe 12 pixel alors elle est ramen�e � 12. Ensuite le script principal : scr_update_jo_1(); est ex�cut�.

Ensuite dans l��v�nement de
collision avec l�objet : obj_dec_bloc ins�rez les lignes qui suivent :

if (vspeed > 0 && not place_free(x,y+vspeed)) move_contact(270);

    vspeed = 0;

 
Maintenant que cela est, passons au principal du tutorial, au code central du multi joueur, la gestion des joueurs et les synchronisations de leurs valeurs.


Ce script va g�rer aussi bien les d�placements et la gestion des contr�les que l��criture dans les slots et leur lecture, le principe c�est que chaque objet :
obj_jo_1 et obj_jo_2 �crivent les slots de leurs joueurs et les lisent.

Par exemple, l�obj_jo_1 lorsque il est sur l�ordinateur du joueur 1, c'est-�-dire lorsque la variable global.number est �gale � 1, alors il �crit dans les slots et l�on peut le guider, mais aussi et ce pour tous les ordinateurs ainsi que lui-m�me il lit les slots qu�il a �crit.

L�explication du script va clarifier ce principe, commen�ons :

Listing 3 : scr_update_jo_1();

//Script de maintenance pour obj_jo_1

if global.number = 1/*D�but de if global.number*/

{

if (keyboard_check(vk_left))

    {

    x -= 3

    }

if (keyboard_check(vk_right))

    {

    x += 3

    }

 

if (keyboard_check(vk_up))

  {

  if not place_free(x,y+1) vspeed = -12;

  }

//Ecriture donn�es

{

mplay_data_write(51,obj_jo_1);

mplay_data_write(100,x);

mplay_data_write(101,y);

mplay_data_write(102,vspeed);

mplay_data_write(105,"false");

mplay_data_write(107,Vie);

mplay_data_write(108,score_kill);

}

/////Armes/////

//////////////

//Pistolet

if keyboard_check(vk_control)

  {

 

        if selected_weapon = "pistol"

        {

    if cadence_pistol = 0 && munition_pistol > 0

  {cadence_pistol = 1;alarm[0] = 13; munition_pistol -= 1; mplay_data_write(105,"true"); mplay_data_write(106,point_direction(x,y,mouse_x,mouse_y));}

        }

       

  }

 

}/*Fin de if global.number

A partir d'ici jusqu'� la prochaine execution du script on a ferm� la possibilit� � l'utilisateur: global.number

d'agir sur quoi que ce soit! */

 

//Lecture donn�es pour tout le monde, m�me celui qui a �crit ces donn�es.

x = mplay_data_read(100);

y = mplay_data_read(101);

vspeed = mplay_data_read(102);

Vie = mplay_data_read(107);

score_kill = mplay_data_read(108);

//Armes du joueur

//Pistolet

if mplay_data_read(105) = "true"

    {

with (instance_create(x,y,obj_projectile)) {motion_set(mplay_data_read(106),20);}

    }

   

 

//Dommages pouvant �tre caus�s aux joueurs

if place_meeting(x,y,obj_projectile)

    {

    Vie -= 5

    }

 

//Vie du Joueur

if Vie <= 0

    {

    Vie = 100;

    score_kill -= 1;

    mplay_data_write(125,"killed");//On envoie � l'autre que le J1 est mort pour augmenter son score_kill. Non r�alis� dans ce tutorial.

    x = obj_spawn.x; y = obj_spawn.y;

    }

 

Lisez le script avant tout.
La premi�re structure principale composant le code, marqu�e par :
D�but de if global.number et Fin de if global.number.

Comporte tout d�abord trois sous structure qui permettent � celui chez qui la valeur global.number est �gale � 1, c'est-�-dire celui qui a cr�� la session, d�influer directement sur les d�placement de l�objet.

Apr�s quoi on �crit toutes les donn�es relatives aux d�placements, dans la fourchette de slot que nous nous sommes allou�s pour le joueur 1 :

//Ecriture donn�es

{

mplay_data_write(51,obj_jo_1);

mplay_data_write(100,x);

mplay_data_write(101,y);

mplay_data_write(102,vspeed);

mplay_data_write(105,"false");

mplay_data_write(107,Vie);

mplay_data_write(108,score_kill);

}


On �crit donc ces valeurs 30 fois par
step (si on laisse le nombre de FPS � 30), la valeur 105 est remise � "false" � chaque �tape, elle va nous servir pour les tirs, vous allez la comprendre sous peu.


Ensuite vient donc la gestion des tirs, si la touche control est press�e, et si l�arme choisie est le pistolet alors si la cadence le permet et qu�il reste des munitions, bloquer la cadence, ne la r�autoriser que dans 13 �tapes, enlever une munition et �crire dans le slot 105 que l�on est en train de tirer, puis dans le slot 106 la direction dans laquelle on tire.

Fin de la structure if global.number.
Ce qui suit est donc ex�cut� chez tout le monde, m�me chez le joueur 1, d�ailleurs sans cela les projectiles ne seraient pas cr��s chez lui. On lit donc la valeur x, la valeur y etc. de l�objet. Ensuite vient le probl�me des armes, il est simple (comme tout ce tutorial).

Si la valeur 105 est sur true, c�est donc que celui qui a la valeur de global.number � 1 a press� sur Control et qu�il avait l�arme pistolet de s�lectionn�. (Vous pourriez d�ailleurs faire plusieurs armes, et les diff�rencier en faisant �crire dans le slot 105: � trueM4 � par exemple.)
Comme la valeur 105 est true, alors on va cr�er le projectile chez tout le monde �tant donn� qu�on est au dehors de la structure if global.number, et lui donner la direction que le joueur 1 avait d�finie. Vous allez dire : � Mais le joueur va tirer �ternellement ? �
Eh bien non, car justement nous avons d�finie que 30 fois pas
step, le joueur 1 remet la valeur 105 � false. Ce qui suit n��tant que la gestion de la vie et du respawn des joueurs n�a pas lieu d��tre expliqu�.

Pour le second joueur c�est exactement le m�me script, il faut juste modifier la centaine des slots, par exemple � la place du slot 105, on aura le slot 205. Voici le listing de ce script :

Listing 4 : scr_update_jo_2();

//Script de maintenance pour obj_jo_2

if global.number = 2/*D�but de if global.number*/

{

if (keyboard_check(vk_left))

    {

    x -= 3

    }

if (keyboard_check(vk_right))

    {

    x += 3

    }

 

if (keyboard_check(vk_up))

  {

  if not place_free(x,y+1) vspeed = -12;

  }

//Ecriture donn�es

{

mplay_data_write(52,obj_jo_2);

mplay_data_write(200,x);

mplay_data_write(201,y);

mplay_data_write(202,vspeed);

mplay_data_write(205,"false");

mplay_data_write(207,Vie);

mplay_data_write(208,score_kill);

}

/////Armes/////

//////////////

//Pistolet

if keyboard_check(vk_control)

  {

 

        if selected_weapon = "pistol"

        {

    if cadence_pistol = 0 && munition_pistol > 0

  {cadence_pistol = 1;alarm[0] = 13; munition_pistol -= 1; mplay_data_write(205,"true");

mplay_data_write(206,point_direction(x,y,mouse_x,mouse_y));}

        }

       

  }

 

}/*Fin de if global.number

A partir d'ici jusqu'� la prochaine execution du script on a ferm� la possibilit� � l'utilisateur: global.number

d'agir sur quoi que ce soit! */

 

//Lecture donn�es pour tout le monde, m�me celui qui a �crit ces donn�es.

x = mplay_data_read(200);

y = mplay_data_read(201);

vspeed = mplay_data_read(202);

Vie = mplay_data_read(207);

score_kill = mplay_data_read(208);

//Armes du joueur

//Pistolet

if mplay_data_read(205) = "true"

    {

with (instance_create(x,y,obj_projectile)) {motion_set(mplay_data_read(206),20);}

    }

   

 

//Dommages pouvant �tre caus�s aux joueurs

if place_meeting(x,y,obj_projectile)

    {

    Vie -= 5

    }

 

//Vie du Joueur

if Vie <= 0

    {

    Vie = 100;

    score_kill -= 1;

    mplay_data_write(225,"killed");//On envoie � l'autre que le J2 est mort pour augmenter son score_kill. Non r�alis� dans ce tutorial.

    x = obj_spawn.x; y = obj_spawn.y;

    }


Vous avez d�sormais un jeu de plateforme pour deux joueurs via Internet, il vous est facile de coder des nouveaux joueurs et je vous ai expliqu� comment g�rer leur destruction et leur d�connexion, je vous laisse donc le gm6 en fin de ce tutorial, au cas o� vous auriez des probl�mes �ventuels.

J�esp�re avoir �t� assez complet, je sais cependant que mes explications ont du mal � �tre claires, car la programmation du multi est une logique que l�on trouve par soi, et chacun a la sienne. La difficult� d�expliquer le multi joueur est surtout d� au fait que toute l�approche de la programmation de jeu est orient�e objet, alors que le multijoueur n�a aucune logique objet, et les gens ont donc du mal � comprendre que ce qui est r�alis� dans un objet sur un ordinateur ne se fait pas sur un autre joueur pour ce m�me objet sans la n�cessit� d�une synchronisation. Ils ne comprennent pas n�cessairement non plus qu�un objet chez un joueur �crive ses donn�es, et qu�ils les lisent lui-m�me, mais que cela soit effectif chez tous les joueurs. C�est pourquoi je vous laisse l�exemple en .gm6 car il n�y a pas de meilleures fa�ons d�apprendre que de regarder les choses faire, si ce n�est peut-�tre de chercher par soi-m�me.


II) Les routeurs de type NAT et comment leur permettre de jouer avec des jeux Game Maker.

Cette section sera courte, mais certainement utile, car beaucoup de gens ont des routeurs.
Tout d�abord si vous voulez faire serveur et si vous passez par un routeur il va vous falloir un d�bit �norme, dans l�ordre de 100 Megaoctet par seconde, mais aussi un r�seau interne rapide, ou alors il faut faire en sorte que le script de connexion prenne bien son temps pour chaque action. Une derni�re option est d�utiliser des autres protocoles pour le multi joueurs, par exemple avec les dll�s SOC, 39Ster DLL, GMSock, EasySock etc.

Cette configuration ne vous concerne que si vous voulez jouer via Internet, si vous restez sur le r�seau local du routeur, c'est-�-dire avec les ordinateurs qui y sont branch�s cela n�est pas n�cessaire, il suffit d�utiliser les ips internes qui sont allou�es par le routeur � ces derniers.

Donc pour que les routeurs puissent se connecter, il faut que le joueur qui cr�� la partie ouvre un port sur son ip, de nombreux sites listent les fourchettes de ports libres, je vous conseille de prendre le port 3020, pour l�utiliser sur un ordinateur qui n�a pas de routeur, c�est simple, il suffit lorsque l�on vous demande d�entrer l�ip de l�entrer comme suit : �192.23.122.11:3020�.
Pour quelqu�un qui a un routeur s�il veut se connecter � ce serveur, il lui faut d�abord, avant de d�marrer le jeu, se connecter au syst�me de configuration de son routeur, en g�n�ral cela se fait � l�aide d�une page web. Vous trouverez l�adresse de la page de configuration de votre routeur dans son mode d�emploi, sur le site de votre FAI, ou alors il existe des sites Internet expliquant pour chaque marque de routeur comment faire.

A partir de cette page vous aurez acc�s � la configuration de votre routeur, vous pourrez ouvrir un port. Il vous faudra ajouter le port 3020 et lui dire de rediriger tout ce qui y vient vers l�ip de votre ordinateur dans le r�seau local, c'est-�-dire l�ip que le routeur alloue � votre ordinateur. Ainsi tout ce qui viendra sur votre ip vers le port 3020, sera envoy� sur l�ip de votre ordinateur dans le r�seau local et la connexion pourra se faire.

Une fois ce port ouvert il vous suffit de d�marrer le jeu et d�entrer l�ip du serveur, suivi du double point et du num�ro de port. Et cela fonctionnera !

Attention toutefois, il faut que ce port soit ouvert et chez le serveur et chez le client ! Il faut donc que le d�veloppeur du jeu pr�voit cela � l�avance, autant donner un port pour le jeu, puisque de toutes mani�res cela ne g�ne pas ceux qui n�ont pas de routeur et cela permet de faire fonctionner le jeu chez ceux qui en ont un. Nous voil� heureux !

 

Source du Tutorial: Cliquez Ici


Buhl Damien
alias daminetreg
http://www.gamemaker.fr/
Plus Qu�une Communaut�, Une Synergie.