World of Gothic Archiv > NWN-Hilfe
Script damit ein NPC den Spieler anspricht
Seite 1 von 2  1  2 
07.07.2002, 14:29 #1
Gawain15
Beiträge: 1.084
Script damit ein NPC den Spieler anspricht
Hi! Irgendjemand wollte mal ein Script haben das bewirkt das der Spieler von einem NPC angesprochen wird sobald er ein Gebiet betritt, ich finde den Thread nicht mehr und poste das Script deshalb hier sorry dafür.
---
void main()
{
string sTag = "Der_NPC";
object oNPC = GetLocalObject(GetArea(OBJECT_SELF),"NW_G_" + sTag);
object oPC = GetEnteringObject();
if(GetIsPC(oPC) &&
GetLocalInt(oPC,"NW_L_Init" + GetTag(oNPC)) == FALSE &&
IsInConversation(oNPC) == FALSE)
{
AssignCommand(oPC,ClearAllActions());
AssignCommand(oNPC,ClearAllActions());
AssignCommand(oNPC,ActionMoveToObject(oPC));
AssignCommand(oNPC,ActionStartConversation(oPC));
}
}
---

Das ganze kommt bei OnEnter rein.

/e: Ok sorry das Script funktioniert noch nicht wirklich, ich werde mich gleich mal daran machen es zu ändern...
07.07.2002, 15:16 #2
EisHarald
Beiträge: 97

Also als ich sah wer den Thread eröffnet hat dachte ich echt du hättest eine Frage,aber das kann ja nicht sein ;)
Ich hoffe das Script kannst du noch verbessern so das es funktioniert,könnte ich wirklich gebrauchen.
07.07.2002, 15:52 #3
Equestris
Beiträge: 397

Nach diesem scipt hab ich schon ewig gesucht,funktioniert es schon oder muss noch was geändert werden?
07.07.2002, 16:15 #4
Gawain15
Beiträge: 1.084

Sorry Jungs, bin gerade noch dabei, kuckt nochmal gegen 18 Uhr rein, ich editier diesen Post wenn ich das Script fertig hab, scheint doch etwas komplizierter zu sein als angenommen...

Ich muss mich noch einmal für die verspätung entschuldigen aber ich habe zu erst einen dummen Fehler gemacht und es nicht einmal bemerkt... ich hab mich gewundert warum mich der NPC immer und immer wieder anspricht bis ich endlich ne Variable gesetzt hab... nochmal ein dickes sorry das es erst so spät kommt, hier das fertige Script: (ist übrigens besser als in der Kampagne, nicht so viele kleine Scripte sondern nur ein einziges!)

{
object oNPC = GetObjectByTag("Dein_NPC");
object oPC = GetLastPerceived();
if(
(GetIsPC(oPC)) &&
(IsInConversation(oNPC) == FALSE) &&
(GetObjectSeen(oPC,oNPC)) &&
(GetLocalInt(OBJECT_SELF, "iGesprochen") != 1))
{
AssignCommand(oPC, ClearAllActions());
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionMoveToObject(oPC));
AssignCommand(oNPC, ActionStartConversation(oPC));
SetLocalInt(OBJECT_SELF, "iGesprochen", 1);
}
}

Das ganze kommt bei dem NPC bei "OnPerception" rein, d.h. so bald der NPC den Spieler sieht spricht er ihn einmal an, danach nicht mehr, dafür ist die Variable "Gesprochen" zuständig, den Namen könnt ihr natürlich nach belieben ändern. Bei "Dein_NPC" kommt der Tag ("Kennzeichnung") eures NPCs rein. Viel spass damit.
07.07.2002, 17:40 #5
Gawain15
Beiträge: 1.084

Entschuldigt den Doppelpost, aber ich mekre gerade das nicht angezeigt wird das in diesem Post etwas neues passiert ist... naja *schieb* :D
07.07.2002, 17:55 #6
EisHarald
Beiträge: 97

Für die die Verpätung brauchst du dich doch nicht zu entschuldigen.Nicht jeder macht sich die mühe und schreibt mal eben so ein Script.VIELEN DANK!!!
07.07.2002, 18:01 #7
Equestris
Beiträge: 397

Ja,auch meiner seits herzlichen Dank und wenn du erst Morgen das Scipt veröffentlicht hättest könnten wir dir trotzdem keinen Vorwurf machen :-)
07.07.2002, 19:02 #8
EisHarald
Beiträge: 97

Mir fällt gerade auf du hast am anfang void main() vergessen.Ich habe mich schon gewundert wieso der das nicht kompiliert.Also hier nochmal die genaue version:

void main()
{
object oNPC = GetObjectByTag("dein nsc");
object oPC = GetLastPerceived();
if(
(GetIsPC(oPC)) &&
(IsInConversation(oNPC) == FALSE) &&
(GetObjectSeen(oPC,oNPC)) &&
(GetLocalInt(OBJECT_SELF, "iGesprochen") != 1))
{
AssignCommand(oPC, ClearAllActions());
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionMoveToObject(oPC));
AssignCommand(oNPC, ActionStartConversation(oPC));
SetLocalInt(OBJECT_SELF, "iGesprochen", 1);
}
}
07.07.2002, 19:34 #9
Goon
Beiträge: 73

wo in das script kommt das gesprochene rein oder die datei vom conversation
07.07.2002, 19:52 #10
Gawain15
Beiträge: 1.084

Harald: das hab ich bewusst gemacht da man ja kein neues Script erstellt sondern das nur in das OnPerception einfügt und unter einem anderen Namen abspeichert. So würde ich das jedenfalls machen da ansonsten einige Funktionen des "normalen" Scripts nicht funktionieren und wenn du das alte überschreibst... du weisst schon ;)

Goon: Gar nicht :D Du machst mit dem Conversation Editor ein ganz normales Gespräch und das wird dann ausgeführt. Ansonsten kannst du auch einen Speakstring einbinden, allerdings dachte ich das es so einfacher für euch wäre. Wenn du nicht möchtest das der NPC das ganze nochmal wiederholt setz eine Variable (also wie bei dem "2. Gruss" vom Tutorial.)

/e: so nochmal ein sorry für die ganzen verwirrungen... werde es bei den folgenden Scripten versuchen gleich auszumerzen...
07.07.2002, 20:55 #11
Goon
Beiträge: 73

danke, warum sagst du sorry?

du bist derjenige der uns freiwillig die ganze zeit hilft und ich denke das finden alle so..
07.07.2002, 21:00 #12
Gawain15
Beiträge: 1.084

Hm ich entschuldige mich zu oft :) Wenn ich etwas mache, möchte ich es auch gut und für jeden verständlich machen. Ich helfe euch übrigens aus eigennützigen Motiven, ich möchte nämlich später gute Mods zocken :D
07.07.2002, 21:07 #13
EisHarald
Beiträge: 97

quote:
Zitat von Gawain15
Harald: das hab ich bewusst gemacht da man ja kein neues Script erstellt sondern das nur in das OnPerception einfügt und unter einem anderen Namen abspeichert. So würde ich das jedenfalls machen da ansonsten einige Funktionen des "normalen" Scripts nicht funktionieren und wenn du das alte überschreibst... du weisst schon ;)


Oja,das weiss ich.Leider viel zu gut :D
07.07.2002, 21:31 #14
Goon
Beiträge: 73

quote:
Zitat von Gawain15
ich möchte nämlich später gute Mods zocken


natürlich gawain :)

frage: machst du selbst auch ein modul? ;)
07.07.2002, 21:38 #15
EisHarald
Beiträge: 97

Ich denke er macht sicher eine und auf die freue ich mich schon ganz besonders ;W
08.07.2002, 06:24 #16
Gawain15
Beiträge: 1.084

Yep, ich arbeite auch gerade an einem Modul, bis es fertig wird dauert es aber noch eine halbe Ewigkeit. Im moment bau ich aber nur die Areas, mit Scripten und Gesprächen kann ich leider noch nicht so viel machen und rumprobieren da ich leider einige Fehler bei dem Editor habe (verursacht durch keine GraKa mit ATI Chip), im Bioware Forum ist aber zu lesen das die Fehler durch den Patch behoben werden sollen...
08.07.2002, 12:43 #17
Lzoril
Beiträge: 45

ok was mach ich falsch? bekomme immer die meldung: ungültiger Deklarationstyp. wenn ich dann die angezeigte Klammer lösche bekomme ich die gleiche meldung und zwar für das "if{" ... ok hab so gut wie keineAhnung vom Skripten... ich gebs ja zu
08.07.2002, 12:48 #18
Gawain15
Beiträge: 1.084

Nach dem if kommt eine runde klammer (Shift + 8)
08.07.2002, 12:50 #19
Lzoril
Beiträge: 45

hab ich auch da stehen, hab ich grad nur falsch hier gepostet.. hab ichs vielleicht falsch ins vorhandene skript reinkopiert?
08.07.2002, 13:04 #20
Gawain15
Beiträge: 1.084

Also ich hab es eben noch einmal probiert und es lief einwandfrei, ich habe es am Ende vom Script eingefügt.

@ alle anderen: Könnt ihr mal testen ob das Script überhaupt funktioniert?
08.07.2002, 13:07 #21
Lzoril
Beiträge: 45

am ende heißt nach der letzten schon da stehenden klammer?
08.07.2002, 13:11 #22
Lzoril
Beiträge: 45

hmmm obwohl der fehler angezeigt wird funktioniert das skript... wunder über wunder
08.07.2002, 13:13 #23
Gawain15
Beiträge: 1.084

Ok hab deinen Fehler gefunden (ich habe keinen Kompilierfehler btw.)

Du musst das Script natürlich vor der allerletzten Klammer einsetzen, da die letzte den Voidmain schließt, das ist wie bei html der </html> tag, also alles was drin ist wird erkannt, der rest gehört nicht zum script seiner Definition nach.
08.07.2002, 13:30 #24
Lzoril
Beiträge: 45

ok, das hätten wir.. wenn ich jetzt ne variable setzen möchte das mein NSC was anderes sagt wenn ich ihn anrede wäredas folgende dann korrekt:

als Folgeaktion nach dem Gespräch welches der NSC aktiv an mich führt (also mit deinem Skript) setze ich ne Variable auf zB 100, das was er dann sagen soll wenn ich ihn später anrede benötigt demzufolge diese Variable auf 100, das hatte ich alles so gesetzt hatte aber nix gebracht, deshalb hab ich die gleiche Variable noch durch das "OnSpawn" auf 50 setzen lassen und das Anfangsgespräch sollte diese 50 benötigen... nun hat mein NSC garni mehr gesagt....

zu verwirrend??
08.07.2002, 13:36 #25
Gawain15
Beiträge: 1.084

Da muss man nichts großartig scripten, geht auch einfacher per Scriptwizard.

Um mal als Beispiel bei meinem Script zu bleiben: Er sagt ja die erste Zeile, die makierst du im Konversations Editor und machst folgendes: Erfolgte Aktionen --> lokale Variable zuweisen --> oben rechts der Name (z.B. Test), in dem Feld da unter irgendein Wert (z.B. 200).

Nun nimmst du die Zeile die er sagen soll wenn er shocnmal mit dir gesprochen hat und makierst sie, dann machst du folgendes: Text erscheint wenn... --> Lokale Variable --> Obenrechts gibst du wieder Test ein (oder wie auch immer du die Variable genannt hast) und da unter 200 (oder welchen wert du auch immer genommen hast.) Nun erscheint der Text nur wenn er schon einmal mitdir gesprochen hat, ist das klar?

Diese und mehrere weitere Basis fragen werden im Offiziellem Tut geklärt, zu bekommen unter www.bioware.com --> NWN --> ForBuilders.
Seite 1 von 2  1  2