Stendhal Achievement Development
Jump to navigation
Jump to search
Stendhal Achievements
How to add achievements to the game?
TODO: describe the steps towards adding new achievements
- Conditions
- Tracked data
- How to check for new reached achievements?
- Quests needs manual work
- item looting, zone changes trigger automatically achievement checks
Development Idea Collection
Within this section you find ideas and concepts on initial development of achievements.
Collecting Ideas
- collect more achievement ideas and nice titles at Stendhal Achievement Ideas
- gives hints for further design decisions
- can help structuring achievements into categories
- should fulfilling an achievement be rewarded?
Client and Website
- Should achievements be visible within the game? (low prio)
- look action on player could be extended by a title based on the amount of fullfilled achievements
- Website should be extended with a hall of fame section on achievements
- calculate a score on difficulty of an achievement (killing x rats gets less points than reaching max xp for example)
- basic score for each achievement
- actual score for each reached achievement = basic score / number of players having reached that achievement
- display medals on character pages; different colours or design in relation to the calculate point
- calculate a score on difficulty of an achievement (killing x rats gets less points than reaching max xp for example)
- Have a log about recently reached achievements on the website? (i.e. player has reached Junior Explorer achievement)
- Add reaching achievements to recent events page
- Have a audio notice when someone reaches an achievement?
Design Ideas
There are several things to consider when developing the achievements handling.
Database and Class Model
- database table(s) to display achievements on website
- table for achievment types? maybe not needed, strings could be applied in the reached achievements table
- table for player has reached achievement
- possible class model draft and a corresponding table draft
CREATE TABLE achievement IF NOT EXISTS ( id INTEGER AUTO_INCREMENT NOT NULL, identifier VARCHAR, title VARCHAR, category VARCHAR, description VARCHAR, base_score INTEGER, PRIMARY KEY(id) ) CREATE TABLE reached_achievement IF NOT EXISTS ( id INTEGER AUTO_INCREMENT NOT NULL, charname VARCHAR, timedate TIMESTAMP default CURRENT_TIMESTAMP, achievement_id INTEGER, PRIMARY KEY(id) )
Ingame tracking and checking
- check if player has fulfilled an achievement
"polling" every x turns via TurnListener, but could be a bad idea as checking might be expensiveapproach discarded --Madmetzger 07:20, 29 July 2010 (UTC)- "telling" when to check, similar to tutorial events
or when raising game events (we have possibly the type here)?approach discarded --Madmetzger 07:20, 29 July 2010 (UTC) - store reached achievements as string set in player object: load reached achievements from database on login into a volatile set in player object
- how to store progress for a certain achievement?
using a map?key = achievement name, value progress value?statistics should be tracked for everything that might be checked for an achievement --Madmetzger 07:20, 29 July 2010 (UTC)- add data recording that can be checked
find a way to conveniently add new achievementsusing ChatConditions and the factories makes it easy to add new achievementsloading system for achievements like stendhal quest system?AchievementNotifier loads achievements on initializationbuilding block system using existing ChatConditionsAchievements use the ChatConditions for checking stuffcategorized by type of event to determine what to check, i.e. killed x creatures of type y condition should only be checked when having killed a creature but not on looting an itemalready implemented by categorizing achievements and checking only the right category at each event
Quest Achievements
- number of finished quests already tracked
- repeatable quests should all count the completions of a player
missing counting: Elf Princess Quest(more missing?)finished x times a questalready implemented
Item Achievements
- looted items should be tracked in a map for each player with key item name and value number of loots
- looting items (not yet tracked)
- putting items into bank (not yet tracked)
- collected x items
- looted certain collection of items
Fighting Achievements
killed creaturesalready tracked- killed creature without a weapon
killed x creaturesalready implementedkilled x of y different creatures --> is extension of existing condition possible?
Zone Achievements
- for zone visit achievements, how to check them:
hardcoded list of zones to visit for the achievementhardcoded zone name lists don't seem to be maintainableexclude all zones including "house", "apartment"zones starting with "int" are interiors, region is within zone namezones have a method isInterior() to checkzones starting with a number >-1 are above ground, region is within zone nameexterior zones have a method getLevel()to checkzones starting with a number <-1 are below ground, region is within zone nameexterior zones have a method getLevel()to checkuse zone level attribute, area is in name/xml file, and add a flag to zone xml for accessibility to all playersimplemented