AI-Characterscript um Ingame-Zeit verstreichen zu lassen ?

Dark Enchanter

Senior Member
Registriert
11.05.2013
Beiträge
126
Hallo :) !

Ich möchte gerne ein KI-Charakterscript haben (damit meine ich ein Filename.BS - Script), wo nach drücken einer Taste, zum Beispiel der Taste "D" zum Beispiel 30 Tage Ingame-Spielzeit vergehen (oder 10 Tage).

Ich weiß, dass man im Spiel auch einfach STRG+T drücken kann, um 1 Stunde verstreichen zu lassen, wenn man die Cheats aktiviert hat, aber 720-mal die Tastenkombination zu drücken, um 30 Tage verstreichen zu lassen finde ich etwas übertrieben :D.

Wisst ihr wie solch ein Scipt auszusehen hätte ?

Ich habe ins Internet geschaut, bin aber auf die Schnelle nicht fündig geworden :(.

LG und vielen Dank im Voraus, falls ihr mir helft :) !
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.170
Meines Wissens gibt es leider keine Aktion, die per Script eine gewisse Spielzeit verstreichen lassen könnte. Es gibt zwar etwas, um zwischen Tag / Nacht zu wechseln, aber ein Befehl zum Vorspulen (wie bei der Elder-Scrolls-Reihe) ist mir nicht bekannt, tut mir leid. :(
Im Netz habe ich auch nichts gefunden, außer einem uralten Artikel im Ironworks-Forum, bei dem sie auch keine Lösung außer der CLUAConsole gefunden haben:
http://www.ironworksforum.com/forum/showthread.php?t=13644
 

Dark Enchanter

Senior Member
Registriert
11.05.2013
Beiträge
126
Vielen Dank für deine Antwort !

Ich hatte es mit C:AdvanceRealTime(Ganzzahl) versucht, doch leider funktioniert das bei mir nicht; am Tag und Stunden - Anzeiger ändert sich rein gar nichts, obwohl der Befehl akzeptiert wird. Vielleicht hat eine der unzähligen Mods, ich spiele die EET, das irgendwie deaktiviert oder so.

Ich habe es auch mit RestParty() und ActionOverride(PlayerX, Rest()) innerhalb eines BS-Scripts versucht, doch leider ändert das an der Spielzeit nichts, obwohl es die Party bzw. den entsprechenden PlayerX tatsächlich rasten lässt, allerdings ohne Zeit verstreichen zu lassen.
 
Zuletzt bearbeitet:

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.170
Ich hatte es mit C:AdvanceRealTime(Ganzzahl) versucht, doch leider funktioniert das bei mir nicht; am Tag und Stunden - Anzeiger ändert sich rein gar nichts, obwohl der Befehl akzeptiert wird.
Dieser Befehl verändert meines Wissens nach nicht die Spielzeit, sondern die vom Spiel kalkulierte Echt-Zeit. Im IESDP heißt es nur dazu:
AdvanceRealTime(<int>)
Advances the in-game 'real time' counter.


Rest() und RestParty() füllt (leider) nur die verbrauchten Zauber und HPs wieder auf, ohne dass die Spielzeit voranschreitet:
This action applies the benefits of resting (i.e. healing, restoring spells and restoring abilities) to the active creature. The action does not play the rest movie or advance game time.

Im beamdog-Forum hatte jemand schon vor längerer Zeit den Wunsch nach einem Wait-Button geäußert. Ob der bei dem nächsten Update aber implementiert wird, möchte ich bezweifeln. ;)
 

Dabus

Senior Member
Registriert
18.11.2007
Beiträge
5.086
Wie wäre es mit einem anderen Skript? Also z.B. VBS?
Im Sendkeys ist schon ein Beispiel, das dicht dran kommt. Erweitert mit dem Aktivieren von BG2 + der richtigen Anzahl der Loops + dem richtigen Timing müsste das reichen...

https://docs.microsoft.com/de-de/of...erence/user-interface-help/sendkeys-statement
https://docs.microsoft.com/de-de/of...nce/user-interface-help/appactivate-statement
https://docs.microsoft.com/de-de/do...guage-reference/statements/for-next-statement

Beispiel:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "calc"
WScript.Sleep 1500
WshShell.AppActivate "Rechner"
WScript.Sleep 100
For i=1 to 10
WshShell.SendKeys "1{+}"
WScript.Sleep 500
Next
WshShell.SendKeys "2="
Wscript.Quit
 

Dark Enchanter

Senior Member
Registriert
11.05.2013
Beiträge
126
@Dabus

Vielen Dank für deine Antwort !

In die Richtung von ≈ "AutoClickern" hatte ich auch schon gedacht, ich werde mir das mal anschauen.

Eine andere behelfsmäßige Lösung habe ich inzwischen auch gefunden.

Und zwar habe ich alle Videos, im Ordner "movies", die beim Rasten abgespielt werden, umbenannt zu Filmname_Backup.wbm

Das spart extrem viel Zeit. Ich kann jetzt ein Jahr innerhalb von zirka 1 bis 2 Minuten verstreichen lassen, indem ich die Taste, der ich in den Spieloptionen das Rasten zugewiesen habe (ich habe es auf "Z" gelegt), einfach nur gedrückt halte.

Die Tastenkombination STRG+T kann man auch gedrückt halten, wie ich inzwischen festgestellt habe, man muss nicht Einzeldrücken, dauert dann aber auch 8 mal solange, aber man rastet auch nicht.

Da wäre dann so ein AutoClicker-Bot, oder wie auch immer man das nennt, wirklich von Vorteil.

LG und Danke für die Hilfe :) !
 

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Es gibt auch den Befehl "AdvanceTime(ONE_HOUR)", der die Zeit Ingame verstreichen lässt z.B. in BG1 bei der Schiffsreise von der Werwolfinsel in BG1:

Code:
IF
  True()
THEN
  RESPONSE #100
    CutSceneId(Player1)
    FadeToColor([20.0],0)
    Wait(1)
    AdvanceTime(TWENTYTWO_DAYS)
    Rest()
    ActionOverride(Player2,Rest())
    ActionOverride(Player3,Rest())
    ActionOverride(Player4,Rest())
    ActionOverride(Player5,Rest())
    ActionOverride(Player6,Rest())
    LeaveAreaLUAPanic("AR1000","",[162.1476],E)
    LeaveAreaLUA("AR1000","",[162.1476],E)
    ActionOverride(Player2,LeaveAreaLUA("AR1000","",[210.1465],E))
    ActionOverride(Player3,LeaveAreaLUA("AR1000","",[252.1458],E))
    ActionOverride(Player4,LeaveAreaLUA("AR1000","",[304.1443],E))
    ActionOverride(Player5,LeaveAreaLUA("AR1000","",[356.1427],E))
    ActionOverride(Player6,LeaveAreaLUA("AR1000","",[406.1423],E))
    Wait(1)
    TextScreen("ISLOFF")
    Wait(1)
    MultiPlayerSync()
    FadeFromColor([20.0],0)
    EndCutSceneMode()
END
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.170
Es gibt auch den Befehl "AdvanceTime(ONE_HOUR)", der die Zeit Ingame verstreichen lässt
Das ist ja unglaublich! Diesen Befehl sehe ich zum ersten Mal. :wunder:
Im IESDP ist er unter den ScriptActions bisher nicht aufgeführt. Das sollte schleunigst geändert werden...

EDIT: Im BG2EE-Actions-IESDP ist er unter der Nr. 353 vorhanden, im BG1- und BG2ToB-IESDP jedoch nicht. Könnte es sein, dass der Befehl nur für die Enhanced Editions funktioniert?

Damit könnte man neben einem Script tatsächlich auch im UI einen Wait-Button integrieren. Danke, dass Du das hier gepostet hast! :)
 
Zuletzt bearbeitet:

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.922
Stimmt, am Anfang von SoD wird das auch verwendet (bzw. nach dem ersten Dungeon, glaube ich). Ein "Warte" Button wäre ja schon geil. Kommt zwar glaube ich nicht so häufig vor (?), dass man bis zu einer bestimmten Uhrzeit warten soll, aber ab und zu schon.
Wobei ich dann immer Sorge hätte, dass Questtimer auslaufen. Von daher sehe ich das Zeithochstellen auf dem Weg zur Insel eigentlich eher mit leichten Zweifeln, auch wenn es realistischer ist. :hae:
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.170
Leider funktioniert der AdvanceTime-Befehl nur in den Enhanced Editions. In den klassischen Spielen ist er nicht vorhanden.

Ich habe einmal mit folgendem Script ein bisschen herumprobiert:

IF
HotKey(D)
THEN
RESPONSE #100
AdvanceTime(SIXTEEN_HOURS)
END


Das läuft in BG2EE problemlos ab, alle Zauber verlieren ihre Wirkungsdauer etc.
Ich hatte mich vor längerer Zeit schon einmal mit der Idee beschäftigt, für das Ipad einen Warte-Gegenstand zu erstellen (mit Stundenglas-Grafik;)), da man dort ja keine Möglichkeit hat, mittels CTRL+T vorzuspulen. Jetzt kann ich das wieder aufgreifen. :)

@Dark Enchanter: Tut mir leid, dass ich Dir falsche Informationen gegeben hatte, ich hoffe, Du hast jetzt nicht schon die ganze Zeit an einem Auto-Clicker gearbeitet... :(
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.380
Dann schaut doch mal, wie das Werwolf-Insel-Reise-Skript im Original-BG aussieht. Soweit ich mich erinnere, gibt es den Befehl für ingame Zeit verstreichen.
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.170
Soweit ich mich erinnere, gibt es den Befehl für ingame Zeit verstreichen.
Das denke ich die ganze Zeit auch - aber der Befehl ist wie verschollen.:confused:
Das Original-BG1-Script hatte ich mir schon angesehen, aber da fehlt eben dieser Befehl, es sieht so aus...

Code:
IF
    Clicked([ANYONE])
    Dead("KAISHWLF")
    PartyHasItem("MISC1C")
THEN
    RESPONSE #100
        ActionOverride(Player1,LeaveAreaLUAPanic("AR1000","",[162.1476],12))
        ActionOverride(Player1,LeaveAreaLUA("AR1000","",[162.1476],12))
        ActionOverride(Player2,LeaveAreaLUA("AR1000","",[210.1465],12))
        ActionOverride(Player3,LeaveAreaLUA("AR1000","",[252.1458],12))
        ActionOverride(Player4,LeaveAreaLUA("AR1000","",[304.1443],12))
        ActionOverride(Player5,LeaveAreaLUA("AR1000","",[356.1427],12))
        ActionOverride(Player6,LeaveAreaLUA("AR1000","",[406.1423],12))
        SetGlobal("IslandTravel","GLOBAL",1)
END

... und in Ulgoth's Beard aktiviert sich dann dieser Scriptblock:
Code:
IF
    OnCreation()
    Global("IslandTravel","GLOBAL",1)
THEN
    RESPONSE #100
        SetInterrupt(FALSE)
        TextScreen("ISLOFF")
        Wait(2)
        MultiPlayerSync()
        SetGlobal("IslandTravel","GLOBAL",2)
        SetInterrupt(TRUE)
END
 

Dark Enchanter

Senior Member
Registriert
11.05.2013
Beiträge
126
@Acifer

Nein, ist alles in Ordnung.

Mich freut es, dass hier jeder was dazu gelernt hat, das finde ich richtig prima !

LG
 

Dark Enchanter

Senior Member
Registriert
11.05.2013
Beiträge
126
Noch etwas zur Ergänzung mit zerbrochenen Questtimern, wie von Jastey befürchtet.

Ich habe es jetzt mal mit 30 Tage Zeitsprung pro Tastendruck ausprobiert.

Und es empfiehlt sich 15 Sekunden Pause zu machen, bevor man die Taste noch mal drückt, damit Scripts genügend Zeit haben aktiv zu werden.

Vielleicht ist 30 Tage Zeitsprung pro Tastendruck auch etwas übertrieben, und man sollte das auf 5 Tage pro Tastendruck begrenzen. In vielen Quests ist auch von einem Zehntag die Rede, was dann 2 Tastendrücke wären.

Beispielsweise beträgt die Reise von Ulgoth's Beard ("BG1000") nach Gibberling Mountains ("BG5500") 148 Stunden, zumindest in der gemoddeten EET-Version, die ich habe.

Was 6 Tage und 4 Stunden sind, also mehr als 5 Tage sind. Dann sollte es eigentlich keine Probleme geben, wenn man dann 15 Sekunden Pause macht, bevor man die Taste erneut drückt.

LG :) !
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
@Acifer
In den Originalversionen gab es meines Wissens nach nur die Möglichkeit, via Action 66 DayNight() die Tageszeit auf eine bestimmte Uhrzeit zu setzen.

Die einzigen anderen Stellen, die den WorldTimer modifizieren, waren die Reisezeiten beim Gebietswechsel, RestParty() und Ctrl-T.
 

Genwa

Betrachter
Registriert
08.01.2018
Beiträge
324
Ich hatte mich vor längerer Zeit schon einmal mit der Idee beschäftigt, für das Ipad einen Warte-Gegenstand zu erstellen (mit Stundenglas-Grafik;)), da man dort ja keine Möglichkeit hat, mittels CTRL+T vorzuspulen. Jetzt kann ich das wieder aufgreifen. :)

Einen ähnlichen Gegenstand habe ich in meinen Kaufmannsmod für die EE Version eingebaut. Zwei Dumme...
Ich hatte mir den Gegenstand aber im Hinblick auf die "sei um X Uhr / Mitternacht da und dort"-Quests überlegt.

Stundenglas

Nelip Tiefenseher, Erzmagier und oberster Lautenspieler der Jatulga Gesellschaft für Kunst und Magie, war ein beinah so talentierter wie größenwahnsinniger Halbelf aus dem altehrwürdigen Geschlecht der Talwandler.
Er stellte einige aberwitzige Theorien über die Zusammenhänge von Raum, Zeit und Magie auf, die daraufhin teilweise unverändert Eingang in die Programme der großen Komödianten von Jatulg fanden.
Obwohl dies sein Ansehen keineswegs schmälerte, denn zu dieser Zeit wurden Künstler ohne den Ruf eines gewissen Maßes an geistiger Unzurechnungsfähigkeit kaum ernst genommen, verbitterte es Nelip zunehmend, dass man seine Theorien derart verkannte.
In einem furchtbaren Ritual, dass den Pakt mit einem Tanar‘ri und den Tod der meisten jatulger Komödianten beeinhaltete, erwarb er schließlich das geheime Wissen über eine mächtige Verzauberung, mit der er die Zeit selbst unterwerfen und seine Theorien endgültig beweisen wollte.
Als die Doppelklingengarde sein Anwesen stürmte, erwartete Nelip sie bereits in seinem Atrium. Lachend hob er sein Stundenglas und drehte es vor den Augen der irritierten Soldaten auf den Kopf. Diese machten dem wahnsinnigen Magier vorsichtshalber den Gar aus, bevor sich dieser noch besinnen und sie mit seinen Zaubern angreifen konnte. Seltsamerweise hatte das Stürmen des Anwesens eine Stunde länger gedauert, als die Garde ursprünglich dafür veranschlagt hatte.
Die Stundenuhr ging in den Besitz eines langfingrigen Soldaten über, der jedoch nur wenige Wochen später wegen wiederholter Unpünktlichkeit aus der Garde verstoßen wurde. Der Soldat machte das Stundenglas für sein Unglück verantwortlich und verkaufte es an einen vorbeiziehenden Kaufmann.
Nelip Tiefenseher und seine Theorien sind heute größtenteils in Vergessenheit geraten. Doch neben dieser Stundenuhr und einigen weniger unnützen Artefakten zählt auch die Begründung der heute schon sprichwörtlichen Humorlosigkeit der Jatulga zu seinem Vermächtnis.

EIGENSCHAFTEN:

Dreht Ihr das Stundenglas, vergeht eine Stunde (7x täglich).

Gewicht: 1
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.170
Einen ähnlichen Gegenstand habe ich in meinen Kaufmannsmod für die EE Version eingebaut.
Nein!:wuerg::D Das ist ja großartig!
Ich hatte mir den Gegenstand aber im Hinblick auf die "sei um X Uhr / Mitternacht da und dort"-Quests überlegt.
Genau! Für die Diebesgilde-Quests mit Narlen. Super Idee!

Was mir wirklich wahnsinnig gut gefällt ist Deine Item-Beschreibung. Ich finde es sehr schön, wenn jeder Gegenstand auch eine Geschichte erzählt. Bin gerade in BG2 unterwegs (freue mich schon aufs Unterreich mit den modifizierten Bestien!), aber bei meinem nächsten BG1EE-Durchlauf werden die Stunden dank Nelip wie im Flug vergehen! ;)
 
Oben