JeuWeb - Crée ton jeu par navigateur
Système de missions, comment faire ? - 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 missions, comment faire ? (/showthread.php?tid=7506)



Système de missions, comment faire ? - Nov@_ - 21-11-2015

Bonjour tout le monde.
Aujourd'hui je recherche comment faire un système de missions optimisé.
Par exemple :

- Achète toi de nouveaux vêtements

Quand on achète un vêtement, il faut faire une condition ? ou tout stocké dans une base de données.
Car si jamais on as complété la mission puis après on revends les vêtements (c'est un exemple), ça reste toujours ?


RE: Système de missions, comment faire ? - Xenos - 21-11-2015

Salut,

je ne suis pas sûr d'avoir compris l'histoire de la revente de vêtement, mais pour ma part, j'implémenterai cela comme un évènement. Probablement sous la forme "<<objet>> <<action à faire>>". Stocké donc dans une table dédiée (id, id joueur, id/enum type objet, id/enum type action). Enfin, dans le code, quand une action a lieue, elle se signale au reste du code (flûte, ça porte un nom ce pattern... ah oui... Observer!). Du coup, s'il y a une "mission" correspondant à cette action effectuée (qui serait composée de <<sujet>> <<objet>> <<action réalisée>>), elle est marquée comme remplie (et elle peut déclencher d'autres trucs, comme la création d'une nouvelle mission, ou une récompense etc).

Regarde du coté des implémentations pour les "succès", je pense que ta problématique en est très proche.


RE: Système de missions, comment faire ? - haoxi - 23-11-2015

Salut,

Je ferais plutôt autrement : 2 tables :

Code :
Table : Mission
Id_Mission
Titre mission // action à faire

Code :
Table : Mission_Effectuee
Id_Mission_Effectuee
Id_Mission
Id_Joueur

Dans la table mission tu remplies toutes les missions que tu veux :
Code :
1 Mettre un vetement
2 mettre des chaussettes
3 Mettre un pull

Puis dans la deuxième :
Code :
1 1 2
2 2 2

Là on sait que le joueur qui à l'id 2 à réussit deux missions. dont Mettre un vêtement et mettre des chaussettes.

Puis tu rajoutes une entré lorsque ton joueur met un vetement sur son personnage.

Tu vois le principe ?


RE: Système de missions, comment faire ? - Ter Rowan - 24-11-2015

je rejoins Xenos, pattern Observer

la table mission :

id_mission / titre / objet_à_observer / action_à_observer / quantité_à_obtenir (quantité d'événements)

la table mission_pour_le_joueur

id_mission / id_joueur / quantité_réalisée / terminé (true/false)

- le joueur est abonné a la liste des événements des id_mission de la table mission_pour_le_joueur
- a chaque fois que le joueur réalise une action un événement est créé. Si cet événement est dans la liste des événements observées, on ajoute 1 à quantité réalisée
- quand la quantité_réalisée, pour une id_mission = quantité_à_obtenir , on passe à true terminé


RE: Système de missions, comment faire ? - Ter Rowan - 24-11-2015

à noter je rajoute un champs terminé, logiquement inutile (la quantité suffit) mais permettant d'aller plus vite (plus facile à lire dans le code aussi) pour connaitre la liste des missions et permettant aussi plus d'évolutivité (si jamais pour réussir une mission il faut plusieurs actions par exemple)


RE: Système de missions, comment faire ? - Xenos - 24-11-2015

Pour le "terminé", à voir du coté des colonnes virtuelles (qui existent en MySQL 5.7 je crois), ou à défaut, du coté des vues (qui existent en MySQL depuis un moment). Cela évite de polluer les données brutes avec ces colonnes calculées, mais cela permet quand même d'avoir cette information à disposition facilement.

Sinon, si cette colonne sert au problème de "il faut plusieurs actions", alors je la trouve mal placée. Ok pour avoir la colonne "terminée" dans la table des missions "à quantitées", pour indiquer que la mission est finie; mais si on veut ajouter des missions nécessitant plusieurs actions, autant faire du Composite: un nouveau type de mission qui est en fait un "assemblage" de plusieurs autres missions (elles-mêmes composites ou basées sur les quantités).