World of Gothic Archiv
> NWN-Hilfe NSC soll sprechen ohne Click |
|
07.07.2002, 14:47 | #1 | ||
ichthorsten Beiträge: 7 |
NSC soll sprechen ohne Click
Hi, wie schaffe ich das, dass ein NSC etwas sagt, wenn man nur an ihm vorbei geht. Also das ein weißer text über ihm erscheint ohne das ich ihn dafür anklicken muss? |
||
07.07.2002, 15:42 | #2 | ||
EisHarald Beiträge: 97 |
Als Gawain ist gerade dabei ein Script zu basteln das man von einem NSC angesprochen wird.Wenn man dem NSC nur eine Textzeile verpasst sollte das eigentlich funktionieren.Guck dir einfach mal den Thread an.Den kannst du gar nicht verfehlen.Einfach den Thread anklicken den Gawain geöffnet hat,denn das macht der nicht oft :D |
||
07.07.2002, 16:14 | #3 | ||
Gawain15 Beiträge: 1.084 |
äh momentchen mal ich hab immer hin den... Engel Thread eröffnet :D Bin gerade dabei nen bischen rumzuprobieren, wenn ich es raushab werd ich das Script deinen Wünschen anpassen, muss man nicht viel ändern. |
||
07.07.2002, 18:33 | #4 | ||
Equestris Beiträge: 397 |
Nimm das Script von Gawain und mach nur die Begrüssungszeile des NPC und den Wahrnehmunsradius des NPC auf kurz,dann funktioniert es so wie du willst |
||
08.07.2002, 06:50 | #5 | ||
Gawain15 Beiträge: 1.084 |
Alternativ kannst du auch folgendes ins Script einfügen: GetDistanceToObject(oPC) < 20 Das checkt ob der Spieler näher als 20 Meter (hm könnte auch das Ami maß sein, denke aber eher nicht) an dem Object dran ist. (Die Zahl kannst du natürlich nach belieben ändern.) |
||
08.07.2002, 11:31 | #6 | ||
Goon Beiträge: 73 |
wo muss man das get distance einfügen? |
||
08.07.2002, 11:49 | #7 | ||
Gawain15 Beiträge: 1.084 |
Einfach beim if, er soll ja abfragen OB (Englisch: IF) der Spieler oder wer auch immer im Bereich von 20 Metern im umkreis vorhanden ist. Das fertige Script würde dann folgender maßen aussehen: --- void main() { object oNPC = GetObjectByTag("dein nsc"); object oPC = GetLastPerceived(); if( (GetIsPC(oPC)) && (GetDistanceToObject(oPC) < 20) && (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); } } --- GetDistanceToObject(oPC) < 20 "GetDistance..." Ist der Befehl, der checkt ob sich das Objekt in der definierten Reichweite befindet. "(oPC)" ist das Objekt, in diesem Fall ist das Objekt PC object oPC = GetLastPerceived(); Also denjenigen der das Objekt zu letzt gesehen hat, damit er nicht jeden NPC anspricht wird sichergestellt das es sich um einen Spieler handelt (GetIsPC(oPC), GetisPC fragt ab ob das Objekt ein Spieler ist) "< 20" ist die Reichweite, in diesem Fall Kleiner als (< ) 20 Meter. |
||
08.07.2002, 11:59 | #8 | ||
Goon Beiträge: 73 |
DANKE |
||
08.07.2002, 12:01 | #9 | ||
Gawain15 Beiträge: 1.084 |
yo np, hab es aber noch nicht getestet, sollte jedoch funktionieren. Hab heute nen bischen Zeit... brauchst du noch ein Skript oder so? |
||
08.07.2002, 12:30 | #10 | ||
Lord Xerxes Beiträge: 42 |
Also, mit dem Script von Gawain bleibst der Char stehen und der NPC kommt auf Dich zu Und spreicht dich an. Wenn Du aber willst, das der Char weitergehn soll und nur über dem Kopf des NPC ein Text erscheinen soll,ohne das er seine Aktionen abbrechen soll, dann füge dieses Script ein: --- void main() { object oNPC = GetObjectByTag("dein nsc"); object oPC = GetLastPerceived(); float fAbstand = GetDistanceBetween(oNPC, oPC); int iRandom; if( (GetIsPC(oPC)) && (fAbstand < 20.0f) && (IsInConversation(oNPC) == FALSE) && (GetObjectSeen(oPC,oNPC))) { iRandom = Random(5); if (iRandom == 0) SpeakString("Text1"); if (iRandom == 1) SpeakString("Text2"); if (iRandom == 2) SpeakString("Text3"); if (iRandom == 3) SpeakString("Text4"); if (iRandom == 4) SpeakString("Text5"); ActionWait(10.0); } } --- |
||
08.07.2002, 12:35 | #11 | ||
Goon Beiträge: 73 |
lord xerxes, wo? bei onspawn? danke ich brauch momentan kein script mehr sondern ne idee.... |
||
08.07.2002, 13:27 | #12 | ||
Lord Xerxes Beiträge: 42 |
Das Script bei onHeartbeat rein. Hier nochmal der Link zu den Erklärungen aller Ereignisse: http://www.neverwinter-nights.org/t...rs/events.shtml |
||
08.07.2002, 13:47 | #13 | ||
Goon Beiträge: 73 |
ja danke und der link ist wirklich gut :) |
||
08.07.2002, 22:16 | #14 | ||
Goon Beiträge: 73 |
quote: also bei funzzt des net ganz, ich hab das script mal angepasst und es schaur so aus: void main() { object oNPC = GetObjectByTag("NW_OLDWOMAN"); object oPC = GetLastPerceived(); float fAbstand = GetDistanceBetween(oNPC, oPC); int iRandom; if( (GetIsPC(oPC)) && (fAbstand < 20.0f) && (IsInConversation(oNPC) == FALSE) && (GetObjectSeen(oPC,oNPC))) { iRandom = Random(5); if (iRandom == 0) SpeakString("fraujammert"); ActionWait(10.0); } } habe es erstellt und bei onheartbeat eingefügt aber die frau sagt nichts wenn ich vorbei gehe.. /e: falls es eine rolle spielt die frau steht einfach nur, also keine waypoints gawain hast du ne lösung? |
||
08.07.2002, 23:01 | #15 | ||
Goon Beiträge: 73 |
im moment hab ich so gelöst void main() { ActionSpeakString("text text text"); ActionWait(2.5); ActionSpeakString("wieder text"); ActionWait(2.5); } so spricht er auch immer,(ohne in anzuklicken) oder gibts ne bessere lösung? |
||
09.07.2002, 09:20 | #16 | ||
Lord Xerxes Beiträge: 42 |
Ach. Ich habe object oPC fasch bestimmt. tausch die Zeile einfach gegen diese aus: object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC, OBJECT_SELF, 1); Und Du mußt die SpeakString's in ActionSpeakString umwandeln. He, he mein Fehler. Aber das kommt davon, wenn man das mal eben so schreibt.;) |
||
09.07.2002, 18:58 | #17 | ||
Goon Beiträge: 73 |
oh danke |
||
09.07.2002, 19:12 | #18 | ||
Goon Beiträge: 73 |
leider haut des noch immer net hin, er kanns net kompiliern und gibt den fehler: 09.07.2002 20:10:35: Fehler. 'weiseschrift' konnte nicht kompiliert werden. weiseschrift.nss(4): FEHLER: VARIABLE BEREITS INNERHALB BENUTZT wer weis was schuld is? |
||
09.07.2002, 19:17 | #19 | ||
Gawain15 Beiträge: 1.084 |
Das heisst das du die selbse Variable 2 mal benutzt... aber eigentlich kann man Variablen so oft benutzen wie man lustig ist... kannst du mal das Script posten genauso wie es jetzt aussieht? |
||
09.07.2002, 19:30 | #20 | ||
Goon Beiträge: 73 |
im moment schauts so aus: void main() { object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC, OBJECT_SELF,1); object oPC = GetLastPerceived(); float fAbstand = GetDistanceBetween(oNPC, oPC); int iRandom; if( (GetIsPC(oPC)) && (fAbstand < 20.0f) && (IsInConversation(oNPC) == FALSE) && (GetObjectSeen(oPC,oNPC))) { iRandom = Random(5); if (iRandom == 0) ActionSpeakString("Text1"); if (iRandom == 1) ActionSpeakString("Text2"); if (iRandom == 2) ActionSpeakString("Text3"); if (iRandom == 3) ActionSpeakString("Text4"); if (iRandom == 4) ActionSpeakString("Text5"); ActionWait(10.0); } } |
||
09.07.2002, 20:19 | #21 | ||
Gawain15 Beiträge: 1.084 |
Du hast das Object oPC 2 mal zugewiesen, die KI weiss nicht welche er nehmen soll, lass mal eine Weg. |
||
|