[Neverwinter Nights] Skryptorium

Fajny jest skrypt z leczeniem czy mógłbyś dodać by co jakiś czas pojawiały by się zombie albo inne stwory ?
Odpowiedz
Musze pomyśleć nad aktualizacją tego działu...

Oto skrypt przywoływanych potworów. Wprowadzając go do oskryptowania onHearthBeat jakiegoś statycznego przedmiotu, np. u mnie była to kadź wróżebna, co kilka sekund pojawiać będą się losowo przyporządkowane istoty, jeżeli będą spełnione warunki, np. w tym przypadku będą istnieć cztery posągi gargulców.

void main()
{
object oObject = OBJECT_SELF;
object oBeaconA = GetObjectByTag("[color="#00BFFF"]ETYKIETA GARGULCA1[/color]");
object oBeaconB = GetObjectByTag("[color="#00BFFF"]ETYKIETA GARGULCA2[/color]");
object oBeaconC = GetObjectByTag("[color="#00BFFF"]ETYKIETA GARGULCA3[/color]");
object oBeaconD = GetObjectByTag("[color="#00BFFF"]ETYKIETA GARGULCA4[/color]");
effect eVisual = EffectVisualEffect([color="#00FF00"]ETYKIETA EFEKTU WIZUALNEGO[/color]);
location lWP = GetLocation(oObject);
int nChance = d100(1);

    if(GetIsDead(oBeaconA) && GetIsDead(oBeaconB) && GetIsDead(oBeaconC) && GetIsDead(oBeaconD)) return;
    DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVisual, oObject, 1.0));
    if(nChance < 11)
    {
    object oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "[color="#FFFF00"]RESREF POTWORA1[/color]", lWP);
    }
    if(nChance > 10 && nChance < 41)
    {
    object oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "[color="#FFFF00"]RESREF POTWORA2[/color]", lWP);
    }
    if(nChance > 40 && nChance < 71)
    {
    object oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "[color="#FFFF00"]RESREF POTWORA3[/color]", lWP);
    }
    if(nChance > 70 && nChance < 101)
    {
    object oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "[color="#FFFF00"]RESREF POTWORA4[/color]", lWP);
    }
}
Odpowiedz
Hej, zrobisz dla mnie pewien skrypt? Chcę żeby pojawiały się potwory gdy tylko gracz stanie na wyzwalaczu, nie będą wymagane żadne słupy ani gargulce a potwory po srespieniu będą iść do wyzwalacza na którym gracz stoi ? I żeby były to 3respy na danym wyzwalaczu, zrobisz tak? Kolejny potwór by się pojawiał gdy zabije się tego z 1wyzwalacza to respi się na 1wyzwalaczu, gdy z 2 się zabije to na 2 się respi itd ?
Odpowiedz
Napisz mi na GG 33374290 to się dogadamy. ; )
Odpowiedz
słuchaj mam jeszcze jedno pytanie robisz sam moduły jeśli tak to proszę Cię o dwie odpowiedzi na moje pytania:


1. czy mógłbyś przetłumaczyc dla mnie niektóre skrypty i podac mi skrypt, w którym mogę zrobic tak że dany tekst pojawia się PO rozmowie z danym NPCem


2 jak dac głos postaciom np. na moim module gdy Aribeth wypowiada jakąś kwestię co zrobic żeby oprócz tekstu mówiła go swoim słodkim głosem?
Odpowiedz
1. opisz bardziej ten przykład, bo nie jestem pewien o co ci dokładnie chodzi. Czy o tekst w oknie dialogowym czy o ten nad głowami, czy jeszcze coś innego? Najlepiej na konkretnym przykładzie.
2. Musisz zatrudnić tę lektorkę, co podkładała głos Ari... tylko jej nazwisko to dla mnie tajemnica, bo jakoś nie ma bazy lektorów w polskim Internecie. Wtedy ona wypowie tekst, nagrasz ją, stworzysz z niego HAK, dołączysz do modułu, dodasz odpowiednie nagranie do linii dialogowej... czyli NIEWYKONALNE.
Odpowiedz
A jaki jest skrypt żeby dana rozmowa odbyła się PO rozmowie z danym NPCem bo zamierzam dokończyć ALE POPRAWNIE NWN podstawke a nie jak to zrobili twórcy BIOWARE'u że ta cała Cania w hotu to normalnie do du......... no do niczego a wiec po utworzonej przeze mnie rozmowie z Ari w celi ide prosić o ułaskawienie dla paladynki ale żeby tekst co do jej uwolnienia u Lorda Nashera pojawiał sie PO rozmowie z nią proszę was odpiszcie.
Odpowiedz
Dość proste.

Skrypt A
void main()
{
object oPC = GetPCSpeaker();

    SetLocalInt(oPC, "XXXX", 1);
}


gdzie XXXX musi być unikalnym tokenem, np. ari_freedom

Skrypt B
int StartingConditional()
{
object oPC = GetPCSpeaker();

    if(!(GetLocalInt(oPC, "XXXX") == 1))
        return FALSE;

    return TRUE;
}


gdzie XXXX musi być tym samym tokenem, co w skrypcie A

Skrypt A umieszczasz w linii dialogowej w zakładce podjęte działania (prawy, dolny róg), która kończy rozmowę z Ari w tym więzieniu i będzie mówiła grze, że już z nią ją odbyłeś.
Skrypt B umieszczasz w linii dialogowej w zakładce tekst pojawia się, gdy (prawy, dolny róg), która ma zaczynać rozmowę z Nasherem o uwolnieniu Ari, dzięki skryptowi B, gra wie, że już rozmawiałeś o tym z Ari i będziesz mógł o tym wspomnieć Nasherowi.
Odpowiedz
Posłuchaj Lionelu, bardzo dziękuję Ci za ta odpowiedź mam tylko jedno pytanie co do tego skryptu: Gdzie mam go wstawić czy do OnConversiaton w skryptach Lady Aribeth ? Nie żebym był całkowicie zielony co do Neverwinter bo gram w nie 4-5 lat tylko aurory zacząłem używać od niedawna a język angielski znam ale nie rozumiem niektórych rzeczy a ty jak widzę jesteś dużo mądrzejszy ode mnie w tych sprawach mianuję Cię zatem ENCYKLOPEDIĄ SKRYPT-OWANIA I MODOWANIA NEVERWINTER może być? Mam jeszcze pomysł co do quizu na temat Słodkiej Lady i NWN-a Czy zechciałbyś wziąć w nim udział?
Odpowiedz
dzięki jesteś jeszcze jak tak to odpisz prosze

[Dodano po 51 sekundach]

jak zdobywa się odznaczenia na tym forum?
Odpowiedz
Hej Lionel mam do ciebie pytanie nawet kilka bo mam pewien problem i mi sie wydaje że to powinno być łatwe ale czytam po NWN lexiconie sam próbuje do tego dojść i nic : pytania:

1.Np po rozmowie w konwersacji z jakąś osobą odpowiadam na zadane pytanie ,, wdziałeś mojego szczurka" , że go ,,widziałem , już po nim leży na dole" to po odpowiedzi , ten dziadek z którym rozmawiam ma mnie zaatakować dodam że etykieta jego to OLDMAN

2. Mam do wyboru kilka odpowiedzi gdy nacisnę ,,choć ze mną" do osoba z którą rozmawialem staje sie moim towarzyszem

3. Jak zrobić by po nacisnieciu pomogę tobie moja postać sama podejdzie do dźwigni i ją naciśnie przez co uwolnie kolegę z celi? / + by zadanie uwolnienie kumpla które on dał było po tym zaliczone wraz z PD otrzymanym

4. Jak zrobić by po rozmowie z daną osobą więcej nie pojawiały sie te same pytania??

5. kolo śpi dałem mu skrypta że spi a gdy go zabijam to nie ma jego ciała choć w jego ekwipunku zaznaczyłem że jego rzeczy są do ukradnięcia i zostają przy zwłokach a dodam również że dałem mu że po śmierci zostawia zwłoki

Wiem żę jesteś mistrzem skryptów i proszę o pomoc a i jak możesz dodaj do skryptorium te najprostsze skrypty z wyjaśnieniem bo z nimi też są problemy ;p

Pozdrawiam:)
Odpowiedz
1.
SPOILER

object oPC = GetPCSpeaker();
object oSelf = OBJECT_SELF;

SetIsTemporaryEnemy(oSelf, oPC);
SetIsTemporaryEnemy(oPC, oSelf);
AssignCommand(oSelf, ActionAttack(oPC));


2.
SPOILER

object oHench = GetObjectByTag("TAG_NAJEMNIKA");
object oPC = GetPCSpeaker();

AddHenchman(oPC, oHench);


3.
ważne, by dźwignia była ustawiona na Zdezaktywowana (Właściwości/Zaawansowane/Początkowy Stan)
SPOILER

object oPC = GetPCSpeaker();
object oLev = GetObjectByTag("TAG_DŹWIGNI");
object oDoor = GetObjectByTag("TAG_DRZWI");

AssignCommand(oPC, ActionForceMoveToObject(oLev));
DelayCommand(3.0, AssignCommand(oLev, ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE,1.0,1.0)));
DelayCommand(4.0, AssignCommand(oDoor, ActionOpenDoor(oDoor)));
AddJournalQuestEntry("TAG_ZADANIA", CYFRA_WPISU_Z_ZADANIA_KOŃCZĄCEGO_GO, oPC, TRUE, FALSE, FALSE);



4.
tzw. skrypt startowy umieszczanym w Edytuj/Właś.Modułu/Zdarzenia/OnClientEnter
SPOILER

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)
SPOILER

object oPC = GetPCSpeaker();

if(!(GetLocalInt(oPC, "TA_SAMA_STAŁA_CO_WCZEŚNIEJ") == 0))
return FALSE;

return TRUE;


w zakładce Podjęte Działania (skrypt zmieniający przyporządkowaną liczbę nazwanej zmiennej na 1, przez co nie równa się już 0, więc wcześniejszy skrypt nie zadziała)
SPOILER

object oPC = GetPCSpeaker();

SetLocalInt(oPC, "TA_SAMA_STAŁA_CO_WCZEŚNIEJ", 1);



5.

nie wiem jak pomóc
Odpowiedz
Dzięki , większość działą ale mam jeszcze problem w tym z tą dźwignią bo do np kwestii ,, uwolnij mnie proszę tam masz dźwignie" dodałem w dzienniku że to zadanko i wtedy w odpowiedzi z tą dźwignią ,, już sie robi" wpisałem ten twój skrypt i mimo że daje tag zadania ,,uwolnij więźnia" bo tak je nazwałem w tym dzienniku to sie nie zalicza lecz gdy zamiast taga zadania,,uwolnij więźnia "wpisuje tag tego co zleca ,,DAN" to zadanie jest zaliczone lecz nie dodaje PD ...

I jescze jedno jak zrobić by gracz po stworzeniu postaci był odziany tylko w łachmany bez żadnego ekwipunku ??

i hmm przejscie z lokacji do lokacji chciałbym by był taki duży prostokąt bo na końcu lokacji postawiłem las i troche drzew to tam gdzie jest ciemność żeby był prostokąt do nacisniecia do przejscia lokacji ?
Pozdrawiam:)
Odpowiedz

Cytat

I jescze jedno jak zrobić by gracz po stworzeniu postaci był odziany tylko w łachmany bez żadnego ekwipunku ??


    object oGracz = GetEnteringObject();
    object oPrzedmiot = GetFirstItemInInventory(oGracz);
    while(GetIsObjectValid(oPrzedmiot))
    {
        DestroyObject(oPrzedmiot);
        oPrzedmiot = GetNextItemInInventory(oGracz);
    }
    int n;
    oPrzedmiot = GetItemInSlot(n, oGracz);
    while(n <= 13)
    {
        if(GetIsObjectValid(oPrzedmiot)) DestroyObject(oPrzedmiot);
        n ++;
        oPrzedmiot = GetItemInSlot(n, oGracz);
    }
    oPrzedmiot = CreateItemOnObject("lachmany", oGracz);
    AssignCommand(oGracz, ActionEquipItem(oPrzedmiot, INVENTORY_SLOT_CHEST));
    DestroyObject(OBJET_SELF);


Uwagi:
  • Skrypt wędruje do zdarzenia OnEnter. Jest dostosowany do umieszczenia w wyzwalaczu (DestroyObject(OBJECT_SELF)), do gry jednoosobowej.
  • Jeśli ma to działać w grze wieloosobowej, lub nie na wyzwalaczu, trzeba zmienić ostatni wiersz. Proponuję:
    SetLocalInt(oGracz, "CZYSTKA", 1);
    W takim razie na początku powinno się wstawić linijkę:
    if(!GetLocalInt(oGracz, "CZYSTKA"))
    A wszystko wziąć w klamry tego warunku.
    Ten sposób jest najprostszy i najbardziej naturalny, jednak jeśli chcesz coś bardziej skomplikowanego, a więc brak wczytywania gry, tylko zaczynanie nowego modułu za każdym razem, a nie chcesz, byś stracił rzeczy, proponuję dać przedmiot, którego nie można by było usunąć z inwentarza. Wtedy wyglądałoby to następująco:
    Na końcu wędruje linijka:
    CreateItemOnObject("sandaly_hermesa", oGracz);
    A na początku znów obejmujący cały skrypt warunek:
    if(!GetIsObjectValid(GetItemPossessedBy(oGracz, "sandaly_hermesa")))
    Jeśli rozwiążesz to w ciekawy sposób, może wyjść niegłupio. Jest właściwie multum sposobów na uporanie się z tym problemem. Jest przecież jeszcze coś takiego jak SetCampaing*zmienna*. W każdym razie najprostsze przekazałem.
  • Zamiast tekstu "lachamny" należy wstawić res ref tego ubrania.
  • (Opcjonalnie) Zamiast "sandaly_hermesa" należy wstawić res ref tej rzezy, którą byś na początku otrzymywał.

Pozdrawiam.
Odpowiedz
A da sie zrobic cos takiego ze w module mozna chodzic tylko jedna postacia tzn. gotową postacią stworzoną w module?
Odpowiedz


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 &#39;etykiety&#39; 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.
Odpowiedz
← Artykuły

[Neverwinter Nights] Skryptorium - Odpowiedź

 
Męczą Cię captche? , a problem zniknie. Zajmie to mniej niż rozwiązanie captchy!
Wczytywanie...