World of Gothic Archiv > NWN-Hilfe
Brauche/gibt es so ein Script?
Seite 1 von 1  1 
14.06.2003, 14:02 #1
RPG's4ever
Beiträge: 83
Brauche/gibt es so ein Script?
Wenn ein NPC's stirbt und ich seine Kleidung aufnehme, kann man ja machen, dass wenn man diese im Gepäck hat, der NPC einen nicht als Gegner erkennt. Aber ich will, das man die Kleidung tragen muss und nicht nur im Gepäck haben muss. Geht das? Wenn ja könnt ihr es mir bitte geben?
15.06.2003, 22:38 #2
Kardor
Beiträge: 523

Hmmm...bin nicht ganz sicher ob ich dich richtig verstanden habe, aber das hier sollte funktionieren:

code\:

void main()
{
object oPC = GetLastPerceived(); //oder wie du halt den PC bekommst
object oItem = GetObjectByTag("verkleidung");

object oTragen = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);

if(GetIsPC(oPC) && oItem == oTragen)
{
// was du dann machen willst
//in deinem Fall z.B:
ChangeToStandardFaction(OBJECT_SELF, STANDARD_FACTION_COMMONER);
}
}




das ganze kommt ins OnPerceiption des Gegners der durch die Kleidung getäuscht werden soll.
Ich bin jetzt davon ausgegangen dass es sich bei der Kleidung um etwas handelt, was der NPC auch am Bauch trägt und nicht um einen Helm, Arm- Beinschienen, Stiefel oder so.
Falls es etwas davon ist musst du statt INVENTORY_SLOT_CHEST den entsprechenden anderen INVENTORY_SLOT nehmen.

//EDIT:

Achtung! durch dieses script bekommt jetzt der Gegner die Fraktion "Bürgerlich" - dies heisst zwar, dass er den SC nicht angreifen wird, wenn aber andere, feindliche NPCs in der Nähe sind werden die u.U. den "Gegner" angreifen...
Wenn das so nicht für dich passt, schreib mir kurz ne PM ( dann bekomme ich ne email ubnd antworte schneller...bin ansonsten höchstens alle 2-3 Tage mal hier...)


___________________________

Pilze Band I - das NWN Modul ;)
Niemand hat die Absicht eine Mauer zu baun. Außer uns!
[/font]
19.06.2003, 10:59 #3
Kardor
Beiträge: 523

quote:

Nur was soll ich eingeben wenn man zusätzlich zur Rüstung noch eine Helm und ein Amullet tragen soll?



OK das ist einfach. Die INVENTORY_SLOTS bezeichnen die Slots in denen der PC etwas trägt. INVENTORY_SLOT_CHEST bezeichnet also einen Gegenstand den der Spieler auf der Brust trägt z.B. eine Rüstung.
Die entsprechenden Slots für ein Amulett und einen Helm sind dann logischerweise:

INVENTORY_SLOT_NECK (Hals) und INVENTORY_SLOT_HEAD (Kopf)

Du bekommst die verschiedenen INVENTORY_SLOTs angezeigt wenn du im Script Editor rechts im Filter INVENTORY_SLOT eingibst und auf Konstanten drückst.

Das nächste wird schon etwas komplizierter
quote:

Das er dann zur Fraktion Commoner gehört, kann man ja ändern, oder. Man muss doch nur den Namen der Fraktion, die man haben will, eingeben.


Leider nein. Ausser den Standard-Fraktionen Bürgerlich, Feindlich usw. kennt Aurora Script keine Fraktionen namentlich.
Damit der NPC zu einer eigenen Fraktion wechselt muss bereits ein anderer NPC im Spiel sein, der dieser Fraktion angehört.
Ich würde also eine Fraktion erstellen, die der Fraktion der Gegner sehr ähnlich ist, einziger Unterschied: sie sind dem SC gegenüber neutral.

Dann erstellst du irgendwo (am besten auf einer map zu der der Spieler nicht hin kann) einen NPC der dieser Fraktion angehört. Nennen wir ihn gegnerneutral und die Fraktion GEGNERNEUTRAL.
die Fraktion die die Gegner inne haben bevor der Spieler sich verkleidet nennen wir GEGNER und erstellen auf der unbetretbaren Map auch gleich einen NPC namens gegner der der Fraktion GEGNER angehört.
Als "Eltern-Fraktion" für beide Fraktionen würde ich Feindlich nehmen.

Tipp: Beim erstellen von neuen Fraktionen immer das Häkchen bei "Globaler Effekt" wegmachen. Das erspart später viel Kopfzerbrechen - Fraktionen sind eine der häufigsten Fehlerquellen in NWN.

Ok, wenn das erledigt ist weiter im script: der Befehl ChangeToStandardFaction tuts nicht mehr, weil GEGNER bzw. GEGNERNEUTRAL keine Standard-Fraktionen sind. Die einzige Möglichkeit zu einer Custom-Fraktion zu switchen ist die Fraktion eines anderen, im Spiel vorhandenen NPCs anzunehmen, der befehl lautet:

code\:

ChangeFaction(object oObjectToChangeFaction, object oMemberOfFactionToJoin)



in unserem Fall also:

code\:

ChangeFaction(OBJECT_SELF, GetObjectByTag("gegnerneutral"))



In meinem ersten script habe ich was entscheidendes vergessen, ich nehme an der Gegner soll nur so lange freundlich bleiben, wie der Spieler die Verkleidung trägt und nicht ein für alle mal freundlich gestimmt werden wenn er den Spieler mal verkleidet gesehn hat...oder?
Im moment ist es nämlich so, dass wenn der gegner den Spieler in Verkleidung gesehn hat kann der Spieler sich die Kleider vom Leib reissen und ihm die Zunge rausstrecken, der Gegner wird freundlich bleiben.

Deshalb kommt in das script noch eine else Bedingung, die dafür sorgt, dass der Gegner wieder feindlich wird sobald der Spieler die Sachen nicht mehr an hat.
Falls du das nicht brauchst lass einfach else{
...
}
weg.

So hier das fertige script:

code\:

void main()
{
object oPC = GetLastPerceived(); //oder wie du halt den PC bekommst
object oKleidung = GetObjectByTag("ruestung");
object oAmulett = GetObjectByTag("amulett");
object oHelm = GetObjectByTag("helm");

object oTragenBrust = GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
object oTragenHals = GetItemInSlot(INVENTORY_SLOT_NECK, oPC);
object oTragenKopf = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC);


if(GetIsPC(oPC) && oKleidung == oTragenBrust && oAmulett == oTragenHals && oHelm == oTragenKopf)
{
// was du dann machen willst
//in deinem Fall z.B:
ChangeFaction(OBJECT_SELF, GetObjectByTag("gegnerneutral"));
}
//falls der SC die Sachen nicht(mehr) anhat werde
//wieder zum Feind:
else
{
ChangeFaction(OBJECT_SELF, GetObjectByTag("gegner"));
}
}



noch ein letzter Tipp: Achte darauf, dass die Gegenstände zum lösen dieser Quest auch von jedem Spieler getragen werden können. Es gibt nichts frustrierenderes als an einer Quest zu scheitern, weil man das benötigte Item nicht anziehn kann weil es erst ab Stufe 4 geht o.ä.

So ich hoffe ich hab dich mit diesem Roman nicht erschlagen, aber ich hab gedacht ich erklärs dir lieber ausführlich als nur ein kurzes script abzuliefern, bei dem sich dann nur 1000 neue Fragen auftun.

Falls du wieder ne Frage hast...du weisst ja jetzt wo du mich findest...:)


___________________________

Pilze Band I - das NWN Modul ;)
Niemand hat die Absicht eine Mauer zu baun. Außer uns!
[/font]
19.06.2003, 15:23 #4
RPG's4ever
Beiträge: 83

Danke, und das dauert nicht sehr lange bis ich wieder Fragen werde.
Seite 1 von 1  1