View Issue Details

IDProjectCategoryView StatusLast Update
0002477VariiSpace[All Projects] Generalpublic2018-11-14 19:18
ReporterXenosAssigned ToXenostom 
PrioritynormalSeverityfeatureReproducibilityN/A
Status UnderstoodResolutionopen 
Product Version 
Target VersionFixed in Version 
Summary0002477: Mécanisme d'achievement
DescriptionIl faudrait intégrer un mécanisme d'achievement.

Trois approches possibles:
1) Si l'endroit où l'achievement peut être gagné est unique, alors on fait un "CALL achievement('NOMACHIEVEMENT', idPlayer, <<condition>>)" et cet endroit d'appel doit être unique car <<condition>> ne doit pas être répété dans le code
2) Si un achievement peut être débloqué à plusieurs endroits, alors on appelle un "CALL check_achievement(idPlayer)" et cette procédure contient TOUTES les conditions de TOUS les achievements (c'est plus centralisé, mais peut-être vachement moins performant)
3) On mixe les deux: on a une seule procédure d'achievement, mais on lui passe le nom de l'achievement à checker en plus de l'ID du joueur; on peut envisager de lui passer une catégorie d'achievement ou un "tag" ou une liste d'achievements à checker

Perso, je penche pour la 2e solution, ou la 3e si la 2e est vraiment trop lente

Il faudra aussi que l'achievement apparaisse à l'écran du joueur. Pour cela, je pense que le mieux est d'ajouter un resultset au niveau du template "webgame", ou éventuellement au niveau du template JSON (si le cas est nécessaire).
Dans l'idée, le check de "ai-je déverrouillé l'achievement" se fait dans le endpoint (dans la procédure SQL du endpoint, via CALL check_achievement(...)") et la procédure au niveau du template va récupérer la liste des nouveaux achievements.
Une autre alternative encore serait de laisser la page HTML faire un appel AJAX dédié aux nouveaux achievements. L'appel renvoie alors les achievements pas encore vus (si un paramètre GET est passé, si il n'est pas passé alors ce endpoint peut renvoyer la liste de tous les achievements) et le code dans la page HTML (qui est définit au niveau du template JS) peut l'afficher.
C'est probablement bien plus simple à la maintenance et à l'exécution.

A voir même si cet appel AJAX peut checker les nouveaux achievements (AKA je n'ai plus de CALL achievement(...) dans les procédures des endpoint, mais je l'ai dans ce endpoint AJAX uniquement). => C'est la meilleure solution IMO

L'endpoint sera donc POST (car il modifie le serveur), et il va calculer les achievements du joueur, et renvoyer la liste des nouveaux achievements.
TagsNo tags attached.
Attach Tags

Activities

Xenostom

Xenostom

2018-11-14 15:40

developer   ~0003888

Ce n'est franchement pas le plus prioritaire, mais ça va être cool à faire :)
Xenos

Xenos

2018-11-14 19:18

administrator   ~0003889

En fait, ce ne sera pas aussi trivial que je pensais car certains achievment sont un "évènement" (1er vaisseau par exemple), un évènement conditionnel (1ere molécule de plus de 20 atomes), une statistique (construire 200 vaisseaux) voire une succession d'évènements (attaquer un joueur moins d'1 minute après avoir été attaqué).

Donc, je pense qu'il faudra attendre que le jeu soit un peu plus opérationnel pour faire tout ça, et il me faudra lister d'abord les achievment que je veux implémenter avant de plonger dans la méthode pour les implémenter.

Add Note

View Status
Note

Issue History

Date Modified Username Field Change
2018-10-21 19:18 Xenos New Issue
2018-10-21 19:19 Xenos Description Updated View Revisions
2018-11-14 15:40 Xenostom Assigned To => Xenostom
2018-11-14 15:40 Xenostom Status New => In progress
2018-11-14 15:40 Xenostom Note Added: 0003888
2018-11-14 19:18 Xenos Status In progress => Understood
2018-11-14 19:18 Xenos Note Added: 0003889