From eb2e701a5e1406c2ae3c62b6d45450022bb6d434 Mon Sep 17 00:00:00 2001 From: coderkun Date: Mon, 31 Mar 2014 21:41:19 +0200 Subject: [PATCH] add progress, XPs, rank and Character groups to Character page --- controllers/CharactersController.inc | 5 +-- models/CharactergroupsquestsModel.inc | 2 +- models/CharactersModel.inc | 50 +++++++++++++++++++++++++++ models/SeminariesModel.inc | 32 +++++++++++++++++ views/html/characters/character.tpl | 25 ++++++-------- 5 files changed, 96 insertions(+), 18 deletions(-) diff --git a/controllers/CharactersController.inc b/controllers/CharactersController.inc index e2e56b64..e64cb63f 100644 --- a/controllers/CharactersController.inc +++ b/controllers/CharactersController.inc @@ -81,12 +81,13 @@ { // Get Seminary $seminary = $this->Seminaries->getSeminaryByUrl($seminaryUrl); + $seminary['achievable_xps'] = $this->Seminaries->getTotalXPs($seminary['id']); // Get Character $character = $this->Characters->getCharacterByUrl($seminary['id'], $characterUrl); - - // Character Level + $character['quest_xps'] = $this->Characters->getQuestXPsOfCharacter($character['id']); $character['xplevel'] = $this->Characters->getXPLevelOfCharacters($character['id']); + $character['rank'] = $this->Characters->getXPRank($seminary['id'], $character['xps']); // Get Seminarycharacterfields $characterfields = $this->Seminarycharacterfields->getFieldsForCharacter($character['id']); diff --git a/models/CharactergroupsquestsModel.inc b/models/CharactergroupsquestsModel.inc index eed514dd..4490168d 100644 --- a/models/CharactergroupsquestsModel.inc +++ b/models/CharactergroupsquestsModel.inc @@ -44,7 +44,7 @@ public function getQuestsForCharactergroupsgroup($groupsgroupId) { return $this->db->query( - 'SELECT id, questgroups_id, title, url '. + 'SELECT id, questgroups_id, title, url, xps '. 'FROM charactergroupsquests '. 'WHERE charactergroupsgroup_id = ?', 'i', diff --git a/models/CharactersModel.inc b/models/CharactersModel.inc index 8dc1e2f9..7a3a5d6a 100644 --- a/models/CharactersModel.inc +++ b/models/CharactersModel.inc @@ -180,6 +180,30 @@ } + /** + * Calculate only XPs for a Character achieved through Quests. + * + * @param int $characterId ID of Character + * @return int Quest-XPs for Character + */ + public function getQuestXPsOfCharacter($characterId) + { + $data = $this->db->query( + 'SELECT quest_xps '. + 'FROM v_charactersxps '. + 'WHERE character_id = ?', + 'i', + $characterId + ); + if(!empty($data)) { + return $data[0]['quest_xps']; + } + + + return 0; + } + + /** * Get the XP-level of a Character. * @@ -204,6 +228,32 @@ return null; } + + /** + * Get the rank of a XP-value of a Character. + * + * @param int $seminaryId ID of Seminary + * @param int $xps XP-value to get rank for + * @return int Rank of XP-value + */ + public function getXPRank($seminaryId, $xps) + { + $data = $this->db->query( + 'SELECT count(v_characters.id) AS c '. + 'FROM charactertypes '. + 'INNER JOIN v_characters ON v_characters.charactertype_id = charactertypes.id '. + 'WHERE seminary_id = ? AND v_characters.xps > ?', + 'id', + $seminaryId, $xps + ); + if(!empty($data)) { + return $data[0]['c'] + 1; + } + + + return 1; + } + } ?> diff --git a/models/SeminariesModel.inc b/models/SeminariesModel.inc index 39b64763..eaf778b5 100644 --- a/models/SeminariesModel.inc +++ b/models/SeminariesModel.inc @@ -19,6 +19,12 @@ */ class SeminariesModel extends \hhu\z\Model { + /** + * Required models + * + * @var array + */ + public $models = array('questgroupshierarchy', 'questgroups'); @@ -100,6 +106,32 @@ } + /* + * Calculate sum of XPs for a Seminary. + * + * @param int $seminaryId ID of Seminary + * @return int Total sum of XPs + */ + public function getTotalXPs($seminaryId) + { + $xps = 0; + + // Questgroups + $questgroupshierarchy = $this->Questgroupshierarchy->getHierarchyOfSeminary($seminaryId); + foreach($questgroupshierarchy as &$hierarchy) + { + // Get Questgroups + $questgroups = $this->Questgroups->getQuestgroupsForHierarchy($hierarchy['id']); + foreach($questgroups as &$questgroup) { + $xps += $this->Questgroups->getAchievableXPsForQuestgroup($questgroup['id']); + } + } + + + return $xps; + } + + /** * Create a new seminary. * diff --git a/views/html/characters/character.tpl b/views/html/characters/character.tpl index 9feff427..765b3760 100644 --- a/views/html/characters/character.tpl +++ b/views/html/characters/character.tpl @@ -6,24 +6,24 @@
- +
-

Gesamtfortschritt: 85%

+

:  %

-

500

+

XP

-

7.

-

Platz

+

.

+

-

Belohnungen

+