Sry, za offtop, ale może ktoś odpowie. Wie ktoś jak zrobić, aby postać znikała?
[Neverwinter Nights] Skryptorium - Odpowiedź
Podgląd ostatnich postów
Witam, mam pytanie. Da radę zrobić skrypt , lub czy już taki jest? Mianowicie chodzi o pojawianie się potworów, po zabiciu innych po jakimś czasie? I czy dało by radę zwiększyć siłe pojawiających się stworów w miarę ze wzrostem poziomu postaci? Z góry dzięki
Wrzucasz film w rozszerzeniu .bik do folderu Movies. W Aurorze wchodzisz Edytuj/Wła. Modułu/Zaawansowane/Film Wprowadzający.
To komentarza powyżej. Chodzi żeby zrobić Intro jak w DIABLE W KAMIENIU albo w KAMPANI .'
Mam pytanie. Czy wiesz jak zrobić Intro do własnego Modułu np w Diable z Kamieniu ? Prosiłbym o szybką odpowiedź.'
Mam pytanie mógł byś podać skrypt tak że co jakiś czas powstają np Zombie i odrazu po zrespieniu idą w wybrane miejsce np do ogniska ?
Przepraszam najmocniej, jak teraz czytam moją wypowiedź wprowadziłem was w błąd:
nie znaczy:
tylko:
Opisowo ta pierwsza linijka znaczy: Jeśli zmienna lokalna "Kotek" zapisana na 'obiekcie' ISTNIEJE. Mając wartość ujemną ona istnieje, ponieważ jest różna od zera.
A teraz do rzeczy
Lionel,
Nie myśl, że szukam tu zwady, ale bardzo mnie irytuje, kiedy chętnych graczy zniechęca się do skryptów w ten sposób.
Umieszczanie rzeczy w drzwiach można rozwiązać znów na kilka sposobów, i to niekoniecznie przy wykorzystaniu haków, a nawet powiem, że niekoniecznie one muszą tracić swoje właściwości.
1. Idąc twoim tokiem myślenia można użyć modeli drzwi z podstawki i dodatków (drewniane i metalowe - z animacjami) lub tych z 1.69, co prawda balkonowe, ale nadal drzwi, tylko nie jestem pewien czy mają jakąkolwiek animację.
2. Można to rozwiązać i na typowych drzwiach umieszczonych w zawiasach, z punktu widzenia edytora będzie to oszukańcze, ale gracz może się w ogóle nie zorientować, że umieszcza zawartość swojego ekwipunku w niewidzialnym obiekcie położonym obok drzwi, wystarczy zmienić portret i wszystko powinno grać.
Sprawa kolejna - twój skrypt. Powiedziałeś, że jesteś samoukiem, tylko proszę mi wierzyć, że lepiej czerpać inspiracje z kodów kampanii, zamiast generatora skryptów - bardzo łatwo jest tamtejsze bazgroły poznać.
Spójrz jakie to może być logiczne i proste:
Po pierwsze zaoszczędziłem 4 linijki, ale co ważniejsze zaoszczędziłem troszkę 'energii', interesujesz się ciężkością skryptów, więc chyba sam stwierdzisz, że definiowanie niepotrzebnych zmiennych i porównynwanie ich jest marnotractwem. Na pewno zauważysz też, że wiele lżej jest porównywać ciąg znaków niż całe obiekty, które są wiele większe.
Odbiegając trochę od tematu, mógłbyś mi powiedzieć, co znaczą te wszystkie twoje tekstowe miny? Pierwszy raz je widzę, i nie wiem co przez nie chcesz mi przekazać. Może np. jedna z nich oznacza martwą rybę, czyli grozisz mi śmiercią po sycylijsku.
I ostatnia, mała uwaga. Może to zabrzmi brutalnie, ale jeśli nie znasz skryptów na tyle, by je sensownie przedstawić, to nie wiem dlaczego wyszedłeś z inicjatywą stworzenia tego tematu. Może tylko dlatego, by w przyszłości dopisać do swojej sygnaturki: "Lionel skryptuje..."? Powiem tak, jeśli naprawdę byłbyś w tym dobry, i myślalbyś matematycznie, od razu nasunąłby ci się wniosek, że lepiej jest napisać poradnik, niż tworzyć temat o gotowcach, niby na pierwszy rzut oka cholernie dużo czasu by zajęło (Ja mówię - dwa miesiące, a jeśli jesteś pracowity to i w jeden), ale teraz policz ile czasu straciłeś na odpowiadanie na te wszystkie... nierozsądne pytania, a w niektórych przypadkach wręcz żądania.
Jeszcze raz napiszę to, co na początku, bez tego, obawiam się że rozpęta się tu wojna.
"Nie myśl, że szukam tu zwady, ale bardzo mnie irytuje, kiedy chętnych graczy zniechęca się do skryptów w ten sposób."
Szanuję cię za to, że przyznałeś się do błędu, ale może to czas na podszkolenie się w skryptowaniu, by aktywnie uczestniczyć w tej dyskusji bez wątków dodatkowych w postaci Niemiłego Aleksandra? Jeśli cię jeszcze nie przekonałem, to wspomnę o jednym. Ktoś chyba nawet w tym temacie nazwał cię "Żywą/chodzącą encyklopedią skryptów", a ty się nawet do tego nie odniosłeś, czyli zaakceptowałeś? Powiem szczerze, że chcąc przyjąć ten chwalebny tytuł na twoim miejscu szybciutko wziąłbym się do roboty, by na niego rzeczywiście zasługiwać.
Pozdrawiam.
if(GetLocalInt(obiekt, "Kotek"))
nie znaczy:
if(GetLocalInt(obiekt, "Kotek") > 0)
tylko:
if(GetLocalInt(obiekt, "Kotek") != 0)
Opisowo ta pierwsza linijka znaczy: Jeśli zmienna lokalna "Kotek" zapisana na 'obiekcie' ISTNIEJE. Mając wartość ujemną ona istnieje, ponieważ jest różna od zera.
A teraz do rzeczy
Lionel,
Nie myśl, że szukam tu zwady, ale bardzo mnie irytuje, kiedy chętnych graczy zniechęca się do skryptów w ten sposób.
Umieszczanie rzeczy w drzwiach można rozwiązać znów na kilka sposobów, i to niekoniecznie przy wykorzystaniu haków, a nawet powiem, że niekoniecznie one muszą tracić swoje właściwości.
1. Idąc twoim tokiem myślenia można użyć modeli drzwi z podstawki i dodatków (drewniane i metalowe - z animacjami) lub tych z 1.69, co prawda balkonowe, ale nadal drzwi, tylko nie jestem pewien czy mają jakąkolwiek animację.
2. Można to rozwiązać i na typowych drzwiach umieszczonych w zawiasach, z punktu widzenia edytora będzie to oszukańcze, ale gracz może się w ogóle nie zorientować, że umieszcza zawartość swojego ekwipunku w niewidzialnym obiekcie położonym obok drzwi, wystarczy zmienić portret i wszystko powinno grać.
Sprawa kolejna - twój skrypt. Powiedziałeś, że jesteś samoukiem, tylko proszę mi wierzyć, że lepiej czerpać inspiracje z kodów kampanii, zamiast generatora skryptów - bardzo łatwo jest tamtejsze bazgroły poznać.
Spójrz jakie to może być logiczne i proste:
void main() { if(GetInventoryDisturbType() == INVENTORY_DISTURB_TYPE_ADDED && GetTag(GetInventoryDisturbItem()) == "ETYKIETA_PRZEDMIOTU") { TO CO MA SIĘ ZDARZYĆ PO WŁOŻENIU PRZEDMIOTU } }
Po pierwsze zaoszczędziłem 4 linijki, ale co ważniejsze zaoszczędziłem troszkę 'energii', interesujesz się ciężkością skryptów, więc chyba sam stwierdzisz, że definiowanie niepotrzebnych zmiennych i porównynwanie ich jest marnotractwem. Na pewno zauważysz też, że wiele lżej jest porównywać ciąg znaków niż całe obiekty, które są wiele większe.
Odbiegając trochę od tematu, mógłbyś mi powiedzieć, co znaczą te wszystkie twoje tekstowe miny? Pierwszy raz je widzę, i nie wiem co przez nie chcesz mi przekazać. Może np. jedna z nich oznacza martwą rybę, czyli grozisz mi śmiercią po sycylijsku.
I ostatnia, mała uwaga. Może to zabrzmi brutalnie, ale jeśli nie znasz skryptów na tyle, by je sensownie przedstawić, to nie wiem dlaczego wyszedłeś z inicjatywą stworzenia tego tematu. Może tylko dlatego, by w przyszłości dopisać do swojej sygnaturki: "Lionel skryptuje..."? Powiem tak, jeśli naprawdę byłbyś w tym dobry, i myślalbyś matematycznie, od razu nasunąłby ci się wniosek, że lepiej jest napisać poradnik, niż tworzyć temat o gotowcach, niby na pierwszy rzut oka cholernie dużo czasu by zajęło (Ja mówię - dwa miesiące, a jeśli jesteś pracowity to i w jeden), ale teraz policz ile czasu straciłeś na odpowiadanie na te wszystkie... nierozsądne pytania, a w niektórych przypadkach wręcz żądania.
Jeszcze raz napiszę to, co na początku, bez tego, obawiam się że rozpęta się tu wojna.
"Nie myśl, że szukam tu zwady, ale bardzo mnie irytuje, kiedy chętnych graczy zniechęca się do skryptów w ten sposób."
Szanuję cię za to, że przyznałeś się do błędu, ale może to czas na podszkolenie się w skryptowaniu, by aktywnie uczestniczyć w tej dyskusji bez wątków dodatkowych w postaci Niemiłego Aleksandra? Jeśli cię jeszcze nie przekonałem, to wspomnę o jednym. Ktoś chyba nawet w tym temacie nazwał cię "Żywą/chodzącą encyklopedią skryptów", a ty się nawet do tego nie odniosłeś, czyli zaakceptowałeś? Powiem szczerze, że chcąc przyjąć ten chwalebny tytuł na twoim miejscu szybciutko wziąłbym się do roboty, by na niego rzeczywiście zasługiwać.
Pozdrawiam.
Sorry Lionel za te wszystkie prośby, teraz już od 3 godzin nie mam tych problemów ta sprawa z tymi zmiennymi została już rozwiązana a analiza składni też, a ta sprawa z zaklęciami to już wiem co z nią zrobić po prostu albo wstawię dwóch gości albo poszukam w innych modułach, a to co ma się zdarzyć po włożeniu przedmiotu to nie dawno wpadłem na pomysł, niech po włożeniu przedmiotu pojawi się postać (przy pojawieniu postaci efekt wizualny) z którą będę musiał porozmawiać a kiedy rozmowa się skończy postać znikała (z takim samym efektem wizualnym z jakim się pojawiła).
Sorry przez następny tydzień nic tutaj nie napiszę.
tomasz95
Sorry przez następny tydzień nic tutaj nie napiszę.
tomasz95
To nie koncert życzeń (-o⌒).
1. Poradnika pisania skryptów nie napiszę, bo z tym mnóstwo roboty, a mam inne zobowiązania też. Ponadto większość wymaganej wiedzy opisana jest w samem Aurorze lub w internecie. Niestety, wymagana jest znajomość języka angielskiego bądź niemieckiego.
2. Rzucanie zaklęcia
3. Jeżeli chodzi o obiekt, który ustawia się na mapie, to lustro ma opcje posiadania wyposażenia, co do drzwi, to one same w sobie nie mają, ale można stworzyć przedmiot, który będzie miał ekwipunek i będzie wyglądał jak drzwi [można poszukać w internecie], lecz nie będzie pełnił ich funkcji - otwierania/zamykania.
4. W OnDisturbed pojemnika.
5. Musisz pokazać, co wpisałeś w tym skrypcie. Wklej go całego.
[Dodano po 10 minutach]
Ja? Skryptowy guru? Boskie (´ε` )♡.
Ten temat powstał, by pomagać i ja się tym zajmuję. Nigdy nie pisałem, że znam się całkowicie na skryptowaniu, bo tak nie jest. Moja wiedza, może znikoma, pochodzi z samouctwa, analizowania cudzych skryptów, metody prób i błędów itd. Dzielę się swoją wiedzą z osobami, które mają ambicje tworzenia modułów, ale skryptowanie wydaje im się mroczne, bo i dal mnie kiedyś takie było i czasami wciąż jest.
Cieszę się, że ktoś taki jak ty również próbuje wyjaśniać takie procesy i z pewnością nie omieszkam wykorzystać twoje rady w przyszłości
PS. Mój pokój ma sześć ścian (*^3^).
1. Poradnika pisania skryptów nie napiszę, bo z tym mnóstwo roboty, a mam inne zobowiązania też. Ponadto większość wymaganej wiedzy opisana jest w samem Aurorze lub w internecie. Niestety, wymagana jest znajomość języka angielskiego bądź niemieckiego.
2. Rzucanie zaklęcia
3. Jeżeli chodzi o obiekt, który ustawia się na mapie, to lustro ma opcje posiadania wyposażenia, co do drzwi, to one same w sobie nie mają, ale można stworzyć przedmiot, który będzie miał ekwipunek i będzie wyglądał jak drzwi [można poszukać w internecie], lecz nie będzie pełnił ich funkcji - otwierania/zamykania.
4. W OnDisturbed pojemnika.
SPOILER
void main()
{
object oPC = GetLastDisturbed ();
object oItem = GetObjectByTag ("ETYKIETA PRZEDMIOTU");
if
(GetIsObjectValid (oPC) &&
(GetInventoryDisturbType () == INVENTORY_DISTURB_TYPE_ADDED) &&
(GetInventoryDisturbItem () == oItem))
{
TO CO MA SIĘ ZDARZYĆ PO WŁOŻENIU PRZEDMIOTU
}
}
void main()
{
object oPC = GetLastDisturbed ();
object oItem = GetObjectByTag ("ETYKIETA PRZEDMIOTU");
if
(GetIsObjectValid (oPC) &&
(GetInventoryDisturbType () == INVENTORY_DISTURB_TYPE_ADDED) &&
(GetInventoryDisturbItem () == oItem))
{
TO CO MA SIĘ ZDARZYĆ PO WŁOŻENIU PRZEDMIOTU
}
}
5. Musisz pokazać, co wpisałeś w tym skrypcie. Wklej go całego.
[Dodano po 10 minutach]
Ja? Skryptowy guru? Boskie (´ε` )♡.
Ten temat powstał, by pomagać i ja się tym zajmuję. Nigdy nie pisałem, że znam się całkowicie na skryptowaniu, bo tak nie jest. Moja wiedza, może znikoma, pochodzi z samouctwa, analizowania cudzych skryptów, metody prób i błędów itd. Dzielę się swoją wiedzą z osobami, które mają ambicje tworzenia modułów, ale skryptowanie wydaje im się mroczne, bo i dal mnie kiedyś takie było i czasami wciąż jest.
Cieszę się, że ktoś taki jak ty również próbuje wyjaśniać takie procesy i z pewnością nie omieszkam wykorzystać twoje rady w przyszłości
PS. Mój pokój ma sześć ścian (*^3^).
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?
albo:
opcjonalnie:
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
Jeszcze jedna sprawa:
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:
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:
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:
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:
działanie:
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:
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:
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
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
Sorry już wiem o co chodziło z tym skryptem ale jest błąd analizy składni listy zmiennych.
to napisz jak wymyślisz co z tym zrobić.
tomasz95
to napisz jak wymyślisz co z tym zrobić.
tomasz95
Lionel możesz powiedzieć mi jak przypisać rodzaj zmiennej?
Bo do tego skryptu z rzucaniem zaklęć trzeba przypisać rodzaj zmiennej.
tomasz95
Bo do tego skryptu z rzucaniem zaklęć trzeba przypisać rodzaj zmiennej.
tomasz95
1.Mam jeszcze prośbę o skrypt dzięki któremu będę mógł wkładać przedmioty do np. lustra, drzwi itd.
2.I jeszcze żeby po włożeniu przedmiotu coś się stało np. otworzą się drzwi, jakiś niezniszczalny wróg zostanie zniszczony, dezaktywowany w przypadku golemów, proszę o szybką odpowiedź.
tomasz95
2.I jeszcze żeby po włożeniu przedmiotu coś się stało np. otworzą się drzwi, jakiś niezniszczalny wróg zostanie zniszczony, dezaktywowany w przypadku golemów, proszę o szybką odpowiedź.
tomasz95
Potrzebuję skryptu dzięki któremu postać będzie rzucać po kolei zaklęcia np. postać rzuca ognistą kule na drugą postać, a następnie promień lodu i tak cały czas te zaklęcia się powtarzają.
tomasz95
tomasz95
Hej lionel mam do ciebie sprawę chodzi mi o te skrypty, czy możesz napisać jak samemu stworzyć skrypty no wiesz taki poradnik.
Której części nie rozumiesz?
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.
Natomiast w Tekst Pojawia się Gdy wymuszamy na grze, by sprawdziła, czy rzeczywiście zmienna gregor jest równa 0. Jeżeli tak, to dana kwestia się pojawi, jeśli nie, to gra przejdzie do kolejnego rozgałęzienia dialogu. Czyli taki skrypt powinien wyglądać tak:
Następnie w zakładce Podjęte Działania tej samej linii dialogowej ustawiamy skrypt, który zmieni wartość zmiennej gregor na różną od 0, np. 1, by więcej ta linia dialogowa się nie pojawiła, bo w zakładce Tekst Pojawia się Gdy znajduje się komenda sprawdzenia, czy zmienna gregor = 0, a nie 1. Więc wygląda to tak:
Najlepiej naukę skryptów rozpocząć od przejrzenia oskryptowania oficjalnej kampanii. 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.
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.
Natomiast w Tekst Pojawia się Gdy wymuszamy na grze, by sprawdziła, czy rzeczywiście zmienna gregor jest równa 0. Jeżeli tak, to dana kwestia się pojawi, jeśli nie, to gra przejdzie do kolejnego rozgałęzienia dialogu. Czyli taki skrypt powinien wyglądać tak:
SPOILER
if(!(GetLocalInt(oPC, "gregor") == 0))
return FALSE;
return TRUE;
if(!(GetLocalInt(oPC, "gregor") == 0))
return FALSE;
return TRUE;
Następnie w zakładce Podjęte Działania tej samej linii dialogowej ustawiamy skrypt, który zmieni wartość zmiennej gregor na różną od 0, np. 1, by więcej ta linia dialogowa się nie pojawiła, bo w zakładce Tekst Pojawia się Gdy znajduje się komenda sprawdzenia, czy zmienna gregor = 0, a nie 1. Więc wygląda to tak:
SPOILER
object oPC = GetPCSpeaker();
SetLocalInt(oPC, "gregor", 1);
object oPC = GetPCSpeaker();
SetLocalInt(oPC, "gregor", 1);
Najlepiej naukę skryptów rozpocząć od przejrzenia oskryptowania oficjalnej kampanii. 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.
co do pytania wyżej, proszę mi to wytłumaczyć dość jasno, w miarę możliwości, bo pewnie chodzi o to, co Lionel napisał parę komentarzy wyżej- tzw. skrypt startowy umieszczanym w Edytuj/Właś.Modułu/Zdarzenia/OnClientEnter
object oPC = GetFirstPC();
SetLocalInt(oPC, "NAZWA_STAŁEJ_NP_hermes", 0);
w zakładce Tekst Pojawia się Gdy (ten skrypt oznacza, że gra sprawdza czy nazwana zmienna (np. hermes) jest równa 0, jeśli to prawda, tekst się pojawi)
...Ale nie rozumiem tego : /
object oPC = GetFirstPC();
SetLocalInt(oPC, "NAZWA_STAŁEJ_NP_hermes", 0);
w zakładce Tekst Pojawia się Gdy (ten skrypt oznacza, że gra sprawdza czy nazwana zmienna (np. hermes) jest równa 0, jeśli to prawda, tekst się pojawi)
...Ale nie rozumiem tego : /
Nie wiem czy ktoś tu zagląda, ale jeśli tak, to chyba zna się wystarczająco żeby mi pomóc...
Otóż nie mam pojęcia, w jaki sposób zrobić coś takiego, że postać najpierw zleca questa. Tylko że później jak podchodzę do niej, to robi to wciąż, prawda? Więc problem polega na tym, jak zrobić tak, żeby po przyjęciu questa następowała inna rozmowa.
Otóż nie mam pojęcia, w jaki sposób zrobić coś takiego, że postać najpierw zleca questa. Tylko że później jak podchodzę do niej, to robi to wciąż, prawda? Więc problem polega na tym, jak zrobić tak, żeby po przyjęciu questa następowała inna rozmowa.
A da sie zrobic cos takiego ze w module mozna chodzic tylko jedna postacia tzn. gotową postacią stworzoną w module?
Powiem tak, w Aurorze można zrobić wszystko, ogranicza nas tylko wyobraźnia. Nie wiem jednak co miałeś na myśli.
1. Można chodzić jedynie postacią, którą stworzyłeś na potrzeby modułu? Inaczej - nie można stworzyć nowej postaci, ani wziąć swojej, tylko grać jakąś predefiniowaną?
To bardzo proste, jest bardzo wiele możliwości. Można sprawdzać imię tej postaci, opis, rasę, bóstwo itd. Albo nawet wszystko na raz. Jednak najmądrzejszym sposobem byłoby stworzenie jakiegoś przedmiotu w ekwipunku bohatera, wtedy mógłbyś być niemal pewny, że nie będzie można zagrać inną postacią. Wyglądałoby to tak:
object oGracz = GetEnteringObject(); if(!GetIsObjectValid(GetItemPossessedBy(oGracz, "etykieta"))) { BootPC(oGracz); return; }
Te kilka linijeczek wystarczy wstawić do zdarzenia modułu OnClientEnter. Zamiast 'etykiety' oczywiście musisz wstawić właściwą etykietkę rzeczy, którą chcesz sprawdzać.
2. Miałeś na myśli, by każdy gracz mógł stworzyć tylko jedną postać, a po wejściu inną miałby zostać wykopywany?
W takim razie sprawa nieco trudniejsza. Na pewno trzeba by stworzyć listę tych graczy.
Znów w OnClientEnter:
object oGracz = GetEnteringObject(); string sGracz = GetPCPlayerName(oGracz); object oObiekt = GetObjectByTag(sGracz); string sImie = GetName(oGracz); if(GetIsObjectValid(oObiekt) && GetDescription(oObiekt) != sImie) { BootPC(oGracz); return; } else if(!GetIsObjectValid(oObiekt)) { oObiekt = CreateObject(OBJECT_TYPE_PLACEABLE, "obiekt_z_danymi", GetLocation(GetWaypointByTag("punkt_nawigacyjny")), FALSE, sGracz); SetDescription(oObiekt, sImie); }
Zamiast "obiekt_z_danymi" wystarczy wstawić ResRef istniejącej rzeczy ustawialnej; "punkt_nawigacyjny" to etykieta punktu, w którym ta rzecz ma się stworzyć (najlepiej, jeśli w miejscu niedostępnym dla graczy.
Ważna uwaga: Jeśli skrypt ma działać w grze jednoosobowej, to musisz zmienić linijki z
"BootPC(oGracz)" na:
AssignCommand(oGracz, JumpToObject(GetWaypointByTag("etykieta_punktu_nawigacyjnego")));
Wtedy dajesz etykietę punktu nawigacyjnego jakiegoś obszaru, do którego mają trafiać ukarani gracze.
Ważna uwaga: Skrypt zapisuje nazwy użytkowników, czyli na każde konto przypada jedna postać, po założeniu nowego konta gracz będzie mógł grać innym bohaterem, można i to zablokować, tylko po co aż tak kombinować?
Mam nadzieję, że ta wiadomość pomogła,
Pozdrawiam.
A da sie zrobic cos takiego ze w module mozna chodzic tylko jedna postacia tzn. gotową postacią stworzoną w module?