Achievements

Bring progression and rewards to your Azuriom website with fully customizable achievements, a unique trophy system, and a global leaderboard.

Achievements is an Azuriom plugin that allows you to create goals for your users using connectors from existing plugins such as Vote, Shop, Forum, Suggest, Review, Achievement.

You can create a connector, define what triggers the goal, and configure the rewards associated with completing it.

Example:

  • Name: Vote 100 times for the server
  • Hook: Vote
  • Trigger: vote amount
  • Amount: 100
  • Start day (for count): Today

Once a user completes a goal, they can receive rewards configured for that objective:

  • Shop points from the Shop plugin
  • One or more server commands
  • A set number of trophies

The plugin also includes global settings:

  • Customize the name used for trophies (e.g., “Trophy”)
  • Change the icon or use a custom image
  • Leaderboard showing players with the most trophies

🔗 Hooks & Triggers

A hook is a category coming from another plugin, a trigger is a measurable action inside that category. Below are the hooks bundled with Achievements out of the box:

Hook Trigger Provided by
vote voted, leaderboard Achievements
shop spent, points_spent, item_purchase Achievements
suggest post, like_received Achievements
forum message, topic, like_received Achievements
post like Achievements (Azuriom content likes)
achievement achievement_trophy_amount Achievements
review post, five_star Review plugin (v1.0.3+)

A hook only shows up when its plugin is installed and enabled. Since v1.2.0, any other plugin can register its own hooks & triggers. Check For developers.


Summary:

- Available langs

- Features

- Hooks & Triggers

- Like the resource

(Admin dashboard)

Player objectives

The visual appearance can be modified by themes.

LeaderBoard The visual appearance can be modified by themes.

Available langs:

English French

If your language is not available ? Contact me on discord

Features :

🏆 Achievements Management

  • Create and manage goals for users
  • Define connectors and triggers (Vote, Shop, Forum, Suggest, Review, Achievement)
  • Set the amount required to complete a goal
  • Configure rewards: currency, server commands, trophies
  • Global settings: customize trophy name and icon
  • Visibility per role

📊 Player Rankings

  • Leaderboard of players with the most trophies
  • Visualize progress per user
  • Custom leaderboard title

🔧 Rewards Customization

  • Configure rewards per goal
  • Assign multiple server commands
  • Reward in Shop plugin currency
  • Trophies
  • Reset per player
  • Reset all
  • Reward scratch-game (jeu à gratter) : https://market.azuriom.com/resources/198

🔐 Permissions

  • Control who can create and manage goals

🧩 Developer API (v1.2.0+)

  • Any plugin can register its own hooks & triggers
  • Triggers are grouped by plugin in the objective form
  • Objectives auto-deactivate when their plugin is disabled and come back untouched when it is re-enabled

🚀 Next Features

  • New hooks
  • New triggers
  • Stats (global progression, trophy distribution...)
  • Discord hooks

🧩 For developers

Public hook API available since Achievements v1.2.0.

Any Azuriom plugin can add its own hooks & triggers to Achievements. They appear automatically in the objective admin form, grouped under an <optgroup> named after your plugin. When your plugin is disabled, objectives using your hook become inactive (hidden from players, flagged in the admin list) and reactivate as soon as your plugin is enabled again nothing is ever lost.

1. No dependency needed. Don't add achievement to your plugin.json dependencies your plugin stays 100% standalone and your users are never forced to buy Achievements. The integration activates by itself only when both plugins are installed, thanks to the class_exists(HookManager::class) guard below.

2. Register your hook from your service provider boot():

use Azuriom\Plugin\Achievement\Hooks\AchievementHook;
use Azuriom\Plugin\Achievement\Hooks\Triggers\CallbackTrigger;
use Azuriom\Plugin\Achievement\Hooks\Triggers\ModelCountTrigger;
use Azuriom\Plugin\Achievement\Services\HookManager;
use Illuminate\Database\Eloquent\Builder;

public function boot(): void
{
    $this->loadTranslations();

    // your other boot code

    if (! class_exists(HookManager::class)) {
        return; // Achievements is not installed / enabled
    }

    achievement_hooks()->register(
        AchievementHook::make('review', $this->plugin->id)       // hook key, emitting plugin id
            ->label(trans('review::messages.title'))             // option text in the <select>
            ->icon('bi bi-star-fill')
            ->trigger(ModelCountTrigger::make(
                'post',                                           // trigger key
                trans('review::admin.achievement.post'),          // trigger label
                \Azuriom\Plugin\Review\Models\Review::class,       // model to count
                'author_id'                                       // column holding the user id
            ))
            ->trigger(ModelCountTrigger::make(
                'five_star',
                trans('review::admin.achievement.five_star'),
                \Azuriom\Plugin\Review\Models\Review::class,
                'author_id'
            )->where(fn (Builder $query) => $query->where('rating', '>=', 5)))
    );
}

Registering in boot() is safe regardless of plugin load order.

Trigger types

Type Usage
ModelCountTrigger::make($key, $label, Model::class, $ownerColumn) Counts rows owned by the player. Chain ->sum('column'), ->relation('rel'), ->dateColumn('col'), ->where(fn ($q) => …). $ownerColumn may be dotted (payment.user_id).
CallbackTrigger::make($key, $label, fn (User $u, Objective $o) => (int) …) Any custom logic. ->threshold() adds the “Rank (Top N)” field ($objective->threshold).
implements Azuriom\Plugin\Achievement\Hooks\Contracts\AchievementTrigger Full control for reusable logic.

Progress is polled when the player opens their achievements page, so keep progress() a cheap, side-effect-free query. hook / trigger keys are stored as plain strings on the objective keep them stable across versions.

Real-world example : the Review plugin: github.com/Bricec6/Azuriom-Plugin-Review - commit 081e750


Support: https://discord.com/invite/Gh2yBxUWvV Discord: https://discord.com/invite/Gh2yBxUWvV

ServeurListe partner

Website: https://www.serveurliste.com/ Discord link: https://discord.gg/k9eMX76J8q


For any business invoice requests, please provide your legal information on my Discord (open a ticket).


If you like the resource like below ☺


Acheter

Les extensions payantes sont gérées par des développeurs indépendants et Azuriom ne prend aucune commission.

Informations

  • Auteur: Bricec6
  • Type: Plugin
  • Version: 1.2.0
  • Téléchargements: 54
  • Ajouté: 12 novembre 2025 à 20:02
  • Mis à jour: 1 septembre 2026 à 15:25
Support