B_GivePlayerXP 6431 3

O temacie

Autor przemetrzynascie

Zaczęty 13.03.2010 roku

Wyświetleń 6431

Odpowiedzi 3

przemetrzynascie

przemetrzynascie

Użytkownicy
posty8
Propsy1
  • Użytkownicy
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.
 

Vuler

Vuler

Użytkownicy
posty60
Propsy16
Profesjabrak
  • Użytkownicy
Muszę przyznać, że pomysł ciekawy, jednak trochę uwag do samego opisu

Cytat: przemetrzynascie link=topic=9239.msg86533#msg86533 date=Mar 13 2010, 11:22 AM\'
Skrypt ten decyduje o tym co stanie się z bohaterem kiedy osiągnie następny poziom.

W pliku B_GivePlayerXP.d jest zawarta definicja funkcji (o tej samej nazwie co plik), która służy do przydzielania graczowi doświadczenia. A w przypadku gdy gracz zdobył już ilość doświadczenia, która pozwala przejść na następny poziom, wykonywane są odpowiednie czynności.

Wydaje mi się, że taki opis lepiej przedstawia (ogólnie) czego można się spodziewać po zaglądnięciu do pliku B_GivePlayerXP.d

Cytat: przemetrzynascie link=topic=9239.msg86533#msg86533 date=Mar 13 2010, 11:22 AM\'
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.

W takim celu nie edytował bym bezpośrednio funkcji B_GivePlayerXP(), gdyż od tego jest stała HP_PER_LEVEL.

Jeszcze co do samego pomysłu to w przypadku funkcji (jak B_GivePlayerXP()) proponuje w opisie zawrzeć informacje o poszczególnych argumentach oraz jakie wartości należy w nich przekazać. Co więcej to dobrze by było przytoczyć przykłady użycia samej funkcji w skryptach (niekoniecznie trzeba by pisać nowy skrypt, ale wskazać przykładowy z Gothica w którym została użyta dana funkcja).

Dobrym wyjściem było by także opisać czy taka funkcja występuje w obu wersjach Gothica.

Przykładem może być tu funkcja B_GivePlayerXP(), która w Gothicu 1 ma swój odpowiednik w postaci funkcji B_GiveXP(), posiada także jeden argument - ilość doświadczenia przydzielaną graczowi. Samo jej działanie jest także identyczne. Znajduje się ona w folderze:
_work\data\Scripts\content\Story\B
Dodatkowo stała HP_PER_LEVEL jest (oraz kilka innych) w przeciwieństwie do Gothica 2 zdefiniowana w pliku w którym jest zawarta sama funkcja (B_GiveXP.d).

Mój opis jest trochę chaotyczny, jednak jeśli faktycznie miało by powstać takie repozytorium to trzeba by było ustalić szablon według którego opisywane byłby funkcje, klasy, zawartości plików.
 

emace

emace

Użytkownicy
czy ktoś napełnia wkłady do długopisów ?
posty404
Propsy297
Profesjabrak
  • Użytkownicy
  • czy ktoś napełnia wkłady do długopisów ?
i co się dzieje z tym tematem, pomysł upadł ??
 





Podobno pewien nekromanta znany pod pseudonimem Xardas jako jedyny poznał imię niejakiego Bezia. Rzekomo za tę informację zobowiązał się ożywiać zabitych przez niego NPC-ów do kolejnych części gry.

jendrzejs

jendrzejs

Użytkownicy
posty586
Propsy31
Profesjabrak
  • Użytkownicy
Ostatni post był w marcu to znaczy, że pomysł upadł, tak jak niektóre mody.
 


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