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