Witam.
To jest mój pierwszy samouczek. Jak coś będzie źle wytłumaczone to piszcie w komentarzach to poprawię.
Oryginalny skrypt polegał na tym, że po zdobyciu poziomu, doświadczenie do następnego się zwiększało a ze zdobytym przez nas nic się nie działo(to znaczy że po zdobytym poziomie się nie zerowało).
Mój skrypt zmienia na to, że po zdobyciu poziomu nasze doświadczenie się zeruję.
Bez obaw, tyle samo doświadczenia co było trzeba będzie zdobyć do nowego poziomu.
Koniec teorii, start praktyki.
Otwieramy plik
B_GivePlayerXP.d znajdujący się w "
Gothic 2\_work\data\Scripts\Content\Story\B_Story\"
Przechodzimy do części pliku w której jest skrypt awansu na następny poziom czyli:
if(hero.exp >= hero.exp_next) //Jeśli liczba naszego expa równa się liczbie expa wymaganej do następengo poziomu to...
{
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");
};
A teraz wytłumaczenie:if(hero.exp >= hero.exp_next)
Jeśli liczba naszego expa równa się liczbie expa wymaganej do następengo poziomu to... hero.level = hero.level + 1;
Nasz level zwiększa się o 1.hero.exp_next = hero.exp_next + ((hero.level + 1) * 500);
Liczba doświadczenia jakie musimy zdobyć do następnego poziomu zwiększa się.
np.poziom 0 - Maksymalne doświadczenie=500 + ((Nasz level=1 +1) * 500) wychodzi 1500 czyli tyle musimy zdobyć by osiągnąć poziom 2. hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS_MAX] + HP_PER_LEVEL;
Nasza maksymalna liczba punktów życia wzrasta o tyle co wynosi zmienna HP_PER_LEVEL(domyślnie 12). hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + HP_PER_LEVEL;
Nasza maksymalna liczba punktów życia wzrasta o tyle co wynosi zmienna HP_PER_LEVEL(domyślnie 12). Można zmienić na hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS; co znaczy, że przy awansie nasze zdrowie się odnawia do pełna.hero.lp = hero.lp + LP_PER_LEVEL;
Nasza liczba punktów nauki wzrasta o tyle co wynosi zmienna LP_PER_LEVEL(domyślnie 10).PrintScreen(PRINT_LevelUp,-1,YPOS_LevelUp,FONT_Screen,2);
Na naszym ekranie pojawi się napis ustawiony w zmiennej PRINT_LevelUp czyli Kolejny Poziom!Snd_Play("LevelUp");
Odtwarzany jest dźwięk "LevelUp"Omówione to teraz jak to zmienić?Chodzi nam o linijkę:
hero.exp_next = hero.exp_next + ((hero.level + 1) * 500);
Tworzymy nową zmienną gdzieś na początku(ja ją nazwałem
NextMaxExp)
Zamiast tego:
hero.exp_next = hero.exp_next + ((hero.level + 1) * 500);
Dajemy to:
NextMaxExp = hero.exp_next + ((hero.level + 1) * 500);
Ale to nie wszystko ponieważ hero.exp_next się nie zmieni i co każde zdobycie expa będzie nowy level
.
I teraz najważniejsze w tym systemie doświadczenia:
NextMaxExp = NextMaxExp - hero.exp_next;
Czyli w naszej zmiennej będzie zapisane ile trzeba zdobyć doświadczenia na nowy poziom.
Ale jeszcze trzeba zapisać ile więcej expa zdobyliśmy niż trzeba było i zrobić by tyle równało się nasze zdobyte doświadczenie na następny level .
hero.exp = hero.exp - hero.exp_next;
Gotowe. Teraz wystarczy zrobić by
hero.exp_next równało się naszej zmiennej czyli w moim przypadku:
hero.exp_next = NextMaxExp;
To tyle
Ale po co nam to robić jak nie ma żadnej różnicy w gameplayu.
Ten system jest przydatny jeśli ma się pasek doświadczenia.
Bo wtedy pasek po zdobyciu poziomu nie zaczyna się w połowie zapełniony tylko od zera.
Gotowiec dla leni.Spoiler
Stare:
hero.level = hero.level + 1;
hero.exp_next = hero.exp_next + ((hero.level + 1) * 500);
Nowe:
var int NextMaxExp;
hero.level = hero.level + 1;
NextMaxExp = hero.exp_next + ((hero.level + 1) * 500);
NextMaxExp = NextMaxExp - hero.exp_next;
hero.exp = hero.exp - hero.exp_next;
hero.exp_next = NextMaxExp;