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 :
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)
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)