From 29cfdee59f559714441a9f5661ddd0028b77b244 Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 19 Mar 2014 01:24:45 +0100 Subject: [PATCH] calculate XPs for Questgroups --- controllers/QuestgroupsController.inc | 17 ++++- controllers/SeminariesController.inc | 3 + models/QuestgroupsModel.inc | 95 ++++++++++++++++++++++++++- views/html/questgroups/questgroup.tpl | 2 +- views/html/seminaries/seminary.tpl | 2 +- 5 files changed, 112 insertions(+), 7 deletions(-) diff --git a/controllers/QuestgroupsController.inc b/controllers/QuestgroupsController.inc index 42e19d05..7ae4bd72 100644 --- a/controllers/QuestgroupsController.inc +++ b/controllers/QuestgroupsController.inc @@ -83,15 +83,26 @@ // Get Questgroups $hierarchy['questgroups'] = $this->Questgroups->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']); - // Check permission of Questgroups - for($i=1; $iQuestgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']); + // Get additional data + for($i=0; $iQuestgroups->getAchievedXPsForQuestgroup($hierarchy['questgroups'][$i]['id'], $character['id']); + + // Check permission of Questgroups + if($i >= 1) { + $hierarchy['questgroups'][$i]['access'] = $this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']); + } } } // Get texts $questgroupTexts = $this->Questgroups->getQuestgroupTexts($questgroup['id']); + // Get Character XPs + $questgroup['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($questgroup['id'], $character['id']); + + // Get Quests $quests = null; if(count($childQuestgroupshierarchy) == 0) diff --git a/controllers/SeminariesController.inc b/controllers/SeminariesController.inc index 571e636f..867e25e1 100644 --- a/controllers/SeminariesController.inc +++ b/controllers/SeminariesController.inc @@ -111,6 +111,9 @@ $hierarchy['questgroups'][$i]['text'] = $text; } + // Get Character XPs + $hierarchy['questgroups'][$i]['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($hierarchy['questgroups'][$i]['id'], $character['id']); + // Check permission of Questgroups if($i >= 1) { $hierarchy['questgroups'][$i]['access'] = $this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']); diff --git a/models/QuestgroupsModel.inc b/models/QuestgroupsModel.inc index d19795d2..e1fe83a4 100644 --- a/models/QuestgroupsModel.inc +++ b/models/QuestgroupsModel.inc @@ -49,9 +49,11 @@ */ public function getQuestgroupsForHierarchy($hierarchyId, $parentQuestgroupId=null) { + // Get Questgroups + $questgroups = array(); if(is_null($parentQuestgroupId)) { - return $this->db->query( + $questgroups = $this->db->query( 'SELECT id, questgroupshierarchy_id, pos, title, url '. 'FROM questgroups '. 'WHERE questgroups.questgroupshierarchy_id = ? AND parent_questgroup_id IS NULL '. @@ -62,7 +64,7 @@ } else { - return $this->db->query( + $questgroups = $this->db->query( 'SELECT id, questgroupshierarchy_id, pos, title, url '. 'FROM questgroups '. 'WHERE questgroups.questgroupshierarchy_id = ? AND parent_questgroup_id = ? '. @@ -71,6 +73,17 @@ $hierarchyId, $parentQuestgroupId ); } + + // Add additional data + foreach($questgroups as &$questgroup) + { + // Total XPs + $questgroup['xps'] = $this->getAchievableXPsForQuestgroup($questgroup['id']); + } + + + // Return Questgroups + return $questgroups; } @@ -251,6 +264,84 @@ } + /** + * Summarize XPs of all Quests for a Questgroup and its + * sub-Questgroups. + * + * @param int $questgroupId ID of Questgroup + * @return Sum of XPs + */ + public function getAchievableXPsForQuestgroup($questgroupId) + { + // Sum of XPs + $xps = 0; + + // Current Questgroup + $questgroup = $this->getQuestgroupById($questgroupId); + + // Quests of current Questgroup + $quests = $this->Quests->getMainquestsForQuestgroup($questgroup['id']); + foreach($quests as &$quest) { + $xps += $quest['xps']; + } + + // XPs of child Questgroups + $childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($questgroup['questgroupshierarchy_id']); + foreach($childQuestgroupshierarchy as &$hierarchy) + { + $questgroups = $this->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']); + foreach($questgroups as &$questgroup) { + $xps += $this->getAchievableXPsForQuestgroup($questgroup['id']); + } + } + + + // Return summarized XPs + return $xps; + } + + + /** + * Summarize XPs of all Quests for a Questgroup and its + * sub-Questgroups solved by a Character. + * + * @param int $questgroupId ID of Questgroup + * @param int $characterId ID of Character + * @return Sum of XPs + */ + public function getAchievedXPsForQuestgroup($questgroupId, $characterId) + { + // Sum of XPs + $xps = 0; + + // Current Questgroup + $questgroup = $this->getQuestgroupById($questgroupId); + + // Quests of current Questgroup + $quests = $this->Quests->getMainquestsForQuestgroup($questgroup['id']); + foreach($quests as &$quest) + { + if($this->Quests->hasCharacterSolvedQuest($quest['id'], $characterId)) { + $xps += $quest['xps']; + } + } + + // XPs of child Questgroups + $childQuestgroupshierarchy = $this->Questgroupshierarchy->getChildQuestgroupshierarchy($questgroup['questgroupshierarchy_id']); + foreach($childQuestgroupshierarchy as &$hierarchy) + { + $questgroups = $this->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']); + foreach($questgroups as &$questgroup) { + $xps += $this->getAchievedXPsForQuestgroup($questgroup['id'], $characterId); + } + } + + + // Return summarized XPs + return $xps; + } + + /** diff --git a/views/html/questgroups/questgroup.tpl b/views/html/questgroups/questgroup.tpl index 21e6e1c7..a2e1b265 100644 --- a/views/html/questgroups/questgroup.tpl +++ b/views/html/questgroups/questgroup.tpl @@ -22,7 +22,7 @@
-

50 / 200 XP

+

/ XP

Versteckte Questline gefunden:

diff --git a/views/html/seminaries/seminary.tpl b/views/html/seminaries/seminary.tpl index eadd7b0b..6737617c 100644 --- a/views/html/seminaries/seminary.tpl +++ b/views/html/seminaries/seminary.tpl @@ -16,7 +16,7 @@
-

350 / 450 XP

+

/ XP