Construction Set Der Scriptthread

hat sich erledigt, danke. ich habe den dialog in den messageboxen zusammengekürzt. ist gerade so nicht sinnentstellend, da der dialog in den anderen skripts allerdings ausführlicher ist, hoffe ich, der user kommt klar. ein betatest wird licht ins dunkel bringen...
 
wie wärs, wenn man das scripts in der mitte halbiert, und dann an den schluss startscript (zweiter teil, als globales script, natürlich mit neudeklaration und setzung aller variabeln)
Unklug, da man sich so Probleme mit der Ablaufreihenfolge der Scripts einhandeln kann und wenn es sich bei den benutzten Funktionen um Referenzanweisungen für Bewegungen oder dergleichen handelt, die non-unique Scriptholder lokal verändern, geht es ohnehin nicht, ohne das gesamte Konzept über den Haufen zu verwerfen. Bevor man sowas macht, sollte man gründlichst nachdenken.

Es empfiehlt sich immer, den Programmcode bei solchen Problemen genauer zu analysieren und zu überarbeiten, wenn man bei den Dialogen selbst nicht genug herausholen kann. Ich schaue mir öfters Scripts aus anderen Mods an und in 90% der Fälle könnte man durch kleinere Optimierungen (überflüssige Kommata und Klammern entfernen oder Einkürzen von Variablennamen, etc. ) genug Platz herausholen, um das Script trotz längerer Texte kompilieren zu können. Gerade bei extrem langen Scripts ist das fast immer möglich.

Schmelz schrieb:
Aber ist es nicht ungünstig, wenn eine Übersetzung technisch anders ist als das Original?
Nicht unbedingt. Prinzipiell hast du Recht, aber es gibt Mods, die im Original unsauber gescripted sind. Zu Optimieren kann sich in solchen Fälllen de facto als notwendig erweisen. Es kommt auf die Situation an, ob man etwas ändern sollte, oder nicht.
 
Hat jemand eine Idee, wie ich einen Actor per Script drehen kann?

Rotate funktioniert bei einem Actor ja nicht. Face funktioniert nicht mit Variablen. SetAngle verändert zwar den gespeichert Winkel, aber nicht die tatsächliche Rotation des Actors. Und PositionCell setzt einen Actor immer mit Winkel 0 ab, egal, was man angibt.
 
Warum funktioniert setangle nicht? Bleibt der Actor einfach in seiner Position? Eventuell einfach mal disable/enabled oder Update3d (für Obse) nach dem Setangle darüber laufen lassen.

Alternativ könntest du den Actor zu irgendeinem Objekt was sagen lassen, damit er sich in die Richtung dreht oder ihm ein Package geben, dass er in die entsprechende Richtung geht, es ihm dann aber gleich wieder wegnehmen, so dass er sich letztentlich nur dreht

EDIT: Seh gerade, das wir hier im MW_Forum sind. Die Lösung hier war für OB
 
Zuletzt bearbeitet:
Hat jemand eine Idee, wie ich einen Actor per Script drehen kann?
Ein AITravel von der aktuellen Position zu einer neuen mit nur minimal verschobenen X/Y Koordinaten sollte das Problem lösen. Du mußt natürlich die neuen Koordinaten abhängig von der aktuellen Position erstmal ausrechnen, aber das sollte für dich ja kein Problem sein. Da SetAngle bei NPCs und Creatures verbuggt ist, sehe ich keine andere Chance... na jedenfalls ohne ScriptExtender.
 
Ein AITravel von der aktuellen Position zu einer neuen mit nur minimal verschobenen X/Y Koordinaten sollte das Problem lösen. Du mußt natürlich die neuen Koordinaten abhängig von der aktuellen Position erstmal ausrechnen, aber das sollte für dich ja kein Problem sein. Da SetAngle bei NPCs und Creatures verbuggt ist, sehe ich keine andere Chance... na jedenfalls ohne ScriptExtender.

Bei AITravel geht er immer zuerst zum nächsten Pathgrid-Punkt und von dort zum Ziel. Das ist für eine Drehung also komplett unpraktikabel :(

Schade, dann werde ich wohl auf die ganz komplizierte Lösung rausmüssen und ein weiteres Script aufrufen, dass in Abhängigkeit vom Winkel einen fest definierten Face-Aufruf macht. Natürlich müssen die so angegebenen Koordinaten soweit entfernt sein, dass das der maximale Bewegungsradius der Figur klein im Verhältnis zum anvisierten Punkt ist, damit der Winkelfehler klein bleibt.
 
...wenn die Zelle denn ein Pathgrid hat. Was hast du denn überhaupt vor? Vielleicht gibt es ja noch einen anderen Weg.

Nein, die Zelle hat kein Pathgrid. Das könnte funktionieren. Dann muss ich nur den Drehradius eines Dampf-Zenturios bestimmen, damit er sich auch richtig dreht ;)

Was das werden soll, behalte ich lieber noch für mich.
 
Hey leute
ich habe eine eigene fraktion erstellt und in einen dilogue folgendes script angehängt:
PCJoinFaction "Uni_Südwest-Academi"
wenn das nun aber ausgeführt wird bekomme ich folgende fehlermeldung:
Expression Error Unable to find faction "Uni_Südwest-Academi" in script Dialogue CompileAndRun.

Die fraktions-ID "Uni_Südwest-Academi" gibt es aber! Also weiß ich nicht, wieso er es angeblich nicht findet. Oder wo liegt da der fehler?


Hoffe ihr könnt helfen!
 
Hey leute
ich habe eine eigene fraktion erstellt und in einen dilogue folgendes script angehängt:
PCJoinFaction "Uni_Südwest-Academi"
wenn das nun aber ausgeführt wird bekomme ich folgende fehlermeldung:
Expression Error Unable to find faction "Uni_Südwest-Academi" in script Dialogue CompileAndRun.

Die fraktions-ID "Uni_Südwest-Academi" gibt es aber! Also weiß ich nicht, wieso er es angeblich nicht findet. Oder wo liegt da der fehler?

Erste Vermutung: Er mag keine Umlaute. Mach das Ü weg und versuch es erneut.
 
  • Like
Reaktionen: Stigit
Danke, funzt

Danke, funkioniert prächtig! Wie kommt man nur auf sowas? Da wär ich nie drauf gekommen:oops:

Dicken Dank! :D
 
Tür verriegeln

mal wieder eine hoffentlich einfache Frage: Wie verriegle ich im Dialog eine Tür?

Also ich möchte das man bei einem bestimmten Gesprächsthema den Schlüssel für eine bestimmte Tür abgeben muss (mach ich mit removeitem) und dann die Tür auch verriegelt wird.
Wie kann ich sie via script verriegeln?

Danke im vorraus...
 
also das verriegeln an und für sich geht so:
Code:
...

if ( OnActivate == 1 ) ; fragt die Aktivierung nicht nur ab, sondern bricht sie auch ab!
 if ( bedingung fürs öffnen == 1 )
  Activate ; aktiviert die tür wrneut, wodruch sie geöffnet wird
 endif
endif

...

diese tür kann NICHT mit einem Öffnen-spruch geöffnet werden. Soll man das können, so lässt du das von oben weg und verriegelst sie mit lock schlossstärke. Ob du dies direkt aus dem dialog machen kannst oder ob du ein script auf die tür legen muss, weiss ich nicht.
Übrigens: wenn du nicht weisst, wie du die tür dazu bringst, zu wissen, dass sie zu ist, mach es so:
1. Globale Variable erstellen
2. In die Resultbox des Dialogs set global_var to 1 schreiben
3. Die globale variable abfragen
 
Globale variable:

Geh auf Gameplay->Globals und wähl new. Leg einen Namen fest (in diesem beispiel global_var), als Typ wählst du short. Den Wert (Value) musst du nicht verändern, 0 ist OK.

Variable Setzen:

In die Resultbox von dem Satz im Dialog, wo die Tür verschlossen werden soll (da müsste schon dein RemoveItem stehen), schreibst du set global_var to 1.
Das setzt den Wet der Variable auf 1.

Tür verschliessen:

Mach ein Script auf die Tür. Jetzt musst du dich entscheiden:
a) Die Tür kann danach nur noch geöffnet werden, wenn du dies per script erlaubst (oder nie mehr, wenn du es so willst)

Leg auf die Tür dieses Script:

Code:
begin beispielscript

;Globale Variabeln müssen NICHT deklariert werden

If ( OnActivate == 1 ) ; fragt die aktivierung ab und bricht sie gleichzeitig ab
    If ( GlobalVar == 0 ) ; tür wurde noch nicht verschlossen
        activate ; aktiviert die tür erneut, diesmal ohne abbruch
    endif
    
    If ( bedingng, unter der die Tür trotzdem geöffnet werden kann, z.B. besitzen des schlüssels == 1 ) ;freiwillig
        activate
    endif
endif

end
b) Wenn man die Tür mit einem Dieatrich oder Zauber noch öffnen können soll, mach das scrpt so:

Code:
begin beispielscript

;Globale Variabeln müssen NICHT deklariert werden

If ( global_var == 1 ) ; fragt die aktivierung ab und bricht sie gleichzeitig ab
    lock wert ;wert durch schlosstärke ersetzen. evtl noch einen schlüssel angeben bei den türeinstellungen
endif

end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Stigit
Also ich möchte das man bei einem bestimmten Gesprächsthema den Schlüssel für eine bestimmte Tür abgeben muss (mach ich mit removeitem) und dann die Tür auch verriegelt wird.

unten im result fenster beim dialogthema

"eindeutigeid"->lock 100 (1-100 sinnvoll)

Dabei muss die Tür "references persistent" sein.
 
  • Like
Reaktionen: Stigit
"eindeutigeid"->lock 100 (1-100 sinnvoll)

Du kannst auch Lock, 0 angeben. Das ist besonders witzig. Die Tür wird dann im Spiel nicht als verschlossen angezeigt, man kann sie aber trotzdem nicht öffnen, da sie ja verschlossen ist. Zauber und Dietriche helfen gegen eine solche Tür auch nicht, aber der Schlüssel schon. Also genau das, was du suchst.
 
  • Like
Reaktionen: J2W und Stigit
@J2W
Kurz und unkompliziert, danke genau das was ich gesucht habe

@Kilfetzer
danke für den Hinweis, kann ich gut gebrauchen

@BoneHead
leider sehr kompliziert, trozdem danke für deine mühe
 
Ich weis ja nicht ob ihr das kennt aber ich brauche einen Script der so oder so ähnlich funktioniert wie der Horadrimwürfel bei Diablo 2.

Ich möchte nämlich eine Maschiene erstellen die etwas ähnliches kann. Z.B. gibt man 1-5 Feuersalze und 1-5 Ebenerz hinein und man bekommt dann einen neuen Gegenstand heraus. Also ein container in dem man etwas reinlegt und wenn genau diese Anzahl an Zutaten irgendwo verzeichnet sind, kommt dann der Gegenstand raus der für diese Anzahl an Zutaten eingetragen wurde. Wenn die Zutaten nirgens zusammenpassen passiert auch nichts.

Ums nochmal vereinfacht darzustellen um Missverständnisse zu breinigen:

Öffnen des containers (die Maschiene) -> Zutaten hineinlegen die man zusammengefügt haben will -> container schließen (*) -> abfrage an den container ob die Zutaten mit einer der Endprodukte zusammen passen -> Endprodukt im Container (Maschiene)


*hier wäre jetzt die frage mit einer extra Massgebox die erscheint wenn man den Container geschlossen hat und man von dortaus, dass er jetzt abfragen soll, ob es Gemeinsamkeiten mit einem der Rezepte und den Zutaten gibt oder nicht.
Oder mit einem externem Schalter, der dann die Abfrage in Gang setzt.

Mir persönlich wäre der Schalter lieber, da so die Idee mit hilfe einer Mschiene einen neuen Gegenstand zu erschaffen besser rüber kommt.

Ich hoffe mal, dass das so funktioklappt wie ich mir das vorstelle, ansonsten könntet ihr mir auch Vorschläge machen, die zwar nicht ganz so funktionieren, aber den Grundgedanken von dem ''Ich werf was rein und bekomm was neues heraus'' auffangen.

Danke schonmal im vorraus.



_________
DaOrkboss|