AchievementSystem - jimdroberts/FishMMO GitHub Wiki
The AchievementSystem
is a server-side system in FishMMO responsible for managing player achievements. It subscribes to achievement update and completion events, processes achievement progress, and handles the distribution of rewards (abilities, ability events, and items) to player characters. The system ensures that achievement progress and rewards are validated, persisted, and broadcasted to clients in real time.
-
public override void InitializeOnce()
Initializes the achievement system, subscribing to achievement update and completion events.
-
public override void Destroying()
Cleans up the achievement system, unsubscribing from achievement update and completion events.
-
private void IAchievementController_OnUpdateAchievement(ICharacter character, Achievement achievement)
Handles achievement update events for characters, validates input, and broadcasts achievement changes to the player client. character (ICharacter): The character whose achievement was updated. achievement (Achievement): The updated achievement data.
-
private void IAchievementController_HandleAchievementRewards(ICharacter character, AchievementTemplate template, AchievementTier tier)
Handles achievement completion events, validates input, and processes achievement rewards for the player character. character (ICharacter): The character who completed the achievement. template (AchievementTemplate): The achievement template. tier (AchievementTier): The achievement tier completed.
-
private void HandleAbilityGenericRewards<TTemplate, TBroadcast, TMultiBroadcast>(...)
Generic handler for ability rewards, processes learning and broadcasting new abilities to the player character. dbContext (NpgsqlDbContext): Database context for updates. character (IPlayerCharacter): Player character receiving rewards. rewards (List): List of ability rewards. knowsFunc, learnFunc, idSelector, singleBroadcastFactory, multiBroadcastFactory: Delegates for logic.
-
public void HandleAbilityRewards(NpgsqlDbContext dbContext, IPlayerCharacter character, AchievementTier tier)
Handles ability rewards for achievement tiers, processes learning and broadcasting new base abilities. dbContext (NpgsqlDbContext): Database context for updates. character (IPlayerCharacter): Player character receiving rewards. tier (AchievementTier): Achievement tier containing ability rewards.
-
private void HandleAbilityEventRewards(NpgsqlDbContext dbContext, IPlayerCharacter character, AchievementTier tier)
Handles ability event rewards for achievement tiers, processes learning and broadcasting new ability events. dbContext (NpgsqlDbContext): Database context for updates. character (IPlayerCharacter): Player character receiving rewards. tier (AchievementTier): Achievement tier containing ability event rewards.
-
private void HandleItemRewards(NpgsqlDbContext dbContext, IPlayerCharacter character, AchievementTier tier)
Handles item rewards for achievement tiers, adds items to inventory or bank and broadcasts updates to the client. dbContext (NpgsqlDbContext): Database context for updates. character (IPlayerCharacter): Player character receiving rewards. tier (AchievementTier): Achievement tier containing item rewards.
- Requires the server to be running and the achievement system to be initialized as part of the server startup.
- Achievement templates, tiers, and rewards must be defined in the database and referenced by the system.
- The system automatically subscribes to achievement events via the
IAchievementController
interface. - No manual registration is required unless extending or customizing achievement logic.
// Example 1: Achievement update event is triggered automatically when a player progresses an achievement.
// The system will handle broadcasting the update to the client.
// Example 2: Achievement completion event is triggered automatically when a player completes an achievement tier.
// The system will process and distribute rewards to the player character.
- Ensure all achievement templates and tiers are properly configured in the database.
- Use the provided event hooks to extend or customize achievement logic if needed.
- Validate all input and reward data to prevent exploits or errors.
- Avoid direct manipulation of achievement progress outside of the controller interfaces.
- Keep reward logic modular to support future expansion of achievement types and rewards.