Po 1. Przepraszam, że temat nie jest w dziale "Skrypty", ale dopiero po zrobieniu tematu to zauważyłem a usuwać swoich postów nie mogę, także prosiłbym o przeniesienie.
Po 2. Myślałem, że problem leży tylko i włącznie po stronie wywoływania tej funkcji i dlatego się nie aktualizuje, dlatego jej nie wklejałem. Tak to jest jak się gówno wie a się myśli, że jest się mądrym

. Dzięki za odp. bogu9821, ale jak pisałem, w Ikarusach i innych unionach jestem zielony, więc niewiele mi to pomoże, nawet nie wiem co to jest hookowanie

.
ALE - pokombinowałem trochę przez ten czas i chyba udało mi się to zrobić "po swojemu" korzystając tylko z funkcji "FF_ApplyExt". Jeśli ktoś tak jak ja moduje dla siebie i na ikarusach się nie zna, a chciałby u siebie zrobić obrażenia broni/zaklęć zależne od czego tam chcecie i aktualizowane w czasie rzeczywistym, to podaje moje rozwiązanie:
Dla przykładu podam prostą funkcję zwiększającą obrażenia o 1% za każdy pkt. siły. Tworzymy nowy plik i piszemy w nim naszą funkcję:
func void Nazwa_naszej_funkcji ()
{
if (hero.attribute[ATR_STRENGTH] <= Condition_Jakas_bron)
//Condition_Jakas_bron - wymagana siła do założenia danej broni. Te stałe są w pliku "_Work/Data/Scripts/Content/Items/Tuning_Melee_Weapons.d" / "_Work/Data/Scripts/Content/Items/Tuning_Ranged_Weapons.d" Hero - żeby brany pod uwagę był atrybut naszej postaci, kimkolwiek gramy.
{
Jakas_bron.damage[DAM_INDEX_EDGE] = 80 + (hero.attribute[ATR_STRENGTH] * 80 / 100);
// Jakas_bron - instancja danej broni, np. "ItMw_2H_OrcSword_01". 80 - obrażenia bazowe danej broni, NIE MOŻNA użyć "Damage_Jakas_bron" bo obrażenia będą rosły z każdym wywołaniem funkcji. Można ew. zrobić 2 stałą i do niej się odwoływać.
Damage_Jakas_bron = Jakas_bron.damage[DAM_INDEX_EDGE];
//Damage_Jakas_bron - obrażenia, jakie zadaje dana broń. Te stałe są w pliku "_Work/Data/Scripts/Content/Items/Tuning_Melee_Weapons.d" / "_Work/Data/Scripts/Content/Items/Tuning_Ranged_Weapons.d" / "_Work/Data/Scripts/Content/AI/Magic/Spells/Plik_jakiegos_zaklecia.d"
}
else
{
Jakas_bron.damage[DAM_INDEX_EDGE] = 80 + ((hero.attribute[ATR_STRENGTH] - Condition_Jakas_bron) * 80 / 100);
Damage_Jakas_bron = Jakas_bron.damage[DAM_INDEX_EDGE];
};
Jakas_bron.count[2] = Jakas_bron.damage[DAM_INDEX_EDGE]-80;
// Ta linijka odpowiada za aktualizowanie wyświetlania obrażeń po każdym wywołaniu funkcji. "count[2]" - ponieważ odnosi się to do wartości liczbowej (wyświetlane po prawej stronie), 2 odnosi się do 2 linijki - w tej linijce domyślne bronie mają zapisane obrażenia, jeśli u was jest inaczej to zmieniacie.
};
Linijki odpowiadające za liczenie i wyświetlanie obrażeń można kopiować i wstawić dla każdej interesującej nas broni/czaru. Teraz zapisujemy plik z funkcją i wpisujemy go (nazwę pliku) do "Gothic.src". Ważne, że jeśli funkcja aktualizuje obrażeni broni, to musimy nasz plik wpisać pod linijką "ITEMS\Missionitems.d", jeśli aktualizujemy obrażenia zaklęć, to musimy go wpisać pod linijką "AI\MAGIC\Spells\Spell_*.d". Na koniec wchodzimy w "Startup.d" i szukamy linijki:
func void init_global()
{
Game_InitGerman();
LeGo_Init (LeGo_All);
};
Naszą funkcję wklejamy pod linijką "LeGo_Init (LeGo_All);". Powinno to wyglądać tak:
func void init_global()
{
Game_InitGerman();
LeGo_Init (LeGo_All);
FF_ApplyExt (Nazwa_naszej_funkcji, 1000, -1);
// 1000 - co ile ms wywoływana jest nasza funkcja - można zmienić wedle upodobań. -1 - funkcja ma być wywoływana w nieskończoność.
};
Jak ktoś potrzebuje to niech sobie to przeanalizuje i pozmienia wedle swoich upodobań. W ten sam sposób można oczywiście zmieniać także np. wymaganą siłę do założenia broni, koszt czarów, cenę. Ważne, że nowe naliczone obrażenia będą się tyczyły każdej broni o danej instancji, także tej noszonej przez przeciwników (będą mieli obrażenia zależne od naszej siły w tym przypadku). Najprostszym rozwiązaniem tego problemu jest wg. mnie stworzenie 2 wersji każdej broni, której obrażenia aktualizujemy. 1 wersja ze zaktualizowanymi obrażeniami dla nas. 2 wersja (o innej instancji i nazwach stałych) dla NPC. Teraz musimy napisać funkcję, która automatycznie będzie usuwać nam z ekwipunku wersję broni dla NPC ze starymi obrażeniami (lub inaczej naliczanymi jak tam sobie ustawicie) i wstawiać wersję tej broni dla nas z naszymi obrażenia. Potem albo robimy nowy plik i tak samo wstawiamy go w Gothic.src a funkcję w startup.d, albo dopisujemy ją do naszej funkcji aktualizującej obrażenia. Przykładowo taka funkcja może wyglądać tak:
const int stala = 0;//nazwa stałej, która będzie nam zliczać ile broni danego typu mamy w EQ.
func void Nazwa_naszej_funkcji_aktualizujacej_bronie_w_eq ()
{
if (NPC_HasItems (hero, Dana_bron_dla_NPC) > 0)
{
stala = NPC_HasItems (hero, Dana_bron_dla_NPC);
NPC_RemoveInvItems (hero, Dana_bron_dla_NPC, stala);
CreateInvItems (hero, Wersja_tej_broni_dla_nas,stala);
stala = 0;
};
};
Możemy w tej funkcji wsadzić więcej IFów dla różnych broni i korzystać z tej jednej stałej zdefiniowanej na początku. Można wtedy powywalać zewsząd odwołania do funkcji "AI_EquipBestRangedWeapon ()", "AI_EquipBestMeleeWeapon ()", żeby NPC nie zakładały naszej broni.