QOL-Plugin-Framework

Extensible plugin framework for SCP: Secret Laboratory — built for LabAPI. Modular architecture for custom roles, SCPs, tweaks, GUI, events, and a rich set of utilities (v2.0).

062

QOL Framework

Extensible framework for LabAPI plugins in SCP: Secret Laboratory. Used by the QOL - Quality of Life plugin.

Structure

Area Description
Core QOLFrameworkLoader, ModuleManager, IModule / ModuleBase — plugin and module lifecycle
Events QOLEventBus — subscribe/publish with priority; events for roles, modules, player (Joined/Left, Damaged, Died), ItemUsed, RoundStarting
CustomRoles CustomRoleManager, CustomRole, RoleAbility — custom roles with assign, tick, spawn message
CustomSCPs CustomScpManager, CustomScp, ScpAbility — custom SCPs (role-based)
Tweaks TweakManager, ITweak — parameter adjustments (e.g.: SCP-106 slow, SCP-173 health)
GUI GuiManager, GuiScreen, GuiLabel, GuiProgressBar — hints and per-player UI elements
Models PrimitiveModel, PrimitiveShape, PrimitiveModelSpawner — 3D models using AdminToys (LabExtended)
CustomItems CustomItemManager — world pickup triggers
Config ModuleConfig, ConfigManager — base config and per-module JSON load/save
Permissions PermissionHelper, extension Player.HasQOLPermission(string) — permission checks (integrates with LabAPI/EXILED)
Hybrid ExiledBridge — CASSIE/Broadcast when EXILED is present
Extensions PlayerExtensions, StringExtensions — helpers for players and strings

Module lifecycle

  • OnEnabled / OnDisabled — enable/disable
  • OnPlayerJoined(Player) / OnPlayerLeft(Player) — player join/leave
  • OnRoundStarted / OnRoundEnded / OnWaitingForPlayers — round events

Register modules before Framework.Initialize(). The ModuleManager routes LabAPI events to each active module.

Events (QOLEventBus)

  • Subscribe<T>(Action<T> handler, int priority = 0) / Unsubscribe<T> / Publish<T>
  • Useful types: PlayerJoinedEvent, PlayerLeftEvent, PlayerDamagedEvent, PlayerDiedEvent, ItemUsedEvent, RoundStartingEvent, CustomRoleAssignedEvent, etc.
  • Set IsCancelled = true on supported events to cancel the action (depending on the publisher).

Optional config

ConfigManager.ConfigDirectory = "C:\\...\\LabAPI\\plugins\\QOL";
var config = ConfigManager.LoadOrCreate<MyConfig>("MyModule");
ConfigManager.Save("MyModule", config);

Permissions

By default, everyone has permission. To integrate with LabAPI/LabExtended:
PermissionHelper.CheckPermission = (player, permission) => /* e.g.: ExPlayer.Get(player).HasPermission(permission) */;
// Then, in commands:
if (!player.HasQOLPermission("qol.command")) return;

Dependencies

LabAPI, LabExtended (optional for 3D models), Assembly-CSharp (game), Mirror, Newtonsoft.Json (config).

Details

Published 3 months ago

Refreshed 2 minutes ago

Repository

Created 3 months ago

Updated 3 months ago

Tags

LibrariesFrameworkTools