Cały ten temat jest o tym, że identyfikatory są zawsze typu
int (są indeksami tablicy symboli parsera), ale w pewnych warunkach (całkiem często) są automatycznie zamieniane na odniesienia do obiektów (Monk nazywa to dynamicznym rzutowaniem typów). Jak przed chwilą sprawdziłem, działa to także w drugą stronę.
Aby w skryptach otrzymać to samemu, trzeba użyć funkcji analogicznej do hlp_getnpc, która pobiera jako argument indeks symbolu, a zwraca odniesienie do obiektu.
Mżna to sprawdzić wykonując prościutki eksperyment, przez który przypadkiem kiedyś ten mechanizm zauważyłem:
print(IntToString(pc_hero));
Wpisując tam dowolną instancję, za każdym razem zwróci liczbę, która mówi o tym jako który z kolei dany identyfikator został przeczytany przez parser (dotyczy nie tylko instancji, ale i zmiennych, stałych, tablic, klas, prototypów, funkcji i argumentów funkcji).
instancja dowolnego NPC (np. NONE_100_Xardas) nie jest typu C_NPC?
Najprościej udowodnić że tak
nie jest, próbując przypisać ją do zmiennej o zadeklarowanym takim typie:
var c_npc enpec; enpec = NONE_100_Xardas;
Wywali błąd. Za to:
var int indeks_symbolu; indeks_symbolu = NONE_100_Xardas;
Już jak najbardziej zadziała, i jak przed chwilą napisałem, można nawet takie liczby spokojnie wyświetlać. A później możesz zrobić
var c_npc enpec; enpec = Hlp_GetNpc(indeks_symbolu);
Co zwróci ci już odniesienie do obiektu c_npc.