Skrypty - Odpowiedź

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

Podgląd ostatnich postów

Bard Card,
A ja przeciwnie miałem z tym problem, podobnie jak niektórzy użytkownicy w temacie Lionela dlatego go umieściłem.
Jak na razie publikuję same podstawy, żeby każdy mógł wdrążyć się w temat, z czasem napiszę skrypty bardziej zaawansowane

[Dodano po 2 dniach]

Skrypt, dzięki któremu strażnik bedzie sprawdzał, czy gracz ma przepustkę i może przejść. Przepustką może być dowolny przedmiot
void main()
{
object oSeen = GetLastPerceived();
object oRing = GetItemPossessedBy(oSeen, "etykieta przepustki");

if(GetIsPC(oSeen))
{
if(oRing == OBJECT_INVALID)
{
ActionSpeakString("Tekst wyświetlający się, gdy gracz nie ma przepustki");
ActionAttack(oSeen);
}
else
{
ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING);
ActionSpeakString("Tekst wyświetlający się, gdy gracz ma przepustkę");
}
}
}
oRing dotyczy pierścienia. W przypadku, gdy przepustka miałby być np naszyjnik zamiast oRing napiszemy oNecklace
Skrypt umieszczamy w OnPerception strażnika lub w odpowiedniej linii dialogowej. Jeśli zostanie umieszczony w OnPerception strażnik, gdy tylko zobaczy naszą postać zaatakuje, bądź wyświetli tekst

[Dodano po 3 dniach]

Jeśli ktoś byłby zainteresowany mogę umieścić skrypt, dzięki któremu postać będzie grała w rzutki. Po wykonaniu trzech lub więcej rzutów podejdzie do tarczy, wyciągnie swoje rzutki, wróci na miejsce i dalej będzie rzucać Ktoś zainteresowany?
Withord,
Wow, chyba już od dekady nie bawiłem się w edytor nwn
Nie jestem pewien ale z tego co pamiętam wszystko co przedstawiłeś dało się wyklikać w edytorze bez pisania skryptów. Na pewno umiałem zrobić tak żeby przy drugiej rozmowie dialog już był inny a nienawidziłem pisania skryptów.
Bard Card,
Tak więc postanowiłem napisać ten temat z myślą o niektórych użytkownikach tego forum widząc (bynajmniej swojego czasu) duże zainteresowanie skryptami w Neverwinter Nights których większość z was nijak nie jest w stanie pojąć i zrobić z nich użytku. Swego czasu tez zaliczałem się do tej części grupy, jednak postanowiłem coś z tym zrobić i w ten sposób wiem już nie co więcej i mogę się z wami tą wiedzą podzielić. Na sam początek wstawię tu kilka\"gotowców\" które może przydadzą się choć kilku osobom, a jeśli zainteresowanie tematem będzie rosło mogę spróbować wyjaśnić wam niektóre skrypty. Tak więc do dzieła!

CO ZROBIĆ, ABY LINIE DIALOGOWE SIĘ NIE POWTARZAŁY? JEST NA TO PROSTY SPOSÓB!
Swego czasu sam miałem problem, że podchodząc pierwszy raz do postaci witała mnie ona jakimś tekstem i czasem nawet zlecała wykonanie jakiegoś prostego zadania. Nieźle, prawda. Problem zaczynał się, gdy podchodząc drugi raz do tej samej postaci ona zamiast pytać mnie o postępy w misji znów witała mnie tym samym tekstem i zlecała swe zadanie zupełnie jakby cierpiała na bardzo mocną amnezję. Żeby nasz rozmówca był całkiem \"zdrów\" należy mu w tym trochę pomóc

Załóżmy, że pierwsza rozmowa z NPCem miałaby wyglądać następująco:
- Witaj, czy możesz mi pomóc?
- Co się stało?
- Zginał mi mój szczęśliwy kamień, czy możesz go dla mnie znaleźć?
- Jasne, już się za to zabieram

Przy następnym spotkaniu chcielibyśmy, aby nieszczęśnik zapytał nas o postępy w sprawie, a nie wygłaszał drugi raz to samo. W tym celu do linijki: \"
Witaj,czy możesz mi pomóc?\" w zakładce \"Tekst pojawia się, gdy\" należy wstawić:

int StartingConditional()
{
int bCondition =GetIsPC(GetPCSpeaker()) &&
GetLocalInt(GetModule(),\"NW_G_M1Q6F08Demon_Free\") == FALSE &&
GetLocalInt(OBJECT_SELF,\"L_TALKTIMES\") < 1;
return bCondition;
}


Pogrubiona cyfra mówi nam, który raz rozmawiamy z postacią. Będzie się ona zmieniać w zależności od kolejnych rozmów, przy drugim podejściu 2, przy trzecim 3 itd.
Natomiast w zakładce \"Podjęte działania\" musi się znaleźć:



voidmain()


{ SetLocalInt(OBJECT_SELF,\"L_TALKTIMES\", 1); SetLocalObject(OBJECT_SELF,\"NW_L_FirstSpeaker\",GetPCSpeaker());}

Ta samą operacje wykonujemy dla KAŻDEJ następnej linijki

Rozmówca leczy nas, gdy o to poprosimy
Jest to dosyć prosty skrypt. Wystarczy tylko w zakładce\"Podjęte działania\" wpisać:


void main()
{
object oPC = GetPCSpeaker();
object oHenchman =GetHenchman(oPC);

ActionPauseConversation();
ActionCastSpellAtObject(SPELL_GREATER_RESTORATION,oPC,METAMAGIC_ANY,TRUE);
if(GetIsObjectValid(oHenchman))
{
ActionCastSpellAtObject(SPELL_GREATER_RESTORATION,oHenchman,METAMAGIC_ANY,TRUE,0,PROJECTILE_PATH_TYPE_DEFAULT,TRUE);
object oPotion = GetItemPossessedBy(oHenchman,\"NW_IT_MPOTION003\");
if(GetIsObjectValid(oPotion) == FALSE)
{
oPotion = GetItemPossessedBy(oHenchman,\"NW_IT_MPOTION002\");
if(GetIsObjectValid(oPotion) == FALSE)
{
oPotion = GetItemPossessedBy(oHenchman,\"NW_IT_MPOTION020\");
}
}
if(GetIsObjectValid(oPotion) == FALSE)
{
CreateItemOnObject(\"nw_it_mpotion020\",oHenchman,3);
}
}
ActionResumeConversation();
}

Jeśli chcemy, aby nasz rozmówca przeteleportował nas w dowolniewybrane przez nas miejsce w słynnej zakładce \"Podjęte działania\" trzeba dać:


void main()
{
object oPC = GetPCSpeaker();
object oWaypoint = GetObjectByTag("ETYKIETA_PUNKTU_NAWIGACYJNEGO");
location lLocation = GetLocation(oWaypoint);
AssignCommand(oPC,ClearAllActions());
AssignCommand(oPC,ActionJumpToLocation(lLocation));
AssignCommand(oPC,SetFacing(GetFacing(oWaypoint)));
}

Etykieta może być dowolna

Jeżeli mamy zachciankę, żeby osoba, z która rozmawiamy udała się we wskazane miejsce w zakładce \"Podjęte działania\" musimy umieścić skrypt:


void main()
{
SetLocked(GetNearestObjectByTag("pkt_3"),FALSE);
AssignCommand(GetNearestObjectByTag("pkt_3"), ActionOpenDoor(GetNearestObjectByTag("pkt_3")));
ActionMoveToObject(GetObjectByTag("pkt_3"));
ActionJumpToObject(GetObjectByTag("pkt_4"));
}



pkt_3 i pkt_4 to przykładowe etykiety punktów nawigacyjnych umieszczonych na mapie. Ten skrypt ma wiele możliwości, już śpieszę z tłumaczeniem \"\"

ActionMoveToObject(GetNearestObjectByTag - jest to linijka skryptu mówiąca naszemu obiektowi, że ma IŚĆ do wskazanego punktu nawigacyjnego

ActionJumpToObject - jeśli wybierzemy tę opcje obiekt zostanie przeteleportowany do punktu



W przypadku zastosowania obydwu opcji naraz jak w powyższym skrypcie rozmówca podejdzie do pierwszego punktu, przez który zostanie przeteleportowany do drugiego. Przydaje się przy zmianie obszaru w grze \"\"
Wczytywanie...