Construction Set [Frage] Skriptsuche

Metalpunk13

Abenteurer
hey ich bins mal wieder.. also wiedermal skriptfragen..

1) gibt es ein skript dafür das sich npc hinsetzen, oder muss man das selber animieren?
2) kann mir jem ein skript schreiben, das sich ein bestimmter gegenstand UNENDLICH also LOOP dreht? 1.edit: nachdem man einen schalter gedrückt hat...
meins bis jetzt: 2.edit: guckt mal ob das geht... und wenn nicht was ist der fehler, und schreibt bitte das richtige hin...
3.edit: bis jetzt gehts zwar aber wenn ich den schalter drücke dreht es sich nicht LOOP sondern einmal.. und ich will das es sich erstens LOOP dreht und zweitens das es beim 2.mal wieder auffhört... help

begin schalter

float counter
short doOnce

if ( CellChanged == 1 )
if ( doOnce == 2 )
"disco"->disable
endif
endif

if ( OnActivate == 1 )
Set counter to 1
endif

if ( counter == 0 )
return
endif

if ( doOnce == 2 ) funtzt irgendwie net, dreht sich nur nochmal :lol:
"disco"->RotateWorld Z 0.1
MoveWorld X 0.4
endif

if ( doOnce == 0 )
PlaySound "Door Stone Open"
set doOnce to 1
endif

Set counter to counter + GetSecondsPassed

MoveWorld X -0.4

"disco"->RotateWorld Z 20 <- dreht sich dadurch nicht LOOP

if ( counter > 1 )
Set doOnce to 2
Set counter to 0
endif

end
 
Zuletzt bearbeitet:
1. Solche PIs gibt es schon und du musst entweder deren Animationen nehmen oder selber animieren.
2. Wenn sich der Gegenstand einfach drehen soll, ohne dass er aktiviert werden muss geht das wirklich extrem einfach:

begin my_rot_script

if ( MenuMode == 1 )
return
endif

RotateWorld Z 30

end


Natürlich kannst du die Achse und Geschwindigkeit frei wählen.
 
Dann geht das so:

begin my_rot_script

short state

if ( MenuMode == 1 )
return
endif

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

if ( state == 1 )
RotateWorld Z 30
endif

end


Wie du siehst noch immer extrem einfach ;)
 
danke, aber ich will ja nich, dass das ding rotiert wenn man es aktiviert,sondern das wenn ich ein externen schalter drücke, das ding rotiert, und der schalter ebn um 0.4 zurückgeht, und beim 2x 0.4 vorgeht und das ding stehen bleibt, aber ansonsten danke :)

ach der dumme doppelpost:

ach gab es da nicht ein skript befehl, das ein anderes skript startet? dann müsste ich auf den schalter ja nur dsa legen, und ebn das es rein und raus geht...
 
Zuletzt bearbeitet von einem Moderator:
Wenn du so ein spezielles Script willst, dann schreib das auch!
Rene und ich können ja schlecht raten, was du mit "ein skript, das sich ein bestimmter gegenstand UNENDLICH also LOOP dreht" meinst...

So ich poste jetzt mal mien Lösung dafür. Rene wird wahrscheinlich eine andere Methode bevorzugen, aber ich mag "reference persitence" nicht so sehr...

Also erstes richtes du eine neue globale Variable ein (zB. my_rot_global). Das geht unter Gameplay->Globals. Eine short Variable reicht vollkommen aus.

Das erste Script legst du dann auf den zu drehenden Gegenstand:

begin my_rot1_script

if ( MenuMode == 1 )
return
endif

if ( my_rot_global == 1 )
RotateWorld Z 30
endif

end


Das zweite auf den Schalter:

begin my_rot2_script

short state
float timer

if ( MenuMode == 1 )
return
endif

if ( state == 0 )
if ( OnActivate == 1 )
set state to 1
set my_rot_global to 1
endif
endif

if ( state == 1 )
set timer to timer + GetSecondsPassed
RotateWorld Z 90
if ( timer > 1 )
set state to 2
set timer to 0
endif
endif

if ( state == 2 )
if ( OnActivate == 1 )
set state to 3
set my_rot_global to 0
endif
endif

if ( state == 3 )
set timer to timer + GetSecondsPassed
RotateWorld Z -90
if ( timer > 1 )
set state to 0
set timer to 0
endif
endif

end


Dies ist zwar etwas länger als die andere Variante, aber meiner Meinung nach besser zu verstehen. Und du willst ja auch etwas bei der Sache lernen.

@Rene: Ich habe absichtlich keine "effiziente" elseif-Struktur genommen, wegen der Überischtlichkeit:)
 
  • Like
Reaktionen: Metalpunk13
... Rene wird wahrscheinlich eine andere Methode bevorzugen, aber ich mag "reference persitence" nicht so sehr...
...

Mein Reden, persistente und globale so sparsam wie möglich verwenden, schliesslich muss in jedem Frame der komplette Variablenspeicher nach der gerade gefragten Variable abgesucht werden. Und je mehr Vairablen es gibt desto länger dauerts == Spiel wird langsamer.

Ein Kniff- wenn man recht viele Variablen braucht -hat jetzt garnix mit Metalpunks Problem zu tun- lass Dich also nicht verwirren:

Einen EINZIGEN persistenten NPC oder auch Aktivator einsetzen der in Eurem PlugIn dem Spieler so vor die Füsse gesetzt werden muss das er den auf jeden Fall aktiviert oder anspricht - so kommt der NPC/Aktivator, Container o.ä. als "vom-Spieler-geändert" in den Spielstand.
An diesem NPC, Container, Aktivator, Kreatur- was auch immer kann man ein Script hängen das nur aus Variablendeklarationen besteht und nichts ausführt.

In etwa so:

einen NPC erstellen, als persistent markieren, ID="MeineWerte"
an den NPC "MeineWerte" hängt man dann ein Script:

begin meinBufferScript

short angefangen
short gedreht
short gepupst
short gegessen
long bezahlt
;usw

end

Den NPC (oder Aktivator o.ä.) muss man dann in der Welt so platzieren das er dem Spieler begegnet bevor irgendwas anderes aus der PlugIn-Story passiert.

Dann kann man (ausser bei Dialog-Bedingungen im fun/Var-Bereich - aber dennoch im Result) überall auf "MeineWerte" zurückgreifen:

if ( MeineWerte.gedreht == 1 )
...
set MeineWerte.gepupst to...

usw.
So hat man sie also schön sortiert, seine Werte. Und sind alle "global" :D
Und das gute daran:
eine zweite Gruppe von gleichartigen Werten kann man ganz schnell erstellen indem man einen weiteren (persistenten) NPC/Aktivator oder was auch immer einsetzt und dem einfach das gleiche Script gibt.

Und einen aussagekräftigen präfix haben diese "Variablen" ja sowieso, es herrscht also Ordnung.

Wer das jetzt verstanden hat der wird erkennen das damit noch Einiges aus dem ollen Spiel rauszuholen ist und da noch ungeahntes Potential schlummert, die anderen werden verwirrt sein :p:oops:
 
  • Like
Reaktionen: Killfetzer
Wie schon gesagt: my_rot_global muss eine GLOBALE Variable sein, die musst du erst einrichten.
Das geht unter Gameplay->Globals. Dort gehst du auf New, gibst den Namen ein und wählst als Typ Short.

Dann kannst du die Variable in allen Scripten benutzen.

@Rene: cooler Trick. Muss ich mir unbedingt merken. Wenn man das noch mit einem Targeted Script kompiniert hat man quasi einen zweiten globalen Variablen Speicher, der aber nur geladen wird, wenn man ihn braucht. Das ist wirklich gut :)

Wer das jetzt verstanden hat der wird erkennen das damit noch Einiges aus dem ollen Spiel rauszuholen ist und da noch ungeahntes Potential schlummert, die anderen werden verwirrt sein

Ich hoffe das sind noch einige andere. Außerdem schlummert in MW immernoch viel Potenzial. Leider sind die allgemeinen Scriptfunktionen (Mathefunktionen, usw.) ohne Zusatzerweiterungen stark eingeschränkt. Sonst könnte man sogar noch ganz gut Physikeffekte simulieren.
 
Zuletzt bearbeitet:
Wie sollte ich meinen Script für einen Tresor schreiben ?
Ich habe mir einen Raum aufgebaut der sehr wertvolle sachen für mich aufhebt und dieser ist mit vier dwemertüren verschlossen ist. Ich will das schloss so gestalten das ich ein nummerfeld habe wo ich eine gewisse Codezahl eingeben muss. Und wenn diese dreimal falsch eingebe soll eine Magmafalle aktiv werden
wie muss ich dieses script schreiben ?
 
Kommt auf mehrere Faktoren an:
- Willst du die einzelnen Tasten wirklich als getrennte Elemente im Spiel oder willst du ein Tastaturfeld, dass beim Aktivieren eine MessageBox öffnet, in der man dann den Code eingibt?
- Sollen Eingabeversuche an allen Türen in einem "Pott" für falsche Antworten gesammelt werden?
- Willst du den Code vorher selbst einstellen?
 
ich tät 4 Objekte nehmen, z.B. 4 Dwemer Rätselwürfel und denen z.B. mit NifTexture oder NifSkope oder MeshMessi die Textur auswechseln. Der Rätselwürfel hat zwei Texturen, eine davon bedeckt nur eine Seite, die andere geht über die 5 anderen Seiten. Die einzelne Textur lässt sich simpel gegen eine andere bmp/tga austauschen die meinetwegen eine Zahl anzeigt... den Rest überlasse ich Eurer Fantasie weil ich jetz Schluss machen muss ...