correctly link back to Quest choosen by Character at the end of an optional Questline
This commit is contained in:
parent
9b05d99391
commit
b0e3dd1169
3 changed files with 36 additions and 11 deletions
|
|
@ -57,7 +57,8 @@
|
||||||
if(is_null($questgroup['hierarchy']))
|
if(is_null($questgroup['hierarchy']))
|
||||||
{
|
{
|
||||||
// Get related Questgroup
|
// Get related Questgroup
|
||||||
$questtext = $this->Questtexts->getRelatedQuesttextForQuestgroup($currentQuestgroup['id']);
|
$questtexts = $this->Questtexts->getRelatedQuesttextsForQuestgroup($currentQuestgroup['id']);
|
||||||
|
$questtext = $this->Questtexts->pickQuesttextLastEnteredByCharacter(\hhu\z\controllers\SeminaryController::$character['id'], $questtexts);
|
||||||
$quest = $this->Quests->getQuestById($questtext['quest_id']);
|
$quest = $this->Quests->getQuestById($questtext['quest_id']);
|
||||||
$currentQuestgroup = $this->Questgroups->getQuestgroupById($quest['questgroup_id']);
|
$currentQuestgroup = $this->Questgroups->getQuestgroupById($quest['questgroup_id']);
|
||||||
$currentQuestgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($currentQuestgroup['id']);
|
$currentQuestgroup['hierarchy'] = $this->Questgroupshierarchy->getHierarchyForQuestgroup($currentQuestgroup['id']);
|
||||||
|
|
|
||||||
|
|
@ -259,9 +259,10 @@
|
||||||
$solved = true;
|
$solved = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get (related) Questtext
|
// Get (related) Questtexts
|
||||||
$relatedQuesttext = $this->Questtexts->getRelatedQuesttextForQuestgroup($questgroup['id']);
|
$relatedQuesttexts = $this->Questtexts->getRelatedQuesttextsForQuestgroup($questgroup['id']);
|
||||||
if(!empty($relatedQuesttext)) {
|
$relatedQuesttext = $this->Questtexts->pickQuesttextLastEnteredByCharacter($character['id'], $relatedQuesttexts);
|
||||||
|
if(!is_null($relatedQuesttext)) {
|
||||||
$relatedQuesttext['quest'] = $this->Quests->getQuestById($relatedQuesttext['quest_id']);
|
$relatedQuesttext['quest'] = $this->Quests->getQuestById($relatedQuesttext['quest_id']);
|
||||||
if(!empty($relatedQuesttext['quest'])) {
|
if(!empty($relatedQuesttext['quest'])) {
|
||||||
$relatedQuesttext['quest']['questgroup_url'] = $this->Questgroups->getQuestgroupById($relatedQuesttext['quest']['questgroup_id'])['url'];
|
$relatedQuesttext['quest']['questgroup_url'] = $this->Questgroups->getQuestgroupById($relatedQuesttext['quest']['questgroup_id'])['url'];
|
||||||
|
|
|
||||||
|
|
@ -129,15 +129,15 @@
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get corresponding Questtext for a Sidequest.
|
* Get corresponding Questtexts for a Questgroup.
|
||||||
*
|
*
|
||||||
* @throws IdNotFoundException
|
* @throws IdNotFoundException
|
||||||
* @param int $sidequestId ID of the Sidequest to get the Questtext for
|
* @param int $questgroupId ID of Questgroup to get the Questtexst for
|
||||||
* @param array Questtext data
|
* @param array List of Questtexts
|
||||||
*/
|
*/
|
||||||
public function getRelatedQuesttextForQuestgroup($questgroupId)
|
public function getRelatedQuesttextsForQuestgroup($questgroupId)
|
||||||
{
|
{
|
||||||
$data = $this->db->query(
|
return $this->db->query(
|
||||||
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.quest_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
'SELECT questtexts.id, questtexts.text, questtexts.pos, questtexts.quest_id, questtexttypes.id AS type_id, questtexttypes.type, questtexttypes.url AS type_url '.
|
||||||
'FROM questgroups_questtexts '.
|
'FROM questgroups_questtexts '.
|
||||||
'LEFT JOIN questtexts ON questtexts.id = questgroups_questtexts.questtext_id '.
|
'LEFT JOIN questtexts ON questtexts.id = questgroups_questtexts.questtext_id '.
|
||||||
|
|
@ -146,8 +146,31 @@
|
||||||
'i',
|
'i',
|
||||||
$questgroupId
|
$questgroupId
|
||||||
);
|
);
|
||||||
if(!empty($data)) {
|
}
|
||||||
return $data[0];
|
|
||||||
|
|
||||||
|
public function pickQuesttextLastEnteredByCharacter($characterId, $questtexts)
|
||||||
|
{
|
||||||
|
if(count($questtexts) == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$data = $this->db->query(
|
||||||
|
sprintf(
|
||||||
|
'SELECT quest_id '.
|
||||||
|
'FROM quests_characters '.
|
||||||
|
'WHERE character_id = ? AND quest_id IN (%s) AND status = ? '.
|
||||||
|
'ORDER BY created DESC '.
|
||||||
|
'LIMIT 1',
|
||||||
|
implode(',', array_map(function($q) { return intval($q['quest_id']); }, $questtexts))
|
||||||
|
),
|
||||||
|
'ii',
|
||||||
|
$characterId,
|
||||||
|
\hhu\z\models\QuestsModel::QUEST_STATUS_ENTERED
|
||||||
|
);
|
||||||
|
foreach($questtexts as &$questtext) {
|
||||||
|
if($questtext['quest_id'] == $data[0]['quest_id']) {
|
||||||
|
return $questtext;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue