27-05-2009, 09:05 AM
Je viens cette fois parler d'un problème de performance/algorithme et de la solution que j'ai appliquée.
Commençons par planter le décors.
Je souhaite, dans le cadre d'un module bien spécifique, faire évoluer une quantité de besoin pour tous les PNJs présents dans le jeu. (c'est assez orienté micro management)
Les besoins de ces PNJs varient en fonction de leur race. Par exemple
Pour simplifier le tout, l'évolution des besoins n'est pas le résultat d'un simple tirage aléatoire mais est déterminé sur une table de résultats.
Par exemple
Le problème auquel j'ai du faire face est le suivant :
Toutes les heures, les besoins de tous les PNJs doivent être réévalués en utilisant les règles ci dessus (j'utilise un CRON pour cela).
Comment y parvenir de manière efficace et pas trop lourde sans écrouler ni le serveur SQL ni le serveur PHP (imaginez 200 joueurs avec chacun 100 PNJs) ?
Je vous laisse réfléchir au problème avant de proposer ma solution (qui n'est peut être pas la meilleure) histoire de comparer nos approches et nos méthodes.
Commençons par planter le décors.
Je souhaite, dans le cadre d'un module bien spécifique, faire évoluer une quantité de besoin pour tous les PNJs présents dans le jeu. (c'est assez orienté micro management)
Les besoins de ces PNJs varient en fonction de leur race. Par exemple
Code :
Race | Faim |Hygiène| Santé | Repos | Loisir| Zen |
--------|-------|-------|-------|-------|-------|-----|
Astyrion| 1 à 6 | 1 à 4 | 1 à 6 | 1 à 6 | 1 à 6 |1 à 6|
Bellist | 2 à 8 | 1 à 2 | 1 à 6 | 1 à 2 | 1 à 6 |1 à 6|
Curcen | 1 à 4 | 1 à 6 | 3 à 9 | 1 à 6 | 4 à 8 |1 à 6|
Dyrtan | 1 à 6 | 4 à 8 | 1 à 6 | 2 à 6 | 2 à 8 |1 à 2|
Par exemple
Code :
Astyrion : Faim
01-25 1
25-50 2
51-80 3
81-95 4
96-99 5
100 6
Astyrion : Hygiène
01-50 1
51-75 2
76-90 3
90-100 4
etc
Le problème auquel j'ai du faire face est le suivant :
Toutes les heures, les besoins de tous les PNJs doivent être réévalués en utilisant les règles ci dessus (j'utilise un CRON pour cela).
Comment y parvenir de manière efficace et pas trop lourde sans écrouler ni le serveur SQL ni le serveur PHP (imaginez 200 joueurs avec chacun 100 PNJs) ?
Je vous laisse réfléchir au problème avant de proposer ma solution (qui n'est peut être pas la meilleure) histoire de comparer nos approches et nos méthodes.
Quand on te dit qu'un projet est terminé à 90%, prépare toi pour les 90% suivant
Ninety-Ninety Rule
"Une guerre de religions, c'est quand deux peuples s'entretuent pour savoir qui a le meilleur ami imaginaire"
Vu sur IRC
Ninety-Ninety Rule
"Une guerre de religions, c'est quand deux peuples s'entretuent pour savoir qui a le meilleur ami imaginaire"
Vu sur IRC