var C_NPC Ktos;
Ktos = Hlp_GetNpc (SLD_20021_Ktos);
Ktos.guild = GIL_BDT;
Z tego co mi wiadomo, instance jest czasami uważane przez silnik jako int, dlatego trzeba zrobić taki śmieszny warunek (aczkolwiek, nigdy się nie bawiłem w silniku, ani nie interesowałem się nim, więc niech się wypowie ktoś mądrzejszy na ten temat).
Przecież nie masz tu żadnego warunku. Używasz funkcji. Warunek to taka struktura w kodzie: "if (wyrażenie) { wyrażenia do wykonania }". Wywołanie funkcji ma postać "funkcja (argumenty)".
Można by się na ten temat rozpisać (właściwie to napisałem o tym tutorial), ale w skrócie:
Z technicznego puntku widzenia, SLD_20021_Ktos to
identyfikator (nazwa bytu w skryptach - tutaj
definicji twojego npc), któremu jest przypisany
numer tego bytu.
Aby dostać odniesienie do pierwszego (zwykle zarazem jedynego) w świecie
obiektu npc którego definicja jest oznaczona danym identyfikatorem, używasz funkcji Hlp_GetNpc.
Dużo funkcji zewnętrznych jako argumentów oczekuje właśnie identyfikatorów (m.in. większość tych które dotyczą itemów) i wtedy te argumenty są oznaczone jako "var int" (bo jak napisałem to numer). Te które mają argumenty "var c_npc" teoretycznie potrzebują już obiektu, ale parser zwykle dokonuje podmiany automatycznie, tak że nie trzeba samemu używać Hlp_GetNpc. Kiedy jednak chcesz bezpośrednio odwołać się do pola w klasie (jak w temacie), musisz już mieć odniesienie do obiektu, nie sam identyfikator.
"Hero" to właściwie też identyfikator, ale
zmiennej przechowującej odniesienie do obiektu klasy c_npc, a nie
definicji obiektu. W związku z tym możesz bezpośrednio odwoływać się do pól tego obiektu za pomocą kropki.
, ale jeśli zobaczysz na to jak jest zdefiniowany (plik constants.d), to zobaczysz że jemu jest bezpośrednio przypisane odniesienie do obiektu klasy c_npc ("var c_npc hero"), dlatego możesz od razu odwoływać się do jego pól.