19-09-2006, 03:02 AM
Il faudrais que tu sois plus précis... si tu veux qu'une personne ne puisse attaquer une personne qu'une fois par 24h, une relation attaque(int(11) #assaillant, int(11) #assalli, int(11)timestamp) suffirait, avec un nettoyage occasionnel de la table 'delete from attaque where timestamp <= '.time(); et la condition permettant l'attaque :
'select * from attaque where assaillant = '.$id_assaillant.' and assalli = '.$id_assalli.' and timestamp <= '.time();
Si cette reqette ne retourne pas de résultat, l'attaque est possible, et toute attaque effectuée implique que le compteur soit remis a time() + 1j.
Ensuite, tu fais le nettoyage de la base quotidiennement et le tour est joué.
Cette méthode permet a un jour de n'attaquer qu'une seule fois un autre joueur sur une periode donnée, mais rien n'empeche 50 personnes d'attaquer le meme joueur dans ce laps.
Si c'est justement ce que tu veux, a ta place, je pense que j'utiliserai la même méthode sauf que la table attaque ressemblerai a attaque(int(11) #assailli, int(11)timestamp) où timestamp stockerai la date de l'attaque, et que je testerai si il est possible d'attaquer par la requete :
'count(assalli) from attaque where assalli = '.$id_assalli.' and timestamp > '.(time() - 86400);
Il te suffit alors de tester si le resultat est supérieur ou inférieur au nombre maximum d'attaque possible /24h pour savoir si il est encore possible d'attaquer ce joueur.
Ensuite, comme pour la méthode précédente, un 'delete from attaque where timestamp <= '.(time() + 84600); journalier est de toute façon indispensable pour pas encombrer inutilement ta bdd.
'select * from attaque where assaillant = '.$id_assaillant.' and assalli = '.$id_assalli.' and timestamp <= '.time();
Si cette reqette ne retourne pas de résultat, l'attaque est possible, et toute attaque effectuée implique que le compteur soit remis a time() + 1j.
Ensuite, tu fais le nettoyage de la base quotidiennement et le tour est joué.
Cette méthode permet a un jour de n'attaquer qu'une seule fois un autre joueur sur une periode donnée, mais rien n'empeche 50 personnes d'attaquer le meme joueur dans ce laps.
Si c'est justement ce que tu veux, a ta place, je pense que j'utiliserai la même méthode sauf que la table attaque ressemblerai a attaque(int(11) #assailli, int(11)timestamp) où timestamp stockerai la date de l'attaque, et que je testerai si il est possible d'attaquer par la requete :
'count(assalli) from attaque where assalli = '.$id_assalli.' and timestamp > '.(time() - 86400);
Il te suffit alors de tester si le resultat est supérieur ou inférieur au nombre maximum d'attaque possible /24h pour savoir si il est encore possible d'attaquer ce joueur.
Ensuite, comme pour la méthode précédente, un 'delete from attaque where timestamp <= '.(time() + 84600); journalier est de toute façon indispensable pour pas encombrer inutilement ta bdd.