show only unlocked Questsgroups and Quests and summarize XPs recursive regarding choosed path by character

This commit is contained in:
coderkun 2014-03-30 04:07:23 +02:00
commit 283d24ff78
10 changed files with 317 additions and 176 deletions

View file

@ -87,15 +87,20 @@
$hierarchy['questgroups'] = $this->Questgroups->getQuestgroupsForHierarchy($hierarchy['id'], $questgroup['id']);
// Get additional data
for($i=0; $i<count($hierarchy['questgroups']); $i++)
foreach($hierarchy['questgroups'] as $i => &$group)
{
// 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']);
if($i >= 1)
{
if(!$this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']))
{
$hierarchy['questgroups'] = array_slice($hierarchy['questgroups'], 0, $i);
break;
}
}
// Get Character XPs
$group['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($group['id'], $character['id']);
}
}
}
@ -115,23 +120,40 @@
// Get Quests
$quests = null;
$quests = array();
if(count($childQuestgroupshierarchy) == 0)
{
$quests = $this->Quests->getQuestsForQuestgroup($questgroup['id']);
foreach($quests as $i => &$quest)
{
// Set status
$quest['solved'] = $this->Quests->hasCharacterSolvedQuest($quest['id'], $character['id']);
// Check permission
if($i > 0) {
$quest['access'] = $this->Quests->hasCharacterSolvedQuest($quests[$i-1]['id'], $character['id']);
$currentQuest = null;
do {
// Get next Quest
if(is_null($currentQuest)) {
$currentQuest = $this->Quests->getFirstQuestOfQuestgroup($questgroup['id']);
}
else {
$nextQuests = $this->Quests->getNextQuests($currentQuest['id']);
$currentQuest = null;
foreach($nextQuests as &$nextQuest) {
if($this->Quests->hasCharacterEnteredQuest($nextQuest['id'], $character['id'])) {
$currentQuest = $nextQuest;
break;
}
}
}
// Attach related Questgroups
$quest['relatedQuestgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuest($quest['id']);
// Add additional data
if(!is_null($currentQuest))
{
// Set status
$currentQuest['solved'] = $this->Quests->hasCharacterSolvedQuest($currentQuest['id'], $character['id']);
// Attach related Questgroups
$currentQuest['relatedQuestgroups'] = $this->Questgroups->getRelatedQuestsgroupsOfQuest($currentQuest['id']);
// Add Quest to Quests
$quests[] = $currentQuest;
}
}
while(!is_null($currentQuest) && $currentQuest['solved']);
}

View file

@ -124,6 +124,9 @@
}
}
// Set status “entered”
$this->Quests->setQuestEntered($quest['id'], $character['id']);
// Get (related) Questtext
$relatedQuesttext = $this->Questtexts->getRelatedQuesttextForQuestgroup($questgroup['id']);
if(!empty($relatedQuesttext)) {
@ -138,7 +141,7 @@
$questtexttypes = $this->Questtexts->getQuesttexttypes();
$questtexttypes = array_map(function($t) { return $t['url']; }, $questtexttypes);
$questtextCount = $this->Questtexts->getQuesttextsCountForQuest($quest['id'], $questtexttypeUrl);
if(/*$questtextCount > 0 && */in_array($questtexttypeUrl, $questtexttypes))
if(in_array($questtexttypeUrl, $questtexttypes))
{
$questtextPos = max(intval($questtextPos), 1);
try {

View file

@ -103,6 +103,16 @@
// Get additional data
foreach($hierarchy['questgroups'] as $i => &$questgroup)
{
// Check permission of Questgroups
if($i >= 1)
{
if(!$this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']))
{
$hierarchy['questgroups'] = array_slice($hierarchy['questgroups'], 0, $i);
break;
}
}
// Get first Questgroup text
$text = $this->Questgroups->getFirstQuestgroupText($questgroup['id']);
if(!empty($text))
@ -114,11 +124,6 @@
// Get Character XPs
$hierarchy['questgroups'][$i]['character_xps'] = $this->Questgroups->getAchievedXPsForQuestgroup($questgroup['id'], $character['id']);
// Check permission of Questgroups
if($i >= 1) {
$questgroup['access'] = $this->Questgroups->hasCharacterSolvedQuestgroup($hierarchy['questgroups'][$i-1]['id'], $character['id']);
}
// Get Media
$questgroup['picture'] = null;
try {