You've a couple options:
IMO the best solution is to
DHook CBaseObject::FinishedBuilding(). Offsets are 338 Linux and 336 Windows. There are a couple caveats with this, though. For example this'll fire if there is a Red Tape Recorder reversing the building. Also each time a building is upgraded. If you only want to hook it once, best bet is to Hook it
OnEntityCreated/
player_builtobject and remove the hook after the callback.
There are some netprops you could check every frame or so. When
m_bBuilding true to false, then it has finished building. Also if
m_flPercentageConstructed is >= 1.0, then it has also finished building.
Sentry's have a
sentry_on_go_active event, so if you only need sentries then you can use that.
__________________