Reputation System

Volity's reputation system gives all the players, parlors and UI files on the network a rating based on other players' experiences with them. A very basic system patterned after already well-known systems like eBay's, it lets players express a positive, negative, or neutral stance towards one of these things, provided they have just played a game with them. In other words, after playing a game of Bridge with three other people, each player can assign a new stance to each of the three opponents, the server, and the UI file that player used. A player can hold only one attutitude at a time towards a single thing, however; assigning a new stance towards something replaces the stance that might have been there already.

An entity's reputation score is the sum of all the player-stances it has received: +1 for positive, -1 for negative, 0 for neutral. This score -- as well as the positive/negative/netural totals that comprise it -- is public knowledge for each thing, meant to help a player select opponents, servers, and UIs.

We have yet to work out the exact protocol for how and when this information will be collected, but we definitely want it ready for [Volity 1.0]?.

Proposed Protocol

These are all client-to-bookkeeper RPC requests.

Within the arguments, identifier stands for any player or parlor JID, or any UI file's URL. In every case, the bookkeeper returns a fault if it knows of no object with the supplied identifier.

get_reputation(identifier)
Requests the total reputation score of the object with the given identifier. The return value is an integer representing this score.
get_stance(idenitifier, player-JID)
Requests the stance that the player with the given JID holds towards the identified object. Returns a fault if no such stance exists. Otherwise, returns an array of the format [stance, reason], where stance is one of (-1, 0, 1) and reason is a (possibly empty) text string.
get_stances(idenitifer)
Requests all the stances recorded for the identified object. Returns an array, each member of which is an array of the format [player-JID, stance, reason] (see previous definition).
set_stance(identifier, stance, reason)
A request to set the sending player's stance towards the identified object. Returns a fault if the provided stance is any value other than one of (-1, 0, 1), or if the sender hasn't played a game with the identified object (or, indeed, if the object appears to be the sending player). Otherwise, the bookkeeper updates its reputation database and returns truth.