Your question really consists of 2 parts, i.e. about how to implement:
- a reputation system, which is like an evaluation by multiple users about a specific user.
- a goals achievement system, which is like rewarding a user after completing various tasks, challenges, etc.
Read on for more details about how to implement each of both systems.
Goals achievement system
There are typically 2 modules you can choose from for such kind of system, i.e:
The Achievements module, as suggested in another answer already. This module relies heavily on custom coding to handle many of the functions.
The Goals module (Disclosure: I'm the maintainer of it), which can be used to incentivize anything on your site, such as voting, sharing content, creating relationships, etc.
Goals and Tasks are implemented using fieldable entities. Some examples of tasks to be completed could be:
- Log in to the site once per day for three consecutive days.
- Post a number of nodes of selected content types.
- Make a Friend connection on the site.
- Etc.
You can customize Goals via "Manage Fields" and/or "Manage display". Everything can be done with site building features only (no custom code involved), though hooks are available to integrate it in custom coding also. So the Goals module is built around using the admin interface configuration. Plus, goals and tasks within the Goals module are fieldable entities, so you have the flexibility to add additional fields and incorporate these entities into Views. Using the Goals Extras
sub-module it integrates with the User Points module also.
Head over to the Goals video which includes:
- a general introduction to the module.
- a demonstration to install, configure and use it.
- samples of how it uses the Rules modules to do its magic (i.e. to track the progress of a user to achieve the various goals).
Reputation system
By using the Answers module (Disclosure: I'm a (co-)maintainer of it) you can "put in a good reputation system" (as in your question). Here are some details about it (from its project page):
Answers enables the implementation of a Question & Answer system in a Drupal site. Users can post questions and other users can answer them.
Head over to its project page for more details. Visit its demo site for a demonstration (in read only mode for anonymous users) of Views based lists of:
The "core" Answers module enables the content types Question and Answer, whereas Answers are displayed below the Question they relate to.
These 2 content types are fiedable, you can manage their displays, etc.
Use its sub-modules to enable selected functionality (based on a site's requirements), i.e.:
- Answers Best Answer, which allows for marking any of the answers to a specific question as the best (accepted) answer (to display the blue check marks to the left of each answer, and which is replaced by a green checkmark when an answer is marked as the best answer).
- Answers Theme, which transforms the (rather boring) vanilla display of a Question (and its related Answers below it), into a way more attractive look-and-feel. Such as the orange bubble that is added around the question (to better highlight it).
- Answers Notification, to allow logged in users to subscribe to selected questions, so that they receive notifications (using the Message Stack) when Questions receive Answers.
- Answers Voting, to implement a system to upvote or downvote either Questions and/or Answers (which uses the Rate module).
- Answers Userpoints, to increase or decrease "reputation points" (which uses the Userpoints module) on events such as up- or down-voting on a question or answer, or marking an Answer as the "Best Answer".
Quite a lot of its "business logic" is implemented via all sorts of configurable rules (using the Rules module). As an example, if you don't agree with the out-of-the-box rules about how much "userpoints" are granted to an upvoted (or downvoted) question (or answer), you just use the Rules UI to tune the amount of such points to your requirements. E.g.: should downvoting questions really be free (i.e: Should the downvoter loose any points in doing so?).
For the sake of completeness, below is a rule (in Rules export format), which is used to grant '+15' points to the author of an Answer, together with '+2' points for the user who marks that answer as accepted (= the author of the Question), whereas marking it as such is done by flagging that Answer as 'Best answer' (using the Flag module):
{ "rules_flag_answers_best_answer" : {
"LABEL" : "flag_answers_best_answer",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"TAGS" : [ "answers" ],
"REQUIRES" : [ "rules", "userpoints_rules", "flag" ],
"ON" : { "flag_flagged_best_answer" : [] },
"IF" : [
{ "NOT data_is" : { "data" : [ "flagging-user" ], "value" : [ "flagged-node:author" ] } }
],
"DO" : [
{ "userpoints_action_grant_points" : {
"user" : [ "flagged-node:author" ],
"points" : "15",
"tid" : "0",
"entity" : [ "" ],
"operation" : "addPoints",
"display" : 1,
"moderate" : "default"
}
},
{ "userpoints_action_grant_points" : {
"user" : [ "flagging-user" ],
"points" : "2",
"tid" : "0",
"entity" : [ "" ],
"operation" : "addPoints",
"display" : 1,
"moderate" : "default"
}
}
]
}
}