Skip to main content

Game Events

Namespace: DeadworksManaged.Api

Listen to and create Source 2 game events.

GameEventHandlerAttribute

Auto-register a method as a game event handler:

[GameEventHandler("player_hero_changed")]
public HookResult OnHeroChanged(GameEvent ev)
{
var pawn = ev.GetPlayerPawn("player");
if (pawn != null)
{
// Hero was changed — reset ability points
pawn.ModifyCurrency(ECurrencyType.AbilityPoints, 17, ECurrencySource.FlagCapture, false, false, false);
}
return HookResult.Handled;
}

Properties

PropertyTypeDescription
EventNamestringSource 2 game event name (e.g. "player_death")

GameEvent

Represents a Source 2 game event. Read fields via typed getter methods.

Read Methods

MethodReturnsDescription
GetBool(string key, bool default)boolBool field value
GetInt(string key, int default)intInt field value
GetFloat(string key, float default)floatFloat field value
GetString(string key, string default)stringString field value
GetUint64(string key, ulong default)ulongUint64 field value
GetPlayerController(string key)CBasePlayerController?Player controller from ehandle field
GetPlayerPawn(string key)CBasePlayerPawn?Player pawn from ehandle field
GetEHandle(string key)CBaseEntity?Entity from ehandle field

Write Methods

MethodDescription
SetBool(string key, bool value)Set bool field
SetInt(string key, int value)Set int field
SetFloat(string key, float value)Set float field
SetString(string key, string value)Set string field

Properties

PropertyTypeDescription
NamestringThe event name (e.g. "player_death")

GameEvents (Static Class)

Programmatic API for managing game event listeners.

MethodReturnsDescription
AddListener(string name, GameEventHandler handler)IHandleRegister dynamic listener. Returns handle for cancellation
RemoveListener(string name, GameEventHandler handler)voidRemove previously registered listener
Create(string name, bool force)GameEventWriter?Create a new game event. Must be fired or freed

Dynamic Listener Example

private IHandle? _deathListener;

public override void OnLoad(bool isReload)
{
_deathListener = GameEvents.AddListener("player_death", OnPlayerDeath);
}

private HookResult OnPlayerDeath(GameEvent ev)
{
var victim = ev.GetPlayerPawn("player");
Console.WriteLine($"Player died: {victim?.Classname}");
return HookResult.Handled;
}

public override void OnUnload()
{
_deathListener?.Cancel();
}

GameEventWriter

Wraps a newly created game event for setting fields and firing.

var ev = GameEvents.Create("my_custom_event", force: true);
if (ev != null)
{
ev.SetInt("player_slot", 0);
ev.SetString("action", "test");
ev.Fire(dontBroadcast: false);
// After firing, the event is owned by the engine — do not use it again
}
MethodDescription
Fire(bool dontBroadcast)Fires the event. After firing, owned by engine — must not be used

Common Game Events

Event NameDescriptionVerified
player_deathPlayer died. Fields: userid, attackerYes
player_hero_changedPlayer changed their hero-
player_spawnPlayer spawned-
tip

GameEvents.AddListener is confirmed working for dynamic event listeners. The returned IHandle can be cancelled to stop listening. The [GameEventHandler] attribute also works for auto-registered handlers.

The engine has 100+ game event types including ability_added, ability_cast_succeeded, ability_cooldown_end_changed, item_purchase, break_breakable, citadel_pause_event, and many more — see the decompiled API for the full list in GameEventFactory.

See Also