w dialogu dałem zmienną która powinna uruchamiać ten skrypt w tym przypadku (if npc_mission = TRUE).
Chyba chodziło ci o to że w funkcji dialogu dałeś wywołanie funkcji B_TeleportNpc jeśli jest spełniony warunek. Nie ma czegoś takiego jak "dawanie zmiennej w dialogu", "zmienna która uruchamia" ani "uruchamianie skryptu".
Jeśli tak, to dzieje się dokładnie to co zaprogramowałeś. W trakcie dialogu jest sprawdzane czy ktośtam jest przy waypoincie. Ponieważ nie jest, funkcja się kończy nic nie robiąc. Tyle.
Ty prawdopodobnie chcesz żeby ta funkcja była wywołana PO dialogu, nie w jego trakcie, na dodatek "ciągle". No to musisz ją wywołać czym innym. Pętle w stylu ticktocków czy frame functions by się sprawdziły, ale to overkill. Umieść po prostu na waypoincie trigger reagujący na dotyk, daj mu odpowiednią wielkość i ustaw żeby aktywowany odpalał twoją funkcję (i nie ma potrzeby dawania w niej dodatkowych warunków).
Ogólnie popełniasz ten sam banalny błąd co wiele osób które mają pierwszy raz styczność z programowaniem. Myślisz że jak zrobisz funkcję i dasz w niej jakiś warunek, to ona wywoła się sama z siebie kiedy ten warunek zostanie spełniony. Nie. Warunek może sprawić że kod się NIE wywoła. Nie może wywołać go "dodatkowo", nawet wtedy kiedy ty niczym go nie wywołujesz. Sposoby wywoływania funkcji masz podsumowane tutaj:
http://themodders.org/index.php?topic=13208