Overview
The NinjinsPvPPvE mod provides a callback system that allows other mods to hook into zone-related events without modifying the core mod code. This API is designed to be:
- Non-intrusive: Your mod doesn't need to modify NinjinsPvPPvE files
- Event-driven: React to zone events as they happen
- Per-player: All callbacks receive the specific player instance
- Universal: Works with all supported map mods (and unsupported ones with integration)
Available Callback Types
- ZoneEventCallback - Fires when players enter/exit zones
- PlayerStateChangeCallback - Fires when players transition between PvP/PvE/Raid/SafeZone states
- ExitTimerCallback - Fires when exit timers start, update, or expire
- ZoneDrawingCallback - Allows drawing custom zones on the map
- DamageCallback - Allows overriding damage decisions (allow/block damage in zones)
Quick Start: Registering All Callbacks
Here's an example of how to register all callback types in your mod's initialization:
// In your mod's MissionServer.c file
modded class MissionServer
{
override void OnInit()
{
super.OnInit();
// Create callback instances
MyZoneEventCallback zoneCallback = new MyZoneEventCallback();
MyPlayerStateChangeCallback stateCallback = new MyPlayerStateChangeCallback();
MyExitTimerCallback timerCallback = new MyExitTimerCallback();
MyDamageCallback damageCallback = new MyDamageCallback();
// Register server-side callbacks
PlayerZoneController.RegisterZoneEventCallback(zoneCallback);
PlayerZoneController.RegisterPlayerStateChangeCallback(stateCallback);
PlayerZoneController.RegisterExitTimerCallback(timerCallback);
DamageUtils.RegisterDamageCallback(damageCallback);
Print("[MyMod] All server-side callbacks registered successfully (zone, state, timer, damage).");
}
}
// For client-side map drawing callbacks in MissionGameplay.c
modded class MissionGameplay
{
override void OnInit()
{
super.OnInit();
// Register drawing callback on client side
MyZoneDrawingCallback drawingCallback = new MyZoneDrawingCallback();
MapDrawer.RegisterZoneDrawingCallback(drawingCallback);
Print("[MyMod] Drawing callback registered successfully.");
}
}
Important Notes:
- Server-side callbacks (ZoneEvent, PlayerStateChange, ExitTimer, Damage) must be registered in
MissionServer.OnInit()on the server - Client-side callbacks (ZoneDrawing) must be registered on the client (e.g., in
MissionGameplay.cor map menuInit()) - Callbacks are registered globally and will fire for all players/events