Construction Set Der Scriptthread

@Rey-the-Master: Mit normalen Speeren ist das nicht möglich. Aber du kannst es so machen:
Erstelle einen neuen Activator und gib ihm das Aussehen eines Speers (my_speer). Erstelle dann eine globale Variable (my_speer_var). Lege dann auf den Kelch (my_kelch) dieses Script:

begin my_kelch_script

if ( OnActivate == 1 )
set my_speer_var to 1
endif

end


Auf den Speer legst du dann ein Script in dieser Art:

begin my_speer_script

short doOnce

HurtCollidingActor 20

if ( doOnce == 0 )
if ( my_speer_var == 1 )
if ( GetPos Z > 12345 )
MoveWorld Z - 100
else
set doOnce to 1
endif
endif
endif

end


Natürlich musst du noch die Höhe, Geschwindigkeit und Schadenswirkung anpassen.

@Nici: Dafür brauchst du erst mal Tribunal (wegen der benötigten Befehle). Dann erstellst du ein Misc-Item mit dem entsprechenden Aussehen und eine Kreatur mit dem Aussehen (und den Animationen). Dann musst du das so aufbauen:
Auf das Miscitem legst du ein Script, dass wenn es abgelegt werden soll es stattdessen aus dem Inventar entfernt wird und eine Kreatur vor dem Spieler erschaffen wird. Über Dialog kannst du dann die nötigen Optionen wie warten und folgen steuern. Bei Einpacken musst du erst eine neues Miscitem dem Inventar hinzufügen, dann die Kreatur disablen und danach mit setdelete entfernen. Das lässt sich am besten über eine lokale Variable und ein angehängtes Script steuern. In diesem Script kannst du auch überprüfen, dass wenn die Kreatur stirbt sie automatisch gelöscht wird und ein neues Misc dem Inventar hinzugefügt wird.
Mit nicht kämpfen geht in sofern leicht, dass du ihren Fightwert einfach auf 0 stellst.
Ein Beispiel für ein wie oben beschreibenes Script kannst du in meinem magischen Zirkel beim tragbaren Kraftfeld finden.
 
  • Like
Reaktionen: Illidan_00
@Killfetzer: Danke :ugly: Leider steht das momentan nicht zur verfügung.

Jetzt brauch ich so ein einfaches:
Wenn die Kreatur X getötet wurde, öffnet sich ein Tor. Also ein Activator soll von Position "0, 9664, -320 [90, 0, 0]" auf position "0, 9664, 704 [90, 0, 0]" fahren.
 
Zuletzt bearbeitet:
Also, bitte! Das kannst du doch auch selbst!

Die nötige Abfrage lautet OnDeath und der Teleporterbefehl PositionCell, xpos, ypos, zpos, zrot, "Zellenname"

begin my_creature_script

if ( OnDeath == 1 )
my_tor->PositionCell, xpos, ypos, zpos, zrot, "Zellenname"
endif

end

Wenn das ganze noch animiert sein soll, geht es zB. auch so:
begin my_tor_script

short state

if ( GetDeadCount "my_creature" > 0 )
set state to 1
PlaySound "Door Stone Open"
endif

if ( state == 1 )
if ( GetPos Z < 704 )
MoveWorld Z 100
else
set state to 2
endif
endif

end
 
Also, bitte! Das kannst du doch auch selbst!

Die nötige Abfrage lautet OnDeath und der Teleporterbefehl PositionCell, xpos, ypos, zpos, zrot, "Zellenname"

begin my_creature_script

if ( OnDeath == 1 )
my_tor->PositionCell, xpos, ypos, zpos, zrot, "Zellenname"
endif

end

Wenn das ganze noch animiert sein soll, geht es zB. auch so:
begin my_tor_script

short state

if ( GetDeadCount "my_creature" > 0 )
set state to 1
PlaySound "Door Stone Open"
endif

if ( state == 1 )
if ( GetPos Z < 704 )
MoveWorld Z 100
else
set state to 2
endif
endif

end

Wenn ich wüsste wie :-/
Ich kann ja nicht scripten. Naja ich lerns mal mit deinem Tutorial.
 
NPC-Beschwören

Hallo,
Ich hatte vor das man ein Amulett anlegt und dann ein NPC vor dem Player erscheint.
Wenn man nun das Amulett wieder abnimmt verschwindet der NPC.(in eine Zelle die man nciht betreten kann oder ins nirgendwo :))
er soll aber auch verschwinden sobalt man das Dialog mit ihm erst öffnet und dann wieder schließt. Dann soll das Amulett automatisch abenommen wird aber noch im Inventar bleibt.
Wie muss der Script dazu aussehen?

Danke in Vorraus

MfG. Lichti
 
z.b. ich xD
Brauchst Du mindestens drei Scripts.

-eines machen an das Amulett, heisst "meinAmulett",
-eines machen an den NPC, heisst "meinNPC"
-eines hängt nirgendwo dran, wird vom Amulett-Script aufgerufen weil PlaceAt-Befehle aus dem Inventar heraus das Spiel abstürzen lassen.
- ein viertes wäre aus dem Dialog heraus zu starten. Hängt auch nirgendwo dran.

Amulett: stinknormal, braucht weder unique noch persistent zu sein,
Npc: genauso.

___________________________________________
begin Beschwoerscript

; erst NPC erstellen sonst lässt sich
; das script nicht speichern
; die Stopscript-Zeile erst einfügen wenn
; dieses Script schonmal gespeichert ist
; stopscript heisst nicht das das Script an
; der Zeile abbricht sondern das es im nächsten
; Frame nicht wieder aufgerufen wird. Es läuft
; also nach der Stopscript-Anweisung noch
; bis zum Ende durch. Nur "Return" würde das
; Script vorher verlassen

stopscript Beschwoerscript
placeAtPC "meinNPC" 1 0 0

end
___________________________________________
begin AmulettScript

;script ans Amulett machen
;beschwoerscript aber vorher eingeben
; und NPC vorher erstellen

short OnPCEquip

if ( OnPCEquip )
set OnPCEquip to 0
if ( Scriptrunning "Beschwoerscript" == 0 )
startscript "Beschwoerscript"
endif
endif

end
__________________________________________

begin NPCScript

; amulett muss vorher erstellt werden
; script an den NPC machen

dontsaveobject

if ( GetDisabled == 0 )

if ( Player-> hasItemEquipped "meinAmulett" == 0 )
Disable
endif
return
endif

setDelete 1

end

________________________________________

Wenn Du kein Tribunal oder Bloodmoon hast dann wechsle die letzte Zeile vom letzten Script (setDelete 1) aus gegen:
positioncell 0 0 0 0 "Wunderland"

__________________________________________
und noch ein viertes script. Dazu musst Du dem NPC ein eigenes Greeting schreiben und im Result
reinschreiben:
_____________________________________

if ( Scriptrunning "AmulettAusziehen" == 0 )
Startscript AmulettAusziehen
endif
_____________________________________
und das Script dazu:

begin AmulettAusziehen

if ( MenuMode )
; solange der Dialog noch im Gang ist
; wird das script hier verlassen:
return
endif

; das soll ja auch nur einmal durchlaufen
; nachdem der Dialog zu Ende ist, deswegen:

stopscript "AmulettAusziehen"

; zieh ihm einfach ein anderes Amulett an:

player-> additem "exquisite_amulet_01" 1
player-> equip "exquisite_amulet_01"

;und nimm's ihm wieder weg:

player-> RemoveItem "Exquisite_amulet_01" 1

end

(Für alle faulen!)
 
  • Like
Reaktionen: Lichtkrieger
Sry für Doppelpost aber was muss man an den Amulett in den Script noch einfügen das man ihn nicht mehr verkaufen kann. denn man soll ja einen händler beschwören und wenn ich das amulett bei ihm auf die verkaufsliste setze und dann wieder zurück nehme mach MW eine Flocke.
 
Aus irgendeinem Grund wenn ich den Händler was verkaufe das amulett abnehmme und wieder anlege sind die sachen die ich ihm verkauft habe weg warum wie kann ich das beheben?
 
@Lichtkrieger: Das liegt an dem DONTSAVEOBJECT im Script. Das verhindert, das irgendwelche Änderungen an ihm gespeichert werden. Sobald der Händler die Zelle verlässt, wird er wieder auf Anfang zurückgesetzt.
Ich hba mir das Script nicht genau angeguckt, aber probier einfach mal diese Zeile wegzulassen.
 
Nicht ganz: Es wird jedesmal eine neue Instanz des NPC's vor den Spieler gesetzt. Mit Editor-Ausgangs-Einstellungen. Warum hast Du nicht gesagt das Du einen Händler willst?

Dann musst Du das anders machen und den NPC als persistent markieren.
Stell ihn im Editor an einem Ort auf an dem Du ihn treffen willst.
Da er bestimmt magische Items oder Kleidungsstücke verkauft gib ihm das Amulett in's Inventar ( am Besten -2 Stück - so hat er immer Nachschub und kann maximal eins selbst anlegen)

An den NPC brauchst Du kein Script zu machen. Das Beschwör-Script brauchst DU hiersu auch nicht und das AmulettAuszieh--Script auch nicht.

Mach also mal ein neues Amulett, mach eine Verzauberung drauf, z.B. festigen Feilschen 10000 Punkte für 1 Sekunde bei BENUTZEN- das ist wichtig. Gib dem Amulett einen schönen Namen- z.B. "Amulett des Magischen Handels" und eine nette ID, ist egal. Aber den NPC nenn ich jetzt für's Beispiel wieder "meinNPC"

begin RufeHaendler

; script an ein verzaubertes Kleidungsstück machen
; Zauber muss Wirkung bei Benutzen haben
; "meinNPC" muss vorher aufgestellt und persistent markiert sein
; er darf nicht in eine Zelle gesetzt werden die der Spieler vor Einsatz
; des PlugIns schonmal betreten haben könnte

short OnPCEquip
short PCSkipEquip

set PCSkipEquip to 1
if ( OnPCEquip )
set OnPCEquip to 0
"MeinNPC"-> ForceGreeting
endif

end


Gib dem NPC das Amulett zum Verkaufen ins Inventar. Wichtig ist das der Spieler das Amulett erst bekommt nachdem der Spieler dem NPC begegnet ist.

Der Zauber daran ist: Das Amulett kann durch einfachen Klick auf den Namen im Magiemenu aktiviert werden und es wird dem Spieler kein anderes Amulett dafür ausgezogen weil er dieses nicht anlegen kann...
 
  • Like
Reaktionen: Lichtkrieger
Ich suche ein Script der nach einer gewissen Anzahl von Schlägen darauf ein tor öffnet. Also eigentlich eine Steuerkonsole die zerstört werden muss^^
 
Erstelle eine neue Rasse so das Du einen unsichtbaren NPC erstellen kannst.

Diesen NPC stell im Editor vor dem Tor auf und gib ihm Lebensenergie so viel sich nur eintragen lässt und in etwa so ein Script wenn Du das Teil mit einer beliebigen Waffe zerschlagen willst:

begin HaueZählen

short OnPCHitMe
short gehauen

;damit er nicht davonläuft:
skipanim

if ( OnPCHitMe )

setHealth 1000000000000000000000000 ; naja ganz so viel wird nicht gehen, aber eben maximum...

; diese Zeile nur wenn es mit einer bestimmten Waffe sein soll:
; if ( Player-> HasItemEquipped "ID_bestimmteWaffe )

set Gehauen to Gehauen +1

if ( Gehauen >= 5 )
; also nach mindestens 5 Schlägen
disable ;schaltet sich der NPC ab
; messagebox "Ihr habt 5 mal zugeschlagen"
;"EchteKiste"-> Disable
;"KaputteKiste"-> Enable
endif

; diese Zeile nur wenn es mit einer bestimmten Waffe sein soll:
;endif

endif

end

RichtigeKiste und KaputteKiste beziehen sich auf die Steuerkonsole bzw. da musst Du eben einsetzen was sich ändern soll...
 
Zuletzt bearbeitet:
Ich muss wohl richtig blöd sein, denn ich bekomme das einfachste Script nicht hin. Also, ich möchte, dass sich eine Wand anhand der X-Achse im Raum bewegt, also einfach nur zur Seite fährt, wenn ich sie aktiviere. Doch leider bewegt sich der Gegenstand nicht, was mache ich falsch? Hier das Script:

Begin Mara_HiddendoorScript

if ( GetJournalIndex XXXXX >= 15 )
if ( onactivate == 1 )
Journal XXXXX 40
PlaySound "Door Stone Open"
MoveWorld, x, 1000
endif
endif

End Mara_HiddendoorScript