JeuWeb - Crée ton jeu par navigateur
Systéme de bannissement - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Systéme de bannissement (/showthread.php?tid=1626)



Systéme de bannissement - Batista69 - 22-08-2007

Bonsoir je suis actuellement entrain de créer un jeu et donc j'en arrive a la partie administration .

Voila mon probléme : Comment débannir un joueur automatiquement selon la durée du bannissement ?


RE: Systéme de bannissement - Artiou - 22-08-2007

Voilà, je crois que j'ai une réponse vu que j'y ai moi même réfléchi pour mon projet:

tu enregistres dans une table nommée bannis:
la date du bannissement, le pseudo, la date de débannissement
à chaque fois qu'un memebre se connecte, çaregarde s'il est banni

et si la date de bannissment est dépassée, tu demandes à php de demander à mysql de supprimer la ligne où le pseudo du banni apparaît voila, c'est pas trop compliqué Wink


RE: Systéme de bannissement - Globe - 22-08-2007

Hum j'y ai jamais réfléchi... En alliant un timestamp et un cron je suppose.

EDIT : La technique de Artiou est plus simple et tout aussi efficace.


RE: Systéme de bannissement - uriak - 22-08-2007

sauf si tu souhaites prévenir par mail l'heureux destinataire Wink


RE: Systéme de bannissement - Batista69 - 22-08-2007

Merci je pense que je vais utiliser le cron avec le timestamp car parfois ils sont bannis par exemple 1 heure . Smile


RE: Systéme de bannissement - denisc - 22-08-2007

oui, mais elle pose un problème quand aux dates de débanissement!

Imaginons un tricheur, bloqué mais sécurisé (c'est à dire inattaquable, mais n'ammassant plus les ressources, PA, PV...) pour 24:00 le 1/9/7 à 13:00. Il faut qu'il soit à nouveau attaquable le lendemain, 2/9/7 à 13:00 pour les autres joueurs!

Celà implique que les tests de ban doivent se faire, non pas sur la connexion du joueur banni (car si celui-ci se connecte le 8/9/7 à 13:00, c'est à dire une semaine après son ban, il n'aura pas été attaqué par les autres joueurs, certes, mais n'aura pas non plus récupéré les PV et PA de ses personnages non plus, alors que ceux-ci auraient du en récupérer pendant les 6 jours de non bloquage et qu'il aurai pu être attaqué durant cette même période!), mais à chaque fois qu'une requête est envoyée au serveur... Et ça, ça peut être vite très lourd.

Le mieux semble donc d'utiliser un système de cron, un certain nombre de fois par jour (genre avec 2 maj des ban par jour: 0:00 et 12:00, quand tu es bloqué pour 24h le 3/10 à 15:00, tu ne peux pas être libéré avant le 5/10 à 0:00)


RE: Systéme de bannissement - Artiou - 23-08-2007

ce que j'ai proposé en effet ne marche que lorsque il s'agit d'un chat ou d'un jeu où la triche dans ce sens est impossible.
mais pour moi lors du ban, le banni ne reçoit pas de ressources..

en fait ,je connais pas les crons, mais je vais voir ce que c'est (non j'ai pas encore fini le tuto de m@teo


RE: Systéme de bannissement - uriak - 23-08-2007

C'est comme un simple problème de ressources, où l'un des "ressources" serait le statut "banni".
Les situations possible sont les suivantes

Le joueur veut savoir s'il est banni : au log, une fonction vérifie la date par rapport à la date calculée de "déban". Elle restaure le statut du joueur si le temps de la punition est passé.

Pour la mise à jour des ressources :
il faut créer la structure (table suivante, pour les bans)

ban : joueur, date de ban, durée de ban, statut.
le statut peut être : en cours, résolu.

Lors du ban, le statut devient en cours. A chaque intervention du joueur ou d'un ennemi, la séquence suivante doit être réalisée :
Code :
if joueur a un épisode de ban non résolu (à stocker comme on veut)  
{
   Date_deban = date_ban+ durée_ban
   if date_deban < date_actuelle (il est banni)
  {
      if date_last_update < date_ban : actualiser ressources jusqu'à date_ban
      else  : ne pas ajouter de ressources
      mettre date_last_update = date_actuelle
  }
  else (il n'est plus banni)
  {
      if date_last_update < date_ban : actualiser ressources jusqu'à date_ban PUIS actualiser entre date_deban et date_actuelle
      else  if date_last_update > date_ban && date_last_update < date_deban : actualiser entre date_deban et date_actuelle
      else : actualiser normalement entre date_last_update et date_actuelle
      mettre date_last_update = date_actuelle

     mettre la procédure de ban en cours en résolu : les prochain appels n'auront pas à passer par cette fonction
   } //else
}//if
else joueur sans ban non résolu
{
   actualiser ressources entre date_last_update et date_actuelle
   date_last_update = date_actuelle
}

cette grosse fonction traduit l'effet de blocage sur les ressources d'un joueur, tout en autorisant la consulation et le vol par les autres.

Evidemment, on peut s'éviter ce mal si on fait bien les choses en amont : le ban actualise toutes les ressources du banni, plus impossibilité de piller lors d'un ban (mais vérificiation du statut et mise à jour quand même)


RE: Systéme de bannissement - denisc - 23-08-2007

CQFD
+1 pour toi Uriak