# Events/Hooks

The server communicates with the controller through callbacks/events. Some of the more important events are preprocessed by EvoSC to make them easier to use. All those events called "Hooks" will be listed below.

### Registering a Hook

To bind a method to an EvoSC-Hook or TM-Event, you simply call

```PHP
Hook::add('NameOfHookOrEvent', [FullyQualifiedClassName, 'methodName');
```

inside the start method of the module.

You can always create a hook for the methods listed in [https://github.com/maniaplanet/script-xmlrpc/blob/master/XmlRpcListing.md#callbacks](https://github.com/maniaplanet/script-xmlrpc/blob/master/XmlRpcListing.md#callbacks)

### Hooks

<table border="1" id="bkmrk-name-passed-argument" style="border-collapse: collapse; width: 100%; height: 599px;"><tbody><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">**Name**</td><td style="width: 49.6913%; height: 29px;">**Passed arguments**</td><td style="width: 36.6049%; height: 29px;">**Description**</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">PlayerConnect</td><td style="width: 49.6913%; height: 29px;">**Player** $player</td><td style="width: 36.6049%; height: 29px;">Called when a player spawns in the server</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">PlayerDisconnect</td><td style="width: 49.6913%; height: 29px;">**Player** $player</td><td style="width: 36.6049%; height: 29px;">Called when a player leaves the server</td></tr><tr style="height: 45px;"><td style="width: 21.1111%; height: 45px;">PlayerFinish</td><td style="width: 49.6913%; height: 45px;">**Player** $player, **int** $timeInMilliseconds, **string** $checkpointsCommaSeparated</td><td style="width: 36.6049%; height: 45px;">Called when a player finishes or resets, then the time is 0</td></tr><tr style="height: 45px;"><td style="width: 21.1111%; height: 45px;">PlayerCheckpoint</td><td style="width: 49.6913%; height: 45px;">**Player** $player, **int** $timeInMilliseconds, **int** $checkpointNumber, **bool** $isFinish</td><td style="width: 36.6049%; height: 45px;">Called when a player passes a checkpoint</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">PlayerStartCountdown</td><td style="width: 49.6913%; height: 29px;">**Player** $player</td><td style="width: 36.6049%; height: 29px;">Called when the 3-2-1-countdown starts for a player</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">PlayerPb</td><td style="width: 49.6913%; height: 29px;">**Player** $player, **int** $timeInMilliseconds</td><td style="width: 36.6049%; height: 29px;">Called when player drives a new personal best</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">BeginMatch</td><td style="width: 49.6913%; height: 29px;">-</td><td style="width: 36.6049%; height: 29px;">Called when the countdown/match starts</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">EndMatch</td><td style="width: 49.6913%; height: 29px;">-</td><td style="width: 36.6049%; height: 29px;">Called when the match ended</td></tr><tr style="height: 45px;"><td style="width: 21.1111%; height: 45px;">BeginMap</td><td style="width: 49.6913%; height: 45px;">**Map** $map</td><td style="width: 36.6049%; height: 45px;">Called when a map starts and when EvoSC boots</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">EndMap</td><td style="width: 49.6913%; height: 29px;">**Map** $map</td><td style="width: 36.6049%; height: 29px;">Called when a map ends</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">MatchSettingsLoaded</td><td style="width: 49.6913%; height: 29px;">**string** $matchSettingsFile</td><td style="width: 36.6049%; height: 29px;">Called when a match-settings is loaded</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">AddedTimeChanged</td><td style="width: 49.6913%; height: 29px;">**int** $addedSeconds</td><td style="width: 36.6049%; height: 29px;">Called when the timelimit was in/decreased</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">MapPoolUpdated</td><td style="width: 49.6913%; height: 29px;">-</td><td style="width: 36.6049%; height: 29px;">Called when the maplist changed</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">MatchTrackerUpdated</td><td style="width: 49.6913%; height: 29px;">**Collection** $scores</td><td style="width: 36.6049%; height: 29px;">Called when scores affecting the match changed (player finished with better time, got points, etc...)</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">MapQueueUpdated</td><td style="width: 49.6913%; height: 29px;">**Collection** $mapsInQueue</td><td style="width: 36.6049%; height: 29px;">Called when a map was added/removed to/from the jukebox</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">WarmUpStart</td><td style="width: 49.6913%; height: 29px;">-</td><td style="width: 36.6049%; height: 29px;">Called when the warmup phase starts</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">WarmUpEnd</td><td style="width: 49.6913%; height: 29px;">-</td><td style="width: 36.6049%; height: 29px;">Called when the warmup phase ends</td></tr><tr style="height: 29px;"><td style="width: 21.1111%; height: 29px;">AnnounceWinner</td><td style="width: 49.6913%; height: 29px;">**Player** $winner</td><td style="width: 36.6049%; height: 29px;">Called on match end, when the winner is decided</td></tr><tr><td style="width: 21.1111%;">ShowScores</td><td style="width: 49.6913%;">**Collection** $allPlayersThatParticipatedInMatch</td><td style="width: 36.6049%;">Called when ther end result is displayed after the match ended</td></tr><tr><td style="width: 21.1111%;">GroupChanged</td><td style="width: 49.6913%;">**Player** $player</td><td style="width: 36.6049%;">Called when the group of a player was changed</td></tr></tbody></table>