Aller au contenu

Événements

tilttek/quests-bundle
ÉvénementRéparti quand
Tilttek\Quests\QuestCompletedUne quête est accomplie : la quête, l'accomplissement, rewards() et beneficiaries
Tilttek\QuestsBundle\Infrastructure\Event\DuelWonUn camp a accompli un duel en premier, juste après son QuestCompleted
Tilttek\QuestsBundle\Infrastructure\Event\DuelExpiredLe temps d'un duel s'est écoulé sans gagnant, ou son offre est restée sans réponse

Donner les récompenses

Les récompenses sont déclarées, jamais exécutées : l'application les donne par les paquets dont elle dispose.

#[AsEventListener]
public function __invoke(QuestCompleted $event): void
{
    foreach ($event->beneficiaries as $member) {
        foreach ($event->rewards() as $reward) {
            match ($reward->kind) {
                'points' => $this->points->credit($member, $reward->amount, $reward->code, 'quest:'.$event->completion->quest.':'.$event->completion->occurrence),
                'badge' => $this->badges->award($member, $reward->code),
                default => null,
            };
        }
    }
}

Dérivez la clé d'un mouvement de points de l'accomplissement (quête, occurrence, membre) : ainsi, la donner deux fois ne compte qu'une fois. Une reconstruction ne répartit pas de nouveau QuestCompleted pour une quête accomplie de nouveau.