Moja propozycja: stworzyć osobny dział, w którym będę opisane i charakteryzowane wszystkie skrypty. mogło by to wyglądać mniej więcej tak:
B_GivePlayerXP.d
Lokalizacja: Główny folder Gothica\_Work\data\Scripts\Content\Story\B_Story
Skrypt ten decyduje o tym co stanie się z bohaterem kiedy osiągnie następny poziom.
// **************
// B_GivePlayerXP
// **************
func void B_GivePlayerXP (var int add_xp)
{
if (hero.level == 0)
{
hero.exp_next = 500;
};
//----------------------------------------------------------------------------
hero.exp = hero.exp + add_xp;
//----------------------------------------------------------------------------
var string concatText;
concatText = PRINT_XPGained;
concatText = ConcatStrings (concatText, IntToString(add_xp));
PrintScreen (concatText, -1, YPOS_XPGained, FONT_ScreenSmall, 2);
//----------------------------------------------------------------------------
if ( hero.exp >= hero.exp_next ) // ( XP > (500*((hero.level+2)/2)*(hero.level+1)) )
{
hero.level = hero.level+1;
hero.exp_next = hero.exp_next +((hero.level+1)*500);
hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS_MAX] + HP_PER_LEVEL;
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + HP_PER_LEVEL;
hero.LP = hero.LP + LP_PER_LEVEL;
PrintScreen (PRINT_LevelUp, -1, YPOS_LevelUp, FONT_Screen, 2);
Snd_Play ("LevelUp");
};
B_Checklog ();
};
Tak wygląda w orginale
if (hero.level == 0)
{
hero.exp_next = 500;
};
Te część mówi, że jeżeli poziom bohatera wynosi '0' - "if (hero.level == 0)" - to do następnego poziomu potrzebne nam będzie 500 punktów doświadczenia - "hero.exp_next = 500;"
if ( hero.exp >= hero.exp_next ) // ( XP > (500*((hero.level+2)/2)*(hero.level+1)) )
{
hero.level = hero.level+1;
hero.exp_next = hero.exp_next +((hero.level+1)*500);
hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS_MAX] + HP_PER_LEVEL;
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + HP_PER_LEVEL;
hero.LP = hero.LP + LP_PER_LEVEL;
PrintScreen (PRINT_LevelUp, -1, YPOS_LevelUp, FONT_Screen, 2);
Snd_Play ("LevelUp");
};
Dalej mamy opisane co się stanie z naszym bohaterem jeśli otrzyma kolejny poziom.
Najpierw widzimy warunek - "if ( hero.exp >= hero.exp_next )" - czyli, jeżeli punkty doświadczenia bohatera są większe lub równe wymaganym punktom do następnego poziomu wtedy - "hero.level = hero.level+1;" - poziom bohatera jest równy aktualnemu poziomowi plus jeden (czyli poziom rośnie nam o jeden), "hero.exp_next = hero.exp_next +((hero.level+1)*500);" - wymagana ilość PD jest równa aktualnej wymaganej ilości PD plus równanie określające ilość wymaganych PD ((hero.level+1)*500), dalej mamy napisane, że maksymalna i aktualna ilość punktów trafień zwiększa się o "HP_PER_LEVEL" (stała zdefiniowana w innym skrypcie), następnie mamy jeszcze, że liczba punktów nauki zwiększa się o LP_PER_LEVEL (następna stała) i funkcje wyświetlającą napis na ekranie.
Co można zmienić?
Jak w każdym skrypcie można zmienić już istniejące wartości,, czyli np. ilość otrzymanych punktów trafień zwiększyć do np. 50. Ale można też dopisać własne funkcje i warunki. O to przykład:
if ( hero.attribute[ATR_DEXTERITY] > hero.attribute[ATR_STRENGTH] )
&& ( hero.attribute[ATR_DEXTERITY] > hero.attribute[ATR_MANA_MAX] )
{
hero.attribute[ATR_DEXTERITY] = hero.attribute[ATR_DEXTERITY] + 1;
hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS] + 5;
hero.protection[PROT_POINT] = hero.protection[PROT_POINT]+ 1;
};
Jeżeli zręczność jest większa od siły i od maksymalnej ilości punktów many otrzymujemy, 1 do zręczności, 5 do punktów trafień, i 1 do odporności na pociski.
w taki sposób można wprowadzić starzenie się bohatera, np.
if (hero.level > 10)
{
Mdl_SetVisualBody (self, FACE_N_Player2);
};
Zamiast "FACE_N_Player2" wstawić stałą określającą teksturę twarzy bohatera wyglądającego starzej i tak co np. 10 poziomów zmieniać teksturę twarzy na starszą lub model postaci na bardziej "napakowaną" dzięki temu bohater z czasem będzie wyglądał na silniejszego.
Jeżeli macie jakieś inne fajne pomysły jak wykorzystać ten skrypt to napiszcie poniżej.