Stendhal Achievement Development: Difference between revisions

Jump to navigation Jump to search
Content deleted Content added
imported>Madmetzger
imported>Madmetzger
 
(181 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Navigation for Stendhal Top|Contributing}}
{{Navigation for Stendhal Top|Contributing}}
{{Navigation for Stendhal Contributors}}
{{Navigation for Stendhal Contributors}}
{{Stendhal Achievements}}
== Collecting Ideas ==
== 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]]
* collect more achievement ideas and nice titles at [[Stendhal Achievement Ideas]]
** gives hints for further design decisions
** gives hints for further design decisions
** can help structuring achievements into categories
** can help structuring achievements into categories
* should fulfilling an achievement be rewarded?
== Client and Website ==

=== Client and Website ===
* Should achievements be visible within the game? (low prio)
* 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
** 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
* 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
* Have a log about recently reached achievements on the website? (i.e. player has reached ''Junior Explorer'' achievement)
* 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
== Design Ideas ==
* 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
* 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 achievment types? maybe not needed, strings could be applied in the reached achievements table
Line 18: Line 41:
CREATE TABLE achievement IF NOT EXISTS (
CREATE TABLE achievement IF NOT EXISTS (
id INTEGER AUTO_INCREMENT NOT NULL,
id INTEGER AUTO_INCREMENT NOT NULL,
charname STRING,
identifier VARCHAR,
category STRING,
title VARCHAR,
title STRING,
category VARCHAR,
description VARCHAR,
timedate TIMESTAMP default CURRENT_TIMESTAMP
base_score INTEGER,
PRIMARY KEY(id)
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
* check if player has fulfilled an achievement
** "polling" every x turns via TurnListener, but could be a bad idea as checking might be expensive
** <del>"polling" every x turns via TurnListener, but could be a bad idea as checking might be expensive</del> approach discarded --[[User:Madmetzger|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)?
** "telling" when to check, similar to tutorial events <del>or when raising game events (we have possibly the type here)?</del> approach discarded --[[User:Madmetzger|Madmetzger]] 07:20, 29 July 2010 (UTC)
** store reached achievements as string set in player object
** 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?
** how to store progress for a certain achievement?
*** using a map?
*** <del>using a map?</del>
*** key = achievement name, value progress value?
*** <del>key = achievement name, value progress value?</del> statistics should be tracked for everything that might be checked for an achievement --[[User:Madmetzger|Madmetzger]] 07:20, 29 July 2010 (UTC)
*** add data recording that can be checked
* find a way to conveniently add new achievements
* <del>find a way to conveniently add new achievements</del> using ChatConditions and the factories makes it easy to add new achievements
** loading system for achievements like stendhal quest system?
** <del>loading system for achievements like stendhal quest system?</del> AchievementNotifier loads achievements on initialization
** building block system similar to ChatConditions?
** <del>building block system using existing ChatConditions</del> Achievements use the ChatConditions for checking stuff
*** killed x creatures
*** <del>categorized 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 item</del> already implemented by categorizing achievements and checking only the right category at each event
*** collected x items
===== Quest Achievements =====
*** finished x quests
* number of finished quests already tracked
*** killed creature without a weapon
* repeatable quests should all count the completions of a player
**** looted certain collection of items
* <del>missing counting: Elf Princess Quest</del> (more missing?)
*** categorized 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 item
* <del>finished x times a quest</del> already 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 =====
* <del>killed creatures</del> already tracked
* killed creature without a weapon
* <del>killed x creatures</del> already implemented
* <del>killed x of y different creatures --> is extension of existing condition possible?</del>
===== Zone Achievements =====
* for zone visit achievements, how to check them:
** <del>hardcoded list of zones to visit for the achievement</del> hardcoded zone name lists don't seem to be maintainable
** <del>exclude all zones including "house", "apartment"</del>
** <del>zones starting with "int" are interiors, region is within zone name</del> zones have a method isInterior() to check
** <del>zones starting with a number >-1 are above ground, region is within zone name<del> exterior zones have a method getLevel()to check
** <del>zones starting with a number <-1 are below ground, region is within zone name</del> exterior zones have a method getLevel()to check
** <del>use zone level attribute, area is in name/xml file, and add a flag to zone xml for accessibility to all players</del> implemented