Wpis do dziennika wraz z tytułem zadania. 5780 6

O temacie

Autor Vanarius

Zaczęty 21.02.2017 roku

Wyświetleń 5780

Odpowiedzi 6

Vanarius

Vanarius

Riquer Team
Początkujący Modder
posty332
Propsy62
ProfesjaGrafik 3D
  • Riquer Team
  • Początkujący Modder
Dziś chciałbym pokazać skrypt, który powoduje że zamiast samego tekstu "Nowy wpis do dziennika" będzie wyświetlało się "Nowy wpis do dziennika (Zadanie)" Tę małą zmianę możemy zobaczyć w różnych modyfikacjach :) Poniżej macie skrypt z niektórymi wyjaśnieniami (niektórych nie umiem po prostu wyjaśnić)
Żeby taki skrypt napisać trzeba wejść do folderu _Work/Data/Scripts/Content/Story/B_Story i odpalić plik "B_LogEntry.d"

var int Move_Entry;

func void B_LogEntry (var string topic, var string entry)
{
Log_AddEntry (topic, entry);

var string txt;

txt = ConcatStrings ("Nowy wpis do dziennika (", topic); //początek tekstu, który ma się wyświetlać w tym przypadku jest to "Nowy wpis do dziennika (" Pamiętać żeby dać ten nawias bo wtedy efekt będzie brzydki.
txt = ConcatStrings (txt, ")"); //tutaj tylko zamykamy nawias który rozpoczęliśmy na górze.

if (Move_Entry == FALSE)
{
PrintScreen (/*PRINT_NewLogEntry*/txt, -1, YPOS_LOGENTRY, FONT_ScreenSmall, 3);

Move_Entry = TRUE;
}
else
{
Move_Entry = FALSE;

PrintScreen (/*PRINT_NewLogEntry*/txt, -1, YPOS_LOGENTRY - 5, FONT_ScreenSmall, 3);
};

Snd_Play ("LogEntry");
};

Chciałbym powiedzieć że pierwszy raz piszę tutaj poradnik na temat skryptu. Nigdzie nie widziałem podobnego tematu więc postanowiłem go wstawić :)
 

Leiwark

Leiwark

Użytkownicy
Kapitan Itharu Team
posty228
Propsy38
ProfesjaAktor głosowy
  • Zbanowany
  • Kapitan Itharu Team
Panowie czapki z głów! :)
 

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
No i mimo to props, nie zależnie od tego jak banalny by on nie był, jednak i tak gdy ktoś będzie miał taki problem to wpierw napisze w problematyce :P
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Darkmodders

Darkmodders

DarkModders Team
Mistrz mrocznych sztuk
posty828
Propsy283
ProfesjaProducent
  • DarkModders Team
  • Mistrz mrocznych sztuk
Można to trochę bardziej rozbudować ale liczą się chęci :)
Daje propsa
 
Blog grupy DarkModders Team.

http://darkmodders.pl/

Discord: darkmodders

A.K.

A.K.

Użytkownicy
posty156
Propsy163
Profesjabrak
  • Użytkownicy
Dołożyłem trochę obszerniejsze objaśnienia od siebie. Może komuś się przyda   :F

var int Move_Entry;
/*
Deklarujemy zmienną Move_Entry typu int (liczba całkowita)
Będzie ona stosowana w warunku, określającym pozycję tekstu.
Umieszczenie jej poza funkcją nadaje jej charakter globalny, co pozwala na korzystanie z niej w dowolnym skrypcie, np. dialogu.
Ważne - powyższa deklaracja musi być odczytana przez parser wcześniej, niż pierwsze odwołanie się do tej zmiennej.
*/

func void B_LogEntry (var string topic, var string entry)
/*
Jest to funkcja, odpowiadająca za dodawanie wpisów do dziennika.
Jej pierwszy parametr - topic (typu string, czyli ciąg znaków) to nazwa zadania.
Drugi - entry (również typu string), to treść wpisu.
Funkcja jest typu void, co znaczy, że wykonuje się bez zwracania wartości.
Jeśli chcemy zmienić tryb wyświetlania informacji w już istniejącym projekcie, najszybciej będzie zmodyfikować tą funkcję.
Natomiast w przypadku modyfikacji tworzonych od podstaw, można dla wygody napisać swoją własną funkcję z dopasowanym zestawem parametrów.
*/
{ //otwarcie ciała funkcji B_LogEntry


Log_AddEntry (topic, entry);
/*
Wbudowana funkcja, odpowiadająca za dodanie wpisu do dziennika (nie za wyświetlanie tekstu na ekranie!).
Jej argumenty (oba typu string) pobierają odpowiednie wartości z argumentów użytych w funkcji B_LogEntry.
Jest to wywołanie funkcji, nie można więc modyfikować jego struktury. Da się natomiast wpłynąć na wartości, jakie są przez nią pobierane, np:

var string test=" test";
test = ConcatStrings ("Nowy wpis do dziennika (entry, test);
Log_AddEntry(topic, test);

Powyższy kod doda do treści wpisu końcówkę " test", np. "Zadanie ukończone test", zamiast "Zadanie ukończone"
*/


var string txt;
/*
Deklarujemy zmienną pomocniczą txt typu string;
Ponieważ deklarację umieszczono wewnątrz ciała funkcji, zmienna ta będzie działać tylko w obrębie tej funkcji. W żadnym innym miejscu nie zostanie rozpoznana.
*/


txt = ConcatStrings ("Nowy wpis do dziennika (", topic); //początek tekstu, który ma się wyświetlać w tym przypadku jest to "Nowy wpis do dziennika (" Pamiętać żeby dać ten nawias bo wtedy efekt będzie brzydki.
/*
W tym miejscu dzieją się dwie rzeczy:
1. Wywołanie funkcji ConcatStrings(string, string).
Jest to funkcja zwracająca wartość typu string - wynik połączenia dwóch jej argumentów (również typów string),
np: ConcatStrings("Ala", "ma kota"); zwraca ciąg "Alama kota" (dlatego warto pamiętać o spacjach :))
2. Przypisanie wartości zwracanej przez funkcję ConcatStrings(string, string) do zmiennej txt.
*/

txt = ConcatStrings (txt, ")"); //tutaj tylko zamykamy nawias który rozpoczęliśmy na górze.
/*
Podobnie jak wyżej, z tym że zmienna txt zmienia swą wartość na: [wartość zmiennej txt z dołączonym )],
np:
załóżmy, że txt = "test"
txt = ConcatStrings (txt, ")");

txt przyjmie wartość: test)
*/


if (Move_Entry == FALSE)
/*
Warunek. Poniższy kod wykona się, jeżeli zmienna Move_Entry ma wartość FALSE (czyli najpewniej jest równa 0).
Zastosowano go, aby wyznaczyć pozycję wyświetlanego tekstu. (jeśli dobrze się domyślam, chodzi o to, żeby napisy nie nachodziły na siebie :P)

Można też użyć zapisu :

if(!Move_Entry)
*/
{
PrintScreen (/*PRINT_NewLogEntry*/txt, -1, YPOS_LOGENTRY, FONT_ScreenSmall, 3);
/*
Wbudowana funkcja, wyświetlająca tekst na ekranie.
wtrącenie PRINT_NewLogEntry jest zbędne.

1. argument (string) - wyświetlany tekst, tutaj wartość zmiennej txt
2. argument (int) - położenie tekstu w poziomie (jeśli się nie mylę, to chyba w %, a -1 daje wyśrodkowanie)
3. argument (int) - położenie tekstu w pionie, tutaj równa stałej YPOS_LOGENTRY (określona w pliku Text.d, domyślnie 45)
4. Argument (string) - nazwa użytej czcionki
5. Argument (int) - czas wyświetlania w sekundach
*/


Move_Entry = TRUE;
/*
zmienia wartość Move_Entry na TRUE. Dzięki temu przy kolejnym wywołaniu funkcji B_LogEntry powyższy kod nie wykona się.
*/
}
else
/*
W przeciwnym przypadku (gdy Move_Entry ma wartość różną od FALSE)
*/
{
Move_Entry = FALSE;
/*
zmienia wartość Move_Entry na FALSE. Dzięki temu następnym razem warunek będzie spełniony
*/

PrintScreen (/*PRINT_NewLogEntry*/txt, -1, YPOS_LOGENTRY - 5, FONT_ScreenSmall, 3);
/*
Jak poprzednio, z tą różnicą, że wartość pozycji tekstu w pionie jest mniejsza o 5 (YPOS_LOGENTRY - 5)
*/
};

Snd_Play ("LogEntry");
/*
Wbudowana funkcja z argumentem typu string.
Odtwarza dźwięk opisany nazwą LogEntry.
*/
};
 

pawbuj

pawbuj

Użytkownicy
posty1624
Propsy135
ProfesjaSkrypter
  • Użytkownicy
a czy da się zrobić, że jeżeli wpis do zadania jest wywoływany pierwszy raz to pojawia się napis "nowe zadanie".?

np. funkcja , która sprawdza czy zadanie jest już w dzienniku.

 

Kirgo2

Kirgo2

Użytkownicy
posty49
Propsy6
ProfesjaGracz
  • Użytkownicy
Podrzucam odrobinę przerobioną wersję skryptu autorstwa Vanariusa do Gothica I, bo skrypt z pierwszego postu w tym temacie dotyczy Gothica 2 i pierwsza część Gothica go nie zasysa.


Wpis do dziennika wraz z tytułem zadania - wersja do Gothic I

Tutaj trzeba wejść do pliku B_Functions.d w folderze Gothic\_work\DATA\scripts\Content\AI\AI_Intern i tam podmienić istniejącą funkcję B_LogEntry na:

var int Move_Entry;

func void B_LogEntry (var string topic, var string entry)
{
Log_AddEntry (topic, entry);

var string txt;

txt = ConcatStrings ("Nowy wpis do dziennika (", topic); //początek tekstu, który ma się wyświetlać w tym przypadku jest to "Nowy wpis do dziennika (" Pamiętać żeby dać ten nawias bo wtedy efekt będzie brzydki.
txt = ConcatStrings (txt, ")"); //tutaj tylko zamykamy nawias który rozpoczęliśmy na górze.

if (Move_Entry == FALSE)
{
PrintScreen (/*PRINT_NewLogEntry*/txt, -1, _YPOS_MESSAGE_LOGENTRY, "FONT_OLD_10_WHITE.TGA",_TIME_MESSAGE_GIVEN);

Move_Entry = TRUE;
}
else
{
Move_Entry = FALSE;

PrintScreen (/*PRINT_NewLogEntry*/txt, -1, _YPOS_MESSAGE_LOGENTRY - 5, "FONT_OLD_10_WHITE.TGA",_TIME_MESSAGE_GIVEN);
};

Snd_Play ("LogEntry");
};
 


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