1. Chodzi o self, other oraz hero. Z tego co widzę po skryptach są to obiekty (instancje) klasy C_NPC, które tam mają swoje pola jak np. id czy inne name, ale nie zbyt wiem jak to się identyfikuje, tzn. jak gra wie o którego npca chodzi jeśli zamieszczone jest self np.
self i other to zmienne globalne, które co prawda nie są w skryptach zadeklarowane, ale istnieją i są do użytku. A skąd gra wie, no cóż, zwykle sama je ustawia w odpowiednich miejscach, zdaje się przed wywołaniem jakichś funkcji związanych z AI takich jak: "ZS_ReactToDamage" (Gothic 1), która stara się ustalić co się dzieje z npc po otrzymaniu obrażeń i jak ma zareagować, gdzie self to osoba, która obrywa, a other osoba ją atakująca. Też np. taki dialog, gdzie self to osoba z którą gracz rozmawia, a other to osoba, którą zasadniczo sterujemy i rozmawiamy z npc, może być różna od hero, gdzie hero zdaje się trzyma sztywno PC_HERO.
Czemu jeśli my zwracamy się do kogoś to jest other,self a nie hero,self? Czym jest w tym przypadku obiektem other?
Jak wspomniałem, other to postać, którą sterujemy i rozmawiamy z tym npc, nie koniecznie musi być to hero, bo np. moglibyśmy się zmienić w kogoś albo na kodach, albo za pomocą zaklęcia. W przypadku gothica 1 nie porozmawiamy inną postacią (chociaż można to w skryptach zmieniać), a w gothicu 2 jak najbardziej.
Co robi ta funkcja bo wszędzie tego pełno a nie widzę żeby gdzieś była zdefiniowana... i to PD_ZS_DETAIL (jakaś stała?).
Strzelam, że gdy tryb debugowania jest włączony to wypluwa na ekran, albo do jakiejś konsoli odpowiednią wiadomość, tak PD_ZS_DETAIL to stała i równa jet 9 bodajże.
Poza tym plik externals.d
...
Gdzie jest ciało tej funkcji :O? Jest tu tylko info że zwraca 0 i jak ma to działać?
Plik eksternals jeśli dobrze pamiętam nawet nie jest przez grę kompilowany, można to sprawdzić edytując plik Gothic.src. Externals generalnie służy temu, by powiedzieć skrypterowi, że prócz funkcji normalnie zadeklarowanych w skryptach, są jeszcze pewne istniejące w silniku gry, do ciała których nie masz dostępu. Zatem:
FUNC INT Hlp_IsValidItem (VAR C_ITEM item) { return 0; };
// Prüfe ob Item-Instanz gültig und initialisiert ist True/False
Mówi ci, że istnieje sobie funkcja Hlp_IsValidItem, która przyjmuje takie i takie argumenty. W komentarzu po niemiecku, bo gra niemiecka (

) powinien być opis co ta funkcja robi.
Polecam Ci zaopatrzyć się w notepada++, choćby dlatego, że ma świetną opcje wyszukiwania w plikach. Można sobie ustawić np. folder Content w Scripts, filtrowanie po plikach *.d i szukać danej frazy, obsługuje też wyrażenia regularne. Może dzięki temu łatwiej będzie Ci znaleźć odpowiedzi na następne pytania.