add stati for Questgroups
This commit is contained in:
parent
98a2517da6
commit
8c83a605a2
2 changed files with 89 additions and 4 deletions
|
|
@ -81,6 +81,9 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set status “entered”
|
||||||
|
$this->Questgroups->setQuestgroupEntered($questgroup['id'], $character['id']);
|
||||||
|
|
||||||
// Get child Questgroupshierarchy
|
// Get child Questgroupshierarchy
|
||||||
$childQuestgroupshierarchy = null;
|
$childQuestgroupshierarchy = null;
|
||||||
if(!empty($questgroup['hierarchy']))
|
if(!empty($questgroup['hierarchy']))
|
||||||
|
|
@ -160,10 +163,8 @@
|
||||||
$relatedQuestgroups = $this->Questgroups->getRelatedQuestsgroupsOfQuest($currentQuest['id']);
|
$relatedQuestgroups = $this->Questgroups->getRelatedQuestsgroupsOfQuest($currentQuest['id']);
|
||||||
foreach($relatedQuestgroups as &$relatedQuestgroup)
|
foreach($relatedQuestgroups as &$relatedQuestgroup)
|
||||||
{
|
{
|
||||||
$relatedQuestgroup = $this->Questgroups->getQuestgroupById($relatedQuestgroup['id']);
|
if($this->Questgroups->hasCharacterEnteredQuestgroup($relatedQuestgroup['id'], $character['id'])) {
|
||||||
$firstQuest = $this->Quests->getFirstQuestOfQuestgroup($relatedQuestgroup['id']);
|
$currentQuest['relatedQuestgroups'][] = $this->Questgroups->getQuestgroupById($relatedQuestgroup['id']);
|
||||||
if(!empty($firstQuest) && $this->Quests->hasCharacterEnteredQuest($firstQuest['id'], $character['id'])) {
|
|
||||||
$currentQuest['relatedQuestgroups'][] = $relatedQuestgroup;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,13 @@
|
||||||
*/
|
*/
|
||||||
class QuestgroupsModel extends \hhu\z\Model
|
class QuestgroupsModel extends \hhu\z\Model
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Questgroup-status: Entered
|
||||||
|
*
|
||||||
|
* @var int;
|
||||||
|
*/
|
||||||
|
const QUESTGROUP_STATUS_ENTERED = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Required models
|
* Required models
|
||||||
*
|
*
|
||||||
|
|
@ -254,6 +261,42 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mark a Questgroup as entered for a Character.
|
||||||
|
*
|
||||||
|
* @param int $questId ID of Quest to mark as entered
|
||||||
|
* @param int $characterId ID of Character that entered the Quest
|
||||||
|
*/
|
||||||
|
public function setQuestgroupEntered($questgroupId, $characterId)
|
||||||
|
{
|
||||||
|
$this->setQuestgroupStatus($questgroupId, $characterId, self::QUESTGROUP_STATUS_ENTERED, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the given Character has entered a Questgroup.
|
||||||
|
*
|
||||||
|
* @param int $questgroupId ID of Questgroup to check
|
||||||
|
* @param int $characterId ID of Character to check
|
||||||
|
* @result boolean Whether Character has entered the Questgroup or not
|
||||||
|
*/
|
||||||
|
public function hasCharacterEnteredQuestgroup($questgroupId, $characterId)
|
||||||
|
{
|
||||||
|
$count = $this->db->query(
|
||||||
|
'SELECT count(id) AS c '.
|
||||||
|
'FROM questgroups_characters '.
|
||||||
|
'WHERE questgroup_id = ? AND character_id = ? AND status IN (?)',
|
||||||
|
'iii',
|
||||||
|
$questgroupId,
|
||||||
|
$characterId,
|
||||||
|
self::QUESTGROUP_STATUS_ENTERED
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
return (!empty($count) && intval($count[0]['c']) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine if the given Character has solved the Quests form
|
* Determine if the given Character has solved the Quests form
|
||||||
* this Questgroup.
|
* this Questgroup.
|
||||||
|
|
@ -657,6 +700,47 @@
|
||||||
return $data[0];
|
return $data[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mark a Questgroup for a Character.
|
||||||
|
*
|
||||||
|
* @param int $questgroupId ID of Questgroup to mark
|
||||||
|
* @param int $characterId ID of Character to mark the Questgroup for
|
||||||
|
* @param int $status Questgroup status to mark
|
||||||
|
* @param boolean $repeated Insert although status is already set for this Questgroup and Character
|
||||||
|
*/
|
||||||
|
private function setQuestgroupStatus($questgroupId, $characterId, $status, $repeated=true)
|
||||||
|
{
|
||||||
|
// Check if status is already set
|
||||||
|
if(!$repeated)
|
||||||
|
{
|
||||||
|
$count = $this->db->query(
|
||||||
|
'SELECT count(*) AS c '.
|
||||||
|
'FROM questgroups_characters '.
|
||||||
|
'WHERE questgroup_id = ? AND character_id = ? AND status = ?',
|
||||||
|
'iii',
|
||||||
|
$questgroupId,
|
||||||
|
$characterId,
|
||||||
|
$status
|
||||||
|
);
|
||||||
|
if(!empty($count) && intval($count[0]['c']) > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set status
|
||||||
|
$this->db->query(
|
||||||
|
'INSERT INTO questgroups_characters '.
|
||||||
|
'(questgroup_id, character_id, status) '.
|
||||||
|
'VALUES '.
|
||||||
|
'(?, ?, ?) ',
|
||||||
|
'iii',
|
||||||
|
$questgroupId,
|
||||||
|
$characterId,
|
||||||
|
$status
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue