Construction Set Der Scriptthread

wird echt zeit, das ich skripten lerne leute :roll:

so also dieses mal was wirklich blödes xD

auf meiner Void-Insel wird es eine Questreihe geben. nach jedem abgeschlossenem Quest sollen bestimmte Objekte (meist Invisio-Walls) verschwinden. außerdem soll man, solange die Mauern aktiv sind, und man dagegen läuft eine Meldung bekommen wie "ich sollte hier lieber nochnicht hin".

achja: die mauern sollen erst verschwinden, nachdem ein bestimmter Tagebucheintrag im Journal ist.


achja noch 2 kleine nicht-skript-frage: im Region-Editor kann man ja Wettereffekte wählen.
z.B. habe ich
Ashstorm: 1
Sunny: 35

meine frage: tauchen wettereffekte öfter auf, wenn sie eine niedrige zahl haben, oder einen hohen wert. eigentlich mit hohem wert oder? (soweit ich das überblickt habe. aber trotzdem habe ich fast NUR aschestürme) und: wielange dauert es, bis das wetter dann umschlägt?

meine Insel wird nur zu einem kleinem Teil dargestellt. obwohl Landmass vorhanden ist, wird es auf der Worldmap jedoch als Meer angesehen. wie löst man dieses Problem am dümmsten?

mfg
Verganon
 
Zuletzt bearbeitet:
1. Zu deinem Script:

Code:
if ( GetCollidingPC == 1 )
MessageBox "Ihr sollt hier nicht langehen."
endif

if ( GetJournalIndex "my_journalx" == 100 )
Disable
endif

Das warn jetzt nur die nötigen Befehle. Ich denke in ein Script einbauen, kannst du das langsam auch selbst ;)

2. Die Zahl bei den Wettereffekten gibt die Wahrscheinlichkeit (in Prozent) an mit der das gewählte Wetter erscheint. Wichtig ist, dass sich die Werte genau zu 100 aufaddieren müssen, sonst ändert sich das Wetter nicht korrekt.
Grundsätzlich wird alle 20 Spielstunden ein neues Wetter generiert (das kann aber natürlich trotzdem gleich sein, wenn der gleiche Zufallswert ermittelt wird).

3. Den Mod mit einem neuen Spielstand laden?
 
  • Like
Reaktionen: Verganon
bin ich denn hier der einzige, der diesen thread benutzt? :roll:

ich brauch schonwieder was.

sobald ich einen bestimmten tagebucheintrag habe, sollen 5 (unterschiedliche) NPC's an einem ort auftauchen. (ich glaub das könnt ich auchnoch selbst)

aaber: beim nächstem tagebucheintrag sollen sie mir folgen, und wenn ich einen bestimmten Activator angeklickt habe, sollen sie aufhören mir zu folgen.

ich bin sowas von schlecht ey... :lol:
 
NPCs an Zielort setzen.
Zum Auftauchen (Auf NPC legen):
Code:
If ( Doonce != 1 )
   Disable ; erstmal deaktiviert
   Set Doonce to 1
Endif

If ( GetJournalIndex "Name" == 10 )
   Enable ; Wenn es soweit ist, aktivieren
Endif
Zum Folgen:
Auf NPC:
Code:
If ( iFolgen != 1 )
   If ( GetJournalIndex "Name" == 10 ) ; wenn Tagebuch ...
      AiFollow, Player, 0, 0, 0, 0 ; klassischer Folgebefehl
      Set iFolgen to 1 ; damit nicht staendig die AI gesetzt wird
   Endif
Endif
Auf Activator:
Code:
If ( OnActivate == 1 ) ; Wenn aktiviert
   If ( GetJournalIndex "Name" == 10 ) ; Wenn die Leute einem folgen
      NPC_ID -> AIWander, 512, 5, 0, 0,20,0,0,10,30,0,0 
      ; laesst NPC zufaellig umherlaufen, die Zahlen sind variierbar
   Endif
Endif
 
Zuletzt bearbeitet:
danke schonmal aber ich hab zu deinen scripts mal 2 fragen:

1. beim erstem skript ist das "Doonce !" ein beispiel fürs Tagebuch oder ein eigenständiger befehl??? und was bringt der genau?

2. im dritten skript hab ich jetzt so verstanden, das die NPC's um diesen Activator herumlaufen. der eskortebefehl soll aber aufgehoben werden, sobald ich diesen Activator ANKLICKE. oder seh ich einfach nicht durch?
 
danke schonmal aber ich hab zu deinen scripts mal 2 fragen:

1. beim erstem skript ist das "Doonce !" ein beispiel fürs Tagebuch oder ein eigenständiger befehl??? und was bringt der genau?
Doonce ist eine Variable, vorzugsweise ein short. Einfach vorher deklarieren.
Es wird automatisch mit 0 initialisiert. Also ist es != 1. Der NPC wird also sofort deaktiviert. Dann wird die Variable auf 1 gesetzt, so dass der NPC nicht immer wieder deaktiviert wird.
Ich habe die Variable Doonce genannt, weil das nur-einmal-machen bedeutet. Und genau dafür wird sie verwendet. Es nur nur einmal der Disable ausgeführt werden.

2. im dritten skript hab ich jetzt so verstanden, das die NPC's um diesen Activator herumlaufen. der eskortebefehl soll aber aufgehoben werden, sobald ich diesen Activator ANKLICKE. oder seh ich einfach nicht durch?
Jo, passt. Die NPCs hören mit der Eskorte auf, wenn du klickst. Dies liegt daran, dass der NPC immer nur einen Ai-Befehl befolgt. Wenn du ihn also AiWander befehlst, ist AiFollow aufgehoben. Du kannst ihn aber auch mit AiTravel wieder zurück zu seiner Ursprungsstelle schicken.
 
  • Like
Reaktionen: Verganon
Jo, passt. Die NPCs hören mit der Eskorte auf, wenn du klickst. Dies liegt daran, dass der NPC immer nur einen Ai-Befehl befolgt. Wenn du ihn also AiWander befehlst, ist AiFollow aufgehoben. Du kannst ihn aber auch mit AiTravel wieder zurück zu seiner Ursprungsstelle schicken.

Dann muss die Ausgangsstelle aber in der gleichen Zelle liegen, diese Zelle muss über ein Pathgrid verfügen und du musst danach noch eine Abfrage einbauen, die das AITravel am Ziel wieder mit einem AIWander-Befehl überschreibt.
 
Hiho! ich mal wieder welche überraschung^^ vielleicht ändern wir den threadnamen in "Verganons Skript Aushelferei" oder sonstwas :roll:

in dem folgendem Skript sollte eine bestimmte wirkung erzielt werden:
nachdem man einen bestimmten Raum betreten hat, soll ein Soundeffekt EINMAL abgespielt werden + Untertitel. und danach gelöscht werden. allerdings wiederholt sich der Skript unendlich oft.

was ist hierdrann falsch?

Code:
begin "00-Sound_AndroidSchlangesprache"

if ( CellChanged == 0 )
	if ( GetSoundPlaying "00-AndroSnake" == 0 )
		MessageBox "Schau dich an. Eine erbärmliche Kreatur aus Fleisch und Knochen, die keuchend und flitzend durch meine Korridore rennt. Wie kannst du es wagen eine perfekte, unsterbliche Maschiene herauszufordern?"
				PlaySound3DVP "00-AndroSnake", 1.0, 1.0
	endif
endif

Disable

end

bzw.

Code:
begin "00-Sound_AndroidSchlangesprache"

if ( CellChanged == 0 )
	if ( GetSoundPlaying "00-AndroSnake" == 0 )
		MessageBox "Schau dich an. Eine erbärmliche Kreatur aus Fleisch und Knochen, die keuchend und flitzend durch meine Korridore rennt. Wie kannst du es wagen eine perfekte, unsterbliche Maschiene herauszufordern?"
				PlaySound3DVP "00-AndroSnake", 1.0, 1.0
Disable
	endif
endif

end
 
mach daraus:

Code:
begin "00-Sound_AndroidSchlangesprache"

short doonce

if ( doOnce == 0 )
if ( CellChanged == 0 )
	if ( GetSoundPlaying "00-AndroSnake" == 0 )
		MessageBox "Schau dich an. Eine erbärmliche Kreatur aus Fleisch und Knochen, die keuchend und flitzend durch meine Korridore rennt. Wie kannst du es wagen eine perfekte, unsterbliche Maschiene herauszufordern?"
				PlaySound3DVP "00-AndroSnake", 1.0, 1.0
set doOnce to 1
	endif
endif
endif

Disable

end[/coe]
 
  • Like
Reaktionen: Verganon
thx ^^ und wenn ich eine Leiche anklicke, soll ein neuer Tagebucheintrag erscheinen. hat auchnicht so ganz funktioniert xD

was gibbet denn hier noch zu verbessern?


begin "00-AndroQuestmagedead"

Journal "My-Tagebucheintrag" X (also X is bei mir schon ne zahl keine sorge^^)

end "00-AndroQuestmagedead"
 
begin "00-AndroQuestmagedead"

Short State

If ( OnActivate == 1 )
If ( State == 0 )
set state to 1
Journal "My-Tagebucheintrag" X
EndIf
EndIf

end "00-AndroQuestmagedead"
 
  • Like
Reaktionen: Verganon
begin "00-AndroQuestmagedead"

Short State

If ( OnActivate == 1 )
If ( State == 0 )
set state to 1
Journal "My-Tagebucheintrag" X
EndIf
EndIf

end "00-AndroQuestmagedead"

ich hab jetzt leider ein kleines problem damit. ich kann den betroffenen NPC zwar anklicken, aber ich kann mir seine items nicht nehem. (und dadurch aktiviert sich der tagebucheintrag auch nicht)
 
ich hab jetzt leider ein kleines problem damit. ich kann den betroffenen NPC zwar anklicken, aber ich kann mir seine items nicht nehem. (und dadurch aktiviert sich der tagebucheintrag auch nicht)

begin ...

if ( OnActivate )

if ( getJournalIndex "JournalName" < 123 )
messagebox "Euer Tagebuch wurde aktualisiert"
journal "JournalName" 123
endif


Activate

endif

end
 
  • Like
Reaktionen: Verganon
Dann hab ich auch eine Frage:
Kann man einen Aktivator überprüfen lassen, ob der Spieler grad Zauber xyz benutzt, und den aktivator dann zur seite bewegen?
mfg erc
 
Du kannst verschiedene Dinge überprüfen:
- ob der Spieler sich zum Zaubern vorbereitet
- ob der Spieler oder ein NPC oder eine Kreatur (beide mit eindeutiger ID) unter dem Effekt eines bestimmten Zaubers stehen
- du kannst eine neue Rasse erstellen mit einem Editormarker als Körer und sonst nichts. Diesen NPC setzt du dann mitten in deinen Activator und überprüfst, ob er von dem besagten Zauber getroffen wird.
 
Also könnte man überprüfen, ob der Spieler einen zauber auf sich anwendet, und dann besagten Aktivator nach unten bewegen, richtig?
FAlls ja, wie müßte das script dazu aussehen?
Bitte, bitte!
mfg erc
 
genau das geht:

Code:
begin my_wand_script

short state

if ( state == 0 )
if ( Player->GetSpellEffects, „Zauber-ID“ == 1 )
set state to 1
endif
endif

if ( state == 1 )
While ( GetPos Z > 1000 )
MoveWorld Z -20
endwhile
set state to 2
endif

end

Natürlich kannst du dieses Script noch beliebig erweitern und abfragen, ob der Spieler auch in der Nähe der Wand steht und solche Dinge.
 
  • Like
Reaktionen: ercvomnil