World of Gothic Archiv > NWN-Hilfe
NSC soll sprechen ohne Click
Seite 1 von 1  1 
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:
Zitat von Lord Xerxes

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:

---




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.
Seite 1 von 1  1