Pokemon Eternity [MMORPG]

Présentez et construisez votre projet amateur Pokémon.
Avatar du membre
Kamui Shiro
Membre
Messages : 219
Enregistré le : mar. 15 avr. 2008, 16:27

Message par Kamui Shiro » mar. 07 juil. 2009, 21:58

Qu'est-ce qui m'empêche indiquer au serveur que j'ai un Dracaufeu au niveau 85 avec l'attaque "Rafale Feu" par exemple alors qu'en réalité je n'ai qu'un petit salamèche au niveau 5 avec son "Flammeche" ?

Si le serveur sait que j'ai triché, j'aimerais savoir comment ? Comment peut-t-il savoir qu'en réalité j'ai un salamèche au niveau 5 et non un Dracaufeu au niveau 85 ?
Ce genre de choses ne peut pas arriver parce que toutes les informations sur les joueurs sont stoquées dans une database, et mises à jour par le serveur uniquement. Les échanges client/serveur se résument un peu à ça:

Le client demande à se loguer, et il envoie mot de passe et login. Le serveur lui crée un petit espace pour lui, et récupère toutes ses infos depuis la database principale.

Serveur : "Salut, donc en face de toi, y'a un dracaufeu, il s'apprête à te lancer une flamme dans 0.5 secondes"
Client : Ok, j'affiche le dracaufeu et l'attaque dans 0.5s
Client: J'aimerais lancer une pokeball à la position x,y, si possible
Serveur: "Voyons voir, ta position est x0,y0, et là ou tu veux envoyer une balle, c'est x1,y1. Ok, c'est possible, tu envoies donc une balle, et elle touche le pokemon. Mais elle va rater son coup"
Client : Ok, j'affiche tout ça
Client : J'aimerais me déplacer à la position x,y
Serveur: Je vérifie si tu peux te déplacer, non, ce n'est pas possible, il y a un rocher ici. Je te renvoie ta position normale qui est x0,y0.
Client : *remet le personnage en x0,y0*
Client: J'aimerais lancer l'attaque n°1 de mon pokemon en cours avec un angle de 90°
Serveur : Actuellement, tu as un salamèche, et son attaque en position 1 est charge. Je calcule les dégats infligés&autrestrucs. Tu peux afficher
Client : *Affiche*

etc etc
Le client ne peut pas envoyer d'informations du genre "J'ai un dracaufeu lvl 85", ça ne correspond pas au paquets qui intéressent le serveur. Le client ne peut faire que des requètes " J'aimerais.", et le serveur réponds dans le cas positif, ou ne réponds pas dans le cas négatif.

Si tu penses qu'il y a toujours une raison de crypter les paquets pour certains cas, ça m'intéresserait beaucoup de savoir lesquels.

cyberclic
Membre
Messages : 27
Enregistré le : jeu. 11 juin 2009, 21:52

Message par cyberclic » mar. 07 juil. 2009, 22:09

OK, donc tout est stocké sur le serveur. En effet, ça sécurise un peu plus l'idée de faude et surtout on peut récupérer ses infos si on réinstalle le jeu sur un autre PC. Pas pal mais là encore, il te faudra un sacré serveur pour qu'il puisse traiter toutes ses requettes.

Donc si tu dois chiffrer (crypter n'est pas français) quelque chose, c'est le remplissage de la base de donnée sur le serveur.
A un moment donné, le client va bien dire au serveur "j'ai un nouveau pokémon, un salamèche niveau 5 fraichement attrapé. Merci de l'ajouter dans mon tableau qui se trouve dans ta base de donnée"
Ou sinon "j'ai appris une nouvelle attaque, merci de mettre à jour ma base"
Ou bien "mon carapuce a augmenté d'un niveau et a appris telle attaque, merci de mettre à jour ma base"

Car si ça n'est pas chiffré, on retombe sur ce que je disais : J'envoie au serveur une fausse information du style : "j'ai attrapé un Dracofeu lvl 85, merci de mettre à jour ma base".
A moins que le serveur lui réponde "attend, je vérifie en face que tu ais bien attrapé un Dracaufeu lvl 85". Sauf que en face, c'est mon deuxième compte qui envoi également un fausse requête de confirmation.

Avatar du membre
Myssdii
Membre
Messages : 3106
Enregistré le : dim. 29 avr. 2007, 16:57
Localisation : Essonne (91) France

Message par Myssdii » mar. 07 juil. 2009, 22:13

Ce ne sont pas des données de combat qui vont devoir circuler rapidement. Ces requêtes-là peuvent être sécurisées sans trop encombrer le serveur.

Avatar du membre
Kamui Shiro
Membre
Messages : 219
Enregistré le : mar. 15 avr. 2008, 16:27

Message par Kamui Shiro » mar. 07 juil. 2009, 22:17

cyberclic a écrit : Donc si tu dois chiffrer (crypter n'est pas français) quelque chose, c'est le remplissage de la base de donnée sur le serveur.
à moins qu'un logiciel espion s'infiltre sur mon ordinateur, ça devrait aller.
A un moment donné, le client va bien dire au serveur "j'ai un nouveau pokémon, un salamèche niveau 5 fraichement attrapé. Merci de l'ajouter dans mon tableau qui se trouve dans ta base de donnée"
Ou sinon "j'ai appris une nouvelle attaque, merci de mettre à jour ma base"
Ou bien "mon carapuce a augmenté d'un niveau et a appris telle attaque, merci de mettre à jour ma base"
Les choses ne se passent pas tout à fait ainsi. ^^
Voilà comment se passe la capture d'un pokemon:

Serveur: Ratata en x,y, se déplace vers x1,y1
Client : Je lance une pokeball en x,y
Serveur : x,y Vérifiés et Ok. Je calcule le taux de chance de la capture, Ratata capturé. Je fais une requète dans la Data pour dire que Ratata est capturé. J'envoie au client que Ratata est capturé
Client: *Joue un son de victoire et affiche divers trucs*

Idem pour le lvl up:
Serveur : *Calcule un combat, le résultat... etc*, voit que Machin a prit un niveau, le stoque en database et en informe le client.
Client : *met à jour son affichage*

Bon, en réalité, y'a beaucoup plus de paquets qui transitent, ça se fait pas tout d'un coup. Mais c'est le principe. On ne capture pas un pokemon coté client, on VOIT qu'on capture un pokemon. Le client est juste le reflet de ce qui se passe coté serveur, et sert juste à capturer les actions du joueur (click souris, flèches...)

Est-ce que c'est un peu plus clair?

cyberclic
Membre
Messages : 27
Enregistré le : jeu. 11 juin 2009, 21:52

Message par cyberclic » mar. 07 juil. 2009, 22:47

Ok, je vois ce que tu veux faire. Dans ce cas, si c'est le serveur qui gère tout et que le client n'est qu'un terminal, tu n'as pas besoin de sécuriser les échanges :)

Perso, je n'aurais pas vu le mode online comme ça,cette technique ne me semble pas trop adapté pour un jeu en temps réel, mais pourquoi pas ! Du moment que ça marche :D

Avatar du membre
Lén
Membre
Messages : 110
Enregistré le : ven. 10 juil. 2009, 03:46

Message par Lén » ven. 10 juil. 2009, 04:05

L'avantage d'une database, est que tout les serveurs y auront accès. Ducoup, les joueurs connectés sur différents serveurs, pourrons jouer ensemble ! la notion de différents serveurs est alors invisible pour le joueur.

Au fait kami*, va faire un tour sur ton forum y'a des idées qui naissent pour le scénar'. (les miennes surtout 8) )

* Kamui Shiro, pour les incultes xD

Avatar du membre
pokasmax
Membre
Messages : 65
Enregistré le : jeu. 05 juil. 2007, 10:57
Contact :

Message par pokasmax » ven. 10 juil. 2009, 14:26

Kamui Shiro a écrit :Bonjour, j'ai besoin de vos idées!

J'ai un petit soucis "technique", en gros, J'ai plein de moyens de faire quelque chose, mais aucun ne me convient tout à fait, et j'ai peur de me tromper dans mon choix. Avant tout, deux trois petites notions de vocabulaire:
client = le programme du jeu, l'affichage
serveur = là ou tous les calcul ont lieu (sur un ordinateur externe)
octet = une mesure informatique (Une connection internet personnelle peut environs envoyer de 70000 octets/s à 120000 octets/s)

Mon but est:
Je dois faire bouger mon personnage, et voir les autres joueurs bouger.

La question est, quel système adopter, sachant:

- Que l'information à envoyer pour dire qu'un joueur bouge fait environs 10 octets
- Que si j'envoie 10 fois cette information à un joueur en une seconde, ça prend 100 octets/s
- Que si 50 joueurs sont connectés et sont tous dans la même zone, et qu'un seul joueur bouge (cas minimal), ça prend 5000 o/s
- Que si tous les joueurs bougent (cas maximal), ça prend 250000 o/s
Et ceci ne me parait pas acceptable, ou bien trop grand. (Certes, un serveur normal peut facilement envoyer 250000 o/s, mais ça me semble tout de même trop grand.)
désolé de ne pas avoir repris ce qui était en dessous du message que je cite mais rien que là c'est FAUX :x

tu oublies les caractères dit de bourrage dans le poid des trames, ainsi que les entêtes ; ne sachant pas quel protocole tu vas utiliser, je te mets en garde, c'est un petit peu beaucoup plus de 10octets qui seront envoyés si le datagramme fait 10o (et encore, il y a les autres couches qui s'y seront mises donc compte encore plus que ça)

Lén a écrit :L'avantage d'une database, est que tout les serveurs y auront accès. Ducoup, les joueurs connectés sur différents serveurs, pourrons jouer ensemble ! la notion de différents serveurs est alors invisible pour le joueur.

Au fait kami*, va faire un tour sur ton forum y'a des idées qui naissent pour le scénar'. (les miennes surtout 8) )

* Kamui Shiro, pour les incultes xD
attention, ce que tu dis au début n'est pas vrai à 100%, il faut :
soit avoir un sgbd(r) permettant du partage de ressource
soit avoir un serveur annexe aux autres servant à gérer les requêtes d'insertion,modification,récupération ; c'est-à-dire qu'il existe x serveurs de jeux et donc x+1 serveurs disponibles

mais pour un jeu de ce type, un serveur peut très bien encaisser un très grand nombre de joueurs

cyberclic > les informations étant si légères qu'il s'agit d'avoir à envoyer quelques octets (et au mieux pour éviter les latences, envoyer le plus d'infos en me^me temps pour avoir un paquet tcp le plus optimisé possible > taille minimale oblige) enfin bref ^^,
gts sans hack !100% gratuit.

Pas de linker mais vous voulez voir et modifier vos Pokémon? le lien ci-dessus est là ;)

---------------------------------------
mon ca : 3866-5346-2187

Avatar du membre
Kamui Shiro
Membre
Messages : 219
Enregistré le : mar. 15 avr. 2008, 16:27

Message par Kamui Shiro » ven. 10 juil. 2009, 21:42

J'ai pris en compte les données ajoutées, pas d'inquiétude :P
Et j'utiliserais UDP, c'est plus léger.

EDIT:
Après plusieurs heures de combat, j'ai enfin réussis à coder correctement ce fichu système de déplacement !!!
Du moins pour le déplacement des joueurs, ça marche bien, je suis satisfaite!
Une petit vidéo viendra bientôt.

Avatar du membre
pokasmax
Membre
Messages : 65
Enregistré le : jeu. 05 juil. 2007, 10:57
Contact :

Message par pokasmax » ven. 10 juil. 2009, 21:57

j'avais eu à coder une fois une interaction client/serveur sur machine virtuel (8000 clients pour un serveur) et le problème que l'on nous avait posé c'était faire en sorte que pour les utilisateurs, il n'y ait :
1/ pas de lag
2/ voir en temps réel les déplacements

avec ce seul serveur O_O

la solution ? > précalculer chez le client la position des personnages et les paquetsdu serveur redirigent ;)
> beaucoup moins de warp (ou peu / un peu plus si lag)
> assez fluide
gts sans hack !100% gratuit.

Pas de linker mais vous voulez voir et modifier vos Pokémon? le lien ci-dessus est là ;)

---------------------------------------
mon ca : 3866-5346-2187

Avatar du membre
Lén
Membre
Messages : 110
Enregistré le : ven. 10 juil. 2009, 03:46

Message par Lén » sam. 11 juil. 2009, 13:42

pokasmax a écrit :j'avais eu à coder une fois une interaction client/serveur sur machine virtuel (8000 clients pour un serveur) et le problème que l'on nous avait posé c'était faire en sorte que pour les utilisateurs, il n'y ait :
1/ pas de lag
2/ voir en temps réel les déplacements

avec ce seul serveur O_O

la solution ? > précalculer chez le client la position des personnages et les paquetsdu serveur redirigent ;)
> beaucoup moins de warp (ou peu / un peu plus si lag)
> assez fluide
Mais le calcul côté client augmente le nombre de chance de hacks.

Avatar du membre
pokasmax
Membre
Messages : 65
Enregistré le : jeu. 05 juil. 2007, 10:57
Contact :

Message par pokasmax » sam. 11 juil. 2009, 13:48

Lén > c'est un précalcule de la position des dresseurs, étant donné que tout est côté serveur un hack n'est pas possible dans la mesure où comme c'est côté serveur que tout ce déroule...

l'histoire du précalcul permet juste de diminuer par 2 ou 3 les fréquences d'envoie des paquets : permet de diminuer l'engorgement de la sortie du serveur et diminuer le lag tout en évitant de trops grandes disparitées client/serveur
gts sans hack !100% gratuit.

Pas de linker mais vous voulez voir et modifier vos Pokémon? le lien ci-dessus est là ;)

---------------------------------------
mon ca : 3866-5346-2187

Avatar du membre
RayKable
Membre
Messages : 1210
Enregistré le : lun. 24 nov. 2008, 17:47

Message par RayKable » sam. 11 juil. 2009, 13:49

Simple question: Sa compte combien un serveur?
Image
Spoiler :
Concours a écrit :Evoli : 69 (+35)
Grahyena : 69 (+31)

Bande de Zoophile :o
Concours a écrit : Leuphorie : 64 (+23)
Le comble %D

Avatar du membre
Lén
Membre
Messages : 110
Enregistré le : ven. 10 juil. 2009, 03:46

Message par Lén » sam. 11 juil. 2009, 17:53

Raykable a écrit :Simple question: Sa compte combien un serveur?
?????????? :wink:

Avatar du membre
pokasmax
Membre
Messages : 65
Enregistré le : jeu. 05 juil. 2007, 10:57
Contact :

Message par pokasmax » sam. 11 juil. 2009, 17:57

variable

ca dépend de ce que tu en fais, tu peux avoir des locations de serveurs (hébergmeent par exemple) pour 9€/mois masi après ca dépend vraiment de ce que tu veux faire et des estimations de ton trafic (pas la peine d'avoir un serveur à x€ chez ovh si c'est pour faire tourner un site standard, avec 500 visites uniques/mois)
gts sans hack !100% gratuit.

Pas de linker mais vous voulez voir et modifier vos Pokémon? le lien ci-dessus est là ;)

---------------------------------------
mon ca : 3866-5346-2187

Avatar du membre
Lén
Membre
Messages : 110
Enregistré le : ven. 10 juil. 2009, 03:46

Message par Lén » sam. 11 juil. 2009, 18:44

pokasmax a écrit :variable

ca dépend de ce que tu en fais, tu peux avoir des locations de serveurs (hébergmeent par exemple) pour 9€/mois masi après ca dépend vraiment de ce que tu veux faire et des estimations de ton trafic (pas la peine d'avoir un serveur à x€ chez ovh si c'est pour faire tourner un site standard, avec 500 visites uniques/mois)
Dans le cas du jeu de Kamui, ça coute rien a par l'électricité car le serveur est son PC, et la database aussi, se seront les joueurs volontaires qui serviront de serveur. Je ne sis pas d'où tu viens, mais en France on a la bande passante illimitée. je peut télécharger 55555055742621 To de données par mois si je veux.

Avatar du membre
pokasmax
Membre
Messages : 65
Enregistré le : jeu. 05 juil. 2007, 10:57
Contact :

Message par pokasmax » sam. 11 juil. 2009, 18:54

j'habite en france mais tu as la bande passante et la bande passante :p

comme tu le dis si bien "tu peux télécharger" :p mais en aucuns cas tu fais passer sur le même instant T tous tes 55555055742621 To ;)

la bande passante c'est en quelque osrte la capacité . Quand on parle qu'on a une bande passante illimitée c'est un abus de langage, il faudrait dire qu'on a soit une bande en descendant illimitée ou en ascendant :-0
Voici un extrait de la définition de la bande passante
La bande passante (angl. bandwidth) est un intervalle de fréquences pour lesquelles la réponse d'un appareil est supérieure à un minimum. Elle est généralement confondue avec la largeur de bande passante qui mesure cet intervalle.
*la largeur de bande passante n'est pas non plus ce dont tu parlais*

de plus, si c'est son pc qui fait le serveur, il a intérêt à avoir un bon débit :-0
ne pas aller sur le net avec un autre pc sur le même réseau (ou le pc en question)
et SURTOUT ne pas être sur un réseau de type domestique%)
gts sans hack !100% gratuit.

Pas de linker mais vous voulez voir et modifier vos Pokémon? le lien ci-dessus est là ;)

---------------------------------------
mon ca : 3866-5346-2187

Avatar du membre
Lén
Membre
Messages : 110
Enregistré le : ven. 10 juil. 2009, 03:46

Message par Lén » sam. 11 juil. 2009, 19:37

Alors ben j'ai du 18Mb Orange, et en faisant différent test sur internet, j'ai entre 2Mb et 900Kb/s en down et environs 200 en up. je pourrais accueillir aisément 200 joueurs a peu près.

Je sais pas si c'est ce dont tu parlais !

Avatar du membre
Kamui Shiro
Membre
Messages : 219
Enregistré le : mar. 15 avr. 2008, 16:27

Message par Kamui Shiro » sam. 11 juil. 2009, 19:57

Ce n'est pas la peine de "m'apprendre" comment marche un serveur, ni comment cela fonctionnera si ça tourne sur mon ordinateur ou d'autres. J'ai toutes les connaissances nécessaires pour faire en sorte que ça marche bien. Donc évitez de diverger sur ce sujet, ça n'apporte rien....

Avatar du membre
pokasmax
Membre
Messages : 65
Enregistré le : jeu. 05 juil. 2007, 10:57
Contact :

Message par pokasmax » sam. 11 juil. 2009, 20:05

ne t'en fais pas Kamui Shiro, j'explique juste à Lén. De plus s'il fallait réellement apprendre les bases de l'administration réseau et système orienté serveur, j'aurais directement écris un cours :x
gts sans hack !100% gratuit.

Pas de linker mais vous voulez voir et modifier vos Pokémon? le lien ci-dessus est là ;)

---------------------------------------
mon ca : 3866-5346-2187

Avatar du membre
Kamui Shiro
Membre
Messages : 219
Enregistré le : mar. 15 avr. 2008, 16:27

Message par Kamui Shiro » lun. 13 juil. 2009, 21:09

Hello !
ça fait un petit bout de temps que j'ai pas posté, mais ça ne veut pas dire que j'ai pas avancé. ^^

Voici une petite image de ce qu'il en est:
Image
On peut maintenant se déplacer et discuter. Tout ne fonctionne pas encore parfaitement, mais ça s'amméliore!

à tout bientôt! ^^

Répondre