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:

Available Callback Types

  1. ZoneEventCallback - Fires when players enter/exit zones
  2. PlayerStateChangeCallback - Fires when players transition between PvP/PvE/Raid/SafeZone states
  3. ExitTimerCallback - Fires when exit timers start, update, or expire
  4. ZoneDrawingCallback - Allows drawing custom zones on the map
  5. 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.c or map menu Init())
  • Callbacks are registered globally and will fire for all players/events