Насчет замка — пока идей нет, а вот с наймом героев все достаточно просто.
Нужно воспользоваться функцией AllowPlayerTavernRace(номеригрока, TOWN_XXX, nil) для всех рас, кроме людской, и AllowPlayerTavernHero(номеригрока, "имя героя", nil) для всех героев, кроме красных.