Aide : deplacement du joueur => client serveur

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Aide : deplacement du joueur => client serveur [non réso

Message par G-Rom »

autre chose , utilise l'udp pour un jeu en réseau.
sebastien
Messages : 13
Inscription : sam. 06/avr./2013 15:30

Re: Aide : deplacement du joueur => client serveur [non réso

Message par sebastien »

@cederavic
Merci beaucoup, cela corrige bien le problème. Merci beaucoup :)

@G-Rom
Non, mini jeu sans prétention, je ne veux pas de paquet perdu. L'UDP est bien pour certains type de jeu, le TCP est mieu pour d'autres.
Je ne cherche pas à faite un super mmo : juste à corriger le bout de code que j'ai posté pour qu'il fonctionne, afin que je puisse l'améliorer par la suite ;)

j'ai nettoyé et corrigé mon script sur mon 1er topic. En l'essayant, vous verrez que je ne suis plus très loin, mais j'ai vraiment toujours besoin d'un petit coup de main :D Un aide sur mon code serait vraiment super sympa, ça fait des jours (et nuits) que je suis la dessus.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Aide : deplacement du joueur => client serveur [non réso

Message par G-Rom »

bon... tu as l'air de savoir alors... :|
sebastien
Messages : 13
Inscription : sam. 06/avr./2013 15:30

Re: Aide : deplacement du joueur => client serveur [non réso

Message par sebastien »

Oui, je connais la différence entre le TCP et l'UDP et j'ai fait mon choix par rapport au jeu que je souhaite faire ;)
Après, loin de moi la prétention de tout connaitre, sinon je n'aurais pas demandé de l'aide. Mais je demande de l'aide par rapport à mon code, pas par rapport aux autres possibilités qui s'offrent à moi.
Je te remerci néanmoins d'avoir pris le temps de me répondre, et espère que tu pourras m'aider à résoudre mon problème (rendre fonctionnel mon code, il l'est presque en plus. Ou a défaut m'aider à comprendre ce qui ne va pas et à m'aider à le corriger éventuelement) :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Aide : deplacement du joueur => client serveur [non réso

Message par Backup »

cederavic a écrit :Utilise WindowEvent() plutot que WaitWindowEvent() qui est bloquant. Ca resoudra ton probleme de focus sur le serveur pour que celui-ci envois les données.
en fait le mieux c'est d'utiliser

Code : Tout sélectionner

WaitWindowEvent(10)
le fait d'ajouter une attente est preferable
car dans l'etat si tu n'utilises QUE WindowEvent() regarde le gestionnaire des taches ton prg prends du temps machine pour rien ;

lorsqu'on utilise "WindowEvent()" il faut faire suivre d'un Delay(xx)

c'est pourquoi la fonction WaitWindowEvent(xx) a un paramètre de temps ;)
de la sorte ton prg ne prends plus de temps machine pour rien

pour l'envoi de tes messages

Code : Tout sélectionner

Macro SendMove(type) ;Formation des paquet et envoie
	TaillePaquet=8
	*SenderMemory=AllocateMemory(TaillePaquet+5)
	PokeB(*SenderMemory,type)
	PokeL(*SenderMemory+1,TaillePaquet)
	PokeL(*SenderMemory+5,Player(PlayerID)\x)
	PokeL(*SenderMemory+9,Player(PlayerID)\y)
	SendNetworkData(ConnectionID,*SenderMemory,TaillePaquet+5)
EndMacro

Macro SendText(type,message) ;Formation des paquet et envoie
	TailleMessage=Len(message)
	TaillePaquet=TailleMessage
	*SenderMemory=AllocateMemory(TaillePaquet+5)
	PokeB(*SenderMemory,type)
	PokeL(*SenderMemory+1,TaillePaquet)
	PokeS(*SenderMemory+5,message,TailleMessage)

	SendNetworkData(ConnectionID,*SenderMemory,TaillePaquet+5)
	Debug message
EndMacro
j'ai pas regardé danns le detail, mais ton sendmove ( qui fonctionne )
envoie un message avec un format different de SendText .. c'est normal ?

chez moi le SendText plante ..

pourquoi tu ne fais pas qu'une seule (procedure/macro) pour l'envoi ??
une structure pour recuperer toutes les données (x,y,idclient,massage.s ) et tu n'utilise qu'une seule Macro (procedure)
pour envoyer le tout ...
sebastien
Messages : 13
Inscription : sam. 06/avr./2013 15:30

Re: Aide : deplacement du joueur => client serveur [non réso

Message par sebastien »

WaitWindowEvent(10)
Et ben bien vu, merci beaucoup :D

Sendmove envoi un message de format différent exprès :
Sendmove envoi la position du joueur, donc j'y met le minimum 1Bool, 3Long
le serveur lit le bool, et grâce à ça, sait quel type de message il va recevoir. On fait transiter ainsi le minimum de donnée
Ca évite de faire un genre de string split par la suite
Sendtext est différent car on ne peu pas le prédéfinir à l'avance, vu que c'est un genre de tchat.

Etonnant que le SendText ne marche pas chez toi, alors qu'il fonctionne correctement chez moi...
Bon si tu veux chercher à m'aider, ça ne sera pas génant, le bug est surtout sur l'arrivée d'un nouveau joueur et son déplacement ;)

Je pense que c'est dans AddNewPlayerToAllClient(ClientID) qu'il faut que je refasse une boucle dans la boucle pour bien prévenir tout le monde, mais j'en suis pas sur car j'y arrive toujours pas ^^
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Aide : deplacement du joueur => client serveur [non réso

Message par Backup »

heu , tu fais comment pour ajouter un client ?

car si je relance le client ça va pas lfaire ...

(au fait les massages marchent chez moi ;) )
Dernière modification par Backup le dim. 07/avr./2013 18:13, modifié 1 fois.
sebastien
Messages : 13
Inscription : sam. 06/avr./2013 15:30

Re: Aide : deplacement du joueur => client serveur [non réso

Message par sebastien »

Coté serveur, la fonction AddNewPlayerToAllClient(ClientID) gère ça, mais mal apparement ^^
Il suffit de relancer justement un second client pour le voir. J'ai l'impression que les nouveaux joueurs se superposent (sans certitude)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Aide : deplacement du joueur => client serveur [non réso

Message par Backup »

chez moi l'ajout d'un client en relaçant une deuxieme fois le Client ne marche pas car ....
conflit de Directx .. le fait d'ouvrir 2 fois un Screen pose probleme ...
faudrait tester a partir d'un autre ordinateur ...

voici l'erreur obtenu :
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Aide : deplacement du joueur => client serveur [non réso

Message par Backup »

ok , en fait ça marche tres bien :)

pour coder j'utilise mon EPB (editeur Purebasic Perso )
et celui-ci ne recreer pas un fichier temporaire different a chaque lancement ...
ceux qui empeche tout nouveau lancement ...
d'ou l'erreur POLINK typique d'un prg deja present en RAM

en utilisant JAPBE (un autre Editeur voir Site de Gnozal) ton prg marche parfaitement ...
je supose que l'editeur Officiel doit avoir le meme defaut que mon EPB ( a propos du fichier temporaire )

donc, avec JAPBE ton prg affiche bien l'arrivé de plusieurs Client , et la disparition de ceux ci en cas d'arret ... :)
sebastien
Messages : 13
Inscription : sam. 06/avr./2013 15:30

Re: Aide : deplacement du joueur => client serveur [non réso

Message par sebastien »

Etrange car fonctionnel chez moi, mais tu utilise une ancienne version de PB :
peut-être que de passer à la version 5.x resoudrerai ton problème (pas forcément pour m'aider mais pour toi pour la suite également).

Sinon, merci d'avoir essayé de m'aider , c'est sympa ;)

Edito : tu viens de reposter en même temps, je n'avais pas vu : Heureux que ça marche ! :)
Attends quelques minutes, je crois avoir réussi a corrigé une partie du probleme :D

Reédito :
Voila, une petite avancée dans mon probleme, reste le petit bug lié aux déplacements.
J'ai édité le code du 1er poste.
Les nouveaux persos sont désormais créés au bon endroit, je suis bien content :D
Reste plus qu'a corrigé un bug lié aux déplacements, et je comprend pas d'ou ça vient, pourtant je suis pas loin...
sebastien
Messages : 13
Inscription : sam. 06/avr./2013 15:30

Re: Aide : deplacement du joueur => client serveur [non réso

Message par sebastien »

Ca y est, j'ai enfin trouvé :
La fonction corrigée (serveur) :

Il fallait rajouter
cl=ClientID X=XX Y=YY
en début de fonction. je comprend néanmoins pas encore bien pourquoi...

Code : Tout sélectionner

Macro MovePlayerToAllClient(ClientID,XX,YY) ;Formation des paquet et envoie
  cl=ClientID
  X=XX
  Y=YY
  For a=0 To ListSize(Player())-1
  SelectElement(Player(),a)
      .....
;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Aide : deplacement du joueur => client serveur

Message par Backup »

oui je confirme ceci marche

Code : Tout sélectionner

Macro MovePlayerToAllClient(ClientID,Xx,Yy) ;Formation des paquet et envoie
cl=ClientID
  X=XX
  Y=YY
  For a=0 To ListSize(Player())-1
  SelectElement(Player(),a)
      TaillePaquet=12
      *SenderMemory=AllocateMemory(TaillePaquet+5)
      PokeB(*SenderMemory,#MovePlayer)
      PokeL(*SenderMemory+1,TaillePaquet)
      PokeL(*SenderMemory+5,Cl)
      PokeL(*SenderMemory+9,X)
      PokeL(*SenderMemory+13,Y)
      SendNetworkData(Player()\id,*SenderMemory,TaillePaquet+5)
      Debug "On envoi a "+Str(Player()\id)+" que "+Str(Cl)+" a bougé en "+Str(X)+"/"+Str(Y)
   Next
EndMacro
c'est peut etre simplement parcequ'une MACRO n'est pas une Procedure !!
les variable ne sont donc pas Locale a la Macro
si tu avait utilisé une Procedure a la place, tu n'aurai peut etre pas eu ce probleme ;)

en tout cas ton histoire m'a aidé a me debugger mon éditeur qui en mode Run+Debugger
ne pouvais pas lancer plusieurs instance d'un meme programme :)
Répondre