PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script: Ausrüstung bei NPC's anlegen



Ravyn
02.01.2008, 06:51
Wie kann man bei einem Begleiter-NPC eine Funktion aktivieren die es per Dialog ermöglicht Zugriff auf sein komplettes Inventar zu bekommen um dem NPC Rüstungen usw. anzulegen.
Wäre nett, wenn jemand eine genaue Beschreibung dazu hat...
Falls jemand die genauen Script-Befehle für das Ausrüstung anlegen bei NPC's kennt, so wüsste ich es zu schätzen wenn derjenige/diejenige sie mir mitteilt...bei einem anderen PI sieht mir das zu kompliziert aus, kann ich nichts damit anfangen

Muecke49
02.01.2008, 11:13
Wie das geht kann ich Dir leider nicht sagen, doch schau Dir mal ein Begleiter PI im CS an. Dort ist es meistens auch per Dialogoption möglich. Z.Bsp. bei Tyra.:)
Bei den Puppen von Reznod Mannequins ist dies übrigens genauso gelöst. Dort könntest Du Dir das auch mal anschauen.

Vieleicht hilft Dir das schon weiter.

Edit: Urgs, falschen Thread erwischt, sorry...:-(

Low Post
03.01.2008, 14:35
Soll ich Mücke aus diesem Thread hier rüber schieben?


Zu deinem Problem:
Der Befehl zum an/ablegen lautet Un (http://cs.elderscrolls.com/constwiki/index.php/UnequipItem)/EquipItem (http://cs.elderscrolls.com/constwiki/index.php/EquipItem)

Ravyn
03.01.2008, 14:43
Ja, kannst du ruhig machen. Ihren Beitrag habe ich bereits gelesen, das hier ist ja auch "verschoben". Ich dachte mir nur, dass ich mal das extra öffne damit mir eher geholfen wird

Und danke für den Link...aber, ist damit nicht der eigene Avatar gemeint.
Mir geht es ja darum bei einem NPC den man als Begleiter mitnehmen kann, die Funktion zu aktivieren, dass man jederzeit Zugriff auf sein Inventar hat und dieses nach Belieben verändern kann...über Dialogoption

Low Post
03.01.2008, 14:55
Den Befehl kann man auch bei NPCs verwenden. Einfach ein NPCRefID. davorsetzten.


PS:
jetzt sieht der Thread etwas... komisch aus. :p
Erste Antwort vor der Frage ^^

Mal schauen, ob ich das korrigieren kann.

Ravyn
03.01.2008, 14:58
Ja, da hast du recht, sieht komisch aus.
Anscheinend kennst du dich ja gut mit Scripts aus, könntest du mir ein fertiges Script hier reinschreiben, sodass ich den bloß zu übernehmen brauche? Ich habe nämlich um die Wahrheit zu sagen keine Ahnung vom Scripten. ich beschäftige mich lieber mit der Innenarchitektur... ;)

Low Post
03.01.2008, 15:13
Nö, kannn ich nicht.
Das ist zu kompliziert, als dass ich das mal eben so runterschreiben könnte.

Meine Idee wäre, in dem Resultskript des Dialogs das Inventars des NPC per RemoveAllItems (http://cs.elderscrolls.com/constwiki/index.php/RemoveAllItems) in irgenteine Dummytruhe zu übertragen, den Dialog zu beenden, und dann den Spieler per TruhenRef.Activate Player (http://cs.elderscrolls.com/constwiki/index.php/Activate) zwingen, die Truhe zu aktivieren. Dann kann er der Truhe die Sachen geben, die der NPC haben soll und die nehmen, die er wiederhaben will. Nach beenden des Truhenmenüs (muss man wohl in einem Gamemode-Block machen) wird dem NPC der Truheninhalt (wieder mit RemoveAllItems (http://cs.elderscrolls.com/constwiki/index.php/RemoveAllItems) ) zurückgegeben.
Zusätzlich kann man noch den NPC via NPCRef.StartConversation Player (http://cs.elderscrolls.com/constwiki/index.php/StartConversation) zwingen den Spieler wieder anzusprechen.
Damit er die Sachen anlegt muss dann afaik noch ein evp (http://cs.elderscrolls.com/constwiki/index.php/EvaluatePackage) her.

Genau steuern, was er dann anlegt kann man nicht, da der Spieler ihm ja alles mögliche geben kann. Falls du aber weißt, dass er ein best. Item hat kannst du NPCRef.EquipItem Object-ID (http://cs.elderscrolls.com/constwiki/index.php/EquipItem) verwenden.


PS:
Ordung müsst wieder da sein.

Brausebart
03.01.2008, 15:19
zu dem Thema hatte ich anderswo schon einmal etwas geschrieben. Ich zitiere mich mal selbst. Im Prinzip macht das Skript das, was Low Post beschrieben hat.

Als erstes wird eine leere Kiste (ohne Respawn) benötigt und als persistente Referenz irgendwo in der Spielwelt platziert, am besten wo der Spieler sie nicht sehen kann. Unterhalb des Fußbodens etwa. Die ReferenzID dieser Kiste nenne ich mal ShareBoxRef. Die RefID des NPCs sei NPCRef

Im Skript des NPC steht folgendes:


scn NPCScript

short DoShare
ref Me

begin GameMode

; Gegenstände des NPC in die Kiste legen, anschließend Kiste
; durch den Player aktivieren

if DoShare == 1
set Me to GetSelf
set DoShare to 2
RemoveAllItems ShareBoxRef
ShareBoxRef.Activate Player
endif

; Nach dem Schließen des Container-Menus dem
; NPC die Gegenstände aus der Kiste zurückgeben

if (MenuMode 1008 != 1) && (DoShare == 2)
set DoShare to 3
ShareBoxRef.RemoveAllItems Me
endif

; Am Ende die Ausrüstung anlegen

if DoShare == 3
set DoShare to 0
AddScriptPackage ReEquip
evp
endif

end

Das Anlegen der geänderten Ausrüstung ist etwas problematisch. Von alleine macht das Spiel das nämlich manchmal nicht. Ich verwende bei meinem Begleiter zu diesem Zweck eine AI-Package. Im Bsp. oben habe ich sie ReEquip genannt. Das ist eine Find-Package ohne Target, Location, Schedule oder sonstige Einstellungen, mit Ausnahme von Armor Unequipped und Weapons Unequipped. Diese beiden Kästchen sind angehakelt. Die Package ist nur dazu da, einmal kurz ausgeführt zu werden und das Spiel so zu zwingen, dem NPC die geänderte Ausrüstung anzulegen. Alternativ kann man das selbe erreichen, indem man den NPC kurz disabled und im nächsten Frame wieder enabled, oder ihn für einen Augenblick in eine andere Zelle beamen und dann wieder zurück.

Um den Austausch zu starten, kommt schließlich in das Resultscript des betreffenden Gesprächs-Topics

set NPCRef.DoShare to 1

und das Gespräch sollte hier beendet werden, also der Topic das Häkchen bei Goodbye haben.

Ravyn
03.01.2008, 15:31
Ja, perfekt. Genau so etwas habe ich gesucht. Dankeschön Euch beiden.

darklady310187
09.04.2014, 00:27
Der Thread ist zwar alt, aber der Tipp mit dem Find-Package hat mir bei meinem aktuellen Projekt sehr geholfen. Nun legen die NPCs nach der Trainingsstunde die Trainingsgewänder ab und schlüpfen wieder in ihre Alltagsklamotten. Danke, Brausebart :)