IAchievementController - jimdroberts/FishMMO GitHub Wiki

Description

Interface for a character's achievement controller, handling achievement progress, queries, and related events. Defines the contract for achievement management and event notification in the FishMMO character system.


API Access

Fields

  • static Action<ICharacter, AchievementTemplate, AchievementTier> OnCompleteAchievement

    Static event triggered when an achievement is completed (all tiers for a template are reached).

  • static Action<ICharacter, Achievement> OnUpdateAchievement

    Static event triggered when an achievement is updated (progress or tier changes).

Properties

  • Dictionary<int, Achievement> Achievements { get; }

    Dictionary of all achievements for the character, indexed by template ID.

Methods

  • void SetAchievement(int templateID, byte tier, uint value, bool skipEvent = false)

    Sets the achievement progress for a given template ID, tier, and value. templateID (int): The template ID of the achievement. tier (byte): The tier to set. value (uint): The value to set. skipEvent (bool): If true, does not trigger the update event.

  • bool TryGetAchievement(int templateID, out Achievement achievement)

    Attempts to get an achievement by template ID. templateID (int): The template ID to look up. achievement (Achievement): The resulting achievement if found. Returns true if the achievement exists, false otherwise (bool).

  • void Increment(AchievementTemplate template, uint amount)

    Increments the progress of an achievement by a specified amount, handling tier advancement and rewards. template (AchievementTemplate): The achievement template to increment. amount (uint): The amount to increment the achievement's value by.


Basic Usage

Setup

  1. Implement the IAchievementController interface in your character controller class.
  2. Ensure event handlers for OnCompleteAchievement and OnUpdateAchievement are registered as needed.
  3. Integrate achievement template and tier definitions in your system.

Example

// Example 1: Implementing IAchievementController
// class MyAchievementController : IAchievementController { ... }

// Example 2: Subscribing to Achievement Events
IAchievementController.OnCompleteAchievement += (character, template, tier) => {
    // Handle achievement completion
};

Best Practices

  • Always implement all interface methods and properties.
  • Use event hooks to update UI or trigger rewards on achievement changes.
  • Ensure thread safety if accessing achievements from multiple threads.
  • Keep achievement data synchronized between client and server as needed.
⚠️ **GitHub.com Fallback** ⚠️