AI-Characterscript um Ingame-Zeit verstreichen zu lassen ?

Dieses Thema im Forum "Modding Forum" wurde erstellt von Dark Enchanter, 8. August 2019.

  1. Dark Enchanter

    Dark Enchanter Senior Member

    Registriert seit:
    Mai 2013
    Beiträge:
    126
    Zustimmungen:
    3
    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 :) !
     
  2. Acifer

    Acifer Senior Member

    Registriert seit:
    Apr. 2019
    Beiträge:
    160
    Zustimmungen:
    11
    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
     
  3. Dark Enchanter

    Dark Enchanter Senior Member

    Registriert seit:
    Mai 2013
    Beiträge:
    126
    Zustimmungen:
    3
    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: 8. August 2019
  4. Acifer

    Acifer Senior Member

    Registriert seit:
    Apr. 2019
    Beiträge:
    160
    Zustimmungen:
    11
    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. ;)
     
  5. Dark Enchanter

    Dark Enchanter Senior Member

    Registriert seit:
    Mai 2013
    Beiträge:
    126
    Zustimmungen:
    3
    Ja, daran glaube ich auch nicht :).

    Vielen Dank für deine Hilfe !
     
  6. Dabus

    Dabus Senior Member

    Registriert seit:
    Nov. 2007
    Beiträge:
    5.016
    Zustimmungen:
    3
    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
     
    Acifer gefällt das.
  7. Dark Enchanter

    Dark Enchanter Senior Member

    Registriert seit:
    Mai 2013
    Beiträge:
    126
    Zustimmungen:
    3
    @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 :) !
     
  8. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    205
    Zustimmungen:
    3
    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
     
    Dark Enchanter gefällt das.
  9. Acifer

    Acifer Senior Member

    Registriert seit:
    Apr. 2019
    Beiträge:
    160
    Zustimmungen:
    11
    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: 9. August 2019
  10. Dark Enchanter

    Dark Enchanter Senior Member

    Registriert seit:
    Mai 2013
    Beiträge:
    126
    Zustimmungen:
    3
    @Genwa

    Recht herzlichen Dank für deine super-hilfreiche Antwort !
     
  11. Jastey

    Jastey Senior Member

    Registriert seit:
    Mai 2004
    Beiträge:
    5.162
    Zustimmungen:
    65
    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:
     
  12. Acifer

    Acifer Senior Member

    Registriert seit:
    Apr. 2019
    Beiträge:
    160
    Zustimmungen:
    11
    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... :(
     
  13. Maus

    Maus Senior Member

    Registriert seit:
    Aug. 2002
    Beiträge:
    5.712
    Zustimmungen:
    2
    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.
     
  14. Acifer

    Acifer Senior Member

    Registriert seit:
    Apr. 2019
    Beiträge:
    160
    Zustimmungen:
    11
    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
    
     
  15. Dark Enchanter

    Dark Enchanter Senior Member

    Registriert seit:
    Mai 2013
    Beiträge:
    126
    Zustimmungen:
    3
    @Acifer

    Nein, ist alles in Ordnung.

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

    LG
     
  16. Dark Enchanter

    Dark Enchanter Senior Member

    Registriert seit:
    Mai 2013
    Beiträge:
    126
    Zustimmungen:
    3
    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 :) !
     
  17. Taimon

    Taimon Senior Member

    Registriert seit:
    Nov. 2001
    Beiträge:
    1.180
    Zustimmungen:
    0
    @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.
     
  18. Acifer

    Acifer Senior Member

    Registriert seit:
    Apr. 2019
    Beiträge:
    160
    Zustimmungen:
    11
    Danke für die Klarstellung. Wenigstens haben wir jetzt ja in der Enhanced Edition die Möglichkeit, an der Uhr zu drehen. :)
     
  19. Genwa

    Genwa Betrachter

    Registriert seit:
    Jan. 2018
    Beiträge:
    205
    Zustimmungen:
    3
    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.

     
  20. Acifer

    Acifer Senior Member

    Registriert seit:
    Apr. 2019
    Beiträge:
    160
    Zustimmungen:
    11
    Nein!:wuerg::D Das ist ja großartig!
    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! ;)
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden