Ostatnie wiadomości

https://www.youtube.com/watch?v=SRvMoPqM4JU
Wiele modów Total Conversion ma dużo wspólnego z fabuła Gothica, często skupiają się na historiach postaci albo starają się opowiedzieć czasy sprzed lub po akcji fabuły np Cienie przeszłości.
Samo to, że mod jest osobną historią już jest na plus, bo ile można grać w to samo, tym bardziej, że fabuła G2NK i tak jest już bardzo spójna i kompletna.
To zależy. Kwestia gustu. Ja mam swoje upodobania co do modów.
Zrobiłem recenzję moda, zapraszam:
https://www.youtube.com/watch?v=eKIPq3PtU2c
Dzięki @frN. Działa jak złoto i przyda się jako szablon na przyszłość. Leci props
[0.73]
Poprawione sprawdzanie martwych NPC
Dodano w configu opcję zmiany wielkości ikonek
Dobra. Zrobiłem to w B_RefreshAtInsert. Podaję rozwiązanie jak by ktoś miał ten sam problem, albo do oceny jeśli jest coś do poprawy. Poniższy kod wymusi ubranie NPCa (Nadii) w dowolny armor (itar_vlkbabe_h) jeśli się do niej zbliżymy i zrobi to tylko jeden raz dzięki zapisywaniu/sprawdzaniu aivara i sprawdzaniu, czy ma już założone podane ubranie. Pewnie można byłoby pominąć jeden z tych dwóch warunków, ale dla pewności oba nie zaszkodzą. Dzięki trzymaniu tego w funkcji można używać wiele razy na dowolnym NPC.

Użycie funkcji w B_RefreshAtInsert:
func void B_RefreshAtInsert()
{
B_RefreshAtInsert_old();
// force outfit change on already started game
var C_NPC npcNadja; npcNadja = Hlp_GetNpc(VLK_435_NADJA);
EquipArmor(self, npcNadja, itar_vlkbabe_h);
}

Sama funkcja:
func void EquipArmor (var C_NPC CURRENT_NPC, var C_NPC NPC, var INT ARMOR)
{
// aivar 93 = is already wearing new armor
if(!CURRENT_NPC.aivar[93] && (Hlp_GetInstanceID(NPC) == Hlp_GetInstanceID(CURRENT_NPC)))
{
var c_item currentArmor; currentArmor = Npc_GetEquippedArmor(CURRENT_NPC);
if(Hlp_GetInstanceID(currentArmor) != ARMOR)
{
   if(!Npc_GetInvItem(CURRENT_NPC, ARMOR))
   {
       CreateInvItem(CURRENT_NPC, ARMOR);
   };
   AI_EquipArmor(CURRENT_NPC, ARMOR);
};
CURRENT_NPC.aivar[93] = true;
};
};

Używam aivar 93, bo gram z Returningiem, ale w niezmodowanej grze może to być dowolny aivar pomiędzy 89-99.

Edit: jak tak o tym myślę to chyba by jednak przydało się pominąć tego aivara, bo jeśli po odpaleniu tej funkcji jakiś zewnętrzny kod z powrotem jej zmieni ubranie na inne to ten aivar nigdy nie zmieni się z powrotem na false i funkcja się już więcej nie odpali.
Wolałbym uniknąć robienia tego w B_RefreshAtInsert() :/ Zawsze to dodatkowy zbędny kod który będzie się odpalał za każdym razem gdy wyrenderuje się napotkany NPC (nawet jeśli będziemy sprawdzać czy to interesujący nas NPC), więc niezbyt to optymalne.
B_RefreshAtInsert jest wywoływane tylko przy dodaniu npc do listy aktywnych obiektów, czyli wtedy kiedy gracz zbliży się na określoną odległość do waypointa wpisanego w jego rutynie. Wpływ na wydajność jest niemal zerowy. Rutyny i percepcja npc mają największy wpływ na wydajność i jakoś nikt się tym nie przejmuje.
To by może i rozwiązało problem, ale to trochę przesada i wprowadziłoby inne problemy: jeśli mod był instalowany w połowie gry to oryginalny NPC mógł teoretycznie posiadać itemy, które otrzymał w trakcie gry, więc przy podmianie NPców by je stracił. Tak samo jeśli inny mod coś zmienia temu oryginalnemu NPCowi nie wiem czy byłoby to kompatybilne.
A nie lepiej zrobić nowego NPC, który będzie miał nowy pancerz?
Cytuj
Można użyć Mdl_SetVisualBody i wtedy postać ubiera zbroję nawet jeśli jest poza zasięgiem, ale w wielu przypadkach mimo tego, że posiada zbroję założoną (w ekwipunku jest zaznaczona jako aktywna), to wizualnie stoi w samych gaciach i trzeba zapisać/wczytać grę.
Też mam z tym problem. Nawet nie wystarczy zapisać/wczytać gry, trzeba jeszcze zapisać/wczytać grę mając w zasięgu widzenia danego NPCa.

Naprawdę nie ma na to lepszego rozwiązania?

Wolałbym uniknąć robienia tego w B_RefreshAtInsert() :/ Zawsze to dodatkowy zbędny kod który będzie się odpalał za każdym razem gdy wyrenderuje się napotkany NPC (nawet jeśli będziemy sprawdzać czy to interesujący nas NPC), więc niezbyt to optymalne.
Do góry