Stendhal Achievement Development: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
imported>Madmetzger |
imported>Madmetzger |
||
| (189 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}} |
|||
| ⚫ | |||
== How to add achievements to the game? == |
|||
{{TODO|describe the steps towards adding new achievements |
|||
* Conditions |
|||
* Tracked data |
|||
| ⚫ | |||
** 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. |
|||
| ⚫ | |||
* 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? |
|||
| ⚫ | |||
| ⚫ | |||
* 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 |
|||
| ⚫ | |||
* Have a audio notice when someone reaches an achievement? |
|||
| ⚫ | |||
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, |
||
identifier VARCHAR, |
|||
title VARCHAR, |
|||
category VARCHAR, |
|||
description VARCHAR, |
|||
| ⚫ | |||
base_score INTEGER, |
|||
PRIMARY KEY(id) |
PRIMARY KEY(id) |
||
) |
) |
||
CREATE TABLE reached_achievement IF NOT EXISTS ( |
|||
id INTEGER AUTO_INCREMENT NOT NULL, |
|||
charname VARCHAR, |
|||
| ⚫ | |||
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 |
|||
| ⚫ | |||
* <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 |
|||
| ⚫ | |||
| ⚫ | |||
===== Quest Achievements ===== |
|||
*** finished x quests |
|||
* number of finished quests already tracked |
|||
| ⚫ | |||
* repeatable quests should all count the completions of a player |
|||
| ⚫ | |||
* <del>missing counting: Elf Princess Quest</del> (more missing?) |
|||
| ⚫ | |||
* <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) |
|||
| ⚫ | |||
| ⚫ | |||
===== Fighting Achievements ===== |
|||
* <del>killed creatures</del> already tracked |
|||
| ⚫ | |||
* <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 |
|||