[Gothic 1] Zmiana kosztu siły, zręczności i many w Punktach Nauki 176 0

O temacie

Autor Kirgo2

Zaczęty 2.09.2024 roku

Wyświetleń 176

Odpowiedzi 0

Kirgo2

Kirgo2

Użytkownicy
posty10
Propsy3
ProfesjaGracz
  • Użytkownicy
Zmiana wymaganej ilości punktów nauki

Możesz zmienić ilość wymaganych punktów nauki w pliku "Story_Globals.d", który znajduje się w "Gothic\_work\DATA\scripts\Content\Story". Na zasadzie, że określisz ile Punktów Nauki będzie wymagała nauka 1 punktu siły/zręczności/many. W tym celu wyszukaj w tym pliku słowa "Lernkosten" i będziesz miał coś takiego:

const int LPCOST_ATTRIBUTE_STRENGTH = 1;
const int LPCOST_ATTRIBUTE_DEXTERITY = 1;
const int LPCOST_ATTRIBUTE_MANA = 1;

const int LPCOST_TALENT_MAGE_1 = 10;
const int LPCOST_TALENT_MAGE_2 = 15;
const int LPCOST_TALENT_MAGE_3 = 20;
const int LPCOST_TALENT_MAGE_4 = 25;
const int LPCOST_TALENT_MAGE_5 = 30;
const int LPCOST_TALENT_MAGE_6 = 40;

const int LPCOST_TALENT_1H_1 = 10;
const int LPCOST_TALENT_1H_2 = 20;
const int LPCOST_TALENT_2H_1 = 30;
const int LPCOST_TALENT_2H_2 = 40;

const int LPCOST_TALENT_BOW_1 = 10;
const int LPCOST_TALENT_BOW_2 = 20;
const int LPCOST_TALENT_CROSSBOW_1 = 10;
const int LPCOST_TALENT_CROSSBOW_2 = 20;

const int LPCOST_TALENT_ACROBAT = 10;
const int LPCOST_TALENT_SNEAK = 10;
const int LPCOST_TALENT_PICKLOCK_1 = 10;
const int LPCOST_TALENT_PICKLOCK_2 = 20;
const int LPCOST_TALENT_PICKPOCKET_1 = 10;
const int LPCOST_TALENT_PICKPOCKET_2 = 20;

Jest jednak mały haczyk - o ile bez problemu można zmienić przykładowo koszt nauki walki bronią czy umiejętności złodziejskich to... z siłą, zręcznością i maną jest pewien problem bo nie wystarczy tylko zmienić

const int LPCOST_ATTRIBUTE_STRENGTH = 1;
na przykładowo

const int LPCOST_ATTRIBUTE_STRENGTH = 2;
Jeżeli ograniczysz się wyłącznie do zmiany cyferki to jakkolwiek w dialogu u Diego będzie Ci się wyświetlać "+1 Punkt siły, koszt 2 Punkty Nauki" oraz "+5 Punktów Siły, koszt 10 Punktów Nauki" to w praktyce Diego da Ci odpowiednio 2 Punkty Siły i 5 Punktów Siły czyli wg przelicznika 1 za 1, zamiast przelicznika wpisanego w "Story_Globals.d"
Dodatkowo to samo będzie się tyczyć wszystkich innych nauczycieli (w przypadku siły w Gothic 1 będzie to oprócz Diega Cor Angar, Gor Na Toth, Lares, Lee, Thorus). Tak samo będzie z nauką u nauczycieli Zręczności i Many. Ale UWAGA: według przelicznika z "Story_Globals.d" będzie Cię uczył Character Helper ("insert ch") a mówiąc ściślej - wyłącznie Character Helper.

Skąd ta różnica między normalnymi nauczycielami a Character Helperem?
Dzieje się tak dlatego, że dialogi odpowiadające za naukę u "normalnych nauczycieli" siły, zręczności i many z Gothica korzystają z "B_BuyAttributePoints" a dialogi odpowiadające za naukę siły, zręczności i many u "Character Helpera" korzystają z "B_SetHeroAttributes".



Rozwiązanie:
czyli co zrobić, żeby nauczyciele uwzględniali przelicznik z pliku "Story_Globals.d".

1. Musisz wejść w plik dialogowy postaci nauczyciela i zamienić:

B_BuyAttributePoints (other, ATR_STRENGTH, LPCOST_ATTRIBUTE_STRENGTH);
na

B_SetHeroAttributes(ATR_STRENGTH, 1, LPCOST_ATTRIBUTE_STRENGTH)
oraz

Cytuj
B_BuyAttributePoints (other, ATR_STRENGTH, 5*LPCOST_ATTRIBUTE_STRENGTH);

na

B_SetHeroAttributes(ATR_STRENGTH, 5, 5*LPCOST_ATTRIBUTE_STRENGTH);
2. Niestety będziesz musiał to zrobić osobno dla każdego z nauczycieli siły - czyli osobno wejść do dialogu Diego, Cor Angara, Thorusa, Laresa, itd i zmienić te fragmenty.

3. Analogicznie to działa z podmianą B_BuyAttributePoints na B_SetHeroAttributes ze zręcznością i maną.

4. I rzecz prawie najważniejsza, bez której cała impreza nie ruszy - plik odpowiedzialny za dialog normalnego nauczyciela (np. "DIA_Pc_Thief.d" znajdujący się w "Gothic\_work\DATA\scripts\Content\Story\MISSIONS" a odpowiedzialny za Diega) nie "zassie" i nie rozpozna funkcji "B_SetHeroAttributes" jeżeli nie zrobimy tego o czym teraz będzie mowa.   

Funkcja "B_SetHeroAttributes" znajduje się w pliku "CharacterHelper.d" w folderze "Gothic\_work\DATA\scripts\Content\AI\Test_Skripts". Musisz wyciąć tę funkcję czyli:


func void B_SetHeroAttributes(VAR INT selection, var int increase, var int LP_cost)
{
    var string Attributes;
   
    if (hero.lp >= LP_cost)
{
hero.lp = hero.lp - LP_cost;

Npc_ChangeAttribute (hero, selection, increase);

Attributes = "Lernpunkte:";
        Attributes = ConcatStrings(Attributes, IntToString(hero.LP));
        Attributes = ConcatStrings(Attributes, "Str:");
        Attributes = ConcatStrings(Attributes, IntToString(hero.attribute[ATR_STRENGTH]));
        Attributes = ConcatStrings(Attributes, "Dex:");
        Attributes = ConcatStrings(Attributes, IntToString(hero.attribute[ATR_DEXTERITY]));
        Attributes = ConcatStrings(Attributes, "Mana:");
        Attributes = ConcatStrings(Attributes, IntToString(hero.attribute[ATR_MANA_MAX]));

PrintScreen (Attributes, -1,-1,"font_old_20_white.tga",3);
}
else
{
PrintScreen ("Zu wenig Lernpunkte!", -1,-1,"FONT_OLD_20_WHITE.TGA",2);
B_Say (self, other, "$NOLEARNNOPOINTS");
};
};

...i wkleić przykładowo do pliku "B_InExtremo.d" w "Gothic\_work\DATA\scripts\Content\Story\B". Przy czym gdy mówię "wyciąć" to znaczy "wyciąć" - ta funkcja ma zniknąć z pliku "CharacterHelper.d", gdyż jeżeli ją tylko skopiujesz i wkleisz to przy reparsowaniu plików wyskoczy Ci błąd.

Możesz też nieco zmodyfikować tę funkcję - bo przy nauce u nauczyciela będzie lepiej wyglądać:

func void B_SetHeroAttributes(VAR INT selection, var int increase, var int LP_cost)
{
    var string Attributes;
   
    if (hero.lp >= LP_cost)
{
hero.lp = hero.lp - LP_cost;

Npc_ChangeAttribute (hero, selection, increase);
        PrintScreen ("Twoja moc rośnie!", -1,-1,"FONT_OLD_20_WHITE.TGA",1);
}
else
{
PrintScreen ("Zbyt mało Punktów Nauki!", -1,-1,"FONT_OLD_20_WHITE.TGA",2);
B_Say (self, other, "$NOLEARNNOPOINTS");
};
};

5. Po wszystkim reparsujesz pliki

6. I gotowe! Jeżeli wyciąłeś i przeniosłeś tę funkcję oraz dokonałeś podmianek w dialogach nauczycieli to masz przelicznik punktów nauki za siłę, zręczność i manę powiązany z przelicznikiem określonym w pliku "Story_Globals.d". Możesz też normalnie korzystać z "Character Helpera" gdyż on także "zasysa" funkcje "B_SetHeroAttributes" umieszczoną w folderze "Gothic\_work\DATA\scripts\Content\Story\B" (w moim przypadku w pliku "B_InExtremo.d" w tym folderze).


Autor: Kirgo2 z forum TheModders. Kopiowanie i rozpowszechnianie dozwolone.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry