21-11-2008, 03:16 PM
je ne sais pas si dans l'exemple présenté, le captcha convienne. En effet on ne va pas demander à un joueur de lire/écouter/.... à chaque action de sa part
Là on est dans le cas où le joueur s'est identifié dans le jeu puis lance un bot
Perso - je suis sûr que j'ai fait n'importe quoi mais je me lance-, développant aussi en Ajax, j'ai mis en place un "verrou" logique pour certains types d'interraction.
Ex :
se déplacer = utilisation du verrou
manger = utilisation du verrou
afficher une partie de l'inventaire = pas de verrou
ramasser quelque chose par terre si ça ne consomme pas de temps ou des réserves limitées = pas de verrou (pas encore fait mais comme je ne ramasse que des "id", pas besoin)
ramasser quelque chose par terre si ça consomme du temps ou des réserves limitées = verrou (là y a pas d'id pour les réserves)
créer un objet = verrou
grosso modo tout ce qui "consomme" ou "génère" quelque choseest "verrouillé"
Alors ce que j'appelle Verrou c'est simplement d'empêcher le joueur de faire une action verrouillable avant que la précédente action verrouillable ne soit terminée. Comme je suis en asynchrone, je ne me base pas sur le client mais sur le serveur
mon système est simple (et probablement foireux)
dans la table personnage, j ai un champ "verrou" qui porte la valeur 0 si pas de verrou et un nombre aléatoire sinon.
chaque lancement d'action verrouillable fonctionne ainsi :
1) le joueur lance l'action
2) le client lance un premier ordre ajax pour demander le verrou
3.1) si le verrou du personnage est disponible, la bdd est mise à jour (un entier aléatoire) et le serveur donne en réponse ajax la valeur du verrou
3.2) si le verrou du personnage est indisponible (la valeur n'est pas à 0) le serveur donne un refus en réponse ajax
4) si le retour ajax est accepté, le client lance un second ordre ajax pour demander l'action, en donnant la valeur du verrou
5) le serveur recoit un ordre d'action avec son verrou, il teste si le verrou est correct, si oui lance l'action et répond, si non, ne fait rien
6) une fois le retour de l'action réalisée, le client lance le troisième ordre ajax, demandant de déverouiller le personnage (en donnant la valeur du verrou)
7) le serveur identifie si le verrou est le bon, si c'est le cas, met à 0 le verrou, ne fait rien sinon.
bon après un peu de temps à utiliser ce système je me demande si il est utile de lancer trois aller retours ajax (verrouillage , action, déverrouillage) ou si il ne suffit pas de verrouiller/déverrouiller directement dans les scripts d'action. L'idée de départ était de ne pas solliciter le serveur avec des "gros scripts php". Les scripts de verrouillage et déverrouillage doivent faire 10-15 lignes chacun, contrairement aux scripts possibles pour les diverses actions
à noter ça a l air de pas trop mal marcher, dès que je suis sur un bug, une action testée interdite, etc... le personnage est complètement verrouillé. Et surtout rien n'est posé côté client, tout est côté serveur
mais il y a peut être énormément de failles, à voir avec vous
Là on est dans le cas où le joueur s'est identifié dans le jeu puis lance un bot
Perso - je suis sûr que j'ai fait n'importe quoi mais je me lance-, développant aussi en Ajax, j'ai mis en place un "verrou" logique pour certains types d'interraction.
Ex :
se déplacer = utilisation du verrou
manger = utilisation du verrou
afficher une partie de l'inventaire = pas de verrou
ramasser quelque chose par terre si ça ne consomme pas de temps ou des réserves limitées = pas de verrou (pas encore fait mais comme je ne ramasse que des "id", pas besoin)
ramasser quelque chose par terre si ça consomme du temps ou des réserves limitées = verrou (là y a pas d'id pour les réserves)
créer un objet = verrou
grosso modo tout ce qui "consomme" ou "génère" quelque choseest "verrouillé"
Alors ce que j'appelle Verrou c'est simplement d'empêcher le joueur de faire une action verrouillable avant que la précédente action verrouillable ne soit terminée. Comme je suis en asynchrone, je ne me base pas sur le client mais sur le serveur
mon système est simple (et probablement foireux)
dans la table personnage, j ai un champ "verrou" qui porte la valeur 0 si pas de verrou et un nombre aléatoire sinon.
chaque lancement d'action verrouillable fonctionne ainsi :
1) le joueur lance l'action
2) le client lance un premier ordre ajax pour demander le verrou
3.1) si le verrou du personnage est disponible, la bdd est mise à jour (un entier aléatoire) et le serveur donne en réponse ajax la valeur du verrou
3.2) si le verrou du personnage est indisponible (la valeur n'est pas à 0) le serveur donne un refus en réponse ajax
4) si le retour ajax est accepté, le client lance un second ordre ajax pour demander l'action, en donnant la valeur du verrou
5) le serveur recoit un ordre d'action avec son verrou, il teste si le verrou est correct, si oui lance l'action et répond, si non, ne fait rien
6) une fois le retour de l'action réalisée, le client lance le troisième ordre ajax, demandant de déverouiller le personnage (en donnant la valeur du verrou)
7) le serveur identifie si le verrou est le bon, si c'est le cas, met à 0 le verrou, ne fait rien sinon.
bon après un peu de temps à utiliser ce système je me demande si il est utile de lancer trois aller retours ajax (verrouillage , action, déverrouillage) ou si il ne suffit pas de verrouiller/déverrouiller directement dans les scripts d'action. L'idée de départ était de ne pas solliciter le serveur avec des "gros scripts php". Les scripts de verrouillage et déverrouillage doivent faire 10-15 lignes chacun, contrairement aux scripts possibles pour les diverses actions
à noter ça a l air de pas trop mal marcher, dès que je suis sur un bug, une action testée interdite, etc... le personnage est complètement verrouillé. Et surtout rien n'est posé côté client, tout est côté serveur
mais il y a peut être énormément de failles, à voir avec vous