Reputacja 4752 12

O temacie

Autor Retsked

Zaczęty 6.08.2009 roku

Wyświetleń 4752

Odpowiedzi 12

Retsked

Retsked

Użytkownicy
Jam jest 444
posty1535
Propsy61
  • Użytkownicy
  • Jam jest 444

Retsked

Reputacja
2009-08-06, 14:12(Ostatnia zmiana: 2009-08-17, 09:10)
--- 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.
 

Dracon

Dracon

Użytkownicy
posty1061
Propsy904
Profesjabrak
  • Użytkownicy

Dracon

Reputacja
#1 2009-08-06, 15:05(Ostatnia zmiana: 2009-08-06, 20:19)
Cytuj
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 tutreput;
Tu chyba powinno być "reput", bo
var string REP1; REP1 = "Reputacja z poradnika: ";   REP1 = ConcatStrings(REP1,IntToString(reptut /*<< ta zmienna nie jest nigdzie zadeklarowana!*/));
 
,,Dobry, to człowiek, który nie ukrywa siedzącego w nim zwierzęcia. A taki co usiłuje udawać dobrego, jest wręcz niebezpieczny. Najgroźniejsi są ci, którzy sami głęboko wierzą, że są dobrzy. Odrażający, ohydny przestępca może zamordować jednego człowieka, dziesięciu, stu, ale nigdy nie zabija milionów. Miliony mordują ci, którzy mają się za samą dobroć.''

Wiktor Suworow, Akwarium

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
przede wszystkim do dodawania reputacji wypada stworzyć oddzielną funkcję, dzięki temu, będzie można zmienić efekty, które wtedy występują bez zmieniania wszystkich dialogów. Generalnie zwykle, gdy jakiś kod się powtarza warto wrzucać do oddzielnych funkcji.

Poza tym nazwy są nie najlepsze, więc sam się w nich gubisz: tutreput, reptut.
 

Retsked

Retsked

Użytkownicy
Jam jest 444
posty1535
Propsy61
  • Użytkownicy
  • Jam jest 444
To były przykładowe, a tutorial dotyczy najprostszej chyba metody :D .
 

pawbuj

pawbuj

Użytkownicy
posty1262
Propsy86
ProfesjaSkrypter
  • Użytkownicy
tak na marginesie, do której części gothica jest ten tutek o reputacji?
 
Gothic 1 UpdatePack fixmod 0.1 wkrótce!

Retsked

Retsked

Użytkownicy
Jam jest 444
posty1535
Propsy61
  • Użytkownicy
  • Jam jest 444
Z myślą o G2.
 

Tasilvar

Tasilvar

Użytkownicy
zwykły user
posty265
Propsy17
Profesjabrak
  • Użytkownicy
  • zwykły user
W G1 też działa tylko że jak dodałem zmianną w constans.d  to był błąd że nie mógł jej znaleźć, zadziałało gdy dałęm w Story_Globals.d

MRGreg

MRGreg

Użytkownicy
posty32
  • Użytkownicy
W G1 też działa tylko że jak dodałem zmianną w constans.d  to był błąd że nie mógł jej znaleźć, zadziałało gdy dałęm w Story_Globals.d

Ponieważ plik constans.d nie zawiera zmiennych a stale. A w Story_Globals.d mamy wszystkie zmienne globalne dostępne w każdym momencie działania gry.
 

Jason525PL

Jason525PL

Użytkownicy
posty116
Propsy6
  • Użytkownicy
Wszystko działa świetnie...tylko jak mam zrobić żeby napis Reputacja + 10 pojawiał się nad lub pod napisem Nowy Wpis w Dzienniku...
 

Adanos

Adanos

Administrator
Szara eminencja
posty4963
Propsy3435
ProfesjaProgramista
  • Administrator
  • Szara eminencja
To bardzo proste. Zmieniasz po prostu oś y.
PrintScreen ("Nowa reputacja: +10", -1, YPOS_LOGENTRY, FONT_ScreenSmall, 2);Odpowiada za to trzeci argument: YPOS_LOGENTRY. Domyślnie jest to chyba -1. Zamiast tego wpisujesz np. 10 czy 20.

olo

olo

Użytkownicy
posty35
  • Użytkownicy
ej pomóż mi ktoś zrobiłem dialog dodałem reptuta tak jak tutaj wyskakuje mi expected '(' line 84
line 84 to tam gdzie jest te printscreen a i ne pisać że "wstaw nawias" bo to już robiłem
 

michalsz

michalsz

Użytkownicy
posty131
  • Użytkownicy
Jeśli chcesz żeby ci ktoś pomógł podaj skrypt  :lol:
 

Marvin

Marvin

Użytkownicy
posty35
Propsy1
  • Użytkownicy
A jak zrobić, aby nasza reputacja pojawiała się w dzienniku?
 


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