--- POCZĄTEK ---
Deksterowy poradnik opisujący, jak zrobić trochę prymitywny system reputacji. Do edycji skryptów zalecam program GothicSourcer w najnowszej dostępnej wersji. Tutorial jest napisany bardzo prostym językiem, aby nikt nie miał problemów ze zrozumieniem go.
--- SYSTEM REPUTACJI ---
Zacznijmy od zmiennej. Wchodzimy do folderu _Work\data\scripts\Content\_intern i otwieramy plik Constants.d, a następnie dopisujemy na końcu naszą zmienną. Ja przyjmę, że będzie to tutreput. Ma to wyglądać tak:
var int reptut;
Drugim krokiem będzie stworzenie wyświetlania tej reputacji. W tym poradniku opiszę, jak to zrobić na kartce. Wchodzimy do folderu _Work\data\scripts\Content\Items i otwieramy plik IT_Written.d. Na samym końcu dodajemy:
INSTANCE reputacja (C_Item)
{
name = "Moja reputacja";
mainflag = ITEM_KAT_DOCS;
flags = ITEM_MISSION;
value = 0;
visual = "ItWr_Scroll_01.3DS";
material = MAT_LEATHER;
on_state[0] = usereputacja;
scemeName = "MAP";
description = "Moja reputacja";
};
func void usereputacja ()
{
var string REP1; REP1 = "Reputacja z poradnika: "; REP1 = ConcatStrings(REP1,IntToString(reptut));
var int nDocID;
nDocID = Doc_Create ();
Doc_SetPages ( nDocID, 1 );
Doc_SetPage ( nDocID, 0, "letters.TGA" , 0);
Doc_SetFont ( nDocID, 0, FONT_BookHeadline );
Doc_SetMargins ( nDocID, -1, 50, 50, 50, 50, 1 );
Doc_PrintLine ( nDocID, 0, "Reputacja");
Doc_SetFont ( nDocID, 0, FONT_Book );
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, REP1);
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "Maksymalna reputacja: 100");
Doc_Show ( nDocID );
};
I już zabieram się za opisywanie wartości, które powinniśmy zmienić, wedle uznania oczywiście:
INSTANCE reputacja (C_Item)
Tutaj możemy wstawić instance, czyli taki jakby identyfikator przedmiotu. Nie może być dwóch takich samych instance. Zalecam, aby zostawić to, co jest.
name = "Moja reputacja";
Tutaj, zamiast „Moja Reputacja” możemy wstawić własną nazwę przedmiotu, która pojawi się w ekwipunku.
description = "Moja reputacja";
Podobnie, jak w przypadku nazwy, z tym, że tutaj mamy opis.
var string REP1; REP1 = "Reputacja z poradnika: "; REP1 = ConcatStrings(REP1,IntToString(reptut));
Użycie identyfikatorów o nazwie REP1, REP2, etc. jest bardzo wygodne moim zdaniem, więc nie należy tego zmieniać. Zamiast "Reputacja z poradnika: " należy wpisać pierwszy człon wyświetlanego tekstu, np. „Reputacja u orków: ” (wskazane jest, żeby zostawić na końcu spację, aczkolwiek jest to tylko tak dla estetyki. Zamiast reptut (w nawiasie na końcu linii) wstawiamy nazwę zmiennej, którą zadeklarowaliśmy na samym początku.
Doc_PrintLine ( nDocID, 0, "Reputacja");
Zamiast „Reputacja” możemy wstawić własny nagłówek na kartce.
Doc_PrintLine ( nDocID, 0, REP1);
A to odpowiada za wyświetlenie naszej reputacji (w tym przypadku o id REP1) na kartce.
Doc_PrintLine ( nDocID, 0, "Maksymalna reputacja: 100");
Dopisek na końcu kartki. Możemy wyrzucić lub zmienić.
Teraz opiszę, co zrobić, aby dodać więcej wyświetlanych reputacji (jeżeli czegoś nie rozumiemy, to wracamy do odpowiedniego punktu w tutorialu).
Najpierw należy zadeklarować nową zmienną o INNEJ NAZWIE, niż poprzednia, np. nowarep. Dalej musimy dodać taką linię pod jej odpowiednikiem:
var string REP1; REP1 = "Reputacja z poradnika: "; REP1 = ConcatStrings(REP1,IntToString(reptut));
Teraz należy pozmieniać odpowiednie części tej linii, aby pasowały do skryptu, czyli REP1 zmieniamy na REP2, a reptut na nowarep. Powinno to wyglądać tak:
var string REP2; REP2 = "Nowa reputacja: "; REP2 = ConcatStrings(REP2,IntToString(nowarep));
Kolejnym i ostatnim krokiem będzie wstawienie w jedną z linii tekstu kartki, np. tutaj (zaraz pod wyświetlaniem REP1):
Doc_PrintLine ( nDocID, 0, "");
Wstawiamy po prostu pomiędzy cudzysłów REP2, np.:
Doc_PrintLine ( nDocID, 0, "REP2");
--- DODAWANIE REPUTACJI ---
Wszystko fajnie, tylko teraz na cholerę nam to, jeżeli nikt nie dodaje nam tej reputacji, ani nie odejmuje? Załóżmy, że wykonaliśmy misję i chcemy, aby dawało nam to 10 do nowej reputacji (REP2). W jakimś dialogu wstawiamy takie coś:
nowarep = nowarep + 10;
PrintScreen ("Nowa reputacja: +10", -1, YPOS_LOGENTRY, FONT_ScreenSmall, 2);
Dla niekumatych dalsze wyjaśnienia:
nowarep = nowarep + 10;
Tutaj wstawiamy swoją zmienną zamiast nowarep i własną wartość (możemy zamienić znaki na odejmowanie, dzielenie, czy też mnożenie).
PrintScreen ("Nowa reputacja: +10", -1, YPOS_LOGENTRY, FONT_ScreenSmall, 2);
A tutaj zamiast „Nowa reputacja: +10” wstawiamy tekst, który chcemy, aby się nam wyświetlił na ekranie.
--- KONIEC ---
Chyba prościej się już nie da. Wydaje mi się, że można to również zastosować do wyświetlania w oknie statystyk, aczkolwiek sam tego nie próbowałem. Jeżeli chcecie, to możecie kopiować tutorial.