Najpierw rzecz najważniejsza, czyli:
Lionel,
Na swoim komputerze rób co chcesz ze skryptami, twórz własne filozofie pisania skryptów, ogłaszaj się skryptowym bóstwem, ale proszę, nie wprowadzaj w błąd użytkowników internetu, to błędne koło, niech zostanie w twoich czterech ścianach. Co jakiś czas się taki ktoś jak ty pojawia, mąci w głowie, a potem każdy mówi, że pisanie skryptów jest trudne. Jest to bardzo logiczne, a twoje pomysły są wręcz absurdalne.
Do rzeczy jednak, do zaakceptowania jest inny sposób pisania skryptów, ale co nowicjusz ma powiedzieć na coś takiego?
if(!(GetLocalInt(oPC, "XXXX") == 1))
albo:
Cytat
W tzw. skrypcie startowym umieszczasz wartość zmiennej, której nadajesz unikalną nazwę coś ci mówiącą, np. gregor, bo odnosi się do postaci o takim imieniu. I właśnie w tym skrypcie zazwyczaj podaje się jej wartość 0.
opcjonalnie:
Cytat
Należy pliki z nwm przekopiować do modules i zmienić im rozszerzenie na .mod, dzięki temu w Aurorze będziemy mogli wczytać moduły oficjalnej kampanii. A już tam sobie sprawdzicie jak co działa, może to pomoże.
1.
if(GetLocalInt(oPC, "XXXX") != 1)
2. Muszę cię zaskoczyć, że nie ma różnicy, czy zmienna ma wartość 0, czy nie istnieje, poniważ taka funkcja jak "GetIsVariableValid" nie powstała i nigdy nie powstanie. Jeszcze jedna uwaga - jeśli zamierzasz nadać zmienną modułowi już na początku, nie musisz pisać żadnego skryptu, bo we właściwościach modułu (i obszaru a także stworzenia) jest zakładka "zmienne".
3. Nie wiem po co tak sztucznie to robić, kiedy chciałbyś zrobić moduł opierający się na kampanii, wtedy w porządku, ale jeśli chcesz tylko przeglądać zawartość, wystarczy przejść kampanie lub otworzyć ją bezpośrednio Aurorą, ewentualnie od razu wpisać w nwnplayer.ini
CODEWORD=hacktastic
CODEWORD XP1=ffrodriguez
CODEWORD XP2=barkeater
Jeszcze jedna sprawa:
object oHench = GetObjectByTag("TAG_NAJEMNIKA");
object oPC = GetPCSpeaker();
AddHenchman(oPC, oHench);
Po co pisać skrypt, który już istnieje? To samo jest w oryginale, a nazwę, jeśli nie poprzez szukanie, możesz znaleźć w dialogach najemników.
Ciekawe, że dałeś pewnie uwagi co do skryptu z dźwignią, a tutaj ani słowa, a jest to wiele bardziej znaczące. Ponieważ jeśli nie załadujesz zestawu skryptów najemnika, postać jedynie dołączy do twojej drużyny, ale nie będzie za tobą podążała, nie będzie otwierała zamków, pewnie nawet nie będzie cię broniła. A co to za najemnik? Więc napiszę za ciebie: Wchodzimy w zakładkę "Skrypty" najemnika, klikamy "Wczytaj ustawienia skryptu" i wybieramy zestaw najemnika. Chociaż z tego co pamiętam jest tam tylko zestaw najemnika z dodatku, który mimo, że później stworzony, jest wiele gorszy, więc proponuję pierw stworzyć własny zestaw, bazujący na najemniku z podstawki.
Neś,
Masz rację, rozwiązuje się to zmiennymi, ale żadne tam OnClientEnter.
W edytorze konwersacji masz dwie zakładki "Podjęte działania" oraz "Tekst pojawia się gdy"; skrypt z pierwszej zakładki odpala się po wybraniu danej linii dialogowej, a skrypt z drugiej zakładki daje informację, że warunek w nim zamieszczony musi się spełnić, by dana kwestia się wyświetliła.
Co może być mało wygodne, zwykle ostatnie kwestie umieszcza się na początku, czyli dla przykładu:
Katalog główny
1. Jeszcze raz dziękuję za pomoc.
2. Widzę, że masz mojego kotka, bardzo dziękuję!
3. Nadal nie zdjąłeś mojego kotka, zły człowieku!
4. Pomocy, mój kotek utknął na drzewie!
I co z tym fantem zrobić? Ostatnia, czwarta linia dialogowa nie ma skryptu warunkowego (tekst pojawia się gdy), natomiast ma skrypt działania (podjęte działania), wygląda on ni więcej, ni mniej jak:
void main()
{
SetLocalInt(obiekt, "Kotek", 1);
}
obiekt - zależy gdzie ten skrypt ma działać, jeśli jest to moduł jednoosobowy, wstaw zamiast tego OBJECT_SELF (dana postać) lub GetModule() (moduł), a jeśli jako moduł wieloosobowy GetPCSpeaker() (gracz rozmawiający)
"Kotek" to tylko nazwa zmiennej, możesz tu wstawić cokolwiek, jednak jeśli zamiast obiektu wstawisz OBJECT_SELF lub GetModule(), ta nazwa nie może się pokrywać z żadną inną nazwą zmiennej.
Trzecia linia dialogowa, czyli pokazująca się jako druga będzie zawierała tylko skrypt warunkowy, który wygląda ni mniej, ni więcej jak:
int StartingConditional()
{
if(GetLocalInt(obiekt, "Kotek")) return TRUE;
return FALSE;
}
obiekt i "Kotek" mają być takie same jak w skrypcie pierwszym - chyba nie ma wątpliwości.
Pozwoliłem sobie użyć skrótu, więc może żeby przedstawić ci to bardziej logicznie napiszę bez nich:
int StartingConditional()
{
if(GetLocalInt(obiekt, "Kotek") > 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
Tak to mniej więcej by wyglądało, może teraz troszkę bardziej jasne.
Druga linia dialogowa "Widzę, że masz mojego kotka, bardzo dziękuję!", ta kwestia ma oba skrypty, ponieważ trzeba sprawdzić, czy zabraliśmy kota, oraz oznaczyć, że już przyszliśmy po nagrodę.
warunek:
int StartingConditional()
{
if(GetLocalInt(obiekt, "Kotek") == 2) return TRUE;
return FALSE;
}
działanie:
void main()
{
SetLocalInt(obiekt, "Kotek", 3);
nagroda, jakieś złoto, magiczne artefakty, awans na czterdziesty poziom
}
Mam nadzieję, że wszystko jest jasne.
Pierwsza kwestia, która się pojawia już na końcu, kiedy po odebraniu nagrody przychodzimy do zleceniodawcy. Tam tylko warunek, chyba się już domyślasz jaki:
int StartingConditional()
{
if(GetLocalInt(obiekt, "Kotek") == 3) return TRUE;
return FALSE;
}
To by było na tyle, chociaż nie umieściłem tu jednego skryptu, który również jest ważny. Mianowicie po zdjęciu tego kotka z drzewa trzeba ustawić wartość zmiennej "Kotek" na 2, wydaje mi się, że po przeczytaniu dokładnym tego, co napisałem sam już będziesz wiedział jak tego dokonać.
Zapomniałem o ważnej informacji - nie myśl, że ta odwrotna kolejność kwestii to jakiś mój chory wymysł, przypuśćmy, że pozamieniamy kolejność na tą logiczną, co wyjdzie? Poważny zleceniodawca będzie do końca świata powtarzał linijkę "Pomocy, mój kotek utknął na drzewie!", ponieważ gra/komputer uzna, że skoro nie ma w tej kwestii warunków, to ją trzeba wyświetlić.
Pozdrawiam.
Tomasz_95,
Obawiam się, że nie mam czasu na odpowiadanie na twoje pytania, polecam jednak zapoznać się najpierw z samym edytorem, bo pytanie:
Cytat
1.Mam jeszcze prośbę o skrypt dzięki któremu będę mógł wkładać przedmioty do np. lustra, drzwi itd.
Jest zabawne. Wszystkie skrypty, o których mówileś są w kampanii, wszystkie Podziemiach Stwórców, czy jak nazwali ten obszar. Skrypty na pewno nie są rzeczą, którą opanować trzeba w pierwszej kolejności, najpierw się zabierz za te rzeczy podstawowe, jak właściwości obiektów. A co jeszcze ważne - poznaj samą grę, to bardzo ułatwia sprawę, będziesz wiedział gdzie szukać.
Pozdrawiam.
P.S. Odsyłam do poradnika podstaw skryptowych autorstwa Rigafilma:
http://neverwinter.ph...ghlight=#37059