To, że parser wskazuje błąd "oczekuję średnika w linijce X" wcale nie musi oznaczać, że tego średnika brakuje akurat w tej linijce. W tym przypadku błąd jest wyżej. Konkretnie w 29 linii.
Parser stwierdził, że gdzieś, w następnym miejscu, w którym jest kod, powinien być średnik. Dojechał do tego fragmentu B_GiveNpcTalents (self); i zobaczył, że zamiast średnika ma "B". Wywalił więc błąd, że tutaj miał być średnik. Ale to nie koniec. Bo musisz mieć świadomość, że średnik oddziela od siebie instrukcje, a nie linijki. (równie dobrze cały skrypt może być w jednej linii, byleby instrukcje oddzielać średnikami...) Parser dostał już jedną instrukcję, ale ponieważ nie dostał średnika, czyta kolejne znaki. A ponieważ ich nie rozumie, wywala kolejne błędy. I tak do momentu, w którym w końcu napotka ten nieszczęsny średnik. Ogólnie ciesz się, że wypluło Ci tylko 4 errory xd