Napisałem do ciebie PW, MarkK, oczywiście jestem bardzo zainteresowany

.
Napiszę jakie opracowałem rozwiązanie, w końcu jak się dzielić, to wszystkim. Niestety Gothic nie czyta mi części plików src, więc nie mogę go przetestować w praktyce.
Otóż opracowałem system wymagający tylko jednej funkcji i jednego PFX na jedną część ciała. Aby stworzyć nową część zbroi wystarczy sam item, i to na dodatek oparty na prototypie, więc wystarczy podać tylko kilka niezbędnych parametrów.
Każdy element np. hełm, wywołuje odpowiednią funkcję, tutaj armor_helm. Ona przerabia sam PFX, ustawia jego parametr shpmesh_s na item.visual, czyli na plik 3ds którego używał wywołujący item. Następnie dany vfx jest wyświetlany. Wstępnie wygląda to tak:
func void ARMOR_HELM()
{
ARMOR_HELM_PFX.shpmesh_s = item.visual;
Wld_PlayEffect("ARMOR_HELM_VFX",hero,hero,0,0,0,FALSE);
};
ARMOR_HELM_PFX i ARMOR_HELM_VFX nie są zmiennymi, to podane wprost instance. Ponieważ i tak można na raz założyć tlyko jedną część danego typu, nie trzeba robić wielu efektów, wystarczy modyfikować jeden.
Ponadto dla ułatwienia dla każdej części stworzyłem prototyp, można zrobić także jeden prototyp ogólny, w końcu i tak wartości takie jak zawartość opisu, mainflag, flags, scemaname czy material pozostają z reguły bez zmian.
PROTOTYPE PROTO_AR_HELM(C_Item)
{
name = "Hełm";
mainflag = ITEM_KAT_ARMOR;
flags = 0;
scemename = "MAP";
on_state[0] = ARMOR_HELM;
protection [PROT_EDGE] = 0;
protection [PROT_BLUNT] = 0;
protection [PROT_POINT] = 0;
protection [PROT_FIRE] = 0;
protection [PROT_MAGIC] = 0;
visual = "helm.3ds";
material = MAT_METAL;
value = 1;
description = name;
TEXT[1] = NAME_Prot_Edge; COUNT[1] = protection [PROT_EDGE];
TEXT[2] = NAME_Prot_Point; COUNT[2] = protection [PROT_POINT];
TEXT[3] = NAME_Prot_Fire; COUNT[3] = protection [PROT_FIRE];
TEXT[4] = NAME_Prot_Magic; COUNT[4] = protection [PROT_MAGIC];
TEXT[5] = NAME_Value; COUNT[5] = value;
};
Pfx i Vfx zastosowałem takie jak orc, dopasowałem tylko do swojego systemu nazwy.
Dzięki tym uproszczeniom, do napisania przykładowego hełmu wystarczy to:
INSTANCE IT_AR_HELM_GRD (PROTO_AR_HELM)
name = "Hełm strażnika";
protection [PROT_EDGE] = 10;
protection [PROT_BLUNT] = 10;
protection [PROT_POINT] = 5;
visual = "helm_grd.3ds";
A reszta zrobi się sama
Aha, oczywiście funkcja zakładania zbroi którą tu podałem to zaledwie wstęp odpowiadający za samo wyświetlanie, trzeba dopisać cały szereg warunków kontrolujących co i jak zakładamy, zmiany flags oraz parę innych rzeczy, ale to już będzie prostsza część.
I jeszcze coś, gdyby okazało się że zmienna item jednak nie przechowuje obiektu którego użyliśmy, zawsze można użyć krótkiej funkcji pośredniej, która będzie dodawała argument i wywoływała funkcję właściwą. Ponieważ i tak trzeba było by ją dopisywać do każdego przedmiotu, będzie można zrezygnować z tego odczytywania parametru visual mając podane instance, ale po prostu wpisywać plik 3ds jako ten argument. Jednak jest to scenariusz pesymistyczny, wolałbym żeby wszystko działało jak najprościej.
//EDIT: No nie, Gothic nie reparsuje mi już żadnych skryptów
Jakby w ogóle nie widział plików src. Myślicie że będzie trzeba reinstalować?
Pliki na pewno są, na pewno są w dobrym miejscu, na pewno mają dobrą treść i na pewno zaznaczam "reparse all scripts". Odkąd ostatnio instalowałem grę (zmieniałem sprzęt) zdążyłem napisać tylko kilka skryptów, ale przynajmniej były widziane, czytało też z początku część skryptów tych zbroi, teraz się zbuntowało na amen.