Construction Set Kriege von den eigenen Wachen auf die Mütze

Freelancer_T

Abenteurer
Meine Unfähigkeit ist eigentlich kurz beschrieben. Ich erweitere gerade so zum üben und rein für mich selbst die Odai-Festung um etwas script und Mappingerfahrungen zu sammeln.
Ich habe die Festung um Wachen, Türme, Gebäude und ein paar Quests erweitert, die bis hierhin gut funktionieren, aber nun habe ich versucht einen angriff auf die Festung zu scripten.
Dazu habe ich TelvanniNPCs erstellt und in den Disablemodus gestellt.
(Jede Wache und jeder Angreifer hat nen eigenen Namen, also es sind nicht 12 mal die selbe Wache und 12 mal derselbe angreifer, sondern jeder ein eigenständiger NPC)
Sie erscheinen erst, wenn ich einen gewissen Journaleintrag erhalte, dann muss ich als NPC zum Tor laufen und sollte dort zusammen mit meinen Wachen die NPCs kloppen.
Ich habe die Angreifer so gescriptet, dass sie auf die Wachen angreifen und nicht direkt auf den Spieler, damit der Kampf bereits in vollem Gange ist, wenn der Spieler dort eintrifft.
Alles gut soweit, die Wachen und die Telvannis hauen sich die Köpfe ein, ich habs inzwischen auch herausgefunden wie ichs mache, dass die Wachen und die Telvannis sich ständig weiterkloppen und nicht auf einmal stoppen, aber wenn ich mich in den Kampf einmische, steht da dass ich ein verbrechen begangen habe und dann klopfen mich meine eigenen Wachen.
Wie verhindere ich, dass die Angreifer als Normale Npcs gesehen werden. Muss ich ihnen allen die Klasse Bandit anhängen?
Oder geht das auch anders?
Bzw. Wenn das nicht geht, wie verhindere ich zumindest, dass mich meine eigenen wachen kloppen.
Die wachen haben die AIeinstellung: Fight 20 Flee 30 Alarm 100 und Hello 30
Ahja, evtl werdet ihr das Script brauchen mit welchem ich den Angriff auf meine Wachen eingestellt habe:
Begin ZK_OP_Telüberfall
Startscript "ZK_OP_Tel"
if (GetJournalindex "ZK_OP_Scherereien" <=29)
"ZK_OP_TEL_Überfall"->Disable
"ZK_OP_TEL_Überfall1"->Disable
"ZK_OP_TEL_Überfall2"->Disable
"ZK_OP_TEL_Überfall3"->Disable
"ZK_OP_TEL_Überfall4"->Disable
"ZK_OP_TEL_Überfall5"->Disable
"ZK_OP_TEL_Überfall6"->Disable
"ZK_OP_TEL_Überfall8"->Disable

endif
if ( GetJournalIndex "ZK_OP_Scherereien">=30 )
"ZK_OP_TEL_Überfall"->enable
"ZK_OP_TEL_Überfall1"->enable
"ZK_OP_TEL_Überfall2"->enable
"ZK_OP_TEL_Überfall3"->enable
"ZK_OP_TEL_Überfall4"->enable
"ZK_OP_TEL_Überfall5"->enable
"ZK_OP_TEL_Überfall6"->enable
"ZK_OP_TEL_Überfall8"->enable
"ZK_op_Tel_Überfall"->startcombat "ZK_OP_personelguard3"
"ZK_op_Tel_Überfall1"->startcombat "ZK_OP_personelguard"
"ZK_op_Tel_Überfall2"->startcombat "ZK_OP_personelguard3"
"ZK_op_Tel_Überfall3"->startcombat "ZK_OP_personelmage4"
"ZK_op_Tel_Überfall4"->startcombat "ZK_OP_personelguard2"
"ZK_op_Tel_Überfall5"->startcombat "ZK_OP_personelguard4"
"ZK_op_Tel_Überfall6"->startcombat "ZK_OP_personelguard6"
"ZK_op_Tel_Überfall8"->startcombat "ZK_OP_personelguard2"
endif


if (GetDeadCount, "ZK_OP_TEL_Überfall3" >= 1 )
MessageBox, "Ich habe den Unteroffizier der Telvannis getötet. Wenn der Angriff zurückgeschlagen wurde, sollte ich mit Hauptmann Evarin reden."
SetJournalIndex "ZK_OP_Scherereien" 35
Journal "ZK_OP_Scherereien" 35
endif
End
 
Zuletzt bearbeitet:
Ich empfehle Dir für solche Fälle eine unereichbare Kreatur (Ratte oder Kwama-Kundschafter sind schön klein). Die musst Du unter der Erde in einen kleinen Raum sperren. setze alle Npcs die auf einer Seite kämpfen sollen auf AIFollow "Ratte" bei den NPC-Einstellungen wo Du auch Wander, Escort, Follow einstellen kannst. Da wo default AiWander 512 steht.
Erstelle eine zweite Ratte, die ist aber disabled. Beiden Ratten gib eine Fähigkeit Lebensenergie wiederherstellen von sagen wir, ganz schön viel pro Sekunde und sie müssen natürlich persistent sein.
An diese Ratten kannst Du auch komplett alle Scriptactions hängen. Der zweiten Ratte lässt Du die andere Gruppe folgen. Die beiden Ratten sitzen nun gemeinsam in ihrem unterridischen Bau. Sobald es losgehen soll enable einfach Ratte 2 und lasse die "böse" die "gute " Ratte angreifen und umgekehrt. Beide müssen ein StartCombat->JeweilsAndereRatte bekommen. Sobald der Kampf und alle Scriptactions vorbei sind machst Du wieder Speicherplatz frei und "stoppst" die persistenten Scripts indem Du die Ratten, an denen die Scripts ja hängen, einfach mit PositionCell nach Wunderland verfrachtest nachdem Du sie - ganz wichtig- DISABLED hast. Alle auf Follow stehenden NPCs verhalten sich dann wieder total normal ohne irgendein StopCombat zu benötigen. Disablesd Du die Ratten nicht vorher rennen die NPC's wie von der Tarantel gestochen in Richtung Aschland (0,0) !
Ne andere Möglichkeit ist natürlich die bösen einfach tot umfallen zu lassen wenn der Spieler mit gezogener Waffe oder GetSpellReadied zu nahe kommt
Wenn unter dem Erdboden direkt Wasser ist nimm einfach Schlachterfische statt Ratten damit die Viecher nicht gleich absaufen. Muss aber alles in der Zelle untergebracht sein in der alles stattfinden soll.
Deinen eigenen Wachen darfst Du auf keinen Fall einen Alarm von 100 geben - sonst gibt's immer Ärger mit dem Gesetz. Ausserdem musst Du dafür sorgen das die gegnerische Gruppe ( also die böse Anführer-Ratte) zuerst angreift. Eigentlich sollte keiner der beteiligten NPCs für die Zeit des Kampfes einen Alarm-Wert haben. Du kannst ja die Original-Wachen auch für die Zeit des Kampfes einfach gegen Deine eigenen austauschen und den bösen einen "Fight"-Wert von 100 geben . Und noch mal: auf keinen Fall Alarm!

Sobald Du die "gute" Ratte auf AiFollow Player 0 0 0 0 gesetzt hast ist der Spieler legitim in den Kampf involviert. Also brauchst Du eine Position, kuck am Besten im CS nach einer geraden Linie die der Spieler überschreiten muss - Positionsabfragen (GetPos X/Y) sind viel schneller als GetDistance - für GetDistance brauchst Du ja wieder ein persistentes Refernz-Objekt - wäre in dem Falle vieleicht der böse Hauptmann.

Damit "alles im Rahmen bleibt" und keiner davonrennt kannst Du die Szene mit diesen unsichbaren (im CS hellblauen) Boxen umstellen wie sie unter dem NPC "Argonian Guy" oder rund ums Gefangenenschiff verwendet wurden die sich dann En- und später Disable'n

Edit: Du brauchst auch keine 12 verschiedenen Telvanni-NPCs, höchstens 2, einen Hauptmann welcher der Ratte folgt und elf mal den gleichen Soldaten der dem Hauptmann folgt. Du kannst auch 25 nehmen oder 50... Jeder hat natürlich das gleiche Script und die Ausrüstung kannst Du variieren indem Du levelled Items benutzt. Theoretisch kannst Du auch 3 verschiedene Telvanni-Soldaten (davon vieleicht eine weibliche) machen und die als Levelled Creature einsetzen. Geht aber nur wenn Du auch Tribunal oder Bloodmoon hast weil Du sie dann im Script mit SetDelete 1 verschwinden lassen musst wenn es noch nicht soweit- oder schon vorbei ist.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Freelancer_T
Habe das Problem nun sowohl auf deine Weise bewältigt als auch eine andere Lösung gefunden.
Vielleicht nicht so elegant, aber genauso wirkungsvoll.
Falls es dich interessiert:
Begin ZK_OP_TelüberfallStartscript "ZK_OP_Tel"
short DoOnce
if (GetJournalindex "ZK_OP_Scherereien" <=29)
"ZK_OP_TEL_Überfall"->Disable
"ZK_OP_TEL_Überfall1"->Disable
"ZK_OP_TEL_Überfall2"->Disable
"ZK_OP_TEL_Überfall3"->Disable
"ZK_OP_TEL_Überfall4"->Disable
"ZK_OP_TEL_Überfall5"->Disable
"ZK_OP_TEL_Überfall6"->Disable
"ZK_OP_TEL_Überfall8"->Disable
Set DoOnce to 1
endif
endif


if ( GetJournalIndex "ZK_OP_Scherereien"=30 )
"ZK_OP_TEL_Überfall"->enable
"ZK_OP_TEL_Überfall1"->enable
"ZK_OP_TEL_Überfall2"->enable
"ZK_OP_TEL_Überfall3"->enable
"ZK_OP_TEL_Überfall4"->enable
"ZK_OP_TEL_Überfall5"->enable
"ZK_OP_TEL_Überfall6"->enable
"ZK_OP_TEL_Überfall8"->enable
if ("ZK_OP_Personelguard2"->getDistance, "player" < 512)
while Doonce=1
"ZK_OP_Personelguard"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard2"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard3"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard4"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard6"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelmage4"->AIFollow "Player" 0 0 0 0
"ZK_op_Tel_Überfall"->startcombat "ZK_OP_personelguard3"
"ZK_op_Tel_Überfall1"->startcombat "ZK_OP_personelguard"
"ZK_op_Tel_Überfall2"->startcombat "ZK_OP_personelguard3"
"ZK_op_Tel_Überfall3"->startcombat "ZK_OP_personelmage4"
"ZK_op_Tel_Überfall4"->startcombat "ZK_OP_personelguard2"
"ZK_op_Tel_Überfall5"->startcombat "ZK_OP_personelguard4"
"ZK_op_Tel_Überfall6"->startcombat "ZK_OP_personelguard6"
"ZK_op_Tel_Überfall8"->startcombat "ZK_OP_personelguard2"
endwhile
endif
endif




if (GetDeadCount, "ZK_OP_TEL_Überfall" >= 1 )
while (GetDeadCount, "ZK_OP_TEL_Überfall1" >= 1 )
while (GetDeadCount, "ZK_OP_TEL_Überfall2" >= 1 )
while (GetDeadCount, "ZK_OP_TEL_Überfall3" >= 1 )
while (GetDeadCount, "ZK_OP_TEL_Überfall4" >= 1 )
while (GetDeadCount, "ZK_OP_TEL_Überfall5" >= 1 )
while (GetDeadCount, "ZK_OP_TEL_Überfall6" >= 1 )
while (GetDeadCount, "ZK_OP_TEL_Überfall8" >= 1 )
MessageBox, "Wir konnten den Angriff Abwehren. Evarin wird erfreut sein!"
SetJournalIndex "ZK_OP_Scherereien" 35
Journal "ZK_OP_Scherereien" 35
"ZK_OP_Personelguard"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard2"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard3"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard4"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard6"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelmage4"->AIWander 512 5 0 60 20 10
endwhile
endwhile
endwhile
endwhile
endwhile
endwhile
endwhile
endif
if GetJournalIndex "ZK_OP_Scherereien">=35
Stopscript "ZK_OP_Tel"
endif
End
Natürlich ist das ganze script sehr lange, da ich trotz allem verschiedene Soldaten benutzt habe aber es ginge ja auch mit leveled Lists usw.
Was mich allerdings interessiert, frisst mein Script so wie ich es geschrieben habe viel speicher?
 
Die vielen While's sind unnötig bzw. bremsen. Du wirst die Message hunderte Male angezeigt bekommen und das ganze braucht nicht viel Speicher aber es bremst den Spielablauf ganz schön weil eine While-EndWhile-Schleife erst verlassen wird wenn die Bedingung nicht mehr erfüllt ist. Ausserdem nimm die Umlaute raus ("ü"berfall usw.) wenn Du in-game testest kannst Du keine Umlaute in die Konsole eingeben.

Ich dreh mal etwas am Script:

;TelÜberfallscript "ZK_OP_Tel" was soll das? Ich nenn es einfach mal ZK_OP_TEL_Script und ich nehme an es wird per Startscript ZK_OP_Tel_Script im Dialog-Result oder von einem anderen Script gestartet oder? Das wäre aber blöd weil die Bösen dann ja nicht disabled wären...

Wenn es an einem Objekt hängt dann muss es anders laufen. Local funktioniert die Stopscript-Anweisung nicht! Daher nimm das untere Script wenn Du es irgendwo dranhängst. Das obere ist eher zu Studienzwecken ;)

; short DoOnce schlecht, besser nehm mal state, das enthält dann in welchem Stadium wir uns befinden.
Distanzmessen auf Dauer ist auch 'ne herbe Bremse, tun wir das in diskreten kleinen Intervallen. Ich benutz timeOut rückwärts damit es beim ersten Durchlauf sofort einmal Distanz misst. Ich habe Messungen alle 25 Millisekunden eingesetzt, sollte ausreichen. Wenn's zu sehr hackt nehm 40 oder 50... Die Distanz von 512 scheint mir zu klein, schlage vor Du erhöhst das etwas auf ca. 750 (= iNPCVoiceDistance - könntest Du theoretisch auch hinschreiben, kannst aber 512 einsetzen wenn der Spieler z.B. erst um eine Ecke kommt)
Die Messageboxes sagen Dir im Test an welcher Stelle das Script gerade ist. Die kannst Du - wenn alles gut läuft - entfernen. Wenns nicht gut läuft weisst Du wie weit es gut ging...

Global ( per StartScript-Anweisung ausgelöst):
Begin ZK_OP_Tel_Script

short state
float timeOut

if ( state == 0 )

"ZK_OP_TEL_Überfall"->Disable
"ZK_OP_TEL_Überfall1"->Disable
"ZK_OP_TEL_Überfall2"->Disable
"ZK_OP_TEL_Überfall3"->Disable
"ZK_OP_TEL_Überfall4"->Disable
"ZK_OP_TEL_Überfall5"->Disable
"ZK_OP_TEL_Überfall6"->Disable
"ZK_OP_TEL_Überfall8"->Disable
Set state to 1
messagebox "state ist 1, Mannschaft disabled"

elseif ( state == 1 )

if ( GetJournalIndex "ZK_OP_Scherereien" == 30 )
"ZK_OP_TEL_Überfall"->enable
"ZK_OP_TEL_Überfall1"->enable
"ZK_OP_TEL_Überfall2"->enable
"ZK_OP_TEL_Überfall3"->enable
"ZK_OP_TEL_Überfall4"->enable
"ZK_OP_TEL_Überfall5"->enable
"ZK_OP_TEL_Überfall6"->enable
"ZK_OP_TEL_Überfall8"->enable
messagebox "state ist 2, Mannschaft enabled"
set state to 2
endif

elseif ( state == 2 )

set timeOut to timeOut - getSecondsPassed

if ( timeOut <= 0 )
if ("ZK_OP_Personelguard2"->getDistance, "player" < 750)
messagebox "state ist 3, spieler nah genug jetzt"
set state to 3
endif
set timeOut to 25
endif

elseif ( state == 3 )

"ZK_OP_Personelguard"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard2"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard3"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard4"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard6"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelmage4"->AIFollow "Player" 0 0 0 0
"ZK_op_Tel_Überfall"->startcombat "ZK_OP_personelguard3"
"ZK_op_Tel_Überfall1"->startcombat "ZK_OP_personelguard"
"ZK_op_Tel_Überfall2"->startcombat "ZK_OP_personelguard3"
"ZK_op_Tel_Überfall3"->startcombat "ZK_OP_personelmage4"
"ZK_op_Tel_Überfall4"->startcombat "ZK_OP_personelguard2"
"ZK_op_Tel_Überfall5"->startcombat "ZK_OP_personelguard4"
"ZK_op_Tel_Überfall6"->startcombat "ZK_OP_personelguard6"
"ZK_op_Tel_Überfall8"->startcombat "ZK_OP_personelguard2"
set state to 4
messagebox "state ist 4, das Gemetzel geht los!"

elseif ( state == 4 )

if ( GetDeadCount, "ZK_OP_TEL_Überfall" >= 1 )
if ( GetDeadCount, "ZK_OP_TEL_Überfall2" >= 1 )
if ( GetDeadCount, "ZK_OP_TEL_Überfall3" >= 1 )
if ( GetDeadCount, "ZK_OP_TEL_Überfall4" >= 1 )
if ( GetDeadCount, "ZK_OP_TEL_Überfall5" >= 1 )
if ( GetDeadCount, "ZK_OP_TEL_Überfall6" >= 1 )
if ( GetDeadCount, "ZK_OP_TEL_Überfall8" >= 1 )
set state to 5
messagebox "state ist 5, alle Feinde sind tot"
endif
endif
endif
endif
endif
endif
endif

elseif ( state == 5 )

MessageBox, "Wir konnten den Angriff Abwehren. Evarin wird erfreut sein!"
Journal "ZK_OP_Scherereien" 35
"ZK_OP_Personelguard"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard2"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard3"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard4"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard6"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelmage4"->AIWander 512 5 0 60 20 10
set state to -1
messagebox "state ist -1, Script fertig, endet jetzt"

elseif ( state == -1 )

Stopscript ZK_OP_Tel_Script
endif

end
Local (an einem Objekt, z.B. NPC oder Activator angehängt, kann auch eine Door, ein Light oder Container sein, vernünftig wäre etwas zu nehmen das der Spieler nicht beseitigen kann):
Begin ZK_OP_Tel_Script

short state
short Leichen

float timeOut

if ( state == -1 )

return

elseif ( state == 0 )

"ZK_OP_TEL_Überfall"->Disable
"ZK_OP_TEL_Überfall1"->Disable
"ZK_OP_TEL_Überfall2"->Disable
"ZK_OP_TEL_Überfall3"->Disable
"ZK_OP_TEL_Überfall4"->Disable
"ZK_OP_TEL_Überfall5"->Disable
"ZK_OP_TEL_Überfall6"->Disable
"ZK_OP_TEL_Überfall8"->Disable
Set state to 1
messagebox "state ist 1, Mannschaft disabled"

elseif ( state == 1 )

if ( GetJournalIndex "ZK_OP_Scherereien" == 30 )
"ZK_OP_TEL_Überfall"->enable
"ZK_OP_TEL_Überfall1"->enable
"ZK_OP_TEL_Überfall2"->enable
"ZK_OP_TEL_Überfall3"->enable
"ZK_OP_TEL_Überfall4"->enable
"ZK_OP_TEL_Überfall5"->enable
"ZK_OP_TEL_Überfall6"->enable
"ZK_OP_TEL_Überfall8"->enable
set state to 2
messagebox "state ist 2, Mannschaft enabled"
endif

elseif ( state == 2 )

set timeOut to timeOut - getSecondsPassed

if ( timeOut <= 0 )
if ("ZK_OP_Personelguard2"->getDistance, "player" < 750)
set state to 3
messagebox "state ist 3, spieler nah genug jetzt"
endif
set timeOut to 25
endif

elseif ( state == 3 )

"ZK_OP_Personelguard"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard2"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard3"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard4"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelguard6"->AIFollow "Player" 0 0 0 0
"ZK_OP_Personelmage4"->AIFollow "Player" 0 0 0 0
"ZK_op_Tel_Überfall"->startcombat "ZK_OP_personelguard3"
"ZK_op_Tel_Überfall1"->startcombat "ZK_OP_personelguard"
"ZK_op_Tel_Überfall2"->startcombat "ZK_OP_personelguard3"
"ZK_op_Tel_Überfall3"->startcombat "ZK_OP_personelmage4"
"ZK_op_Tel_Überfall4"->startcombat "ZK_OP_personelguard2"
"ZK_op_Tel_Überfall5"->startcombat "ZK_OP_personelguard4"
"ZK_op_Tel_Überfall6"->startcombat "ZK_OP_personelguard6"
"ZK_op_Tel_Überfall8"->startcombat "ZK_OP_personelguard2"
set state to 4
messagebox "state ist 4, das Gemetzel geht los!"

elseif ( state == 4 )

set Leichen to GetDeadCount, "ZK_OP_TEL_Überfall"
set Leichen to ( Leichen + GetDeadCount, "ZK_OP_TEL_Überfall2" )
set Leichen to ( Leichen + GetDeadCount, "ZK_OP_TEL_Überfall3" )
set Leichen to ( Leichen + GetDeadCount, "ZK_OP_TEL_Überfall4" )
set Leichen to ( Leichen + GetDeadCount, "ZK_OP_TEL_Überfall5" )
set Leichen to ( Leichen + GetDeadCount, "ZK_OP_TEL_Überfall6" )
set Leichen to ( Leichen + GetDeadCount, "ZK_OP_TEL_Überfall8" )

if ( Leichen == 7 )
set state to 5
messagebox "state ist 5, alle Feinde sind tot"
endif

elseif ( state == 5 )

MessageBox, "Wir konnten den Angriff abwehren. Evarin wird erfreut sein!"
Journal "ZK_OP_Scherereien" 35
"ZK_OP_Personelguard"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard2"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard3"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard4"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelguard6"->AIWander 512 5 0 60 20 10
"ZK_OP_Personelmage4"->AIWander 512 5 0 60 20 10
set state to -1
messagebox "state ist -1, Script fertig"

endif

end
PS. angenommen Du machst dieses Script an ein Fass welches vor Deiner Festung steht, dann kannst Du im Spiel die Konsole öffnen (mit ^-Taste), dann das Fass anklicken und eintippen "sv" (=show variables). Dann bekommst Du jederzeit angezeigt welchen Wert state an diesem Fass hat. (und auch timeOut und wieviele schon tot sind)
 
Zuletzt bearbeitet:
;TelÜberfallscript "ZK_OP_Tel" was soll das? Ich nenn es einfach mal ZK_OP_TEL_Script und ich nehme an es wird per Startscript ZK_OP_Tel_Script im Dialog-Result oder von einem anderen Script gestartet oder? Das wäre aber blöd weil die Bösen dann ja nicht disabled wären...
Nope wird nicht von einem anderen Script gestartet, das Script hängt am Oberbösemotz und das Startscript habe ich gleich in dasselbe Script gehängt.
Hat bei mir funktioniert^^
Aber Großes Danke, dass du dir die Mühe gibst und das alles verbesserst.
 
Okay, ich habs wieder mal geschafft ein script nicht hinzubekommen.
Eigentlich sollten die Dame von anfang an disabled sein.
Nachdem man ein Rätsel bekommen hat soll sie sich automatisch enablen um getötet werden zu können.
Aber irgendwie ist sie entweder Anfangs sichtbar oder sie ist unsichtbar und bleibt das auch, wie ich das script auch drehe und wende und ich kriegs nicht hin.
Die Fehlermeldung im Spiel sagt "Expression Error in script "fr_SCH_q1"
Ich bin wohl zu dämlich für richtiges scripten, deswegen mache ich eigentlich so gut wie alles über dialoge.

begin fr_sch_q1

Short Donce

if (Donce ==2)
return
endif

if (Donce == 0)
Disable
endif

if (Journal FR_SCH_SU1 == 1)
Set Donce to 1
Enable
endif

if ( OnDeath )
Set Donce to 2
Journal FR_SCH_SU1 2
MessageBox "Die dunkle Seite erwartet euch."
endif

end
Inzwischen habe ich das ganze auch über dialoge gemacht, es geht ja nur darum, dass man nicht mit der Frau zu kämpfen beginnt, ehe man die erste Q überhaupt erhalten hat.
Aber interessehalber würde ich eben gerne wissen was ich falsch gemacht habe und ich hoffe einer von euch kann mir helfen.
LG Free
 
begin fr_sch_q1

if ( OnDeath )
Journal FR_SCH_SU1 2
MessageBox "Die dunkle Seite erwartet euch."
endif

if ( GetDisabled )

if (GetJournalIndex FR_SCH_SU1 == 1)
Enable
endif

else

if (GetJournalIndex FR_SCH_SU1 < 1)
disable
endif

endif

end

Fehler war:
Journal setzt das Tagebuch auf einen Wert (macht einen Eintrag)
GetJournalIndex sagt welcher Eintrag aktuell ist
SetJournalIndex kann man nehmen um das Tagebuch auf einen beliebigen Stand zu setzen ohne einen Eintrag zu machen (z.B. wenn man etwas zurücksetzen will damit der Spieler einen Teil der Aufgabe nochmal machen kann)
siehe dazu auch TES-CS: Help\Content\Gameplay\Scripting\Functions
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Freelancer_T