Monday, June 25, 2012

Ingame rendering

Hello!

Finally also the ingame rendering for the achievement app is ready. Here it comes:


Yours Cotare

Monday, June 18, 2012

Admin Tools

Hiho!

The Achievement Tracker is almost done (except for testing) so now I focus on the admin tools. Once they are finished I can test and debug the Tracker too.

Admin tools will basically allow for two different things:
  • Achievement settings / Achievements editor
  • CSR tool to manipulate a character's progress
I decided to implement the admin tools as another WebIG app. That way I may reuse the authentication system of WebIG. Also CSR tools ingame might come in quite handy.

I'll be posting new schemes and layouts for the PHP classes within the next few days.

cya then,
yours Cotare

Monday, June 4, 2012

Achievement Tracker / PHP-cronjob

Hiho!

Well, currently the achievement tracker is under development, so here comes some information on that:

The tracker is used to evaluate a character's progress with the achievements. Basically this is done using a cronjob. Ok, actually it's not a real cronjob. We need a cronjob though to handle our tracker and monitor it. The tracker script is set to call itself before terminating. So we have a powerful way to handle load on the server.

There are three core components of the tracker: the DataHandler, DataSources and Atoms

DataHandler:
The DataHandler is set up to provide access to actual game data. This allows us to query for things like "a characer's dappers" without knowing where the data is stored or how it is returned to us. DataHandler does that for us.

DataSource:
DataSources are created by the DataHandler. They are defined in the config file, so you may add as many DataSources as you like. By default there will be three DataSources: XMLapi, ValueCache and RingOpen. Each datasource reports to the DataHandler which data they can provide and also offer a function to retrieve and even write (if possifle) data. The DataHandler does the rest.

Atoms:
Atoms define our triggers, so the script will know when an achievement is triggered. Like their name suggests, Atoms are the most atomic bricks. The can be granted or denied. This is still work in progress, so here is just a short preview how Atoms might be scripted:
VALUE dappers = c_money
IF(dappers >= 5000) {
    GRANT
}

VALUE tmp = c_fame[scorchers]
IF(tmp == 0) {
    DENY:3600
}

VALUE x = c_pos_x
VALUE y = c_pos_y
SCRIPT inside(x,y) {
    IF(MSG == "Majestic Garden") {
        GRANT
    }
}

EVENT player_death
ON player_death {
    UNLOCK
}

EVENT region_changed
ON region_changed {
    IF(MSG == "Majestic Garden") {
        GRANT
    }
}
Ok, that's all for the moment. I'll be posting more information on this topic a soon as I make progress.

Yours Cotare

Tuesday, May 29, 2012

Frontend Class Scheme

For all that are interested, here comes the curent class scheme used to render the achievement frontend:


Sunday, May 27, 2012

Frontend Preview #1

Hiho!

Here comes the first frontend preview that should demonstrate what the system is capable of. Ejoy!


Friday, May 25, 2012

Database Scheme

The database layout is getting finished :) So here it comes:

Category:
The category allows us to build the achievement sidemenu, grouping achievements. Submenus are supported.

Achievement:
Achievements are tied to a category in which they get displayed. They may have a parent achievements so they won't show up until the parent is completed.
Also achievements may be tied to a race, cult or civilization (eg. Reach 100 fame with XX while being Matis/Karavan aligned)

Tasks:
Tasks are considered to be "subachievements". This allows us to define various "levels" of an achievement (eg: Obatin 1,000/10,000/100,000/.... dappers). Achievements like "Break a pick" just have one task.

Objectives:
Since tasks are only a "container", they do not define what has to be done. Objectives are tied to tasks and are used to define the objectives needed to complete a task. The display options for an objective are "simple" (just text), "meta" (tied to another achievement) and "value" (tied to a value that's shown on a progress bar).

Atoms:
Atoms are invisible to the player but the most essential part of the achievements system. Each objective may have 1 to infinite atoms which hold the information needed by the achievement tracker. Atoms may be granted of denied, either progressing an achievement or preventing further progress based on conditions. This may be used by eg. boss scripts to handle complex achievements. Anyhow, atoms basically define the "data source", the "expected value" and "which value" (eg.: XMLapi;>10000;character:money). This part is still WIP.

Tracker:
For now I defined four tables to be filled by the tracker. They store the character's progress with the achievements. The "player_valuecache" can be used to compare changes of a value over time.

Monday, April 30, 2012

setting up...

Well, let me see:

Ryzom Core Shard running, Client working, WebIG is still refusing to do so. At least most things are now set up and I'm able to compile everything from source too.