Hello world, je vias pas faire 50 exemples sur ce qui n'est pas utile vu que on s'en servira pas. Si vous voulez les détails des détails sur tout, aller voir lui de Levan il est très complet.
donc on commence:
1.L'interfaceSi jamais vous voulez faire un interface pour se connecter lisez ce qui suit sinon passez au point 2.
Pour se connecter il faut un hote donc on va en faire un.
Créé un objet, pour l'exemple c'est ObjWaitOnline (mais osef on l'utilisera pas) puis un pour les joueur connecté ObjWaiter
-Donc on dit que on est l'hôte en partant comme on sait pas ses intentions
-on dit que il est le premier joeur connecté
-On créé une liste potentiel de joueur(tableau ou liste à vous de voir selon vos besoins) ainsi que une liste de "In Game" pour savoir si on est en trian dejoueur ou en attante(histoire de savoir quand afficher le joueur)
-On initilialise la 3dll
- Code:
-
global.Host=1
global.MyPos=0
for(i=0;i<4;i+=1)
{global.JO[i]=-1
global.IG[i]=0}
dllinit(0,1,0)
listen = tcplisten(14804, 2, true)
if(listen <= 0)
show_message("Connexion impossible, passez go et réclamez 200$.")
Connexion à l'hoteEnsuite on est l'hôte donc on veux voir qui est se connecte:
- Code:
-
if global.Host
{global.Client=tcpaccept(listen, true)
et on veux pas continuer si on recois rien:
- Code:
-
if global.Client<=0 exit
ensuite on syncronise les 2 joueurs pour pas qu'ils fassent d'autres choses en même temps(le 0 c'est pour activer la syncronisation)
- Code:
-
setsync(global.Client,0)
Puis on recoit ce qu'il a envoyé (on verra ca dans la fonction rejoindre)
- Code:
-
receivemessage(global.Client)
Nom=readstring()
Puis on regarde la liste qu'on c'est fait plus haut pour trouver une place vide (on commence à 1 vu que 0 c'est nous) puis on continu
- Code:
-
for(i=1;i<4;i+=1)
if global.JO[i]=-1
break
Ensuite on va se créé un objet pour lui et lui assigné sa position et son adresse de connection (Id) et son Nom
- Code:
-
global.NewP=instance_create(0,0,ObjWaiter)
global.NewP.Id=global.Client
global.NewP.Joueur=i
global.NewP.Nom=Nom
Puis on ajoute l'objet à la liste de joueurs
- Code:
-
global.JO[i]=global.NewP
Ensuite, si ya d'Autres joueur de connecté (donc des ObjWaiter) on leurs envoient tout(on vide toujours le buffer avant et on écrit le type de message, ici c'est 1) et on s'assure que l'id du ObjWaiter est pas le même que celui qu'on vient de connecter (oubliez pas, Id c'est l'Adresse online lié à chaque joueur)
- Code:
-
clearbuffer()
writebyte(1)
writebyte(i)
writestring(Nom)
with ObjWaiter
if id!=global.NewP
sendmessage(Id)
Ensuite ba faut que le nouveau sache qui est connecté. toujours on vérifie que c'est pas le nouveau joueur(global.Client est notre nouveau)
- Code:
-
with ObjWaiter
if id!=global.NewP
{clearbuffer()
writebyte(1)
writebyte(Joueur)
writestring(Nom)
sendmessage(global.Client)}
Ensuite l'hôte envoi des info sur la partie au joueur, sa position dans la liste de joueur, et on enlève la syncro vu que... c'est fini! (à l'adresse 0 et non 1 comme les jouerus normaux)
- Code:
-
clearbuffer()
writebyte(0)
writebyte(i)
writestring(global.MonNom)
writebyte(global.Niveau)
sendmessage(global.Client)
setsync(global.Client,1)}
Connexion à l'hôteComme promis c'est la connexion à l'hote et l'illumination de quelques problèmes.
donc vous faites un bouton de connexion puis comme il rejoint il sera pas hote(global.Host=0) puis on se connecte(127.0.0.1 = IP local, donc de votre réseau):
- Code:
-
global.Host=0
ip = get_string("Entrez l'IP auquel se connecter", "127.0.0.1")
global.Server = tcpconnect(ip, 14804, true)
On s'assure que ya quelqu'un de l'autre coté:
- Code:
-
if(global.Server <= 0)
{show_message("Impossible de se connecter à l'hôte, routeur en carton spoted.")
exit}
Donc si vous suivez, on est connecté à l'hote, qui a activer la syncro, qui veux recevoir un message(son nom en l'occurance):
- Code:
-
clearbuffer()
writestring(global.MonNom)
sendmessage(global.Server)
Réception des message(coté joueur)Simple comme bonjour vu que tout est fait, on recoit les messages sur les nouveaux joueurs
Pour l'exemple j'ai mis un else direct après le code de connexion à l'hote (if global.Host)
donc on recoit les messages du server(global.Server récupéré plus haut)
- Code:
-
else
{while 1
{Mess=receivemessage(global.Server)
if Mess<=0 break
Pourquoi un while? pour s'assurer de faire tout les messages recu et non 1 par step, quand ya plus rien il quitte le while et continue
Bon ensuite comme j'ai dit on met toujours un chiffre d'adresse(0 ou 1 pour l'exemple) c'est la qu'on voit son utilité
On fait un switch sur le premier byte lu (car ils sont lu dans l'ordre de réception) pour voir si c'est un 1 ou un 0
- Code:
-
switch readbyte()
{case 0:
Pour le 0, c'est l'hote qui envoi des info sur la partie donc on les lit et les assigne puis on se créé un ObjWaiter pour lui (et oui c'est aussi un joueur)
- Code:
-
global.MyPos=readbyte()
NewP=instance_create(0,0,ObjWaiter)
NewP.Joueur=0
NewP.Nom=readstring()
global.JO[0]=NewP
global.Niveau=readbyte()
break
Puis le case 1; Nouveua joueur détecté(pareil que case 0 sans la réception de donnée sur la partie)
- Code:
-
case 1:
NewP=instance_create(0,0,ObjWaiter)
NewP.Joueur=readbyte()
NewP.Nom=readstring()
global.JO[NewP.Joueur]=NewP
break}
Voila, tout marche il reste qu'à ajouter quelques truc de base comme un chat, des message pour quand un joueur quitte
Pour la prochaine partie ca sera la un vrai jeu